[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?
This commit is contained in:
William Verhaeghe
2023-01-31 00:07:16 +01:00
committed by GitHub
parent e9cb0470ec
commit d5feda5ad8
5 changed files with 23 additions and 2 deletions

View File

@ -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.

View File

@ -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 extends Object?>([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`.

View File

@ -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

View File

@ -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');
});
});

View File

@ -127,10 +127,12 @@ class GoRouterPopSpy extends GoRouter {
GoRouterPopSpy({required super.routes});
bool popped = false;
Object? poppedResult;
@override
void pop<T extends Object?>([T? result]) {
popped = true;
poppedResult = result;
}
}