[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 {