From d5feda5ad88bae3aff8b0ff5ab3df5333e5defbb Mon Sep 17 00:00:00 2001 From: William Verhaeghe Date: Tue, 31 Jan 2023 00:07:16 +0100 Subject: [PATCH] [go-router] Add ability to pop with result using extension #116506 (#3036) * [go-router] Add ability to pop with result using extension #116506 * Increased version * Added a test to validate the result is captured * #116506 Changed dynamic to Object? --- packages/go_router/CHANGELOG.md | 4 ++++ packages/go_router/lib/src/misc/extensions.dart | 2 +- packages/go_router/pubspec.yaml | 2 +- packages/go_router/test/go_router_test.dart | 15 +++++++++++++++ packages/go_router/test/test_helpers.dart | 2 ++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index c1fa3db30c..237142124a 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.0.2 + +- Fixes missing result on pop in go_router extension. + ## 6.0.1 - Fixes crashes when popping navigators manually. diff --git a/packages/go_router/lib/src/misc/extensions.dart b/packages/go_router/lib/src/misc/extensions.dart index 7030ad3c25..fe37e342fb 100644 --- a/packages/go_router/lib/src/misc/extensions.dart +++ b/packages/go_router/lib/src/misc/extensions.dart @@ -59,7 +59,7 @@ extension GoRouterHelper on BuildContext { /// Pop the top page off the Navigator's page stack by calling /// [Navigator.pop]. - void pop() => GoRouter.of(this).pop(); + void pop([T? result]) => GoRouter.of(this).pop(result); /// Replaces the top-most page of the page stack with the given URL location /// w/ optional query parameters, e.g. `/family/f2/person/p1?color=blue`. diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 46982a9f93..ade738b44c 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.0.1 +version: 6.0.2 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_test.dart b/packages/go_router/test/go_router_test.dart index 969b32993e..1ff0aa6b6e 100644 --- a/packages/go_router/test/go_router_test.dart +++ b/packages/go_router/test/go_router_test.dart @@ -2681,6 +2681,21 @@ void main() { ); key.currentContext!.pop(); expect(router.popped, true); + expect(router.poppedResult, null); + }); + + testWidgets('calls [pop] on closest GoRouter with result', + (WidgetTester tester) async { + final GoRouterPopSpy router = GoRouterPopSpy(routes: routes); + await tester.pumpWidget( + MaterialApp.router( + routerConfig: router, + title: 'GoRouter Example', + ), + ); + key.currentContext!.pop('result'); + expect(router.popped, true); + expect(router.poppedResult, 'result'); }); }); diff --git a/packages/go_router/test/test_helpers.dart b/packages/go_router/test/test_helpers.dart index 5d296ad8cc..11d42a09fa 100644 --- a/packages/go_router/test/test_helpers.dart +++ b/packages/go_router/test/test_helpers.dart @@ -127,10 +127,12 @@ class GoRouterPopSpy extends GoRouter { GoRouterPopSpy({required super.routes}); bool popped = false; + Object? poppedResult; @override void pop([T? result]) { popped = true; + poppedResult = result; } }