Handle new observatory url (#7061)

* reapply handle new Observatory URL changes
Fixes https://github.com/flutter/flutter/issues/6843

* allow non numeric IPv4 addresses
Fixes https://github.com/flutter/flutter/issues/7051
diff --git a/packages/flutter_tools/lib/src/run.dart b/packages/flutter_tools/lib/src/run.dart
index 55b543e..0d7ba0b 100644
--- a/packages/flutter_tools/lib/src/run.dart
+++ b/packages/flutter_tools/lib/src/run.dart
@@ -119,17 +119,16 @@
 
     startTime.stop();
 
-    if (_result.hasObservatory) {
-      int port = _result.observatoryPort;
-      connectionInfoCompleter?.complete(new DebugConnectionInfo(
-        port: port,
-        wsUri: 'ws://localhost:$port/ws'
-      ));
-    }
-
     // Connect to observatory.
     if (debuggingOptions.debuggingEnabled) {
-      await connectToServiceProtocol(_result.observatoryPort);
+      await connectToServiceProtocol(_result.observatoryUri);
+    }
+
+    if (_result.hasObservatory) {
+      connectionInfoCompleter?.complete(new DebugConnectionInfo(
+        httpUri: _result.observatoryUri,
+        wsUri: vmService.wsAddress,
+      ));
     }
 
     printTrace('Application running.');
@@ -176,7 +175,7 @@
   void printHelp({ @required bool details }) {
     bool haveDetails = false;
     if (_result.hasObservatory)
-      printStatus('The Observatory debugger and profiler is available at: http://127.0.0.1:${_result.observatoryPort}/');
+      printStatus('The Observatory debugger and profiler is available at: ${_result.observatoryUri}');
     if (supportsServiceProtocol) {
       haveDetails = true;
       if (details)