[url_launcher_web] migrate to pkg:web (#5451)

Require the latest Flutter/Dart SDKs
Enables use via wasm
Related to https://github.com/flutter/flutter/issues/117022
diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md
index 76979c9..34ae8c8 100644
--- a/packages/url_launcher/url_launcher_web/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 2.2.1
+
+* Supports Flutter Web + Wasm
+* Updates minimum supported SDK version to Flutter 3.16.0/Dart 3.2.0.
+
 ## 2.2.0
 
 * Implements `supportsMode` and `supportsCloseForMode`.
diff --git a/packages/url_launcher/url_launcher_web/example/build.yaml b/packages/url_launcher/url_launcher_web/example/build.yaml
deleted file mode 100644
index 5a89bed..0000000
--- a/packages/url_launcher/url_launcher_web/example/build.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-targets:
-  $default:
-    sources:
-      - integration_test/*.dart
-      - lib/$lib$
-      - $package$
-    builders:
-      mockito|mockBuilder:
-        generate_for:
-          - integration_test/**
diff --git a/packages/url_launcher/url_launcher_web/example/integration_test/link_widget_test.dart b/packages/url_launcher/url_launcher_web/example/integration_test/link_widget_test.dart
index 3c27d1c..528cff3 100644
--- a/packages/url_launcher/url_launcher_web/example/integration_test/link_widget_test.dart
+++ b/packages/url_launcher/url_launcher_web/example/integration_test/link_widget_test.dart
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'dart:html' as html;
 import 'dart:js_util';
 import 'dart:ui_web' as ui_web;
 
@@ -11,6 +10,7 @@
 import 'package:integration_test/integration_test.dart';
 import 'package:url_launcher_platform_interface/link.dart';
 import 'package:url_launcher_web/src/link.dart';
+import 'package:web/helpers.dart' as html;
 
 void main() {
   IntegrationTestWidgetsFlutterBinding.ensureInitialized();
@@ -174,7 +174,9 @@
 
 html.Element _findSingleAnchor() {
   final List<html.Element> foundAnchors = <html.Element>[];
-  for (final html.Element anchor in html.document.querySelectorAll('a')) {
+  html.NodeList anchors = html.document.querySelectorAll('a');
+  for (int i = 0; i < anchors.length; i++) {
+    final html.Element anchor = anchors.item(i)! as html.Element;
     if (hasProperty(anchor, linkViewIdProperty)) {
       foundAnchors.add(anchor);
     }
@@ -184,7 +186,9 @@
   final html.ShadowRoot? shadowRoot =
       html.document.querySelector('flt-glass-pane')?.shadowRoot;
   if (shadowRoot != null) {
-    for (final html.Element anchor in shadowRoot.querySelectorAll('a')) {
+    anchors = shadowRoot.querySelectorAll('a');
+    for (int i = 0; i < anchors.length; i++) {
+      final html.Element anchor = anchors.item(i)! as html.Element;
       if (hasProperty(anchor, linkViewIdProperty)) {
         foundAnchors.add(anchor);
       }
diff --git a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart
index 994e3b2..bce7e13 100644
--- a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart
+++ b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.dart
@@ -2,18 +2,31 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'dart:html' as html;
+import 'dart:js_interop';
+import 'dart:js_util';
 
 import 'package:flutter_test/flutter_test.dart';
 import 'package:integration_test/integration_test.dart';
-import 'package:mockito/annotations.dart';
-import 'package:mockito/mockito.dart';
+import 'package:mockito/mockito.dart' show any, verify, when, Mock;
 import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart';
 import 'package:url_launcher_web/url_launcher_web.dart';
+import 'package:web/helpers.dart' as html;
 
-import 'url_launcher_web_test.mocks.dart';
+abstract class MyWindow {
+  html.Window? open(Object? a, Object? b, Object? c);
+  html.Navigator? get navigator;
+}
 
-@GenerateMocks(<Type>[html.Window, html.Navigator])
+@JSExport()
+class MockWindow extends Mock implements MyWindow {}
+
+abstract class MyNavigator {
+  String? get userAgent;
+}
+
+@JSExport()
+class MockNavigator extends Mock implements MyNavigator {}
+
 void main() {
   IntegrationTestWidgetsFlutterBinding.ensureInitialized();
 
@@ -26,15 +39,21 @@
     setUp(() {
       mockWindow = MockWindow();
       mockNavigator = MockNavigator();
-      when(mockWindow.navigator).thenReturn(mockNavigator);
+
+      final html.Window jsMockWindow =
+          createDartExport(mockWindow) as html.Window;
+      final html.Navigator jsMockNavigator =
+          createDartExport(mockNavigator) as html.Navigator;
+
+      when(mockWindow.navigator).thenReturn(jsMockNavigator);
 
       // Simulate that window.open does something.
-      when(mockWindow.open(any, any, any)).thenReturn(MockWindow());
+      when(mockWindow.open(any, any, any)).thenReturn(jsMockWindow);
 
       when(mockNavigator.userAgent).thenReturn(
           'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36');
 
-      plugin = UrlLauncherPlugin(debugWindow: mockWindow);
+      plugin = UrlLauncherPlugin(debugWindow: mockWindow as html.Window);
     });
 
     group('canLaunch', () {
@@ -43,8 +62,7 @@
       });
 
       testWidgets('"https" URLs -> true', (WidgetTester _) async {
-        expect(
-            plugin.canLaunch('https://go, (Widogle.com'), completion(isTrue));
+        expect(plugin.canLaunch('https://google.com'), completion(isTrue));
       });
 
       testWidgets('"mailto" URLs -> true', (WidgetTester _) async {
@@ -167,7 +185,7 @@
           when(mockNavigator.userAgent).thenReturn(
               'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5.1 Safari/605.1.15');
           // Recreate the plugin, so it grabs the overrides from this group
-          plugin = UrlLauncherPlugin(debugWindow: mockWindow);
+          plugin = UrlLauncherPlugin(debugWindow: mockWindow as html.Window);
         });
 
         testWidgets('http urls should be launched in a new window',
diff --git a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart
deleted file mode 100644
index 13ff194..0000000
--- a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart
+++ /dev/null
@@ -1,1512 +0,0 @@
-// Mocks generated by Mockito 5.4.1 from annotations
-// in regular_integration_tests/integration_test/url_launcher_web_test.dart.
-// Do not manually edit this file.
-
-// @dart=2.19
-
-// ignore_for_file: no_leading_underscores_for_library_prefixes
-import 'dart:async' as _i3;
-import 'dart:html' as _i2;
-import 'dart:math' as _i4;
-
-import 'package:mockito/mockito.dart' as _i1;
-
-// ignore_for_file: type=lint
-// ignore_for_file: avoid_redundant_argument_values
-// ignore_for_file: avoid_setters_without_getters
-// ignore_for_file: comment_references
-// ignore_for_file: implementation_imports
-// ignore_for_file: invalid_use_of_visible_for_testing_member
-// ignore_for_file: prefer_const_constructors
-// ignore_for_file: unnecessary_parenthesis
-// ignore_for_file: camel_case_types
-// ignore_for_file: subtype_of_sealed_class
-
-class _FakeDocument_0 extends _i1.SmartFake implements _i2.Document {
-  _FakeDocument_0(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeLocation_1 extends _i1.SmartFake implements _i2.Location {
-  _FakeLocation_1(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeConsole_2 extends _i1.SmartFake implements _i2.Console {
-  _FakeConsole_2(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeHistory_3 extends _i1.SmartFake implements _i2.History {
-  _FakeHistory_3(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeStorage_4 extends _i1.SmartFake implements _i2.Storage {
-  _FakeStorage_4(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeNavigator_5 extends _i1.SmartFake implements _i2.Navigator {
-  _FakeNavigator_5(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakePerformance_6 extends _i1.SmartFake implements _i2.Performance {
-  _FakePerformance_6(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeEvents_7 extends _i1.SmartFake implements _i2.Events {
-  _FakeEvents_7(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeWindowBase_8 extends _i1.SmartFake implements _i2.WindowBase {
-  _FakeWindowBase_8(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeFileSystem_9 extends _i1.SmartFake implements _i2.FileSystem {
-  _FakeFileSystem_9(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeStylePropertyMapReadonly_10 extends _i1.SmartFake
-    implements _i2.StylePropertyMapReadonly {
-  _FakeStylePropertyMapReadonly_10(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeMediaQueryList_11 extends _i1.SmartFake
-    implements _i2.MediaQueryList {
-  _FakeMediaQueryList_11(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeEntry_12 extends _i1.SmartFake implements _i2.Entry {
-  _FakeEntry_12(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeGeolocation_13 extends _i1.SmartFake implements _i2.Geolocation {
-  _FakeGeolocation_13(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeMediaStream_14 extends _i1.SmartFake implements _i2.MediaStream {
-  _FakeMediaStream_14(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-class _FakeRelatedApplication_15 extends _i1.SmartFake
-    implements _i2.RelatedApplication {
-  _FakeRelatedApplication_15(
-    Object parent,
-    Invocation parentInvocation,
-  ) : super(
-          parent,
-          parentInvocation,
-        );
-}
-
-/// A class which mocks [Window].
-///
-/// See the documentation for Mockito's code generation for more information.
-class MockWindow extends _i1.Mock implements _i2.Window {
-  MockWindow() {
-    _i1.throwOnMissingStub(this);
-  }
-
-  @override
-  _i3.Future<num> get animationFrame => (super.noSuchMethod(
-        Invocation.getter(#animationFrame),
-        returnValue: _i3.Future<num>.value(0),
-      ) as _i3.Future<num>);
-
-  @override
-  _i2.Document get document => (super.noSuchMethod(
-        Invocation.getter(#document),
-        returnValue: _FakeDocument_0(
-          this,
-          Invocation.getter(#document),
-        ),
-      ) as _i2.Document);
-
-  @override
-  _i2.Location get location => (super.noSuchMethod(
-        Invocation.getter(#location),
-        returnValue: _FakeLocation_1(
-          this,
-          Invocation.getter(#location),
-        ),
-      ) as _i2.Location);
-
-  @override
-  set location(_i2.LocationBase? value) => super.noSuchMethod(
-        Invocation.setter(
-          #location,
-          value,
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  _i2.Console get console => (super.noSuchMethod(
-        Invocation.getter(#console),
-        returnValue: _FakeConsole_2(
-          this,
-          Invocation.getter(#console),
-        ),
-      ) as _i2.Console);
-
-  @override
-  set defaultStatus(String? value) => super.noSuchMethod(
-        Invocation.setter(
-          #defaultStatus,
-          value,
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  set defaultstatus(String? value) => super.noSuchMethod(
-        Invocation.setter(
-          #defaultstatus,
-          value,
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  num get devicePixelRatio => (super.noSuchMethod(
-        Invocation.getter(#devicePixelRatio),
-        returnValue: 0,
-      ) as num);
-
-  @override
-  _i2.History get history => (super.noSuchMethod(
-        Invocation.getter(#history),
-        returnValue: _FakeHistory_3(
-          this,
-          Invocation.getter(#history),
-        ),
-      ) as _i2.History);
-
-  @override
-  _i2.Storage get localStorage => (super.noSuchMethod(
-        Invocation.getter(#localStorage),
-        returnValue: _FakeStorage_4(
-          this,
-          Invocation.getter(#localStorage),
-        ),
-      ) as _i2.Storage);
-
-  @override
-  set name(String? value) => super.noSuchMethod(
-        Invocation.setter(
-          #name,
-          value,
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  _i2.Navigator get navigator => (super.noSuchMethod(
-        Invocation.getter(#navigator),
-        returnValue: _FakeNavigator_5(
-          this,
-          Invocation.getter(#navigator),
-        ),
-      ) as _i2.Navigator);
-
-  @override
-  set opener(_i2.WindowBase? value) => super.noSuchMethod(
-        Invocation.setter(
-          #opener,
-          value,
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  int get outerHeight => (super.noSuchMethod(
-        Invocation.getter(#outerHeight),
-        returnValue: 0,
-      ) as int);
-
-  @override
-  int get outerWidth => (super.noSuchMethod(
-        Invocation.getter(#outerWidth),
-        returnValue: 0,
-      ) as int);
-
-  @override
-  _i2.Performance get performance => (super.noSuchMethod(
-        Invocation.getter(#performance),
-        returnValue: _FakePerformance_6(
-          this,
-          Invocation.getter(#performance),
-        ),
-      ) as _i2.Performance);
-
-  @override
-  _i2.Storage get sessionStorage => (super.noSuchMethod(
-        Invocation.getter(#sessionStorage),
-        returnValue: _FakeStorage_4(
-          this,
-          Invocation.getter(#sessionStorage),
-        ),
-      ) as _i2.Storage);
-
-  @override
-  set status(String? value) => super.noSuchMethod(
-        Invocation.setter(
-          #status,
-          value,
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  _i3.Stream<_i2.Event> get onContentLoaded => (super.noSuchMethod(
-        Invocation.getter(#onContentLoaded),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onAbort => (super.noSuchMethod(
-        Invocation.getter(#onAbort),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onBlur => (super.noSuchMethod(
-        Invocation.getter(#onBlur),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onCanPlay => (super.noSuchMethod(
-        Invocation.getter(#onCanPlay),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onCanPlayThrough => (super.noSuchMethod(
-        Invocation.getter(#onCanPlayThrough),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onChange => (super.noSuchMethod(
-        Invocation.getter(#onChange),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onClick => (super.noSuchMethod(
-        Invocation.getter(#onClick),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onContextMenu => (super.noSuchMethod(
-        Invocation.getter(#onContextMenu),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.Event> get onDoubleClick => (super.noSuchMethod(
-        Invocation.getter(#onDoubleClick),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.DeviceMotionEvent> get onDeviceMotion => (super.noSuchMethod(
-        Invocation.getter(#onDeviceMotion),
-        returnValue: _i3.Stream<_i2.DeviceMotionEvent>.empty(),
-      ) as _i3.Stream<_i2.DeviceMotionEvent>);
-
-  @override
-  _i3.Stream<_i2.DeviceOrientationEvent> get onDeviceOrientation =>
-      (super.noSuchMethod(
-        Invocation.getter(#onDeviceOrientation),
-        returnValue: _i3.Stream<_i2.DeviceOrientationEvent>.empty(),
-      ) as _i3.Stream<_i2.DeviceOrientationEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onDrag => (super.noSuchMethod(
-        Invocation.getter(#onDrag),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onDragEnd => (super.noSuchMethod(
-        Invocation.getter(#onDragEnd),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onDragEnter => (super.noSuchMethod(
-        Invocation.getter(#onDragEnter),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onDragLeave => (super.noSuchMethod(
-        Invocation.getter(#onDragLeave),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onDragOver => (super.noSuchMethod(
-        Invocation.getter(#onDragOver),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onDragStart => (super.noSuchMethod(
-        Invocation.getter(#onDragStart),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onDrop => (super.noSuchMethod(
-        Invocation.getter(#onDrop),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.Event> get onDurationChange => (super.noSuchMethod(
-        Invocation.getter(#onDurationChange),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onEmptied => (super.noSuchMethod(
-        Invocation.getter(#onEmptied),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onEnded => (super.noSuchMethod(
-        Invocation.getter(#onEnded),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onError => (super.noSuchMethod(
-        Invocation.getter(#onError),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onFocus => (super.noSuchMethod(
-        Invocation.getter(#onFocus),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onHashChange => (super.noSuchMethod(
-        Invocation.getter(#onHashChange),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onInput => (super.noSuchMethod(
-        Invocation.getter(#onInput),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onInvalid => (super.noSuchMethod(
-        Invocation.getter(#onInvalid),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.KeyboardEvent> get onKeyDown => (super.noSuchMethod(
-        Invocation.getter(#onKeyDown),
-        returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(),
-      ) as _i3.Stream<_i2.KeyboardEvent>);
-
-  @override
-  _i3.Stream<_i2.KeyboardEvent> get onKeyPress => (super.noSuchMethod(
-        Invocation.getter(#onKeyPress),
-        returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(),
-      ) as _i3.Stream<_i2.KeyboardEvent>);
-
-  @override
-  _i3.Stream<_i2.KeyboardEvent> get onKeyUp => (super.noSuchMethod(
-        Invocation.getter(#onKeyUp),
-        returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(),
-      ) as _i3.Stream<_i2.KeyboardEvent>);
-
-  @override
-  _i3.Stream<_i2.Event> get onLoad => (super.noSuchMethod(
-        Invocation.getter(#onLoad),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onLoadedData => (super.noSuchMethod(
-        Invocation.getter(#onLoadedData),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onLoadedMetadata => (super.noSuchMethod(
-        Invocation.getter(#onLoadedMetadata),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onLoadStart => (super.noSuchMethod(
-        Invocation.getter(#onLoadStart),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.MessageEvent> get onMessage => (super.noSuchMethod(
-        Invocation.getter(#onMessage),
-        returnValue: _i3.Stream<_i2.MessageEvent>.empty(),
-      ) as _i3.Stream<_i2.MessageEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onMouseDown => (super.noSuchMethod(
-        Invocation.getter(#onMouseDown),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onMouseEnter => (super.noSuchMethod(
-        Invocation.getter(#onMouseEnter),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onMouseLeave => (super.noSuchMethod(
-        Invocation.getter(#onMouseLeave),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onMouseMove => (super.noSuchMethod(
-        Invocation.getter(#onMouseMove),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onMouseOut => (super.noSuchMethod(
-        Invocation.getter(#onMouseOut),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onMouseOver => (super.noSuchMethod(
-        Invocation.getter(#onMouseOver),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.MouseEvent> get onMouseUp => (super.noSuchMethod(
-        Invocation.getter(#onMouseUp),
-        returnValue: _i3.Stream<_i2.MouseEvent>.empty(),
-      ) as _i3.Stream<_i2.MouseEvent>);
-
-  @override
-  _i3.Stream<_i2.WheelEvent> get onMouseWheel => (super.noSuchMethod(
-        Invocation.getter(#onMouseWheel),
-        returnValue: _i3.Stream<_i2.WheelEvent>.empty(),
-      ) as _i3.Stream<_i2.WheelEvent>);
-
-  @override
-  _i3.Stream<_i2.Event> get onOffline => (super.noSuchMethod(
-        Invocation.getter(#onOffline),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onOnline => (super.noSuchMethod(
-        Invocation.getter(#onOnline),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onPageHide => (super.noSuchMethod(
-        Invocation.getter(#onPageHide),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onPageShow => (super.noSuchMethod(
-        Invocation.getter(#onPageShow),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onPause => (super.noSuchMethod(
-        Invocation.getter(#onPause),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onPlay => (super.noSuchMethod(
-        Invocation.getter(#onPlay),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onPlaying => (super.noSuchMethod(
-        Invocation.getter(#onPlaying),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.PopStateEvent> get onPopState => (super.noSuchMethod(
-        Invocation.getter(#onPopState),
-        returnValue: _i3.Stream<_i2.PopStateEvent>.empty(),
-      ) as _i3.Stream<_i2.PopStateEvent>);
-
-  @override
-  _i3.Stream<_i2.Event> get onProgress => (super.noSuchMethod(
-        Invocation.getter(#onProgress),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onRateChange => (super.noSuchMethod(
-        Invocation.getter(#onRateChange),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onReset => (super.noSuchMethod(
-        Invocation.getter(#onReset),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onResize => (super.noSuchMethod(
-        Invocation.getter(#onResize),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onScroll => (super.noSuchMethod(
-        Invocation.getter(#onScroll),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onSearch => (super.noSuchMethod(
-        Invocation.getter(#onSearch),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onSeeked => (super.noSuchMethod(
-        Invocation.getter(#onSeeked),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onSeeking => (super.noSuchMethod(
-        Invocation.getter(#onSeeking),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onSelect => (super.noSuchMethod(
-        Invocation.getter(#onSelect),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onStalled => (super.noSuchMethod(
-        Invocation.getter(#onStalled),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.StorageEvent> get onStorage => (super.noSuchMethod(
-        Invocation.getter(#onStorage),
-        returnValue: _i3.Stream<_i2.StorageEvent>.empty(),
-      ) as _i3.Stream<_i2.StorageEvent>);
-
-  @override
-  _i3.Stream<_i2.Event> get onSubmit => (super.noSuchMethod(
-        Invocation.getter(#onSubmit),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onSuspend => (super.noSuchMethod(
-        Invocation.getter(#onSuspend),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onTimeUpdate => (super.noSuchMethod(
-        Invocation.getter(#onTimeUpdate),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.TouchEvent> get onTouchCancel => (super.noSuchMethod(
-        Invocation.getter(#onTouchCancel),
-        returnValue: _i3.Stream<_i2.TouchEvent>.empty(),
-      ) as _i3.Stream<_i2.TouchEvent>);
-
-  @override
-  _i3.Stream<_i2.TouchEvent> get onTouchEnd => (super.noSuchMethod(
-        Invocation.getter(#onTouchEnd),
-        returnValue: _i3.Stream<_i2.TouchEvent>.empty(),
-      ) as _i3.Stream<_i2.TouchEvent>);
-
-  @override
-  _i3.Stream<_i2.TouchEvent> get onTouchMove => (super.noSuchMethod(
-        Invocation.getter(#onTouchMove),
-        returnValue: _i3.Stream<_i2.TouchEvent>.empty(),
-      ) as _i3.Stream<_i2.TouchEvent>);
-
-  @override
-  _i3.Stream<_i2.TouchEvent> get onTouchStart => (super.noSuchMethod(
-        Invocation.getter(#onTouchStart),
-        returnValue: _i3.Stream<_i2.TouchEvent>.empty(),
-      ) as _i3.Stream<_i2.TouchEvent>);
-
-  @override
-  _i3.Stream<_i2.TransitionEvent> get onTransitionEnd => (super.noSuchMethod(
-        Invocation.getter(#onTransitionEnd),
-        returnValue: _i3.Stream<_i2.TransitionEvent>.empty(),
-      ) as _i3.Stream<_i2.TransitionEvent>);
-
-  @override
-  _i3.Stream<_i2.Event> get onUnload => (super.noSuchMethod(
-        Invocation.getter(#onUnload),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onVolumeChange => (super.noSuchMethod(
-        Invocation.getter(#onVolumeChange),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.Event> get onWaiting => (super.noSuchMethod(
-        Invocation.getter(#onWaiting),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.AnimationEvent> get onAnimationEnd => (super.noSuchMethod(
-        Invocation.getter(#onAnimationEnd),
-        returnValue: _i3.Stream<_i2.AnimationEvent>.empty(),
-      ) as _i3.Stream<_i2.AnimationEvent>);
-
-  @override
-  _i3.Stream<_i2.AnimationEvent> get onAnimationIteration =>
-      (super.noSuchMethod(
-        Invocation.getter(#onAnimationIteration),
-        returnValue: _i3.Stream<_i2.AnimationEvent>.empty(),
-      ) as _i3.Stream<_i2.AnimationEvent>);
-
-  @override
-  _i3.Stream<_i2.AnimationEvent> get onAnimationStart => (super.noSuchMethod(
-        Invocation.getter(#onAnimationStart),
-        returnValue: _i3.Stream<_i2.AnimationEvent>.empty(),
-      ) as _i3.Stream<_i2.AnimationEvent>);
-
-  @override
-  _i3.Stream<_i2.Event> get onBeforeUnload => (super.noSuchMethod(
-        Invocation.getter(#onBeforeUnload),
-        returnValue: _i3.Stream<_i2.Event>.empty(),
-      ) as _i3.Stream<_i2.Event>);
-
-  @override
-  _i3.Stream<_i2.WheelEvent> get onWheel => (super.noSuchMethod(
-        Invocation.getter(#onWheel),
-        returnValue: _i3.Stream<_i2.WheelEvent>.empty(),
-      ) as _i3.Stream<_i2.WheelEvent>);
-
-  @override
-  int get pageXOffset => (super.noSuchMethod(
-        Invocation.getter(#pageXOffset),
-        returnValue: 0,
-      ) as int);
-
-  @override
-  int get pageYOffset => (super.noSuchMethod(
-        Invocation.getter(#pageYOffset),
-        returnValue: 0,
-      ) as int);
-
-  @override
-  int get scrollX => (super.noSuchMethod(
-        Invocation.getter(#scrollX),
-        returnValue: 0,
-      ) as int);
-
-  @override
-  int get scrollY => (super.noSuchMethod(
-        Invocation.getter(#scrollY),
-        returnValue: 0,
-      ) as int);
-
-  @override
-  _i2.Events get on => (super.noSuchMethod(
-        Invocation.getter(#on),
-        returnValue: _FakeEvents_7(
-          this,
-          Invocation.getter(#on),
-        ),
-      ) as _i2.Events);
-
-  @override
-  _i2.WindowBase open(
-    String? url,
-    String? name, [
-    String? options,
-  ]) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #open,
-          [
-            url,
-            name,
-            options,
-          ],
-        ),
-        returnValue: _FakeWindowBase_8(
-          this,
-          Invocation.method(
-            #open,
-            [
-              url,
-              name,
-              options,
-            ],
-          ),
-        ),
-      ) as _i2.WindowBase);
-
-  @override
-  int requestAnimationFrame(_i2.FrameRequestCallback? callback) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #requestAnimationFrame,
-          [callback],
-        ),
-        returnValue: 0,
-      ) as int);
-
-  @override
-  void cancelAnimationFrame(int? id) => super.noSuchMethod(
-        Invocation.method(
-          #cancelAnimationFrame,
-          [id],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  _i3.Future<_i2.FileSystem> requestFileSystem(
-    int? size, {
-    bool? persistent = false,
-  }) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #requestFileSystem,
-          [size],
-          {#persistent: persistent},
-        ),
-        returnValue: _i3.Future<_i2.FileSystem>.value(_FakeFileSystem_9(
-          this,
-          Invocation.method(
-            #requestFileSystem,
-            [size],
-            {#persistent: persistent},
-          ),
-        )),
-      ) as _i3.Future<_i2.FileSystem>);
-
-  @override
-  void alert([String? message]) => super.noSuchMethod(
-        Invocation.method(
-          #alert,
-          [message],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void cancelIdleCallback(int? handle) => super.noSuchMethod(
-        Invocation.method(
-          #cancelIdleCallback,
-          [handle],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void close() => super.noSuchMethod(
-        Invocation.method(
-          #close,
-          [],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  bool confirm([String? message]) => (super.noSuchMethod(
-        Invocation.method(
-          #confirm,
-          [message],
-        ),
-        returnValue: false,
-      ) as bool);
-
-  @override
-  _i3.Future<dynamic> fetch(
-    dynamic input, [
-    Map<dynamic, dynamic>? init,
-  ]) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #fetch,
-          [
-            input,
-            init,
-          ],
-        ),
-        returnValue: _i3.Future<dynamic>.value(),
-      ) as _i3.Future<dynamic>);
-
-  @override
-  bool find(
-    String? string,
-    bool? caseSensitive,
-    bool? backwards,
-    bool? wrap,
-    bool? wholeWord,
-    bool? searchInFrames,
-    bool? showDialog,
-  ) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #find,
-          [
-            string,
-            caseSensitive,
-            backwards,
-            wrap,
-            wholeWord,
-            searchInFrames,
-            showDialog,
-          ],
-        ),
-        returnValue: false,
-      ) as bool);
-
-  @override
-  _i2.StylePropertyMapReadonly getComputedStyleMap(
-    _i2.Element? element,
-    String? pseudoElement,
-  ) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #getComputedStyleMap,
-          [
-            element,
-            pseudoElement,
-          ],
-        ),
-        returnValue: _FakeStylePropertyMapReadonly_10(
-          this,
-          Invocation.method(
-            #getComputedStyleMap,
-            [
-              element,
-              pseudoElement,
-            ],
-          ),
-        ),
-      ) as _i2.StylePropertyMapReadonly);
-
-  @override
-  List<_i2.CssRule> getMatchedCssRules(
-    _i2.Element? element,
-    String? pseudoElement,
-  ) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #getMatchedCssRules,
-          [
-            element,
-            pseudoElement,
-          ],
-        ),
-        returnValue: <_i2.CssRule>[],
-      ) as List<_i2.CssRule>);
-
-  @override
-  _i2.MediaQueryList matchMedia(String? query) => (super.noSuchMethod(
-        Invocation.method(
-          #matchMedia,
-          [query],
-        ),
-        returnValue: _FakeMediaQueryList_11(
-          this,
-          Invocation.method(
-            #matchMedia,
-            [query],
-          ),
-        ),
-      ) as _i2.MediaQueryList);
-
-  @override
-  void moveBy(
-    int? x,
-    int? y,
-  ) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #moveBy,
-          [
-            x,
-            y,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void postMessage(
-    dynamic message,
-    String? targetOrigin, [
-    List<Object>? transfer,
-  ]) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #postMessage,
-          [
-            message,
-            targetOrigin,
-            transfer,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void print() => super.noSuchMethod(
-        Invocation.method(
-          #print,
-          [],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  int requestIdleCallback(
-    _i2.IdleRequestCallback? callback, [
-    Map<dynamic, dynamic>? options,
-  ]) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #requestIdleCallback,
-          [
-            callback,
-            options,
-          ],
-        ),
-        returnValue: 0,
-      ) as int);
-
-  @override
-  void resizeBy(
-    int? x,
-    int? y,
-  ) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #resizeBy,
-          [
-            x,
-            y,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void resizeTo(
-    int? x,
-    int? y,
-  ) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #resizeTo,
-          [
-            x,
-            y,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void scroll([
-    dynamic options_OR_x,
-    dynamic y,
-    Map<dynamic, dynamic>? scrollOptions,
-  ]) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #scroll,
-          [
-            options_OR_x,
-            y,
-            scrollOptions,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void scrollBy([
-    dynamic options_OR_x,
-    dynamic y,
-    Map<dynamic, dynamic>? scrollOptions,
-  ]) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #scrollBy,
-          [
-            options_OR_x,
-            y,
-            scrollOptions,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void scrollTo([
-    dynamic options_OR_x,
-    dynamic y,
-    Map<dynamic, dynamic>? scrollOptions,
-  ]) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #scrollTo,
-          [
-            options_OR_x,
-            y,
-            scrollOptions,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void stop() => super.noSuchMethod(
-        Invocation.method(
-          #stop,
-          [],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  _i3.Future<_i2.Entry> resolveLocalFileSystemUrl(String? url) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #resolveLocalFileSystemUrl,
-          [url],
-        ),
-        returnValue: _i3.Future<_i2.Entry>.value(_FakeEntry_12(
-          this,
-          Invocation.method(
-            #resolveLocalFileSystemUrl,
-            [url],
-          ),
-        )),
-      ) as _i3.Future<_i2.Entry>);
-
-  @override
-  String atob(String? atob) => (super.noSuchMethod(
-        Invocation.method(
-          #atob,
-          [atob],
-        ),
-        returnValue: '',
-      ) as String);
-
-  @override
-  String btoa(String? btoa) => (super.noSuchMethod(
-        Invocation.method(
-          #btoa,
-          [btoa],
-        ),
-        returnValue: '',
-      ) as String);
-
-  @override
-  void moveTo(_i4.Point<num>? p) => super.noSuchMethod(
-        Invocation.method(
-          #moveTo,
-          [p],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void addEventListener(
-    String? type,
-    _i2.EventListener? listener, [
-    bool? useCapture,
-  ]) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #addEventListener,
-          [
-            type,
-            listener,
-            useCapture,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  void removeEventListener(
-    String? type,
-    _i2.EventListener? listener, [
-    bool? useCapture,
-  ]) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #removeEventListener,
-          [
-            type,
-            listener,
-            useCapture,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  bool dispatchEvent(_i2.Event? event) => (super.noSuchMethod(
-        Invocation.method(
-          #dispatchEvent,
-          [event],
-        ),
-        returnValue: false,
-      ) as bool);
-}
-
-/// A class which mocks [Navigator].
-///
-/// See the documentation for Mockito's code generation for more information.
-class MockNavigator extends _i1.Mock implements _i2.Navigator {
-  MockNavigator() {
-    _i1.throwOnMissingStub(this);
-  }
-
-  @override
-  String get language => (super.noSuchMethod(
-        Invocation.getter(#language),
-        returnValue: '',
-      ) as String);
-
-  @override
-  _i2.Geolocation get geolocation => (super.noSuchMethod(
-        Invocation.getter(#geolocation),
-        returnValue: _FakeGeolocation_13(
-          this,
-          Invocation.getter(#geolocation),
-        ),
-      ) as _i2.Geolocation);
-
-  @override
-  String get vendor => (super.noSuchMethod(
-        Invocation.getter(#vendor),
-        returnValue: '',
-      ) as String);
-
-  @override
-  String get vendorSub => (super.noSuchMethod(
-        Invocation.getter(#vendorSub),
-        returnValue: '',
-      ) as String);
-
-  @override
-  String get appCodeName => (super.noSuchMethod(
-        Invocation.getter(#appCodeName),
-        returnValue: '',
-      ) as String);
-
-  @override
-  String get appName => (super.noSuchMethod(
-        Invocation.getter(#appName),
-        returnValue: '',
-      ) as String);
-
-  @override
-  String get appVersion => (super.noSuchMethod(
-        Invocation.getter(#appVersion),
-        returnValue: '',
-      ) as String);
-
-  @override
-  String get product => (super.noSuchMethod(
-        Invocation.getter(#product),
-        returnValue: '',
-      ) as String);
-
-  @override
-  String get userAgent => (super.noSuchMethod(
-        Invocation.getter(#userAgent),
-        returnValue: '',
-      ) as String);
-
-  @override
-  List<_i2.Gamepad?> getGamepads() => (super.noSuchMethod(
-        Invocation.method(
-          #getGamepads,
-          [],
-        ),
-        returnValue: <_i2.Gamepad?>[],
-      ) as List<_i2.Gamepad?>);
-
-  @override
-  _i3.Future<_i2.MediaStream> getUserMedia({
-    dynamic audio = false,
-    dynamic video = false,
-  }) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #getUserMedia,
-          [],
-          {
-            #audio: audio,
-            #video: video,
-          },
-        ),
-        returnValue: _i3.Future<_i2.MediaStream>.value(_FakeMediaStream_14(
-          this,
-          Invocation.method(
-            #getUserMedia,
-            [],
-            {
-              #audio: audio,
-              #video: video,
-            },
-          ),
-        )),
-      ) as _i3.Future<_i2.MediaStream>);
-
-  @override
-  void cancelKeyboardLock() => super.noSuchMethod(
-        Invocation.method(
-          #cancelKeyboardLock,
-          [],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  _i3.Future<dynamic> getBattery() => (super.noSuchMethod(
-        Invocation.method(
-          #getBattery,
-          [],
-        ),
-        returnValue: _i3.Future<dynamic>.value(),
-      ) as _i3.Future<dynamic>);
-
-  @override
-  _i3.Future<_i2.RelatedApplication> getInstalledRelatedApps() =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #getInstalledRelatedApps,
-          [],
-        ),
-        returnValue:
-            _i3.Future<_i2.RelatedApplication>.value(_FakeRelatedApplication_15(
-          this,
-          Invocation.method(
-            #getInstalledRelatedApps,
-            [],
-          ),
-        )),
-      ) as _i3.Future<_i2.RelatedApplication>);
-
-  @override
-  _i3.Future<dynamic> getVRDisplays() => (super.noSuchMethod(
-        Invocation.method(
-          #getVRDisplays,
-          [],
-        ),
-        returnValue: _i3.Future<dynamic>.value(),
-      ) as _i3.Future<dynamic>);
-
-  @override
-  void registerProtocolHandler(
-    String? scheme,
-    String? url,
-    String? title,
-  ) =>
-      super.noSuchMethod(
-        Invocation.method(
-          #registerProtocolHandler,
-          [
-            scheme,
-            url,
-            title,
-          ],
-        ),
-        returnValueForMissingStub: null,
-      );
-
-  @override
-  _i3.Future<dynamic> requestKeyboardLock([List<String>? keyCodes]) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #requestKeyboardLock,
-          [keyCodes],
-        ),
-        returnValue: _i3.Future<dynamic>.value(),
-      ) as _i3.Future<dynamic>);
-
-  @override
-  _i3.Future<dynamic> requestMidiAccess([Map<dynamic, dynamic>? options]) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #requestMidiAccess,
-          [options],
-        ),
-        returnValue: _i3.Future<dynamic>.value(),
-      ) as _i3.Future<dynamic>);
-
-  @override
-  _i3.Future<dynamic> requestMediaKeySystemAccess(
-    String? keySystem,
-    List<Map<dynamic, dynamic>>? supportedConfigurations,
-  ) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #requestMediaKeySystemAccess,
-          [
-            keySystem,
-            supportedConfigurations,
-          ],
-        ),
-        returnValue: _i3.Future<dynamic>.value(),
-      ) as _i3.Future<dynamic>);
-
-  @override
-  bool sendBeacon(
-    String? url,
-    Object? data,
-  ) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #sendBeacon,
-          [
-            url,
-            data,
-          ],
-        ),
-        returnValue: false,
-      ) as bool);
-
-  @override
-  _i3.Future<dynamic> share([Map<dynamic, dynamic>? data]) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #share,
-          [data],
-        ),
-        returnValue: _i3.Future<dynamic>.value(),
-      ) as _i3.Future<dynamic>);
-}
diff --git a/packages/url_launcher/url_launcher_web/example/pubspec.yaml b/packages/url_launcher/url_launcher_web/example/pubspec.yaml
index d096423..eacab08 100644
--- a/packages/url_launcher/url_launcher_web/example/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_web/example/pubspec.yaml
@@ -2,20 +2,20 @@
 publish_to: none
 
 environment:
-  sdk: ">=3.1.0 <4.0.0"
-  flutter: ">=3.13.0"
+  sdk: ^3.2.0
+  flutter: ">=3.16.0"
 
 dependencies:
   flutter:
     sdk: flutter
 
 dev_dependencies:
-  build_runner: ^2.1.1
   flutter_test:
     sdk: flutter
   integration_test:
     sdk: flutter
-  mockito: 5.4.1
+  mockito: 5.4.3
   url_launcher_platform_interface: ^2.2.0
   url_launcher_web:
     path: ../
+  web: '>=0.3.0 <0.5.0'
diff --git a/packages/url_launcher/url_launcher_web/lib/src/link.dart b/packages/url_launcher/url_launcher_web/lib/src/link.dart
index b1589ba..b2217fa 100644
--- a/packages/url_launcher/url_launcher_web/lib/src/link.dart
+++ b/packages/url_launcher/url_launcher_web/lib/src/link.dart
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:html' as html;
 import 'dart:js_util';
 import 'dart:ui_web' as ui_web;
 
@@ -13,6 +12,7 @@
 import 'package:flutter/rendering.dart';
 import 'package:flutter/services.dart';
 import 'package:url_launcher_platform_interface/link.dart';
+import 'package:web/helpers.dart' as html;
 
 /// The unique identifier for the view type to be used for link platform views.
 const String linkViewType = '__url_launcher::link';
@@ -104,7 +104,11 @@
     if (_instances.isEmpty) {
       // This is the first controller being created, attach the global click
       // listener.
-      _clickSubscription = html.window.onClick.listen(_onGlobalClick);
+
+      _clickSubscription =
+          const html.EventStreamProvider<html.MouseEvent>('click')
+              .forTarget(html.window)
+              .listen(_onGlobalClick);
     }
     _instances[viewId] = this;
   }
@@ -164,10 +168,10 @@
   @override
   final int viewId;
 
-  late html.Element _element;
+  late html.HTMLElement _element;
 
   Future<void> _initialize() async {
-    _element = html.Element.tag('a');
+    _element = html.document.createElement('a') as html.HTMLElement;
     setProperty(_element, linkViewIdProperty, viewId);
     _element.style
       ..opacity = '0'
diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart
index 0dd1012..070852d 100644
--- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart
+++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart
@@ -3,13 +3,13 @@
 // found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:html' as html;
 import 'dart:ui_web' as ui_web;
 
 import 'package:flutter/foundation.dart' show kDebugMode, visibleForTesting;
 import 'package:flutter_web_plugins/flutter_web_plugins.dart' show Registrar;
 import 'package:url_launcher_platform_interface/link.dart';
 import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart';
+import 'package:web/web.dart' as html;
 
 import 'src/link.dart';
 
@@ -68,7 +68,7 @@
   ///
   /// Returns the newly created window.
   @visibleForTesting
-  html.WindowBase? openNewWindow(String url, {String? webOnlyWindowName}) {
+  html.Window? openNewWindow(String url, {String? webOnlyWindowName}) {
     final String? scheme = _getUrlScheme(url);
     // Actively disallow opening some schemes, like javascript.
     // See https://github.com/flutter/flutter/issues/136657
diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml
index b70a094..0c3b8ea 100644
--- a/packages/url_launcher/url_launcher_web/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_web/pubspec.yaml
@@ -2,11 +2,11 @@
 description: Web platform implementation of url_launcher
 repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_web
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 2.2.0
+version: 2.2.1
 
 environment:
-  sdk: ">=3.1.0 <4.0.0"
-  flutter: ">=3.13.0"
+  sdk: ^3.2.0
+  flutter: ">=3.16.0"
 
 flutter:
   plugin:
@@ -22,6 +22,7 @@
   flutter_web_plugins:
     sdk: flutter
   url_launcher_platform_interface: ^2.2.0
+  web: '>=0.3.0 <0.5.0'
 
 dev_dependencies:
   flutter_test: