[flutter_tools] convert devtools URL to a better format (#85170)
diff --git a/packages/flutter_tools/lib/src/resident_devtools_handler.dart b/packages/flutter_tools/lib/src/resident_devtools_handler.dart
index 8d03880..628c1a9 100644
--- a/packages/flutter_tools/lib/src/resident_devtools_handler.dart
+++ b/packages/flutter_tools/lib/src/resident_devtools_handler.dart
@@ -288,3 +288,13 @@
return;
}
}
+
+/// Convert a [URI] with query parameters into a display format instead
+/// of the default URI encoding.
+String urlToDisplayString(Uri uri) {
+ final StringBuffer base = StringBuffer(uri.replace(
+ queryParameters: <String, String>{},
+ ).toString());
+ base.write(uri.queryParameters.keys.map((String key) => '$key=${uri.queryParameters[key]}').join('&'));
+ return base.toString();
+}
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart
index f7d2f0b..b97373e 100644
--- a/packages/flutter_tools/lib/src/resident_runner.dart
+++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -1409,7 +1409,7 @@
if (uri != null) {
globals.printStatus(
'The Flutter DevTools debugger and profiler '
- 'on ${device.device.name} is available at: $uri',
+ 'on ${device.device.name} is available at: ${urlToDisplayString(uri)}',
);
}
}
diff --git a/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart b/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart
index 34c9f36..8c293e7 100644
--- a/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart
+++ b/packages/flutter_tools/test/general.shard/resident_devtools_handler_test.dart
@@ -427,6 +427,13 @@
expect(handler.launchDevToolsInBrowser(flutterDevices: <FlutterDevice>[]), isTrue);
expect(handler.launchedInBrowser, isTrue);
});
+
+ testWithoutContext('Converts a VmService URI with a query parameter to a pretty display string', () {
+ const String value = 'http://127.0.0.1:9100?uri=http%3A%2F%2F127.0.0.1%3A57922%2F_MXpzytpH20%3D%2F';
+ final Uri uri = Uri.parse(value);
+
+ expect(urlToDisplayString(uri), 'http://127.0.0.1:9100?uri=http://127.0.0.1:57922/_MXpzytpH20=/');
+ });
}
class FakeDevtoolsLauncher extends Fake implements DevtoolsLauncher {