[webview_flutter_android] Adds support for selecting Hybrid Composition (#6864)

* add displayWithHybridComposition flag

* move duplicate method

* unit tests

* adds

* update docs

* create platformviewsserviceproxy

* use proxy for platformviewsservice

* remove usused code

* update display mode

* use clever imports
diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index a7a820d..fe285b8 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 3.1.0
+
+* Adds support for selecting Hybrid Composition on versions 23+. Please use
+  `AndroidWebViewControllerCreationParams.displayWithHybridComposition`.
+
 ## 3.0.0
 
 * **BREAKING CHANGE** Updates platform implementation to `2.0.0` release of
diff --git a/packages/webview_flutter/webview_flutter_android/README.md b/packages/webview_flutter/webview_flutter_android/README.md
index bdd9edf..1a54808 100644
--- a/packages/webview_flutter/webview_flutter_android/README.md
+++ b/packages/webview_flutter/webview_flutter_android/README.md
@@ -7,6 +7,31 @@
 This package is [endorsed][2], which means you can simply use `webview_flutter`
 normally. This package will be automatically included in your app when you do.
 
+## Display Mode
+
+This plugin supports two different platform view display modes. The default display mode is subject
+to change in the future, and will not be considered a breaking change, so if you want to ensure a
+specific mode, you can set it explicitly.
+
+### Texture Layer Hybrid Composition
+
+This is the current default mode for versions >=23. This is a new display mode used by most
+plugins starting with Flutter 3.0. This is more performant than Hybrid Composition, but has some
+limitations from using an Android [SurfaceTexture](https://developer.android.com/reference/android/graphics/SurfaceTexture).
+See:
+* https://github.com/flutter/flutter/issues/104889
+* https://github.com/flutter/flutter/issues/116954
+
+### Hybrid Composition
+
+This is the current default mode for versions <23. It ensures that the WebView will display and work
+as expected, at the cost of some performance. See:
+* https://flutter.dev/docs/development/platform-integration/platform-views#performance
+
+This can be configured for versions >=23 with
+`AndroidWebViewWidgetCreationParams.displayWithHybridComposition`. See https://pub.dev/packages/webview_flutter#platform-specific-features
+for more details on setting platform-specific features in the main plugin.
+
 ## Contributing
 
 This package uses [pigeon][3] to generate the communication layer between Flutter and the host
diff --git a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
index 6326f10..dcd1dea 100644
--- a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart
@@ -13,7 +13,6 @@
 // ignore: unnecessary_import
 import 'dart:typed_data';
 
-import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart
index 2cb01d4..2e32705 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_controller.dart
@@ -16,6 +16,7 @@
 import 'android_webview.dart' as android_webview;
 import 'android_webview.dart';
 import 'instance_manager.dart';
+import 'platform_views_service_proxy.dart';
 import 'weak_reference_utils.dart';
 
 /// Object specifying creation parameters for creating a [AndroidWebViewController].
@@ -369,20 +370,28 @@
     required super.controller,
     super.layoutDirection,
     super.gestureRecognizers,
+    this.displayWithHybridComposition = false,
     @visibleForTesting InstanceManager? instanceManager,
+    @visibleForTesting
+        this.platformViewsServiceProxy = const PlatformViewsServiceProxy(),
   }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager;
 
   /// Constructs a [WebKitWebViewWidgetCreationParams] using a
   /// [PlatformWebViewWidgetCreationParams].
   AndroidWebViewWidgetCreationParams.fromPlatformWebViewWidgetCreationParams(
     PlatformWebViewWidgetCreationParams params, {
-    InstanceManager? instanceManager,
+    bool displayWithHybridComposition = false,
+    @visibleForTesting InstanceManager? instanceManager,
+    @visibleForTesting PlatformViewsServiceProxy platformViewsServiceProxy =
+        const PlatformViewsServiceProxy(),
   }) : this(
           key: params.key,
           controller: params.controller,
           layoutDirection: params.layoutDirection,
           gestureRecognizers: params.gestureRecognizers,
+          displayWithHybridComposition: displayWithHybridComposition,
           instanceManager: instanceManager,
+          platformViewsServiceProxy: platformViewsServiceProxy,
         );
 
   /// Maintains instances used to communicate with the native objects they
@@ -392,6 +401,25 @@
   /// outside of tests.
   @visibleForTesting
   final InstanceManager instanceManager;
+
+  /// Proxy that provides access to the platform views service.
+  ///
+  /// This service allows creating and controlling platform-specific views.
+  @visibleForTesting
+  final PlatformViewsServiceProxy platformViewsServiceProxy;
+
+  /// Whether the [WebView] will be displayed using the Hybrid Composition
+  /// PlatformView implementation.
+  ///
+  /// For most use cases, this flag should be set to false. Hybrid Composition
+  /// can have performance costs but doesn't have the limitation of rendering to
+  /// an Android SurfaceTexture. See
+  /// * https://flutter.dev/docs/development/platform-integration/platform-views#performance
+  /// * https://github.com/flutter/flutter/issues/104889
+  /// * https://github.com/flutter/flutter/issues/116954
+  ///
+  /// Defaults to false.
+  final bool displayWithHybridComposition;
 }
 
 /// An implementation of [PlatformWebViewWidget] with the Android WebView API.
@@ -411,30 +439,52 @@
   @override
   Widget build(BuildContext context) {
     return PlatformViewLink(
-        key: _androidParams.key,
+      key: _androidParams.key,
+      viewType: 'plugins.flutter.io/webview',
+      surfaceFactory: (
+        BuildContext context,
+        PlatformViewController controller,
+      ) {
+        return AndroidViewSurface(
+          controller: controller as AndroidViewController,
+          gestureRecognizers: _androidParams.gestureRecognizers,
+          hitTestBehavior: PlatformViewHitTestBehavior.opaque,
+        );
+      },
+      onCreatePlatformView: (PlatformViewCreationParams params) {
+        return _initAndroidView(
+          params,
+          displayWithHybridComposition:
+              _androidParams.displayWithHybridComposition,
+        )
+          ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
+          ..create();
+      },
+    );
+  }
+
+  AndroidViewController _initAndroidView(
+    PlatformViewCreationParams params, {
+    required bool displayWithHybridComposition,
+  }) {
+    if (displayWithHybridComposition) {
+      return _androidParams.platformViewsServiceProxy.initExpensiveAndroidView(
+        id: params.id,
         viewType: 'plugins.flutter.io/webview',
-        surfaceFactory: (
-          BuildContext context,
-          PlatformViewController controller,
-        ) {
-          return AndroidViewSurface(
-            controller: controller as AndroidViewController,
-            gestureRecognizers: _androidParams.gestureRecognizers,
-            hitTestBehavior: PlatformViewHitTestBehavior.opaque,
-          );
-        },
-        onCreatePlatformView: (PlatformViewCreationParams params) {
-          return PlatformViewsService.initSurfaceAndroidView(
-            id: params.id,
-            viewType: 'plugins.flutter.io/webview',
-            layoutDirection: _androidParams.layoutDirection,
-            creationParams: _androidParams.instanceManager.getIdentifier(
-                (_androidParams.controller as AndroidWebViewController)
-                    ._webView),
-            creationParamsCodec: const StandardMessageCodec(),
-          )
-            ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
-            ..create();
-        });
+        layoutDirection: _androidParams.layoutDirection,
+        creationParams: _androidParams.instanceManager.getIdentifier(
+            (_androidParams.controller as AndroidWebViewController)._webView),
+        creationParamsCodec: const StandardMessageCodec(),
+      );
+    } else {
+      return _androidParams.platformViewsServiceProxy.initSurfaceAndroidView(
+        id: params.id,
+        viewType: 'plugins.flutter.io/webview',
+        layoutDirection: _androidParams.layoutDirection,
+        creationParams: _androidParams.instanceManager.getIdentifier(
+            (_androidParams.controller as AndroidWebViewController)._webView),
+        creationParamsCodec: const StandardMessageCodec(),
+      );
+    }
   }
 }
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/platform_views_service_proxy.dart b/packages/webview_flutter/webview_flutter_android/lib/src/platform_views_service_proxy.dart
new file mode 100644
index 0000000..7011f33
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/platform_views_service_proxy.dart
@@ -0,0 +1,53 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+
+/// Proxy that provides access to the platform views service.
+///
+/// This service allows creating and controlling platform-specific views.
+@immutable
+class PlatformViewsServiceProxy {
+  /// Constructs a [PlatformViewsServiceProxy].
+  const PlatformViewsServiceProxy();
+
+  /// Proxy method for [PlatformViewsService.initExpensiveAndroidView].
+  ExpensiveAndroidViewController initExpensiveAndroidView({
+    required int id,
+    required String viewType,
+    required TextDirection layoutDirection,
+    dynamic creationParams,
+    MessageCodec<dynamic>? creationParamsCodec,
+    VoidCallback? onFocus,
+  }) {
+    return PlatformViewsService.initExpensiveAndroidView(
+      id: id,
+      viewType: viewType,
+      layoutDirection: layoutDirection,
+      creationParams: creationParams,
+      creationParamsCodec: creationParamsCodec,
+      onFocus: onFocus,
+    );
+  }
+
+  /// Proxy method for [PlatformViewsService.initSurfaceAndroidView].
+  SurfaceAndroidViewController initSurfaceAndroidView({
+    required int id,
+    required String viewType,
+    required TextDirection layoutDirection,
+    dynamic creationParams,
+    MessageCodec<dynamic>? creationParamsCodec,
+    VoidCallback? onFocus,
+  }) {
+    return PlatformViewsService.initSurfaceAndroidView(
+      id: id,
+      viewType: viewType,
+      layoutDirection: layoutDirection,
+      creationParams: creationParams,
+      creationParamsCodec: creationParamsCodec,
+      onFocus: onFocus,
+    );
+  }
+}
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index 4b22a1f..cf6939a 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin that provides a WebView widget on Android.
 repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutter/webview_flutter_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 3.0.0
