diff --git a/app/lib/common/widgets/tutorial/show_app_tour.dart b/app/lib/common/widgets/tutorial/show_app_tour.dart index 02debe89..ea131bf1 100644 --- a/app/lib/common/widgets/tutorial/show_app_tour.dart +++ b/app/lib/common/widgets/tutorial/show_app_tour.dart @@ -92,6 +92,9 @@ FutureOr showAppTour( : () async { MetaData.instance.tutorialDone = true; await MetaData.save(); + // ignore: use_build_context_synchronously + await overwriteRoutes(context, nextPage: MainRoute()); }, lastNextButtonText: lastNextButtonText, + firstBackButtonText: revisiting ? null : context.l10n.onboarding_prev, ); \ No newline at end of file diff --git a/app/lib/common/widgets/tutorial/show_drug_selection_intro.dart b/app/lib/common/widgets/tutorial/show_drug_selection_intro.dart index d9360103..2ae99a7c 100644 --- a/app/lib/common/widgets/tutorial/show_drug_selection_intro.dart +++ b/app/lib/common/widgets/tutorial/show_drug_selection_intro.dart @@ -19,5 +19,6 @@ FutureOr showDrugSelectionIntro(BuildContext context) => onClose: () async { MetaData.instance.initialDrugSelectionInitiated = true; await MetaData.save(); - } + }, + firstBackButtonText: context.l10n.onboarding_prev, ); \ No newline at end of file diff --git a/app/lib/common/widgets/tutorial/tutorial_builder.dart b/app/lib/common/widgets/tutorial/tutorial_builder.dart index 67b7178f..006cdb07 100644 --- a/app/lib/common/widgets/tutorial/tutorial_builder.dart +++ b/app/lib/common/widgets/tutorial/tutorial_builder.dart @@ -5,11 +5,15 @@ class TutorialBuilder extends HookWidget { const TutorialBuilder({ super.key, required this.pages, + required this.initiateRouteBack, this.lastNextButtonText, + this.firstBackButtonText, }); final List pages; final String? lastNextButtonText; + final String? firstBackButtonText; + final void Function() initiateRouteBack; Widget getImageAsset(String assetPath) { return Container( @@ -141,20 +145,32 @@ class TutorialBuilder extends HookWidget { ValueNotifier currentPageIndex, ) { final isFirstPage = currentPageIndex.value == 0; + final showFirstButton = + !isFirstPage || firstBackButtonText.isNotNullOrBlank; final isLastPage = currentPageIndex.value == pages.length - 1; final directionButtonTextStyle = PharMeTheme.textTheme.titleLarge!.copyWith(fontSize: 20); const directionButtonIconSize = 22.0; return Row( - mainAxisAlignment: isFirstPage - ? MainAxisAlignment.end - : MainAxisAlignment.spaceBetween, + mainAxisAlignment: showFirstButton + ? MainAxisAlignment.spaceBetween + : MainAxisAlignment.end, mainAxisSize: MainAxisSize.max, children: [ - if (!isFirstPage) DirectionButton( + if (showFirstButton) DirectionButton( direction: ButtonDirection.backward, - onPressed: () => currentPageIndex.value = currentPageIndex.value - 1, - text: context.l10n.onboarding_prev, + onPressed: isFirstPage + ? () { + initiateRouteBack(); + final currentRoute = context.router.current.name; + context.router.popUntil( + (route) => route.settings.name != null && route.settings.name != currentRoute, + ); + } + : () => currentPageIndex.value = currentPageIndex.value - 1, + text: isFirstPage + ? firstBackButtonText! + : context.l10n.onboarding_prev, buttonTextStyle: directionButtonTextStyle, iconSize: directionButtonIconSize, ), diff --git a/app/lib/common/widgets/tutorial/tutorial_controller.dart b/app/lib/common/widgets/tutorial/tutorial_controller.dart index 612cbb6c..6b7fb0b2 100644 --- a/app/lib/common/widgets/tutorial/tutorial_controller.dart +++ b/app/lib/common/widgets/tutorial/tutorial_controller.dart @@ -13,15 +13,20 @@ class TutorialController { static TutorialController get instance => _instance; bool _isOpen = false; + bool _wasRoutedBack = false; + + void initiateRouteBack() => _wasRoutedBack = true; FutureOr showTutorial({ required BuildContext context, required List pages, String? lastNextButtonText, + String? firstBackButtonText, FutureOr Function()? onClose, }) async { if (_isOpen) return null; _isOpen = true; + _wasRoutedBack = false; await showModalBottomSheet( context: context, enableDrag: true, @@ -33,9 +38,11 @@ class TutorialController { builder: (context) => TutorialBuilder( pages: pages, lastNextButtonText: lastNextButtonText, + firstBackButtonText: firstBackButtonText, + initiateRouteBack: initiateRouteBack, ), ); - if (onClose != null) await onClose(); _isOpen = false; + if (!_wasRoutedBack && onClose != null) await onClose(); } } diff --git a/app/lib/drug_selection/pages/drug_selection.dart b/app/lib/drug_selection/pages/drug_selection.dart index 8d40c23e..eb9c244a 100644 --- a/app/lib/drug_selection/pages/drug_selection.dart +++ b/app/lib/drug_selection/pages/drug_selection.dart @@ -31,7 +31,6 @@ class DrugSelectionPage extends HookWidget { } return unscrollablePageScaffold( title: context.l10n.drug_selection_header, - canNavigateBack: !concludesOnboarding, contextToDismissFocusOnTap: context, body: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -66,28 +65,11 @@ class DrugSelectionPage extends HookWidget { child: FullWidthButton( context.l10n.action_continue, () async { - await showAdaptiveDialog( - context: context, - builder: (context) => DialogWrapper( - title: context.l10n.drug_selection_continue_warning_title, - content: Text(context.l10n.drug_selection_continue_warning), - actions: [ - DialogAction( - onPressed: context.router.root.maybePop, - text: context.l10n.action_cancel, - ), - DialogAction( - onPressed: () async { - MetaData.instance.initialDrugSelectionDone = true; - await MetaData.save(); - // ignore: use_build_context_synchronously - await overwriteRoutes(context, nextPage: MainRoute()); - }, - text: context.l10n.action_understood, - isDefault: true, - ), - ], - ), + MetaData.instance.initialDrugSelectionDone = true; + await MetaData.save(); + // ignore: use_build_context_synchronously + await context.router.push( + MainRoute(), ); }, enabled: _isEditable(state),