From 2733d1938fa2bf049071b08ea64f9be7f20a6d70 Mon Sep 17 00:00:00 2001 From: tamslo Date: Wed, 5 Feb 2025 12:58:31 +0100 Subject: [PATCH] feat(app): use pop to route back after secure page --- app/lib/app.dart | 2 +- app/lib/common/utilities/routing_utils.dart | 24 ++++++++++++++----- .../common/widgets/lifecycle_observer.dart | 2 +- pharme.code-workspace | 1 + 4 files changed, 21 insertions(+), 8 deletions(-) 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",