From 6e94d581956d289a75e7b69124e0b391632ba464 Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Tue, 7 Mar 2023 09:36:31 -0800 Subject: [PATCH 1/2] [go_router] Fixes a issue where the params are removed after pop --- packages/go_router/CHANGELOG.md | 6 +++- packages/go_router/lib/src/builder.dart | 2 +- packages/go_router/pubspec.yaml | 2 +- .../go_router/test/go_router_state_test.dart | 34 +++++++++++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index e8c655bf8df..a90d85589c6 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.5.1 + +- Fixes an issue where the params are removed after popping. + ## 6.5.0 - Supports returning values on pop. @@ -20,7 +24,7 @@ ## 6.2.0 -- Export supertypes in route_data.dart library +- Exports supertypes in route_data.dart library ## 6.1.0 diff --git a/packages/go_router/lib/src/builder.dart b/packages/go_router/lib/src/builder.dart index ebb382dd390..72d0574eb91 100644 --- a/packages/go_router/lib/src/builder.dart +++ b/packages/go_router/lib/src/builder.dart @@ -274,7 +274,7 @@ class RouteBuilder { name: name, path: path, fullpath: effectiveMatchList.fullpath, - params: effectiveMatchList.pathParameters, + params: Map.from(effectiveMatchList.pathParameters), error: match.error, queryParams: effectiveMatchList.uri.queryParameters, queryParametersAll: effectiveMatchList.uri.queryParametersAll, diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 991a4f9ad28..398ba21b0a0 100644 --- a/packages/go_router/pubspec.yaml +++ b/packages/go_router/pubspec.yaml @@ -1,7 +1,7 @@ name: go_router description: A declarative router for Flutter based on Navigation 2 supporting deep linking, data-driven routes and more -version: 6.5.0 +version: 6.5.1 repository: https://github.com/flutter/packages/tree/main/packages/go_router issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router%22 diff --git a/packages/go_router/test/go_router_state_test.dart b/packages/go_router/test/go_router_state_test.dart index 65a00178daf..97378b02269 100644 --- a/packages/go_router/test/go_router_state_test.dart +++ b/packages/go_router/test/go_router_state_test.dart @@ -67,6 +67,40 @@ void main() { expect(find.text('1 /a', skipOffstage: false), findsOneWidget); }); + testWidgets('path parameter persists after page is popped', + (WidgetTester tester) async { + final List routes = [ + GoRoute( + path: '/', + builder: (_, __) { + return Builder(builder: (BuildContext context) { + return Text('1 ${GoRouterState.of(context).location}'); + }); + }, + routes: [ + GoRoute( + path: ':id', + builder: (_, __) { + return Builder(builder: (BuildContext context) { + return Text( + '2 ${GoRouterState.of(context).params['id']}'); + }); + }), + ]), + ]; + final GoRouter router = await createRouter(routes, tester); + await tester.pumpAndSettle(); + expect(find.text('1 /'), findsOneWidget); + + router.go('/123'); + await tester.pumpAndSettle(); + expect(find.text('2 123'), findsOneWidget); + // The query parameter is removed, so is the location in first page. + router.pop(); + await tester.pump(); + expect(find.text('2 123'), findsOneWidget); + }); + testWidgets('registry retains GoRouterState for exiting route', (WidgetTester tester) async { final UniqueKey key = UniqueKey(); From aa4d6a634d0713f9e0b5d4708e1079693c82f836 Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Mon, 20 Mar 2023 11:29:19 -0700 Subject: [PATCH 2/2] addressing comments --- packages/go_router/CHANGELOG.md | 2 +- packages/go_router/test/go_router_state_test.dart | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index a90d85589c6..bd12b66e7dc 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -24,7 +24,7 @@ ## 6.2.0 -- Exports supertypes in route_data.dart library +- Exports supertypes in route_data.dart library. ## 6.1.0 diff --git a/packages/go_router/test/go_router_state_test.dart b/packages/go_router/test/go_router_state_test.dart index 97378b02269..59cee73feca 100644 --- a/packages/go_router/test/go_router_state_test.dart +++ b/packages/go_router/test/go_router_state_test.dart @@ -95,9 +95,10 @@ void main() { router.go('/123'); await tester.pumpAndSettle(); expect(find.text('2 123'), findsOneWidget); - // The query parameter is removed, so is the location in first page. router.pop(); await tester.pump(); + // Page 2 is in popping animation but should still be on screen with the + // correct path parameter. expect(find.text('2 123'), findsOneWidget); });