From 5299d98550440d076ca1ff39bd7fea4232285abd Mon Sep 17 00:00:00 2001 From: mathru Date: Mon, 30 Oct 2023 10:08:32 +0900 Subject: [PATCH] fix: Fixed a bug in internal appRef. --- packages/katana_scoped/lib/src/scoped.dart | 7 +++++ .../lib/src/scoped_value_listener.dart | 30 ++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/packages/katana_scoped/lib/src/scoped.dart b/packages/katana_scoped/lib/src/scoped.dart index 65daedf84..f246c46ba 100644 --- a/packages/katana_scoped/lib/src/scoped.dart +++ b/packages/katana_scoped/lib/src/scoped.dart @@ -53,18 +53,22 @@ class _ScopedState extends State { void initState() { super.initState(); _container = ScopedValueContainer(); + final appRef = _AppScopedScope.of(context).widget.appRef; _appListener = AppScopedValueListener._( context: context, + appRef: appRef, callback: _handledOnRebuild, scope: ScopedLoggerScope.app, ); _pageListener = PageScopedValueListener._( context: context, + appRef: appRef, callback: _handledOnRebuild, scope: ScopedLoggerScope.page, ); _widgetListener = _ScopedValueListenerOnWidget._( context: context, + appRef: appRef, callback: _handledOnRebuild, container: _container, scope: ScopedLoggerScope.widget, @@ -209,14 +213,17 @@ class _PageScopedWidgetState extends State { @override void initState() { super.initState(); + final appRef = _AppScopedScope.of(context).widget.appRef; _container = ScopedValueContainer(); _appListener = AppScopedValueListener._( context: context, + appRef: appRef, callback: _handledOnRebuild, scope: ScopedLoggerScope.app, ); _pageListener = _ScopedValueListenerOnPage._( context: context, + appRef: appRef, callback: _handledOnRebuild, container: _container, scope: ScopedLoggerScope.page, diff --git a/packages/katana_scoped/lib/src/scoped_value_listener.dart b/packages/katana_scoped/lib/src/scoped_value_listener.dart index e4c452c50..c816afe66 100644 --- a/packages/katana_scoped/lib/src/scoped_value_listener.dart +++ b/packages/katana_scoped/lib/src/scoped_value_listener.dart @@ -7,16 +7,20 @@ class AppScopedValueListener extends ScopedValueListener { AppScopedValueListener._({ required BuildContext context, required VoidCallback callback, + required AppRef appRef, required super.scope, - }) : super._(context: context, callback: callback); + }) : super._( + context: context, + callback: callback, + appRef: appRef, + ); @override ScopedValueContainer get container { if (_containerCache != null) { return _containerCache!; } - final appRef = _AppScopedScope.of(_context).widget.appRef; - return _containerCache = appRef._scopedValueContainer; + return _containerCache = _appRef._scopedValueContainer; } @override @@ -33,8 +37,13 @@ class PageScopedValueListener extends _ScopedValueListenerOnPage { PageScopedValueListener._({ required BuildContext context, required VoidCallback callback, + required AppRef appRef, required super.scope, - }) : super._(context: context, callback: callback); + }) : super._( + context: context, + callback: callback, + appRef: appRef, + ); @override ScopedValueContainer get container { @@ -55,11 +64,13 @@ class _ScopedValueListenerOnPage extends ScopedValueListener { _ScopedValueListenerOnPage._({ required BuildContext context, required VoidCallback callback, + required AppRef appRef, ScopedValueContainer? container, ScopedLoggerScope scope = ScopedLoggerScope.page, }) : super._( context: context, callback: callback, + appRef: appRef, container: container, scope: scope, ); @@ -91,12 +102,14 @@ class _ScopedValueListenerOnWidget extends ScopedValueListener { _ScopedValueListenerOnWidget._({ required BuildContext context, required VoidCallback callback, + required AppRef appRef, ScopedValueContainer? container, ScopedLoggerScope scope = ScopedLoggerScope.widget, }) : super._( context: context, callback: callback, container: container, + appRef: appRef, scope: scope, ); @@ -138,9 +151,11 @@ abstract class ScopedValueListener { ScopedValueListener._({ required BuildContext context, required VoidCallback callback, + required AppRef appRef, ScopedValueContainer? container, ScopedLoggerScope scope = ScopedLoggerScope.widget, }) : _scope = scope, + _appRef = appRef, _context = context, _callback = callback, _container = container; @@ -151,9 +166,10 @@ abstract class ScopedValueListener { ScopedValueContainer? _containerCache; final Set _watched = {}; - AppRef get _appRef { - return _AppScopedScope.of(_context).widget.appRef; - } + late final AppRef _appRef; + // AppRef get _appRef { + // return _AppScopedScope.of(_context).widget.appRef; + // } @protected final ScopedLoggerScope _scope;