diff --git a/app/lib/app.dart b/app/lib/app.dart index ed745287..008d5b66 100644 --- a/app/lib/app.dart +++ b/app/lib/app.dart @@ -23,7 +23,7 @@ class PharMeApp extends StatelessWidget { debugShowCheckedModeBanner: false, routeInformationParser: _appRouter.defaultRouteParser(), routerDelegate: _appRouter.delegate( - deepLinkBuilder: getInitialRoute, + deepLinkBuilder: (_) => getInitialRoute(), navigatorObservers: () => [RemoveFocusOnNavigate()], ), theme: PharMeTheme.light, diff --git a/app/lib/common/utilities/routing_utils.dart b/app/lib/common/utilities/routing_utils.dart index 18cfbdb0..3f890ec3 100644 --- a/app/lib/common/utilities/routing_utils.dart +++ b/app/lib/common/utilities/routing_utils.dart @@ -1,24 +1,36 @@ import '../../secure/module.dart'; import '../module.dart'; -DeepLink getInitialRoute(_) { +String getInitialRouteName() { final isLoggedIn = MetaData.instance.isLoggedIn ?? false; final onboardingDone = MetaData.instance.onboardingDone ?? false; final initialDrugSelectionDone = MetaData.instance.initialDrugSelectionDone ?? false; - late String path; - path = !isLoggedIn + return !isLoggedIn ? '/login' : !onboardingDone ? '/onboarding' : !initialDrugSelectionDone ? '/drugselection' : '/main'; - return DeepLink.path(path); } -bool currentPathIsSecurePath(AppRouter appRouter) { - return appRouter.currentPath == secureRoutePath; +DeepLink getInitialRoute() { + return DeepLink.path(getInitialRouteName()); +} + +bool currentPathIsSecurePath(StackRouter router) { + return router.currentPath == secureRoutePath; +} + +Future routeBackAfterSecurePage(StackRouter router) async { + if (currentPathIsSecurePath(router)) { + if (router.canPop()) { + await router.maybePop(); + } else { + await router.pushNamed(getInitialRouteName()); + } + } } // Replace whole stack, see https://stackoverflow.com/a/73784156 diff --git a/app/lib/common/widgets/lifecycle_observer.dart b/app/lib/common/widgets/lifecycle_observer.dart index 029341ca..88fbdfbc 100644 --- a/app/lib/common/widgets/lifecycle_observer.dart +++ b/app/lib/common/widgets/lifecycle_observer.dart @@ -14,7 +14,7 @@ class LifecycleObserver extends HookWidget { Widget build(BuildContext context) { useOnAppLifecycleStateChange((previous, current) async { if (current == AppLifecycleState.resumed) { - if (currentPathIsSecurePath(appRouter)) appRouter.back(); + await routeBackAfterSecurePage(appRouter); } if ( current == AppLifecycleState.inactive || diff --git a/pharme.code-workspace b/pharme.code-workspace index 213defa6..5806b28d 100644 --- a/pharme.code-workspace +++ b/pharme.code-workspace @@ -66,6 +66,7 @@ "drugclass", "drugid", "drugrecommendation", + "drugselection", "duckdns", "duloxetine", "endoxifen",