+version: 3.1.0
 
 environment:
   sdk: ">=2.17.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart
index 4b74f3a..0e7842a 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.dart
@@ -2,7 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'package:flutter/foundation.dart';
+// TODO(a14n): remove this import once Flutter 3.1 or later reaches stable (including flutter/flutter#104231)
+// ignore: unnecessary_import
+import 'dart:typed_data';
+
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
@@ -12,6 +15,7 @@
 import 'package:webview_flutter_android/src/android_webview.dart'
     as android_webview;
 import 'package:webview_flutter_android/src/instance_manager.dart';
+import 'package:webview_flutter_android/src/platform_views_service_proxy.dart';
 import 'package:webview_flutter_android/webview_flutter_android.dart';
 import 'package:webview_flutter_platform_interface/src/webview_platform.dart';
 
@@ -22,8 +26,11 @@
   MockSpec<AndroidWebViewController>(),
   MockSpec<AndroidWebViewProxy>(),
   MockSpec<AndroidWebViewWidgetCreationParams>(),
+  MockSpec<ExpensiveAndroidViewController>(),
   MockSpec<android_webview.FlutterAssetManager>(),
   MockSpec<android_webview.JavaScriptChannel>(),
+  MockSpec<PlatformViewsServiceProxy>(),
+  MockSpec<SurfaceAndroidViewController>(),
   MockSpec<android_webview.WebChromeClient>(),
   MockSpec<android_webview.WebSettings>(),
   MockSpec<android_webview.WebView>(),
@@ -770,22 +777,16 @@
   });
 
   group('AndroidWebViewWidget', () {
-    testWidgets('Builds AndroidView using supplied parameters',
+    testWidgets('Builds Android view using supplied parameters',
         (WidgetTester tester) async {
-      final MockAndroidWebViewWidgetCreationParams mockParams =
-          MockAndroidWebViewWidgetCreationParams();
-      final MockInstanceManager mockInstanceManager = MockInstanceManager();
-      final MockWebView mockWebView = MockWebView();
-      final AndroidWebViewController controller =
-          createControllerWithMocks(mockWebView: mockWebView);
+      final AndroidWebViewController controller = createControllerWithMocks();
 
-      when(mockParams.key).thenReturn(const Key('test_web_view'));
-      when(mockParams.instanceManager).thenReturn(mockInstanceManager);
-      when(mockParams.controller).thenReturn(controller);
-      when(mockInstanceManager.getIdentifier(mockWebView)).thenReturn(42);
-
-      final AndroidWebViewWidget webViewWidget =
-          AndroidWebViewWidget(mockParams);
+      final AndroidWebViewWidget webViewWidget = AndroidWebViewWidget(
+        AndroidWebViewWidgetCreationParams(
+          key: const Key('test_web_view'),
+          controller: controller,
+        ),
+      );
 
       await tester.pumpWidget(Builder(
         builder: (BuildContext context) => webViewWidget.build(context),
@@ -794,5 +795,92 @@
       expect(find.byType(PlatformViewLink), findsOneWidget);
       expect(find.byKey(const Key('test_web_view')), findsOneWidget);
     });
+
+    testWidgets('displayWithHybridComposition is false',
+        (WidgetTester tester) async {
+      final AndroidWebViewController controller = createControllerWithMocks();
+
+      final MockPlatformViewsServiceProxy mockPlatformViewsService =
+          MockPlatformViewsServiceProxy();
+
+      when(
+        mockPlatformViewsService.initSurfaceAndroidView(
+          id: anyNamed('id'),
+          viewType: anyNamed('viewType'),
+          layoutDirection: anyNamed('layoutDirection'),
+          creationParams: anyNamed('creationParams'),
+          creationParamsCodec: anyNamed('creationParamsCodec'),
+          onFocus: anyNamed('onFocus'),
+        ),
+      ).thenReturn(MockSurfaceAndroidViewController());
+
+      final AndroidWebViewWidget webViewWidget = AndroidWebViewWidget(
+        AndroidWebViewWidgetCreationParams(
+          key: const Key('test_web_view'),
+          controller: controller,
+          platformViewsServiceProxy: mockPlatformViewsService,
+        ),
+      );
+
+      await tester.pumpWidget(Builder(
+        builder: (BuildContext context) => webViewWidget.build(context),
+      ));
+      await tester.pumpAndSettle();
+
+      verify(
+        mockPlatformViewsService.initSurfaceAndroidView(
+          id: anyNamed('id'),
+          viewType: anyNamed('viewType'),
+          layoutDirection: anyNamed('layoutDirection'),
+          creationParams: anyNamed('creationParams'),
+          creationParamsCodec: anyNamed('creationParamsCodec'),
+          onFocus: anyNamed('onFocus'),
+        ),
+      );
+    });
+
+    testWidgets('displayWithHybridComposition is true',
+        (WidgetTester tester) async {
+      final AndroidWebViewController controller = createControllerWithMocks();
+
+      final MockPlatformViewsServiceProxy mockPlatformViewsService =
+          MockPlatformViewsServiceProxy();
+
+      when(
+        mockPlatformViewsService.initExpensiveAndroidView(
+          id: anyNamed('id'),
+          viewType: anyNamed('viewType'),
+          layoutDirection: anyNamed('layoutDirection'),
+          creationParams: anyNamed('creationParams'),
+          creationParamsCodec: anyNamed('creationParamsCodec'),
+          onFocus: anyNamed('onFocus'),
+        ),
+      ).thenReturn(MockExpensiveAndroidViewController());
+
+      final AndroidWebViewWidget webViewWidget = AndroidWebViewWidget(
+        AndroidWebViewWidgetCreationParams(
+          key: const Key('test_web_view'),
+          controller: controller,
+          platformViewsServiceProxy: mockPlatformViewsService,
+          displayWithHybridComposition: true,
+        ),
+      );
+
+      await tester.pumpWidget(Builder(
+        builder: (BuildContext context) => webViewWidget.build(context),
+      ));
+      await tester.pumpAndSettle();
+
+      verify(
+        mockPlatformViewsService.initExpensiveAndroidView(
+          id: anyNamed('id'),
+          viewType: anyNamed('viewType'),
+          layoutDirection: anyNamed('layoutDirection'),
+          creationParams: anyNamed('creationParams'),
+          creationParamsCodec: anyNamed('creationParamsCodec'),
+          onFocus: anyNamed('onFocus'),
+        ),
+      );
+    });
   });
 }
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart
index d6147a5..643f5ac 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_controller_test.mocks.dart
@@ -3,20 +3,24 @@
 // Do not manually edit this file.
 
 // ignore_for_file: no_leading_underscores_for_library_prefixes
-import 'dart:async' as _i7;
-import 'dart:typed_data' as _i12;
+import 'dart:async' as _i9;
+import 'dart:typed_data' as _i15;
 import 'dart:ui' as _i4;
 
-import 'package:flutter/foundation.dart' as _i10;
-import 'package:flutter/gestures.dart' as _i11;
+import 'package:flutter/foundation.dart' as _i12;
+import 'package:flutter/gestures.dart' as _i13;
+import 'package:flutter/material.dart' as _i14;
+import 'package:flutter/services.dart' as _i7;
 import 'package:mockito/mockito.dart' as _i1;
 import 'package:webview_flutter_android/src/android_navigation_delegate.dart'
-    as _i6;
-import 'package:webview_flutter_android/src/android_proxy.dart' as _i9;
+    as _i8;
+import 'package:webview_flutter_android/src/android_proxy.dart' as _i11;
 import 'package:webview_flutter_android/src/android_webview.dart' as _i2;
 import 'package:webview_flutter_android/src/android_webview_controller.dart'
-    as _i8;
+    as _i10;
 import 'package:webview_flutter_android/src/instance_manager.dart' as _i5;
+import 'package:webview_flutter_android/src/platform_views_service_proxy.dart'
+    as _i6;
 import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'
     as _i3;
 
@@ -148,9 +152,20 @@
         );
 }
 
