Added additional uri field to routeInformationUpdated to accept entir… (#40250)
Added additional uri field to routeInformationUpdated to accept entirâ¦
diff --git a/lib/web_ui/lib/src/engine/window.dart b/lib/web_ui/lib/src/engine/window.dart
index 11af5ef..f48f790 100644
--- a/lib/web_ui/lib/src/engine/window.dart
+++ b/lib/web_ui/lib/src/engine/window.dart
@@ -191,8 +191,23 @@
return true;
case 'routeInformationUpdated':
assert(arguments != null);
+ final String? uriString = arguments!.tryString('uri');
+ final String path;
+ if (uriString != null) {
+ final Uri uri = Uri.parse(uriString);
+ // Need to remove scheme and authority.
+ path = Uri.decodeComponent(
+ Uri(
+ path: uri.path.isEmpty ? '/' : uri.path,
+ queryParameters: uri.queryParametersAll.isEmpty ? null : uri.queryParametersAll,
+ fragment: uri.fragment.isEmpty ? null : uri.fragment,
+ ).toString(),
+ );
+ } else {
+ path = arguments.tryString('location')!;
+ }
browserHistory.setRouteName(
- arguments!.tryString('location'),
+ path,
state: arguments['state'],
replace: arguments.tryBool('replace') ?? false,
);
diff --git a/lib/web_ui/test/window_test.dart b/lib/web_ui/test/window_test.dart
index b356b6f..d37bdbd 100644
--- a/lib/web_ui/test/window_test.dart
+++ b/lib/web_ui/test/window_test.dart
@@ -301,6 +301,30 @@
expect(actualState['state4']['substate2'], 'string2');
});
+ test('routeInformationUpdated can handle uri',
+ () async {
+ await window.debugInitializeHistory(TestUrlStrategy.fromEntry(
+ const TestHistoryEntry('initial state', null, '/initial'),
+ ), useSingle: false);
+ expect(window.browserHistory, isA<MultiEntriesBrowserHistory>());
+
+ // routeInformationUpdated does not
+ final Completer<void> callback = Completer<void>();
+ window.sendPlatformMessage(
+ 'flutter/navigation',
+ const JSONMethodCodec().encodeMethodCall(const MethodCall(
+ 'routeInformationUpdated',
+ <String, dynamic>{
+ 'uri': 'http://myhostname.com/baz?abc=def#fragment',
+ },
+ )),
+ (_) { callback.complete(); },
+ );
+ await callback.future;
+ expect(window.browserHistory, isA<MultiEntriesBrowserHistory>());
+ expect(window.browserHistory.urlStrategy!.getPath(), '/baz?abc=def#fragment');
+ });
+
test('can replace in MultiEntriesBrowserHistory',
() async {
await window.debugInitializeHistory(TestUrlStrategy.fromEntry(