From 5f4b3a8d4e7fbb94c875e589a1537ac6f9135be2 Mon Sep 17 00:00:00 2001 From: "yangwu.jia" <yangwu.jia@taobao.com> Date: Mon, 13 Jan 2020 21:23:06 +0800 Subject: [PATCH] NavObserver bugfixed --- example/lib/main.dart | 20 +++++++++++ lib/container/boost_container.dart | 42 ++++++++--------------- lib/container/container_manager.dart | 51 ---------------------------- lib/flutter_boost.dart | 4 +-- 4 files changed, 36 insertions(+), 81 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 22058b4..c835017 100755 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -29,6 +29,7 @@ class _MyAppState extends State<MyApp> { return FlutterRouteWidget(params:params); }, }); + FlutterBoost.singleton.addBoostNavigatorObserver(TestBoostNavigatorObserver()); } @override @@ -45,3 +46,22 @@ class _MyAppState extends State<MyApp> { String pageName, String uniqueId, Map params, Route route, Future _) { } } +class TestBoostNavigatorObserver extends NavigatorObserver{ + void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { + + print("flutterboost#didPush"); + } + + void didPop(Route<dynamic> route, Route<dynamic> previousRoute) { + print("flutterboost#didPop"); + } + + void didRemove(Route<dynamic> route, Route<dynamic> previousRoute) { + print("flutterboost#didRemove"); + } + + void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) { + print("flutterboost#didReplace"); + } +} + diff --git a/lib/container/boost_container.dart b/lib/container/boost_container.dart index b980572..56917b5 100755 --- a/lib/container/boost_container.dart +++ b/lib/container/boost_container.dart @@ -155,14 +155,11 @@ class BoostContainerState extends NavigatorState { @override void didUpdateWidget(Navigator oldWidget) { super.didUpdateWidget(oldWidget); - findContainerNavigatorObserver(oldWidget)?.removeBoostNavigatorObserver( - FlutterBoost.containerManager.navigatorObserver); + } @override void dispose() { - findContainerNavigatorObserver(widget)?.removeBoostNavigatorObserver( - FlutterBoost.containerManager.navigatorObserver); routerHistory.clear(); super.dispose(); } @@ -261,63 +258,52 @@ class ContainerElement extends StatefulElement { } class ContainerNavigatorObserver extends NavigatorObserver { - BoostNavigatorObserver observer; - final Set<BoostNavigatorObserver> _boostObservers = - Set<BoostNavigatorObserver>(); + static final Set<NavigatorObserver> boostObservers = + Set<NavigatorObserver>(); ContainerNavigatorObserver(); + factory ContainerNavigatorObserver.bindContainerManager() => - ContainerNavigatorObserver() - ..addBoostNavigatorObserver( - FlutterBoost.containerManager.navigatorObserver); + ContainerNavigatorObserver(); - VoidCallback addBoostNavigatorObserver(BoostNavigatorObserver observer) { - _boostObservers.add(observer); + VoidCallback addBoostNavigatorObserver(NavigatorObserver observer) { + boostObservers.add(observer); - return () => _boostObservers.remove(observer); + return () => boostObservers.remove(observer); } - void removeBoostNavigatorObserver(BoostNavigatorObserver observer) { - _boostObservers.remove(observer); + void removeBoostNavigatorObserver(NavigatorObserver observer) { + boostObservers.remove(observer); } @override void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { - for (BoostNavigatorObserver observer in _boostObservers) { + for (NavigatorObserver observer in boostObservers) { observer.didPush(route, previousRoute); } } @override void didPop(Route<dynamic> route, Route<dynamic> previousRoute) { - for (BoostNavigatorObserver observer in _boostObservers) { + for (NavigatorObserver observer in boostObservers) { observer.didPop(route, previousRoute); } } @override void didRemove(Route<dynamic> route, Route<dynamic> previousRoute) { - for (BoostNavigatorObserver observer in _boostObservers) { + for (NavigatorObserver observer in boostObservers) { observer.didRemove(route, previousRoute); } } @override void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) { - for (BoostNavigatorObserver observer in _boostObservers) { + for (NavigatorObserver observer in boostObservers) { observer.didReplace(newRoute: newRoute, oldRoute: oldRoute); } } } -class BoostNavigatorObserver { - void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {} - - void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {} - - void didRemove(Route<dynamic> route, Route<dynamic> previousRoute) {} - - void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) {} -} diff --git a/lib/container/container_manager.dart b/lib/container/container_manager.dart index 07147e6..25d78ae 100755 --- a/lib/container/container_manager.dart +++ b/lib/container/container_manager.dart @@ -62,8 +62,6 @@ class BoostContainerManager extends StatefulWidget { class ContainerManagerState extends State<BoostContainerManager> { final GlobalKey<OverlayState> _overlayKey = GlobalKey<OverlayState>(); final List<BoostContainer> _offstage = <BoostContainer>[]; - final ManagerNavigatorObserver _navigatorObserver = - ManagerNavigatorObserver(); List<_ContainerOverlayEntry> _leastEntries; @@ -78,7 +76,6 @@ class ContainerManagerState extends State<BoostContainerManager> { bool get foreground => _foreground; - ManagerNavigatorObserver get navigatorObserver => _navigatorObserver; //Number of containers. int get containerCounts => _offstage.length; @@ -347,51 +344,3 @@ class _ContainerOverlayEntry extends OverlayEntry { } } -class ManagerNavigatorObserver extends BoostNavigatorObserver { - BoostNavigatorObserver observer; - - final Set<BoostNavigatorObserver> _boostObservers = - Set<BoostNavigatorObserver>(); - - VoidCallback addBoostNavigatorObserver(BoostNavigatorObserver observer) { - _boostObservers.add(observer); - - return () => _boostObservers.remove(observer); - } - - void removeBoostNavigatorObserver(BoostNavigatorObserver observer) { - _boostObservers.remove(observer); - } - - @override - void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { - Logger.log('ManagerNavigatorObserver didPush'); - for (BoostNavigatorObserver observer in _boostObservers) { - observer.didPush(route, previousRoute); - } - } - - @override - void didPop(Route<dynamic> route, Route<dynamic> previousRoute) { - Logger.log('ManagerNavigatorObserver didPop'); - for (BoostNavigatorObserver observer in _boostObservers) { - observer.didPop(route, previousRoute); - } - } - - @override - void didRemove(Route<dynamic> route, Route<dynamic> previousRoute) { - Logger.log('ManagerNavigatorObserver didRemove'); - for (BoostNavigatorObserver observer in _boostObservers) { - observer.didRemove(route, previousRoute); - } - } - - @override - void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) { - Logger.log('ManagerNavigatorObserver didReplace'); - for (BoostNavigatorObserver observer in _boostObservers) { - observer.didReplace(newRoute: newRoute, oldRoute: oldRoute); - } - } -} diff --git a/lib/flutter_boost.dart b/lib/flutter_boost.dart index e9093da..b2d1138 100755 --- a/lib/flutter_boost.dart +++ b/lib/flutter_boost.dart @@ -189,8 +189,8 @@ class FlutterBoost { _observersHolder.addObserver<BoostContainerLifeCycleObserver>(observer); ///register callbacks for Navigators push & pop - VoidCallback addBoostNavigatorObserver(BoostNavigatorObserver observer) => - _observersHolder.addObserver<BoostNavigatorObserver>(observer); + void addBoostNavigatorObserver(NavigatorObserver observer) => + ContainerNavigatorObserver.boostObservers.add(observer); } -- 2.26.2