diff --git a/lib/container/boost_container.dart b/lib/container/boost_container.dart index c522e6eb4c343f5cdd8959b036862734238c1254..eb2c36cb2a0125a150b03bba1c9d694ed6fd63e7 100755 --- a/lib/container/boost_container.dart +++ b/lib/container/boost_container.dart @@ -39,9 +39,9 @@ enum ContainerLifeCycle { } typedef BoostContainerLifeCycleObserver = void Function( - ContainerLifeCycle state, - BoostContainerSettings settings, -); + ContainerLifeCycle state, + BoostContainerSettings settings, + ); class BoostContainer extends Navigator { const BoostContainer({ @@ -52,17 +52,17 @@ class BoostContainer extends Navigator { RouteFactory onUnknownRoute, List<NavigatorObserver> observers, }) : super( - key: key, - initialRoute: initialRoute, - onGenerateRoute: onGenerateRoute, - onUnknownRoute: onUnknownRoute, - observers: observers, - ); + key: key, + initialRoute: initialRoute, + onGenerateRoute: onGenerateRoute, + onUnknownRoute: onUnknownRoute, + observers: observers, + ); factory BoostContainer.copy( - Navigator navigator, [ - BoostContainerSettings settings = const BoostContainerSettings(), - ]) => + Navigator navigator, [ + BoostContainerSettings settings = const BoostContainerSettings(), + ]) => BoostContainer( key: GlobalKey<BoostContainerState>(), settings: settings, @@ -73,9 +73,9 @@ class BoostContainer extends Navigator { ); factory BoostContainer.obtain( - Navigator navigator, - BoostContainerSettings settings, - ) => + Navigator navigator, + BoostContainerSettings settings, + ) => BoostContainer( key: GlobalKey<BoostContainerState>(), settings: settings, @@ -110,13 +110,13 @@ class BoostContainer extends Navigator { static BoostContainerState tryOf(BuildContext context) { final BoostContainerState container = - context.findAncestorStateOfType<BoostContainerState>(); + context.findAncestorStateOfType<BoostContainerState>(); return container; } static BoostContainerState of(BuildContext context) { final BoostContainerState container = - context.findAncestorStateOfType<BoostContainerState>(); + context.findAncestorStateOfType<BoostContainerState>(); assert(container != null, 'not in flutter boost'); return container; } @@ -161,6 +161,15 @@ class BoostContainerState extends NavigatorState { void initState() { super.initState(); backPressedHandler = () => maybePop(); + final String initRoute = widget.initialRoute ?? Navigator.defaultRouteName; + if (initRoute != null && routerHistory.isEmpty) { + routerHistory.addAll( + widget.onGenerateInitialRoutes( + this, + widget.initialRoute ?? Navigator.defaultRouteName + ) + ); + } } @override @@ -177,22 +186,28 @@ class BoostContainerState extends NavigatorState { @override Future<bool> maybePop<T extends Object>([T result]) async { + if(routerHistory.isEmpty) { + pop(result); + return true; + } + final Route<T> route = routerHistory.last as Route<T>; + final RoutePopDisposition disposition = await route.willPop(); if (mounted) { - switch (disposition) { - case RoutePopDisposition.pop: - pop(result); - return true; - break; - case RoutePopDisposition.doNotPop: - return false; - break; - case RoutePopDisposition.bubble: - pop(result); - return true; - break; - } + switch (disposition) { + case RoutePopDisposition.pop: + pop(result); + return true; + break; + case RoutePopDisposition.doNotPop: + return false; + break; + case RoutePopDisposition.bubble: + pop(result); + return true; + break; + } } return false; } @@ -238,10 +253,10 @@ class BoostContainerState extends NavigatorState { VoidCallback addLifeCycleObserver(BoostContainerLifeCycleObserver observer) { return FlutterBoost.singleton.addBoostContainerLifeCycleObserver( - ( - ContainerLifeCycle state, - BoostContainerSettings settings, - ) { + ( + ContainerLifeCycle state, + BoostContainerSettings settings, + ) { if (settings.uniqueId == uniqueId) { observer(state, settings); } diff --git a/lib/container/boost_page_route.dart b/lib/container/boost_page_route.dart index e3c4d8f4332c5fbbf12b52d10a71b7ae59c47f86..6314347f58b84b9a2ada18f02cd8517bb3a84395 100755 --- a/lib/container/boost_page_route.dart +++ b/lib/container/boost_page_route.dart @@ -62,4 +62,9 @@ class BoostPageRoute<T> extends MaterialPageRoute<T> { return null; } } + + @override + Future<RoutePopDisposition> willPop() { + return Future<RoutePopDisposition>.value(RoutePopDisposition.pop); + } }