From accbb873283a954750fe3bf9a8dde6c3056c4348 Mon Sep 17 00:00:00 2001 From: tamara-slosarek Date: Thu, 6 Feb 2025 17:04:42 +0100 Subject: [PATCH] feat(app): use popUntil instead of going back --- app/lib/common/utilities/routing_utils.dart | 27 +++++++++++++++---- .../widgets/tutorial/tutorial_builder.dart | 7 +---- app/lib/onboarding/pages/onboarding.dart | 4 +-- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/app/lib/common/utilities/routing_utils.dart b/app/lib/common/utilities/routing_utils.dart index 3f890ec3..13767528 100644 --- a/app/lib/common/utilities/routing_utils.dart +++ b/app/lib/common/utilities/routing_utils.dart @@ -19,17 +19,34 @@ DeepLink getInitialRoute() { return DeepLink.path(getInitialRouteName()); } +void routeBackToContent( + StackRouter router, + { + bool popLogin = true, + // Dialogs or modal bottom sheets will have no route name + bool popNull = false, + }) { + final currentRoute = router.current.name; + bool keepRoute(Route route) { + final isSecureRoute = route.settings.name == SecureRoute.name; + final isLoginRoute = route.settings.name == LoginRoute.name; + final isCurrentRoute = route.settings.name == currentRoute; + final isNullRoute = route.settings.name == null; + var keepCurrentRoute = !isSecureRoute && !isCurrentRoute; + if (popLogin) keepCurrentRoute = keepCurrentRoute && !isLoginRoute; + if (popNull) keepCurrentRoute = keepCurrentRoute && !isNullRoute; + return keepCurrentRoute; + } + router.popUntil(keepRoute); +} + 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()); - } + routeBackToContent(router, popLogin: false); } } diff --git a/app/lib/common/widgets/tutorial/tutorial_builder.dart b/app/lib/common/widgets/tutorial/tutorial_builder.dart index ca0b2ebc..dc271c6e 100644 --- a/app/lib/common/widgets/tutorial/tutorial_builder.dart +++ b/app/lib/common/widgets/tutorial/tutorial_builder.dart @@ -167,12 +167,7 @@ class TutorialBuilder extends HookWidget { onPressed: isFirstPage ? () { initiateRouteBack(); - final currentRoute = context.router.current.name; - context.router.popUntil( - (route) => - route.settings.name != null && - route.settings.name != currentRoute, - ); + routeBackToContent(context.router, popNull: true); } : () => currentPageIndex.value = currentPageIndex.value - 1, text: isFirstPage diff --git a/app/lib/onboarding/pages/onboarding.dart b/app/lib/onboarding/pages/onboarding.dart index 6309a121..e2fc6008 100644 --- a/app/lib/onboarding/pages/onboarding.dart +++ b/app/lib/onboarding/pages/onboarding.dart @@ -117,7 +117,7 @@ class OnboardingPage extends HookWidget { size: OnboardingDimensions.iconSize, color: Colors.white, ), - onPressed: () => context.router.back(), + onPressed: () => routeBackToContent(context.router), ) ), Positioned.fill( @@ -211,7 +211,7 @@ class OnboardingPage extends HookWidget { onPressed: () async { if (isLastPage) { if (isRevisiting) { - context.router.back(); + routeBackToContent(context.router); } else { MetaData.instance.onboardingDone = true; await MetaData.save();