diff --git a/DEPS b/DEPS
index 51c2c87..a617c6a 100644
--- a/DEPS
+++ b/DEPS
@@ -35,7 +35,7 @@
   # Dart is: https://github.com/dart-lang/sdk/blob/master/DEPS.
   # You can use //tools/dart/create_updated_flutter_deps.py to produce
   # updated revision list of existing dependencies.
-  'dart_revision': '020b3efd3f0023c5db2097787f7cf778db837a8f',
+  'dart_revision': '4ac35a7ec8c598ba1fdd8a1835a7fd84c61d9221',
 
   # WARNING: DO NOT EDIT MANUALLY
   # The lines between blank lines above and below are generated by a script. See create_updated_flutter_deps.py
diff --git a/ci/licenses_golden/licenses_third_party b/ci/licenses_golden/licenses_third_party
index 3503074..c396bfe 100644
--- a/ci/licenses_golden/licenses_third_party
+++ b/ci/licenses_golden/licenses_third_party
@@ -1,4 +1,4 @@
-Signature: 53f29196ad211ebb19347a5978c6166c
+Signature: 26f3a3f927ee221f3706f8ef7aee1d2c
 
 UNUSED LICENSES:
 
diff --git a/lib/ui/hooks.dart b/lib/ui/hooks.dart
index c0b78e7..8f76027 100644
--- a/lib/ui/hooks.dart
+++ b/lib/ui/hooks.dart
@@ -249,20 +249,22 @@
 // ignore: unused_element
 void Function(Uri) _getHttpConnectionHookClosure(bool mayInsecurelyConnectToAllDomains) {
   return (Uri uri) {
-      if (_isLoopback(uri.host)) {
-        return;
-      }
       final dynamic zoneOverride = Zone.current[#flutter.io.allow_http];
       if (zoneOverride == true) {
         return;
       }
       if (zoneOverride == false && uri.isScheme('http')) {
-        // Going to throw
+        // Going to _isLoopback check before throwing
       } else if (mayInsecurelyConnectToAllDomains || uri.isScheme('https')) {
         // In absence of zone override, if engine setting allows the connection
         // or if connection is to `https`, allow the connection.
         return;
       }
+      // Loopback connections are always allowed
+      // Check at last resort to avoid debug annoyance of try/on ArgumentError
+      if (_isLoopback(uri.host)) {
+        return;
+      }
       throw UnsupportedError(
         'Non-https connection "$uri" is not supported by the platform. '
         'Refer to https://flutter.dev/docs/release/breaking-changes/network-policy-ios-android.');
diff --git a/testing/dart/http_disallow_http_connections_test.dart b/testing/dart/http_disallow_http_connections_test.dart
index f9b8e4e..f2839b9 100644
--- a/testing/dart/http_disallow_http_connections_test.dart
+++ b/testing/dart/http_disallow_http_connections_test.dart
@@ -52,7 +52,7 @@
 }
 
 void main() {
-  test('testWithHostname', () async {
+  test('testWithLocalIP', () async {
     await bindServerAndTest(await getLocalHostIP(), (HttpClient httpClient, Uri httpUri) async {
       asyncExpectThrows<UnsupportedError>(
           () async =>  httpClient.getUrl(httpUri));
@@ -67,6 +67,30 @@
     });
   });
 
+  test('testWithHostname', () async {
+    await bindServerAndTest(Platform.localHostname, (HttpClient httpClient, Uri httpUri) async {
+      asyncExpectThrows<UnsupportedError>(
+          () async =>  httpClient.getUrl(httpUri));
+
+      final _MockZoneValue mockFoo = _MockZoneValue('foo');
+      asyncExpectThrows<UnsupportedError>(
+          () async => runZoned(() => httpClient.getUrl(httpUri),
+            zoneValues: <dynamic, dynamic>{#flutter.io.allow_http: mockFoo}));
+      expect(mockFoo.checked, isTrue);
+
+      final _MockZoneValue mockFalse = _MockZoneValue(false);
+      asyncExpectThrows<UnsupportedError>(
+          () async => runZoned(() => httpClient.getUrl(httpUri),
+            zoneValues: <dynamic, dynamic>{#flutter.io.allow_http: mockFalse}));
+      expect(mockFalse.checked, isTrue);
+
+      final _MockZoneValue mockTrue = _MockZoneValue(true);
+      await runZoned(() => httpClient.getUrl(httpUri),
+        zoneValues: <dynamic, dynamic>{#flutter.io.allow_http: mockTrue});
+      expect(mockFalse.checked, isTrue);
+    });
+  });
+
   test('testWithLoopback', () async {
     await bindServerAndTest('127.0.0.1', (HttpClient httpClient, Uri uri) async {
       await httpClient.getUrl(Uri.parse('http://localhost:${uri.port}'));
@@ -82,3 +106,27 @@
     }
   });
 }
+
+class _MockZoneValue {
+  _MockZoneValue(this._value);
+
+  Object? _value;
+  bool _falseChecked = false;
+  bool _trueChecked = false;
+
+  @override
+  bool operator ==(Object o) {
+    if(o == true) {
+      _trueChecked = true;
+    }
+    if(o == false) {
+      _falseChecked = true;
+    }
+    return _value == o;
+  }
+
+  bool get checked => _falseChecked && _trueChecked;
+
+  @override
+  int get hashCode => _value.hashCode;
+}