-class _FakePlatformWebViewController_11 extends _i1.SmartFake
+class _FakePlatformViewsServiceProxy_11 extends _i1.SmartFake
+    implements _i6.PlatformViewsServiceProxy {
+  _FakePlatformViewsServiceProxy_11(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePlatformWebViewController_12 extends _i1.SmartFake
     implements _i3.PlatformWebViewController {
-  _FakePlatformWebViewController_11(
+  _FakePlatformWebViewController_12(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -159,8 +174,8 @@
         );
 }
 
-class _FakeWebSettings_12 extends _i1.SmartFake implements _i2.WebSettings {
-  _FakeWebSettings_12(
+class _FakeSize_13 extends _i1.SmartFake implements _i4.Size {
+  _FakeSize_13(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -169,8 +184,40 @@
         );
 }
 
-class _FakeWebStorage_13 extends _i1.SmartFake implements _i2.WebStorage {
-  _FakeWebStorage_13(
+class _FakeExpensiveAndroidViewController_14 extends _i1.SmartFake
+    implements _i7.ExpensiveAndroidViewController {
+  _FakeExpensiveAndroidViewController_14(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeSurfaceAndroidViewController_15 extends _i1.SmartFake
+    implements _i7.SurfaceAndroidViewController {
+  _FakeSurfaceAndroidViewController_15(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeWebSettings_16 extends _i1.SmartFake implements _i2.WebSettings {
+  _FakeWebSettings_16(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakeWebStorage_17 extends _i1.SmartFake implements _i2.WebStorage {
+  _FakeWebStorage_17(
     Object parent,
     Invocation parentInvocation,
   ) : super(
@@ -183,7 +230,7 @@
 ///
 /// See the documentation for Mockito's code generation for more information.
 class MockAndroidNavigationDelegate extends _i1.Mock
-    implements _i6.AndroidNavigationDelegate {
+    implements _i8.AndroidNavigationDelegate {
   @override
   _i2.WebChromeClient get androidWebChromeClient => (super.noSuchMethod(
         Invocation.getter(#androidWebChromeClient),
@@ -235,74 +282,74 @@
         ),
       ) as _i3.PlatformNavigationDelegateCreationParams);
   @override
-  _i7.Future<void> setOnLoadRequest(_i6.LoadRequestCallback? onLoadRequest) =>
+  _i9.Future<void> setOnLoadRequest(_i8.LoadRequestCallback? onLoadRequest) =>
       (super.noSuchMethod(
         Invocation.method(
           #setOnLoadRequest,
           [onLoadRequest],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setOnNavigationRequest(
+  _i9.Future<void> setOnNavigationRequest(
           _i3.NavigationRequestCallback? onNavigationRequest) =>
       (super.noSuchMethod(
         Invocation.method(
           #setOnNavigationRequest,
           [onNavigationRequest],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setOnPageStarted(_i3.PageEventCallback? onPageStarted) =>
+  _i9.Future<void> setOnPageStarted(_i3.PageEventCallback? onPageStarted) =>
       (super.noSuchMethod(
         Invocation.method(
           #setOnPageStarted,
           [onPageStarted],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setOnPageFinished(_i3.PageEventCallback? onPageFinished) =>
+  _i9.Future<void> setOnPageFinished(_i3.PageEventCallback? onPageFinished) =>
       (super.noSuchMethod(
         Invocation.method(
           #setOnPageFinished,
           [onPageFinished],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setOnProgress(_i3.ProgressCallback? onProgress) =>
+  _i9.Future<void> setOnProgress(_i3.ProgressCallback? onProgress) =>
       (super.noSuchMethod(
         Invocation.method(
           #setOnProgress,
           [onProgress],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setOnWebResourceError(
+  _i9.Future<void> setOnWebResourceError(
           _i3.WebResourceErrorCallback? onWebResourceError) =>
       (super.noSuchMethod(
         Invocation.method(
           #setOnWebResourceError,
           [onWebResourceError],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
 }
 
 /// A class which mocks [AndroidWebViewController].
 ///
 /// See the documentation for Mockito's code generation for more information.
 class MockAndroidWebViewController extends _i1.Mock
-    implements _i8.AndroidWebViewController {
+    implements _i10.AndroidWebViewController {
   @override
   _i3.PlatformWebViewControllerCreationParams get params => (super.noSuchMethod(
         Invocation.getter(#params),
@@ -317,25 +364,25 @@
         ),
       ) as _i3.PlatformWebViewControllerCreationParams);
   @override
-  _i7.Future<void> loadFile(String? absoluteFilePath) => (super.noSuchMethod(
+  _i9.Future<void> loadFile(String? absoluteFilePath) => (super.noSuchMethod(
         Invocation.method(
           #loadFile,
           [absoluteFilePath],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> loadFlutterAsset(String? key) => (super.noSuchMethod(
+  _i9.Future<void> loadFlutterAsset(String? key) => (super.noSuchMethod(
         Invocation.method(
           #loadFlutterAsset,
           [key],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> loadHtmlString(
+  _i9.Future<void> loadHtmlString(
     String? html, {
     String? baseUrl,
   }) =>
@@ -345,165 +392,165 @@
           [html],
           {#baseUrl: baseUrl},
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> loadRequest(_i3.LoadRequestParams? params) =>
+  _i9.Future<void> loadRequest(_i3.LoadRequestParams? params) =>
       (super.noSuchMethod(
         Invocation.method(
           #loadRequest,
           [params],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<String?> currentUrl() => (super.noSuchMethod(
+  _i9.Future<String?> currentUrl() => (super.noSuchMethod(
         Invocation.method(
           #currentUrl,
           [],
         ),
-        returnValue: _i7.Future<String?>.value(),
-        returnValueForMissingStub: _i7.Future<String?>.value(),
-      ) as _i7.Future<String?>);
+        returnValue: _i9.Future<String?>.value(),
+        returnValueForMissingStub: _i9.Future<String?>.value(),
+      ) as _i9.Future<String?>);
   @override
-  _i7.Future<bool> canGoBack() => (super.noSuchMethod(
+  _i9.Future<bool> canGoBack() => (super.noSuchMethod(
         Invocation.method(
           #canGoBack,
           [],
         ),
-        returnValue: _i7.Future<bool>.value(false),
-        returnValueForMissingStub: _i7.Future<bool>.value(false),
-      ) as _i7.Future<bool>);
+        returnValue: _i9.Future<bool>.value(false),
+        returnValueForMissingStub: _i9.Future<bool>.value(false),
+      ) as _i9.Future<bool>);
   @override
-  _i7.Future<bool> canGoForward() => (super.noSuchMethod(
+  _i9.Future<bool> canGoForward() => (super.noSuchMethod(
         Invocation.method(
           #canGoForward,
           [],
         ),
-        returnValue: _i7.Future<bool>.value(false),
-        returnValueForMissingStub: _i7.Future<bool>.value(false),
-      ) as _i7.Future<bool>);
+        returnValue: _i9.Future<bool>.value(false),
+        returnValueForMissingStub: _i9.Future<bool>.value(false),
+      ) as _i9.Future<bool>);
   @override
-  _i7.Future<void> goBack() => (super.noSuchMethod(
+  _i9.Future<void> goBack() => (super.noSuchMethod(
         Invocation.method(
           #goBack,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> goForward() => (super.noSuchMethod(
+  _i9.Future<void> goForward() => (super.noSuchMethod(
         Invocation.method(
           #goForward,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> reload() => (super.noSuchMethod(
+  _i9.Future<void> reload() => (super.noSuchMethod(
         Invocation.method(
           #reload,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> clearCache() => (super.noSuchMethod(
+  _i9.Future<void> clearCache() => (super.noSuchMethod(
         Invocation.method(
           #clearCache,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> clearLocalStorage() => (super.noSuchMethod(
+  _i9.Future<void> clearLocalStorage() => (super.noSuchMethod(
         Invocation.method(
           #clearLocalStorage,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setPlatformNavigationDelegate(
+  _i9.Future<void> setPlatformNavigationDelegate(
           _i3.PlatformNavigationDelegate? handler) =>
       (super.noSuchMethod(
         Invocation.method(
           #setPlatformNavigationDelegate,
           [handler],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> runJavaScript(String? javaScript) => (super.noSuchMethod(
+  _i9.Future<void> runJavaScript(String? javaScript) => (super.noSuchMethod(
         Invocation.method(
           #runJavaScript,
           [javaScript],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<Object> runJavaScriptReturningResult(String? javaScript) =>
+  _i9.Future<Object> runJavaScriptReturningResult(String? javaScript) =>
       (super.noSuchMethod(
         Invocation.method(
           #runJavaScriptReturningResult,
           [javaScript],
         ),
-        returnValue: _i7.Future<Object>.value(_FakeObject_5(
+        returnValue: _i9.Future<Object>.value(_FakeObject_5(
           this,
           Invocation.method(
             #runJavaScriptReturningResult,
             [javaScript],
           ),
         )),
-        returnValueForMissingStub: _i7.Future<Object>.value(_FakeObject_5(
+        returnValueForMissingStub: _i9.Future<Object>.value(_FakeObject_5(
           this,
           Invocation.method(
             #runJavaScriptReturningResult,
             [javaScript],
           ),
         )),
-      ) as _i7.Future<Object>);
+      ) as _i9.Future<Object>);
   @override
-  _i7.Future<void> addJavaScriptChannel(
+  _i9.Future<void> addJavaScriptChannel(
           _i3.JavaScriptChannelParams? javaScriptChannelParams) =>
       (super.noSuchMethod(
         Invocation.method(
           #addJavaScriptChannel,
           [javaScriptChannelParams],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> removeJavaScriptChannel(String? javaScriptChannelName) =>
+  _i9.Future<void> removeJavaScriptChannel(String? javaScriptChannelName) =>
       (super.noSuchMethod(
         Invocation.method(
           #removeJavaScriptChannel,
           [javaScriptChannelName],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<String?> getTitle() => (super.noSuchMethod(
+  _i9.Future<String?> getTitle() => (super.noSuchMethod(
         Invocation.method(
           #getTitle,
           [],
         ),
-        returnValue: _i7.Future<String?>.value(),
-        returnValueForMissingStub: _i7.Future<String?>.value(),
-      ) as _i7.Future<String?>);
+        returnValue: _i9.Future<String?>.value(),
+        returnValueForMissingStub: _i9.Future<String?>.value(),
+      ) as _i9.Future<String?>);
   @override
-  _i7.Future<void> scrollTo(
+  _i9.Future<void> scrollTo(
     int? x,
     int? y,
   ) =>
@@ -515,11 +562,11 @@
             y,
           ],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> scrollBy(
+  _i9.Future<void> scrollBy(
     int? x,
     int? y,
   ) =>
@@ -531,84 +578,84 @@
             y,
           ],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<_i4.Offset> getScrollPosition() => (super.noSuchMethod(
+  _i9.Future<_i4.Offset> getScrollPosition() => (super.noSuchMethod(
         Invocation.method(
           #getScrollPosition,
           [],
         ),
-        returnValue: _i7.Future<_i4.Offset>.value(_FakeOffset_6(
+        returnValue: _i9.Future<_i4.Offset>.value(_FakeOffset_6(
           this,
           Invocation.method(
             #getScrollPosition,
             [],
           ),
         )),
-        returnValueForMissingStub: _i7.Future<_i4.Offset>.value(_FakeOffset_6(
+        returnValueForMissingStub: _i9.Future<_i4.Offset>.value(_FakeOffset_6(
           this,
           Invocation.method(
             #getScrollPosition,
             [],
           ),
         )),
-      ) as _i7.Future<_i4.Offset>);
+      ) as _i9.Future<_i4.Offset>);
   @override
-  _i7.Future<void> enableZoom(bool? enabled) => (super.noSuchMethod(
+  _i9.Future<void> enableZoom(bool? enabled) => (super.noSuchMethod(
         Invocation.method(
           #enableZoom,
           [enabled],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setBackgroundColor(_i4.Color? color) => (super.noSuchMethod(
+  _i9.Future<void> setBackgroundColor(_i4.Color? color) => (super.noSuchMethod(
         Invocation.method(
           #setBackgroundColor,
           [color],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setJavaScriptMode(_i3.JavaScriptMode? javaScriptMode) =>
+  _i9.Future<void> setJavaScriptMode(_i3.JavaScriptMode? javaScriptMode) =>
       (super.noSuchMethod(
         Invocation.method(
           #setJavaScriptMode,
           [javaScriptMode],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setUserAgent(String? userAgent) => (super.noSuchMethod(
+  _i9.Future<void> setUserAgent(String? userAgent) => (super.noSuchMethod(
         Invocation.method(
           #setUserAgent,
           [userAgent],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setMediaPlaybackRequiresUserGesture(bool? require) =>
+  _i9.Future<void> setMediaPlaybackRequiresUserGesture(bool? require) =>
       (super.noSuchMethod(
         Invocation.method(
           #setMediaPlaybackRequiresUserGesture,
           [require],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
 }
 
 /// A class which mocks [AndroidWebViewProxy].
 ///
 /// See the documentation for Mockito's code generation for more information.
 class MockAndroidWebViewProxy extends _i1.Mock
-    implements _i9.AndroidWebViewProxy {
+    implements _i11.AndroidWebViewProxy {
   @override
   _i2.WebView Function({required bool useHybridComposition})
       get createAndroidWebView => (super.noSuchMethod(
@@ -895,15 +942,15 @@
           )
               onDownloadStart}));
   @override
-  _i7.Future<void> setWebContentsDebuggingEnabled(bool? enabled) =>
+  _i9.Future<void> setWebContentsDebuggingEnabled(bool? enabled) =>
       (super.noSuchMethod(
         Invocation.method(
           #setWebContentsDebuggingEnabled,
           [enabled],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
 }
 
 /// A class which mocks [AndroidWebViewWidgetCreationParams].
@@ -911,7 +958,7 @@
 /// See the documentation for Mockito's code generation for more information.
 // ignore: must_be_immutable
 class MockAndroidWebViewWidgetCreationParams extends _i1.Mock
-    implements _i8.AndroidWebViewWidgetCreationParams {
+    implements _i10.AndroidWebViewWidgetCreationParams {
   @override
   _i5.InstanceManager get instanceManager => (super.noSuchMethod(
         Invocation.getter(#instanceManager),
@@ -925,13 +972,32 @@
         ),
       ) as _i5.InstanceManager);
   @override
+  _i6.PlatformViewsServiceProxy get platformViewsServiceProxy =>
+      (super.noSuchMethod(
+        Invocation.getter(#platformViewsServiceProxy),
+        returnValue: _FakePlatformViewsServiceProxy_11(
+          this,
+          Invocation.getter(#platformViewsServiceProxy),
+        ),
+        returnValueForMissingStub: _FakePlatformViewsServiceProxy_11(
+          this,
+          Invocation.getter(#platformViewsServiceProxy),
+        ),
+      ) as _i6.PlatformViewsServiceProxy);
+  @override
+  bool get displayWithHybridComposition => (super.noSuchMethod(
+        Invocation.getter(#displayWithHybridComposition),
+        returnValue: false,
+        returnValueForMissingStub: false,
+      ) as bool);
+  @override
   _i3.PlatformWebViewController get controller => (super.noSuchMethod(
         Invocation.getter(#controller),
-        returnValue: _FakePlatformWebViewController_11(
+        returnValue: _FakePlatformWebViewController_12(
           this,
           Invocation.getter(#controller),
         ),
-        returnValueForMissingStub: _FakePlatformWebViewController_11(
+        returnValueForMissingStub: _FakePlatformWebViewController_12(
           this,
           Invocation.getter(#controller),
         ),
@@ -943,13 +1009,186 @@
         returnValueForMissingStub: _i4.TextDirection.rtl,
       ) as _i4.TextDirection);
   @override
-  Set<_i10.Factory<_i11.OneSequenceGestureRecognizer>> get gestureRecognizers =>
+  Set<_i12.Factory<_i13.OneSequenceGestureRecognizer>> get gestureRecognizers =>
       (super.noSuchMethod(
         Invocation.getter(#gestureRecognizers),
-        returnValue: <_i10.Factory<_i11.OneSequenceGestureRecognizer>>{},
+        returnValue: <_i12.Factory<_i13.OneSequenceGestureRecognizer>>{},
         returnValueForMissingStub: <
-            _i10.Factory<_i11.OneSequenceGestureRecognizer>>{},
-      ) as Set<_i10.Factory<_i11.OneSequenceGestureRecognizer>>);
+            _i12.Factory<_i13.OneSequenceGestureRecognizer>>{},
+      ) as Set<_i12.Factory<_i13.OneSequenceGestureRecognizer>>);
+}
+
+/// A class which mocks [ExpensiveAndroidViewController].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockExpensiveAndroidViewController extends _i1.Mock
+    implements _i7.ExpensiveAndroidViewController {
+  @override
+  bool get requiresViewComposition => (super.noSuchMethod(
+        Invocation.getter(#requiresViewComposition),
+        returnValue: false,
+        returnValueForMissingStub: false,
+      ) as bool);
+  @override
+  int get viewId => (super.noSuchMethod(
+        Invocation.getter(#viewId),
+        returnValue: 0,
+        returnValueForMissingStub: 0,
+      ) as int);
+  @override
+  bool get awaitingCreation => (super.noSuchMethod(
+        Invocation.getter(#awaitingCreation),
+        returnValue: false,
+        returnValueForMissingStub: false,
+      ) as bool);
+  @override
+  _i7.PointTransformer get pointTransformer => (super.noSuchMethod(
+        Invocation.getter(#pointTransformer),
+        returnValue: (_i4.Offset position) => _FakeOffset_6(
+          this,
+          Invocation.getter(#pointTransformer),
+        ),
+        returnValueForMissingStub: (_i4.Offset position) => _FakeOffset_6(
+          this,
+          Invocation.getter(#pointTransformer),
+        ),
+      ) as _i7.PointTransformer);
+  @override
+  set pointTransformer(_i7.PointTransformer? transformer) => super.noSuchMethod(
+        Invocation.setter(
+          #pointTransformer,
+          transformer,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  bool get isCreated => (super.noSuchMethod(
+        Invocation.getter(#isCreated),
+        returnValue: false,
+        returnValueForMissingStub: false,
+      ) as bool);
+  @override
+  List<_i7.PlatformViewCreatedCallback> get createdCallbacks =>
+      (super.noSuchMethod(
+        Invocation.getter(#createdCallbacks),
+        returnValue: <_i7.PlatformViewCreatedCallback>[],
+        returnValueForMissingStub: <_i7.PlatformViewCreatedCallback>[],
+      ) as List<_i7.PlatformViewCreatedCallback>);
+  @override
+  _i9.Future<void> setOffset(_i4.Offset? off) => (super.noSuchMethod(
+        Invocation.method(
+          #setOffset,
+          [off],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<void> create({
+    _i4.Size? size,
+    _i4.Offset? position,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #create,
+          [],
+          {
+            #size: size,
+            #position: position,
+          },
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<_i4.Size> setSize(_i4.Size? size) => (super.noSuchMethod(
+        Invocation.method(
+          #setSize,
+          [size],
+        ),
+        returnValue: _i9.Future<_i4.Size>.value(_FakeSize_13(
+          this,
+          Invocation.method(
+            #setSize,
+            [size],
+          ),
+        )),
+        returnValueForMissingStub: _i9.Future<_i4.Size>.value(_FakeSize_13(
+          this,
+          Invocation.method(
+            #setSize,
+            [size],
+          ),
+        )),
+      ) as _i9.Future<_i4.Size>);
+  @override
+  _i9.Future<void> sendMotionEvent(_i7.AndroidMotionEvent? event) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #sendMotionEvent,
+          [event],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  void addOnPlatformViewCreatedListener(
+          _i7.PlatformViewCreatedCallback? listener) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #addOnPlatformViewCreatedListener,
+          [listener],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void removeOnPlatformViewCreatedListener(
+          _i7.PlatformViewCreatedCallback? listener) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #removeOnPlatformViewCreatedListener,
+          [listener],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i9.Future<void> setLayoutDirection(_i4.TextDirection? layoutDirection) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #setLayoutDirection,
+          [layoutDirection],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<void> dispatchPointerEvent(_i14.PointerEvent? event) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #dispatchPointerEvent,
+          [event],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<void> clearFocus() => (super.noSuchMethod(
+        Invocation.method(
+          #clearFocus,
+          [],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<void> dispose() => (super.noSuchMethod(
+        Invocation.method(
+          #dispose,
+          [],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
 }
 
 /// A class which mocks [FlutterAssetManager].
@@ -958,24 +1197,24 @@
 class MockFlutterAssetManager extends _i1.Mock
     implements _i2.FlutterAssetManager {
   @override
-  _i7.Future<List<String?>> list(String? path) => (super.noSuchMethod(
+  _i9.Future<List<String?>> list(String? path) => (super.noSuchMethod(
         Invocation.method(
           #list,
           [path],
         ),
-        returnValue: _i7.Future<List<String?>>.value(<String?>[]),
-        returnValueForMissingStub: _i7.Future<List<String?>>.value(<String?>[]),
-      ) as _i7.Future<List<String?>>);
+        returnValue: _i9.Future<List<String?>>.value(<String?>[]),
+        returnValueForMissingStub: _i9.Future<List<String?>>.value(<String?>[]),
+      ) as _i9.Future<List<String?>>);
   @override
-  _i7.Future<String> getAssetFilePathByName(String? name) =>
+  _i9.Future<String> getAssetFilePathByName(String? name) =>
       (super.noSuchMethod(
         Invocation.method(
           #getAssetFilePathByName,
           [name],
         ),
-        returnValue: _i7.Future<String>.value(''),
-        returnValueForMissingStub: _i7.Future<String>.value(''),
-      ) as _i7.Future<String>);
+        returnValue: _i9.Future<String>.value(''),
+        returnValueForMissingStub: _i9.Future<String>.value(''),
+      ) as _i9.Future<String>);
 }
 
 /// A class which mocks [JavaScriptChannel].
@@ -1017,6 +1256,293 @@
       ) as _i2.JavaScriptChannel);
 }
 
+/// A class which mocks [PlatformViewsServiceProxy].
+///
+/// See the documentation for Mockito's code generation for more information.
+// ignore: must_be_immutable
+class MockPlatformViewsServiceProxy extends _i1.Mock
+    implements _i6.PlatformViewsServiceProxy {
+  @override
+  _i7.ExpensiveAndroidViewController initExpensiveAndroidView({
+    required int? id,
+    required String? viewType,
+    required _i4.TextDirection? layoutDirection,
+    dynamic creationParams,
+    _i7.MessageCodec<dynamic>? creationParamsCodec,
+    _i4.VoidCallback? onFocus,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #initExpensiveAndroidView,
+          [],
+          {
+            #id: id,
+            #viewType: viewType,
+            #layoutDirection: layoutDirection,
+            #creationParams: creationParams,
+            #creationParamsCodec: creationParamsCodec,
+            #onFocus: onFocus,
+          },
+        ),
+        returnValue: _FakeExpensiveAndroidViewController_14(
+          this,
+          Invocation.method(
+            #initExpensiveAndroidView,
+            [],
+            {
+              #id: id,
+              #viewType: viewType,
+              #layoutDirection: layoutDirection,
+              #creationParams: creationParams,
+              #creationParamsCodec: creationParamsCodec,
+              #onFocus: onFocus,
+            },
+          ),
+        ),
+        returnValueForMissingStub: _FakeExpensiveAndroidViewController_14(
+          this,
+          Invocation.method(
+            #initExpensiveAndroidView,
+            [],
+            {
+              #id: id,
+              #viewType: viewType,
+              #layoutDirection: layoutDirection,
+              #creationParams: creationParams,
+              #creationParamsCodec: creationParamsCodec,
+              #onFocus: onFocus,
+            },
+          ),
+        ),
+      ) as _i7.ExpensiveAndroidViewController);
+  @override
+  _i7.SurfaceAndroidViewController initSurfaceAndroidView({
+    required int? id,
+    required String? viewType,
+    required _i4.TextDirection? layoutDirection,
+    dynamic creationParams,
+    _i7.MessageCodec<dynamic>? creationParamsCodec,
+    _i4.VoidCallback? onFocus,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #initSurfaceAndroidView,
+          [],
+          {
+            #id: id,
+            #viewType: viewType,
+            #layoutDirection: layoutDirection,
+            #creationParams: creationParams,
+            #creationParamsCodec: creationParamsCodec,
+            #onFocus: onFocus,
+          },
+        ),
+        returnValue: _FakeSurfaceAndroidViewController_15(
+          this,
+          Invocation.method(
+            #initSurfaceAndroidView,
+            [],
+            {
+              #id: id,
+              #viewType: viewType,
+              #layoutDirection: layoutDirection,
+              #creationParams: creationParams,
+              #creationParamsCodec: creationParamsCodec,
+              #onFocus: onFocus,
+            },
+          ),
+        ),
+        returnValueForMissingStub: _FakeSurfaceAndroidViewController_15(
+          this,
+          Invocation.method(
+            #initSurfaceAndroidView,
+            [],
+            {
+              #id: id,
+              #viewType: viewType,
+              #layoutDirection: layoutDirection,
+              #creationParams: creationParams,
+              #creationParamsCodec: creationParamsCodec,
+              #onFocus: onFocus,
+            },
+          ),
+        ),
+      ) as _i7.SurfaceAndroidViewController);
+}
+
+/// A class which mocks [SurfaceAndroidViewController].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockSurfaceAndroidViewController extends _i1.Mock
+    implements _i7.SurfaceAndroidViewController {
+  @override
+  bool get requiresViewComposition => (super.noSuchMethod(
+        Invocation.getter(#requiresViewComposition),
+        returnValue: false,
+        returnValueForMissingStub: false,
+      ) as bool);
+  @override
+  int get viewId => (super.noSuchMethod(
+        Invocation.getter(#viewId),
+        returnValue: 0,
+        returnValueForMissingStub: 0,
+      ) as int);
+  @override
+  bool get awaitingCreation => (super.noSuchMethod(
+        Invocation.getter(#awaitingCreation),
+        returnValue: false,
+        returnValueForMissingStub: false,
+      ) as bool);
+  @override
+  _i7.PointTransformer get pointTransformer => (super.noSuchMethod(
+        Invocation.getter(#pointTransformer),
+        returnValue: (_i4.Offset position) => _FakeOffset_6(
+          this,
+          Invocation.getter(#pointTransformer),
+        ),
+        returnValueForMissingStub: (_i4.Offset position) => _FakeOffset_6(
+          this,
+          Invocation.getter(#pointTransformer),
+        ),
+      ) as _i7.PointTransformer);
+  @override
+  set pointTransformer(_i7.PointTransformer? transformer) => super.noSuchMethod(
+        Invocation.setter(
+          #pointTransformer,
+          transformer,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  bool get isCreated => (super.noSuchMethod(
+        Invocation.getter(#isCreated),
+        returnValue: false,
+        returnValueForMissingStub: false,
+      ) as bool);
+  @override
+  List<_i7.PlatformViewCreatedCallback> get createdCallbacks =>
+      (super.noSuchMethod(
+        Invocation.getter(#createdCallbacks),
+        returnValue: <_i7.PlatformViewCreatedCallback>[],
+        returnValueForMissingStub: <_i7.PlatformViewCreatedCallback>[],
+      ) as List<_i7.PlatformViewCreatedCallback>);
+  @override
+  _i9.Future<void> setOffset(_i4.Offset? off) => (super.noSuchMethod(
+        Invocation.method(
+          #setOffset,
+          [off],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<void> create({
+    _i4.Size? size,
+    _i4.Offset? position,
+  }) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #create,
+          [],
+          {
+            #size: size,
+            #position: position,
+          },
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<_i4.Size> setSize(_i4.Size? size) => (super.noSuchMethod(
+        Invocation.method(
+          #setSize,
+          [size],
+        ),
+        returnValue: _i9.Future<_i4.Size>.value(_FakeSize_13(
+          this,
+          Invocation.method(
+            #setSize,
+            [size],
+          ),
+        )),
+        returnValueForMissingStub: _i9.Future<_i4.Size>.value(_FakeSize_13(
+          this,
+          Invocation.method(
+            #setSize,
+            [size],
+          ),
+        )),
+      ) as _i9.Future<_i4.Size>);
+  @override
+  _i9.Future<void> sendMotionEvent(_i7.AndroidMotionEvent? event) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #sendMotionEvent,
+          [event],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  void addOnPlatformViewCreatedListener(
+          _i7.PlatformViewCreatedCallback? listener) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #addOnPlatformViewCreatedListener,
+          [listener],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  void removeOnPlatformViewCreatedListener(
+          _i7.PlatformViewCreatedCallback? listener) =>
+      super.noSuchMethod(
+        Invocation.method(
+          #removeOnPlatformViewCreatedListener,
+          [listener],
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i9.Future<void> setLayoutDirection(_i4.TextDirection? layoutDirection) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #setLayoutDirection,
+          [layoutDirection],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<void> dispatchPointerEvent(_i14.PointerEvent? event) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #dispatchPointerEvent,
+          [event],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<void> clearFocus() => (super.noSuchMethod(
+        Invocation.method(
+          #clearFocus,
+          [],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+  @override
+  _i9.Future<void> dispose() => (super.noSuchMethod(
+        Invocation.method(
+          #dispose,
+          [],
+        ),
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
+}
+
 /// A class which mocks [WebChromeClient].
 ///
 /// See the documentation for Mockito's code generation for more information.
@@ -1049,132 +1575,132 @@
 /// See the documentation for Mockito's code generation for more information.
 class MockWebSettings extends _i1.Mock implements _i2.WebSettings {
   @override
-  _i7.Future<void> setDomStorageEnabled(bool? flag) => (super.noSuchMethod(
+  _i9.Future<void> setDomStorageEnabled(bool? flag) => (super.noSuchMethod(
         Invocation.method(
           #setDomStorageEnabled,
           [flag],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setJavaScriptCanOpenWindowsAutomatically(bool? flag) =>
+  _i9.Future<void> setJavaScriptCanOpenWindowsAutomatically(bool? flag) =>
       (super.noSuchMethod(
         Invocation.method(
           #setJavaScriptCanOpenWindowsAutomatically,
           [flag],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setSupportMultipleWindows(bool? support) =>
+  _i9.Future<void> setSupportMultipleWindows(bool? support) =>
       (super.noSuchMethod(
         Invocation.method(
           #setSupportMultipleWindows,
           [support],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setJavaScriptEnabled(bool? flag) => (super.noSuchMethod(
+  _i9.Future<void> setJavaScriptEnabled(bool? flag) => (super.noSuchMethod(
         Invocation.method(
           #setJavaScriptEnabled,
           [flag],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setUserAgentString(String? userAgentString) =>
+  _i9.Future<void> setUserAgentString(String? userAgentString) =>
       (super.noSuchMethod(
         Invocation.method(
           #setUserAgentString,
           [userAgentString],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setMediaPlaybackRequiresUserGesture(bool? require) =>
+  _i9.Future<void> setMediaPlaybackRequiresUserGesture(bool? require) =>
       (super.noSuchMethod(
         Invocation.method(
           #setMediaPlaybackRequiresUserGesture,
           [require],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setSupportZoom(bool? support) => (super.noSuchMethod(
+  _i9.Future<void> setSupportZoom(bool? support) => (super.noSuchMethod(
         Invocation.method(
           #setSupportZoom,
           [support],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setLoadWithOverviewMode(bool? overview) =>
+  _i9.Future<void> setLoadWithOverviewMode(bool? overview) =>
       (super.noSuchMethod(
         Invocation.method(
           #setLoadWithOverviewMode,
           [overview],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setUseWideViewPort(bool? use) => (super.noSuchMethod(
+  _i9.Future<void> setUseWideViewPort(bool? use) => (super.noSuchMethod(
         Invocation.method(
           #setUseWideViewPort,
           [use],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setDisplayZoomControls(bool? enabled) => (super.noSuchMethod(
+  _i9.Future<void> setDisplayZoomControls(bool? enabled) => (super.noSuchMethod(
         Invocation.method(
           #setDisplayZoomControls,
           [enabled],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setBuiltInZoomControls(bool? enabled) => (super.noSuchMethod(
+  _i9.Future<void> setBuiltInZoomControls(bool? enabled) => (super.noSuchMethod(
         Invocation.method(
           #setBuiltInZoomControls,
           [enabled],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setAllowFileAccess(bool? enabled) => (super.noSuchMethod(
+  _i9.Future<void> setAllowFileAccess(bool? enabled) => (super.noSuchMethod(
         Invocation.method(
           #setAllowFileAccess,
           [enabled],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
   _i2.WebSettings copy() => (super.noSuchMethod(
         Invocation.method(
           #copy,
           [],
         ),
-        returnValue: _FakeWebSettings_12(
+        returnValue: _FakeWebSettings_16(
           this,
           Invocation.method(
             #copy,
             [],
           ),
         ),
-        returnValueForMissingStub: _FakeWebSettings_12(
+        returnValueForMissingStub: _FakeWebSettings_16(
           this,
           Invocation.method(
             #copy,
@@ -1197,17 +1723,17 @@
   @override
   _i2.WebSettings get settings => (super.noSuchMethod(
         Invocation.getter(#settings),
-        returnValue: _FakeWebSettings_12(
+        returnValue: _FakeWebSettings_16(
           this,
           Invocation.getter(#settings),
         ),
-        returnValueForMissingStub: _FakeWebSettings_12(
+        returnValueForMissingStub: _FakeWebSettings_16(
           this,
           Invocation.getter(#settings),
         ),
       ) as _i2.WebSettings);
   @override
-  _i7.Future<void> loadData({
+  _i9.Future<void> loadData({
     required String? data,
     String? mimeType,
     String? encoding,
@@ -1222,11 +1748,11 @@
             #encoding: encoding,
           },
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> loadDataWithBaseUrl({
+  _i9.Future<void> loadDataWithBaseUrl({
     String? baseUrl,
     required String? data,
     String? mimeType,
@@ -1245,11 +1771,11 @@
             #historyUrl: historyUrl,
           },
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> loadUrl(
+  _i9.Future<void> loadUrl(
     String? url,
     Map<String, String>? headers,
   ) =>
@@ -1261,13 +1787,13 @@
             headers,
           ],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> postUrl(
+  _i9.Future<void> postUrl(
     String? url,
-    _i12.Uint8List? data,
+    _i15.Uint8List? data,
   ) =>
       (super.noSuchMethod(
         Invocation.method(
@@ -1277,93 +1803,93 @@
             data,
           ],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<String?> getUrl() => (super.noSuchMethod(
+  _i9.Future<String?> getUrl() => (super.noSuchMethod(
         Invocation.method(
           #getUrl,
           [],
         ),
-        returnValue: _i7.Future<String?>.value(),
-        returnValueForMissingStub: _i7.Future<String?>.value(),
-      ) as _i7.Future<String?>);
+        returnValue: _i9.Future<String?>.value(),
+        returnValueForMissingStub: _i9.Future<String?>.value(),
+      ) as _i9.Future<String?>);
   @override
-  _i7.Future<bool> canGoBack() => (super.noSuchMethod(
+  _i9.Future<bool> canGoBack() => (super.noSuchMethod(
         Invocation.method(
           #canGoBack,
           [],
         ),
-        returnValue: _i7.Future<bool>.value(false),
-        returnValueForMissingStub: _i7.Future<bool>.value(false),
-      ) as _i7.Future<bool>);
+        returnValue: _i9.Future<bool>.value(false),
+        returnValueForMissingStub: _i9.Future<bool>.value(false),
+      ) as _i9.Future<bool>);
   @override
-  _i7.Future<bool> canGoForward() => (super.noSuchMethod(
+  _i9.Future<bool> canGoForward() => (super.noSuchMethod(
         Invocation.method(
           #canGoForward,
           [],
         ),
-        returnValue: _i7.Future<bool>.value(false),
-        returnValueForMissingStub: _i7.Future<bool>.value(false),
-      ) as _i7.Future<bool>);
+        returnValue: _i9.Future<bool>.value(false),
+        returnValueForMissingStub: _i9.Future<bool>.value(false),
+      ) as _i9.Future<bool>);
   @override
-  _i7.Future<void> goBack() => (super.noSuchMethod(
+  _i9.Future<void> goBack() => (super.noSuchMethod(
         Invocation.method(
           #goBack,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> goForward() => (super.noSuchMethod(
+  _i9.Future<void> goForward() => (super.noSuchMethod(
         Invocation.method(
           #goForward,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> reload() => (super.noSuchMethod(
+  _i9.Future<void> reload() => (super.noSuchMethod(
         Invocation.method(
           #reload,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> clearCache(bool? includeDiskFiles) => (super.noSuchMethod(
+  _i9.Future<void> clearCache(bool? includeDiskFiles) => (super.noSuchMethod(
         Invocation.method(
           #clearCache,
           [includeDiskFiles],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<String?> evaluateJavascript(String? javascriptString) =>
+  _i9.Future<String?> evaluateJavascript(String? javascriptString) =>
       (super.noSuchMethod(
         Invocation.method(
           #evaluateJavascript,
           [javascriptString],
         ),
-        returnValue: _i7.Future<String?>.value(),
-        returnValueForMissingStub: _i7.Future<String?>.value(),
-      ) as _i7.Future<String?>);
+        returnValue: _i9.Future<String?>.value(),
+        returnValueForMissingStub: _i9.Future<String?>.value(),
+      ) as _i9.Future<String?>);
   @override
-  _i7.Future<String?> getTitle() => (super.noSuchMethod(
+  _i9.Future<String?> getTitle() => (super.noSuchMethod(
         Invocation.method(
           #getTitle,
           [],
         ),
-        returnValue: _i7.Future<String?>.value(),
-        returnValueForMissingStub: _i7.Future<String?>.value(),
-      ) as _i7.Future<String?>);
+        returnValue: _i9.Future<String?>.value(),
+        returnValueForMissingStub: _i9.Future<String?>.value(),
+      ) as _i9.Future<String?>);
   @override
-  _i7.Future<void> scrollTo(
+  _i9.Future<void> scrollTo(
     int? x,
     int? y,
   ) =>
@@ -1375,11 +1901,11 @@
             y,
           ],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> scrollBy(
+  _i9.Future<void> scrollBy(
     int? x,
     int? y,
   ) =>
@@ -1391,109 +1917,109 @@
             y,
           ],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<int> getScrollX() => (super.noSuchMethod(
+  _i9.Future<int> getScrollX() => (super.noSuchMethod(
         Invocation.method(
           #getScrollX,
           [],
         ),
-        returnValue: _i7.Future<int>.value(0),
-        returnValueForMissingStub: _i7.Future<int>.value(0),
-      ) as _i7.Future<int>);
+        returnValue: _i9.Future<int>.value(0),
+        returnValueForMissingStub: _i9.Future<int>.value(0),
+      ) as _i9.Future<int>);
   @override
-  _i7.Future<int> getScrollY() => (super.noSuchMethod(
+  _i9.Future<int> getScrollY() => (super.noSuchMethod(
         Invocation.method(
           #getScrollY,
           [],
         ),
-        returnValue: _i7.Future<int>.value(0),
-        returnValueForMissingStub: _i7.Future<int>.value(0),
-      ) as _i7.Future<int>);
+        returnValue: _i9.Future<int>.value(0),
+        returnValueForMissingStub: _i9.Future<int>.value(0),
+      ) as _i9.Future<int>);
   @override
-  _i7.Future<_i4.Offset> getScrollPosition() => (super.noSuchMethod(
+  _i9.Future<_i4.Offset> getScrollPosition() => (super.noSuchMethod(
         Invocation.method(
           #getScrollPosition,
           [],
         ),
-        returnValue: _i7.Future<_i4.Offset>.value(_FakeOffset_6(
+        returnValue: _i9.Future<_i4.Offset>.value(_FakeOffset_6(
           this,
           Invocation.method(
             #getScrollPosition,
             [],
           ),
         )),
-        returnValueForMissingStub: _i7.Future<_i4.Offset>.value(_FakeOffset_6(
+        returnValueForMissingStub: _i9.Future<_i4.Offset>.value(_FakeOffset_6(
           this,
           Invocation.method(
             #getScrollPosition,
             [],
           ),
         )),
-      ) as _i7.Future<_i4.Offset>);
+      ) as _i9.Future<_i4.Offset>);
   @override
-  _i7.Future<void> setWebViewClient(_i2.WebViewClient? webViewClient) =>
+  _i9.Future<void> setWebViewClient(_i2.WebViewClient? webViewClient) =>
       (super.noSuchMethod(
         Invocation.method(
           #setWebViewClient,
           [webViewClient],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> addJavaScriptChannel(
+  _i9.Future<void> addJavaScriptChannel(
           _i2.JavaScriptChannel? javaScriptChannel) =>
       (super.noSuchMethod(
         Invocation.method(
           #addJavaScriptChannel,
           [javaScriptChannel],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> removeJavaScriptChannel(
+  _i9.Future<void> removeJavaScriptChannel(
           _i2.JavaScriptChannel? javaScriptChannel) =>
       (super.noSuchMethod(
         Invocation.method(
           #removeJavaScriptChannel,
           [javaScriptChannel],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setDownloadListener(_i2.DownloadListener? listener) =>
+  _i9.Future<void> setDownloadListener(_i2.DownloadListener? listener) =>
       (super.noSuchMethod(
         Invocation.method(
           #setDownloadListener,
           [listener],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setWebChromeClient(_i2.WebChromeClient? client) =>
+  _i9.Future<void> setWebChromeClient(_i2.WebChromeClient? client) =>
       (super.noSuchMethod(
         Invocation.method(
           #setWebChromeClient,
           [client],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
-  _i7.Future<void> setBackgroundColor(_i4.Color? color) => (super.noSuchMethod(
+  _i9.Future<void> setBackgroundColor(_i4.Color? color) => (super.noSuchMethod(
         Invocation.method(
           #setBackgroundColor,
           [color],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
   _i2.WebView copy() => (super.noSuchMethod(
         Invocation.method(
@@ -1522,16 +2048,16 @@
 /// See the documentation for Mockito's code generation for more information.
 class MockWebViewClient extends _i1.Mock implements _i2.WebViewClient {
   @override
-  _i7.Future<void> setSynchronousReturnValueForShouldOverrideUrlLoading(
+  _i9.Future<void> setSynchronousReturnValueForShouldOverrideUrlLoading(
           bool? value) =>
       (super.noSuchMethod(
         Invocation.method(
           #setSynchronousReturnValueForShouldOverrideUrlLoading,
           [value],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
   _i2.WebViewClient copy() => (super.noSuchMethod(
         Invocation.method(
@@ -1560,28 +2086,28 @@
 /// See the documentation for Mockito's code generation for more information.
 class MockWebStorage extends _i1.Mock implements _i2.WebStorage {
   @override
-  _i7.Future<void> deleteAllData() => (super.noSuchMethod(
+  _i9.Future<void> deleteAllData() => (super.noSuchMethod(
         Invocation.method(
           #deleteAllData,
           [],
         ),
-        returnValue: _i7.Future<void>.value(),
-        returnValueForMissingStub: _i7.Future<void>.value(),
-      ) as _i7.Future<void>);
+        returnValue: _i9.Future<void>.value(),
+        returnValueForMissingStub: _i9.Future<void>.value(),
+      ) as _i9.Future<void>);
   @override
   _i2.WebStorage copy() => (super.noSuchMethod(
         Invocation.method(
           #copy,
           [],
         ),
-        returnValue: _FakeWebStorage_13(
+        returnValue: _FakeWebStorage_17(
           this,
           Invocation.method(
             #copy,
             [],
           ),
         ),
-        returnValueForMissingStub: _FakeWebStorage_13(
+        returnValueForMissingStub: _FakeWebStorage_17(
           this,
           Invocation.method(
             #copy,