[go_router] Retain query parameter during refresh and first redirect (#5276)

Fixes https://github.com/flutter/flutter/issues/137513
This commit is contained in:
Valentin Vignal
2023-11-10 01:01:30 +08:00
committed by GitHub
parent 7a2973adce
commit 5929d660a0
4 changed files with 32 additions and 5 deletions

View File

@ -1,3 +1,7 @@
## 12.1.1
- Retains query parameters during refresh and first redirect.
## 12.1.0 ## 12.1.0
- Adds an ability to add a custom codec for serializing/deserializing extra. - Adds an ability to add a custom codec for serializing/deserializing extra.

View File

@ -531,10 +531,18 @@ class GoRouter implements RouterConfig<RouteMatchList> {
// verified by assert() during the initialization. // verified by assert() during the initialization.
return initialLocation!; return initialLocation!;
} }
final Uri platformDefaultUri = Uri platformDefaultUri = Uri.parse(
Uri.parse(WidgetsBinding.instance.platformDispatcher.defaultRouteName); WidgetsBinding.instance.platformDispatcher.defaultRouteName,
final String platformDefault = );
platformDefaultUri.path.isEmpty ? '/' : platformDefaultUri.path; if (platformDefaultUri.hasEmptyPath) {
// TODO(chunhtai): Clean up this once `RouteInformation.uri` is available
// in packages repo.
platformDefaultUri = Uri(
path: '/',
queryParameters: platformDefaultUri.queryParameters,
);
}
final String platformDefault = platformDefaultUri.toString();
if (initialLocation == null) { if (initialLocation == null) {
return platformDefault; return platformDefault;
} else if (platformDefault == '/') { } else if (platformDefault == '/') {

View File

@ -1,7 +1,7 @@
name: go_router name: go_router
description: A declarative router for Flutter based on Navigation 2 supporting description: A declarative router for Flutter based on Navigation 2 supporting
deep linking, data-driven routes and more deep linking, data-driven routes and more
version: 12.1.0 version: 12.1.1
repository: https://github.com/flutter/packages/tree/main/packages/go_router 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 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router%22

View File

@ -2503,6 +2503,21 @@ void main() {
TestWidgetsFlutterBinding.instance.platformDispatcher TestWidgetsFlutterBinding.instance.platformDispatcher
.clearDefaultRouteNameTestValue(); .clearDefaultRouteNameTestValue();
}); });
testWidgets(
'When platformDispatcher.defaultRouteName is deep-link Uri with '
'scheme, authority, no path, and query parameters',
(WidgetTester tester) async {
TestWidgetsFlutterBinding.instance.platformDispatcher
.defaultRouteNameTestValue = 'https://domain.com?param=1';
final GoRouter router = await createRouter(
routes,
tester,
);
expect(router.routeInformationProvider.value.uri.toString(), '/?param=1');
TestWidgetsFlutterBinding.instance.platformDispatcher
.clearDefaultRouteNameTestValue();
});
}); });
group('params', () { group('params', () {