From f840d1b019f7ef84cde026c7bdbe4c587bc99655 Mon Sep 17 00:00:00 2001 From: Freek van de Ven Date: Sat, 6 Jul 2024 12:33:46 +0200 Subject: [PATCH] fix: move the onBack outside of the navigator to prevent userstory from popping the entire stack --- .../flutter_availability/lib/src/routes.dart | 20 ++++++++++--------- .../src/ui/screens/availability_overview.dart | 8 ++++---- .../lib/src/userstories.dart | 6 +++++- packages/flutter_availability/pubspec.yaml | 2 +- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/flutter_availability/lib/src/routes.dart b/packages/flutter_availability/lib/src/routes.dart index aba9af7..9fef226 100644 --- a/packages/flutter_availability/lib/src/routes.dart +++ b/packages/flutter_availability/lib/src/routes.dart @@ -3,15 +3,17 @@ import "package:flutter_availability/flutter_availability.dart"; import "package:flutter_availability/src/ui/screens/template_availability_day_overview.dart"; /// -final homePageRoute = MaterialPageRoute( - builder: (context) => AvailabilityOverview( - onBack: () => Navigator.of(context).pop(), - onEditDateRange: (range) { - Navigator.of(context).push(availabilityViewRoute(range.start)); - }, - onViewTemplates: () {}, - ), -); +MaterialPageRoute homePageRoute(VoidCallback onExit) => MaterialPageRoute( + builder: (context) => AvailabilityOverview( + onEditDateRange: (range) async { + await Navigator.of(context).push(availabilityViewRoute(range.start)); + }, + onViewTemplates: () {}, + onExit: () { + onExit(); + }, + ), + ); /// MaterialPageRoute availabilityViewRoute( diff --git a/packages/flutter_availability/lib/src/ui/screens/availability_overview.dart b/packages/flutter_availability/lib/src/ui/screens/availability_overview.dart index 53f9bb5..87d8705 100644 --- a/packages/flutter_availability/lib/src/ui/screens/availability_overview.dart +++ b/packages/flutter_availability/lib/src/ui/screens/availability_overview.dart @@ -8,7 +8,7 @@ class AvailabilityOverview extends StatefulWidget { const AvailabilityOverview({ required this.onEditDateRange, required this.onViewTemplates, - required this.onBack, + required this.onExit, super.key, }); @@ -18,8 +18,8 @@ class AvailabilityOverview extends StatefulWidget { /// Callback for when the user wants to navigate to the overview of templates final VoidCallback onViewTemplates; - /// Callback invoked when a user attempts to go back - final VoidCallback onBack; + /// Callback for when the user wants to navigate back + final VoidCallback onExit; @override State createState() => _AvailabilityOverviewState(); @@ -103,7 +103,7 @@ class _AvailabilityOverviewState extends State { return options.baseScreenBuilder( context, - onBack, + widget.onExit, body, ); } diff --git a/packages/flutter_availability/lib/src/userstories.dart b/packages/flutter_availability/lib/src/userstories.dart index 40893c9..8d1bf9a 100644 --- a/packages/flutter_availability/lib/src/userstories.dart +++ b/packages/flutter_availability/lib/src/userstories.dart @@ -26,6 +26,7 @@ class AvailabilityUserStory extends StatefulWidget { const AvailabilityUserStory({ required this.userId, required this.options, + this.onExit, super.key, }); @@ -35,6 +36,9 @@ class AvailabilityUserStory extends StatefulWidget { /// final AvailabilityOptions options; + /// Callback for when the user wants to navigate back + final VoidCallback? onExit; + /// static MaterialPageRoute route(String userId, AvailabilityOptions options) => MaterialPageRoute( @@ -61,7 +65,7 @@ class _AvailabilityUserStoryState extends State { service: _service, child: Navigator( onGenerateInitialRoutes: (state, route) => [ - homePageRoute, + homePageRoute(widget.onExit ?? () {}), ], ), ); diff --git a/packages/flutter_availability/pubspec.yaml b/packages/flutter_availability/pubspec.yaml index 4baee3e..873a267 100644 --- a/packages/flutter_availability/pubspec.yaml +++ b/packages/flutter_availability/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: flutter: sdk: flutter intl: any - rxdart: ^0.28.0 + rxdart: ^0.27.0 flutter_availability_data_interface: git: url: https://github.com/Iconica-Development/flutter_availability