diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
index b7050e4..a4be504 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 2.0.0
+
+* **Breaking Change**: Releases new interface. See [documentation](https://pub.dev/documentation/webview_flutter_platform_interface/2.0.0/) and [design doc](https://flutter.dev/go/webview_flutter_4_interface)
+  for more details.
+* **Breaking Change**: Removes MethodChannel implementation of interface. All platform
+  implementations will now need to create their own by implementing `WebViewPlatform`.
+
 ## 1.9.5
 
 * Updates code for `no_leading_underscores_for_local_identifiers` lint.
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/README.md b/packages/webview_flutter/webview_flutter_platform_interface/README.md
index 31e57ab..10160b3 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/README.md
+++ b/packages/webview_flutter/webview_flutter_platform_interface/README.md
@@ -9,10 +9,10 @@
 # Usage
 
 To implement a new platform-specific implementation of `webview_flutter`, extend
-[`WebviewPlatform`](lib/src/platform_interface/webview_platform.dart) with an implementation that performs the
+[`WebviewPlatform`](lib/src/webview_platform.dart) with an implementation that performs the
 platform-specific behavior, and when you register your plugin, set the default
 `WebviewPlatform` by calling
-`WebviewPlatform.setInstance(MyPlatformWebview())`.
+`WebviewPlatform.instance = MyPlatformWebview()`.
 
 # Note on breaking changes
 
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/javascript_channel_registry.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/javascript_channel_registry.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/javascript_channel_registry.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/javascript_channel_registry.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/platform_interface.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/platform_interface.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/platform_interface.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/platform_interface.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_cookie_manager.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_cookie_manager.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_cookie_manager.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform_callbacks_handler.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform_callbacks_handler.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform_callbacks_handler.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform_callbacks_handler.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform_controller.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform_controller.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform_controller.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/platform_interface/webview_platform_controller.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/auto_media_playback_policy.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/auto_media_playback_policy.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/auto_media_playback_policy.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/auto_media_playback_policy.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/creation_params.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/creation_params.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_channel.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_channel.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_channel.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_channel.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart
new file mode 100644
index 0000000..8d08045
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart
@@ -0,0 +1,14 @@
+// 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.
+
+/// A message that was sent by JavaScript code running in a [WebView].
+class JavascriptMessage {
+  /// Constructs a JavaScript message object.
+  ///
+  /// The `message` parameter must not be null.
+  const JavascriptMessage(this.message) : assert(message != null);
+
+  /// The contents of the message that was sent by the JavaScript code.
+  final String message;
+}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_mode.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_mode.dart
similarity index 93%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_mode.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_mode.dart
index bcbebff..53d0491 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_mode.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_mode.dart
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /// Describes the state of JavaScript support in a given web view.
-enum JavaScriptMode {
+enum JavascriptMode {
   /// JavaScript execution is disabled.
   disabled,
 
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/types.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/types.dart
new file mode 100644
index 0000000..f2bcf19
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/types.dart
@@ -0,0 +1,14 @@
+// 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.
+
+export 'auto_media_playback_policy.dart';
+export 'creation_params.dart';
+export 'javascript_channel.dart';
+export 'javascript_message.dart';
+export 'javascript_mode.dart';
+export 'web_resource_error.dart';
+export 'web_resource_error_type.dart';
+export 'web_settings.dart';
+export 'webview_cookie.dart';
+export 'webview_request.dart';
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart
new file mode 100644
index 0000000..b61671f
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart
@@ -0,0 +1,57 @@
+// 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 'web_resource_error_type.dart';
+
+/// Error returned in `WebView.onWebResourceError` when a web resource loading error has occurred.
+class WebResourceError {
+  /// Creates a new [WebResourceError]
+  ///
+  /// A user should not need to instantiate this class, but will receive one in
+  /// [WebResourceErrorCallback].
+  WebResourceError({
+    required this.errorCode,
+    required this.description,
+    this.domain,
+    this.errorType,
+    this.failingUrl,
+  })  : assert(errorCode != null),
+        assert(description != null);
+
+  /// Raw code of the error from the respective platform.
+  ///
+  /// On Android, the error code will be a constant from a
+  /// [WebViewClient](https://developer.android.com/reference/android/webkit/WebViewClient#summary) and
+  /// will have a corresponding [errorType].
+  ///
+  /// On iOS, the error code will be a constant from `NSError.code` in
+  /// Objective-C. See
+  /// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html
+  /// for more information on error handling on iOS. Some possible error codes
+  /// can be found at https://developer.apple.com/documentation/webkit/wkerrorcode?language=objc.
+  final int errorCode;
+
+  /// The domain of where to find the error code.
+  ///
+  /// This field is only available on iOS and represents a "domain" from where
+  /// the [errorCode] is from. This value is taken directly from an `NSError`
+  /// in Objective-C. See
+  /// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html
+  /// for more information on error handling on iOS.
+  final String? domain;
+
+  /// Description of the error that can be used to communicate the problem to the user.
+  final String description;
+
+  /// The type this error can be categorized as.
+  ///
+  /// This will never be `null` on Android, but can be `null` on iOS.
+  final WebResourceErrorType? errorType;
+
+  /// Gets the URL for which the resource request was made.
+  ///
+  /// This value is not provided on iOS. Alternatively, you can keep track of
+  /// the last values provided to [WebViewPlatformController.loadUrl].
+  final String? failingUrl;
+}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error_type.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error_type.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error_type.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error_type.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_settings.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_settings.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_settings.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_settings.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/webview_cookie.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart
similarity index 63%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/webview_cookie.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart
index 7f56a31..406c510 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/webview_cookie.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_cookie.dart
@@ -2,18 +2,15 @@
 // 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';
-
-/// A cookie that can be set globally for all web views using [WebViewCookieManagerPlatform].
-@immutable
+/// A cookie that can be set globally for all web views
+/// using [WebViewCookieManagerPlatform].
 class WebViewCookie {
-  /// Creates a new [WebViewCookieDelegate]
-  const WebViewCookie({
-    required this.name,
-    required this.value,
-    required this.domain,
-    this.path = '/',
-  });
+  /// Constructs a new [WebViewCookie].
+  const WebViewCookie(
+      {required this.name,
+      required this.value,
+      required this.domain,
+      this.path = '/'});
 
   /// The cookie-name of the cookie.
   ///
@@ -33,9 +30,20 @@
   /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1
   final String domain;
 
-  /// The path-value of the cookie, set to `/` by default.
+  /// The path-value of the cookie.
+  /// Is set to `/` in the constructor by default.
   ///
   /// Its value should match "path-value" in RFC6265bis:
   /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1
   final String path;
+
+  /// Serializes the [WebViewCookie] to a Map<String, String>.
+  Map<String, String> toJson() {
+    return <String, String>{
+      'name': name,
+      'value': value,
+      'domain': domain,
+      'path': path
+    };
+  }
 }
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_request.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_request.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_request.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/webview_request.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart
deleted file mode 100644
index 0e98ea0..0000000
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart
+++ /dev/null
@@ -1,297 +0,0 @@
-// 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 'dart:async';
-
-import 'package:flutter/services.dart';
-
-import '../platform_interface/platform_interface.dart';
-import '../types/types.dart';
-
-/// A [WebViewPlatformController] that uses a method channel to control the webview.
-class MethodChannelWebViewPlatform implements WebViewPlatformController {
-  /// Constructs an instance that will listen for webviews broadcasting to the
-  /// given [id], using the given [WebViewPlatformCallbacksHandler].
-  MethodChannelWebViewPlatform(
-    int id,
-    this._platformCallbacksHandler,
-    this._javascriptChannelRegistry,
-  )   : assert(_platformCallbacksHandler != null),
-        _channel = MethodChannel('plugins.flutter.io/webview_$id') {
-    _channel.setMethodCallHandler(_onMethodCall);
-  }
-
-  final JavascriptChannelRegistry _javascriptChannelRegistry;
-
-  final WebViewPlatformCallbacksHandler _platformCallbacksHandler;
-
-  final MethodChannel _channel;
-
-  static const MethodChannel _cookieManagerChannel =
-      MethodChannel('plugins.flutter.io/cookie_manager');
-
-  Future<bool?> _onMethodCall(MethodCall call) async {
-    switch (call.method) {
-      case 'javascriptChannelMessage':
-        final String channel = call.arguments['channel']! as String;
-        final String message = call.arguments['message']! as String;
-        _javascriptChannelRegistry.onJavascriptChannelMessage(channel, message);
-        return true;
-      case 'navigationRequest':
-        return await _platformCallbacksHandler.onNavigationRequest(
-          url: call.arguments['url']! as String,
-          isForMainFrame: call.arguments['isForMainFrame']! as bool,
-        );
-      case 'onPageFinished':
-        _platformCallbacksHandler
-            .onPageFinished(call.arguments['url']! as String);
-        return null;
-      case 'onProgress':
-        _platformCallbacksHandler.onProgress(call.arguments['progress'] as int);
-        return null;
-      case 'onPageStarted':
-        _platformCallbacksHandler
-            .onPageStarted(call.arguments['url']! as String);
-        return null;
-      case 'onWebResourceError':
-        _platformCallbacksHandler.onWebResourceError(
-          WebResourceError(
-            errorCode: call.arguments['errorCode']! as int,
-            description: call.arguments['description']! as String,
-            // iOS doesn't support `failingUrl`.
-            failingUrl: call.arguments['failingUrl'] as String?,
-            domain: call.arguments['domain'] as String?,
-            errorType: call.arguments['errorType'] == null
-                ? null
-                : WebResourceErrorType.values.firstWhere(
-                    (WebResourceErrorType type) {
-                      return type.toString() ==
-                          '$WebResourceErrorType.${call.arguments['errorType']}';
-                    },
-                  ),
-          ),
-        );
-        return null;
-    }
-
-    throw MissingPluginException(
-      '${call.method} was invoked but has no handler',
-    );
-  }
-
-  @override
-  Future<void> loadFile(String absoluteFilePath) async {
-    assert(absoluteFilePath != null);
-
-    try {
-      return await _channel.invokeMethod<void>('loadFile', absoluteFilePath);
-    } on PlatformException catch (ex) {
-      if (ex.code == 'loadFile_failed') {
-        throw ArgumentError(ex.message);
-      }
-
-      rethrow;
-    }
-  }
-
-  @override
-  Future<void> loadFlutterAsset(String key) async {
-    assert(key.isNotEmpty);
-
-    try {
-      return await _channel.invokeMethod<void>('loadFlutterAsset', key);
-    } on PlatformException catch (ex) {
-      if (ex.code == 'loadFlutterAsset_invalidKey') {
-        throw ArgumentError(ex.message);
-      }
-
-      rethrow;
-    }
-  }
-
-  @override
-  Future<void> loadHtmlString(
-    String html, {
-    String? baseUrl,
-  }) async {
-    assert(html != null);
-    return _channel.invokeMethod<void>('loadHtmlString', <String, dynamic>{
-      'html': html,
-      'baseUrl': baseUrl,
-    });
-  }
-
-  @override
-  Future<void> loadUrl(
-    String url,
-    Map<String, String>? headers,
-  ) async {
-    assert(url != null);
-    return _channel.invokeMethod<void>('loadUrl', <String, dynamic>{
-      'url': url,
-      'headers': headers,
-    });
-  }
-
-  @override
-  Future<void> loadRequest(WebViewRequest request) async {
-    assert(request != null);
-    return _channel.invokeMethod<void>('loadRequest', <String, dynamic>{
-      'request': request.toJson(),
-    });
-  }
-
-  @override
-  Future<String?> currentUrl() => _channel.invokeMethod<String>('currentUrl');
-
-  @override
-  Future<bool> canGoBack() =>
-      _channel.invokeMethod<bool>('canGoBack').then((bool? result) => result!);
-
-  @override
-  Future<bool> canGoForward() => _channel
-      .invokeMethod<bool>('canGoForward')
-      .then((bool? result) => result!);
-
-  @override
-  Future<void> goBack() => _channel.invokeMethod<void>('goBack');
-
-  @override
-  Future<void> goForward() => _channel.invokeMethod<void>('goForward');
-
-  @override
-  Future<void> reload() => _channel.invokeMethod<void>('reload');
-
-  @override
-  Future<void> clearCache() => _channel.invokeMethod<void>('clearCache');
-
-  @override
-  Future<void> updateSettings(WebSettings settings) async {
-    final Map<String, dynamic> updatesMap = _webSettingsToMap(settings);
-    if (updatesMap.isNotEmpty) {
-      await _channel.invokeMethod<void>('updateSettings', updatesMap);
-    }
-  }
-
-  @override
-  Future<String> evaluateJavascript(String javascript) {
-    return _channel
-        .invokeMethod<String>('evaluateJavascript', javascript)
-        .then((String? result) => result!);
-  }
-
-  @override
-  Future<void> runJavascript(String javascript) async {
-    await _channel.invokeMethod<String>('runJavascript', javascript);
-  }
-
-  @override
-  Future<String> runJavascriptReturningResult(String javascript) {
-    return _channel
-        .invokeMethod<String>('runJavascriptReturningResult', javascript)
-        .then((String? result) => result!);
-  }
-
-  @override
-  Future<void> addJavascriptChannels(Set<String> javascriptChannelNames) {
-    return _channel.invokeMethod<void>(
-        'addJavascriptChannels', javascriptChannelNames.toList());
-  }
-
-  @override
-  Future<void> removeJavascriptChannels(Set<String> javascriptChannelNames) {
-    return _channel.invokeMethod<void>(
-        'removeJavascriptChannels', javascriptChannelNames.toList());
-  }
-
-  @override
-  Future<String?> getTitle() => _channel.invokeMethod<String>('getTitle');
-
-  @override
-  Future<void> scrollTo(int x, int y) {
-    return _channel.invokeMethod<void>('scrollTo', <String, int>{
-      'x': x,
-      'y': y,
-    });
-  }
-
-  @override
-  Future<void> scrollBy(int x, int y) {
-    return _channel.invokeMethod<void>('scrollBy', <String, int>{
-      'x': x,
-      'y': y,
-    });
-  }
-
-  @override
-  Future<int> getScrollX() =>
-      _channel.invokeMethod<int>('getScrollX').then((int? result) => result!);
-
-  @override
-  Future<int> getScrollY() =>
-      _channel.invokeMethod<int>('getScrollY').then((int? result) => result!);
-
-  /// Method channel implementation for [WebViewPlatform.clearCookies].
-  static Future<bool> clearCookies() {
-    return _cookieManagerChannel
-        .invokeMethod<bool>('clearCookies')
-        .then<bool>((dynamic result) => result! as bool);
-  }
-
-  /// Method channel implementation for [WebViewPlatform.setCookie].
-  static Future<void> setCookie(WebViewCookie cookie) {
-    return _cookieManagerChannel.invokeMethod<void>(
-        'setCookie', cookie.toJson());
-  }
-
-  static Map<String, dynamic> _webSettingsToMap(WebSettings? settings) {
-    final Map<String, dynamic> map = <String, dynamic>{};
-    void addIfNonNull(String key, dynamic value) {
-      if (value == null) {
-        return;
-      }
-      map[key] = value;
-    }
-
-    void addSettingIfPresent<T>(String key, WebSetting<T> setting) {
-      if (!setting.isPresent) {
-        return;
-      }
-      map[key] = setting.value;
-    }
-
-    addIfNonNull('jsMode', settings!.javascriptMode?.index);
-    addIfNonNull('hasNavigationDelegate', settings.hasNavigationDelegate);
-    addIfNonNull('hasProgressTracking', settings.hasProgressTracking);
-    addIfNonNull('debuggingEnabled', settings.debuggingEnabled);
-    addIfNonNull('gestureNavigationEnabled', settings.gestureNavigationEnabled);
-    addIfNonNull(
-        'allowsInlineMediaPlayback', settings.allowsInlineMediaPlayback);
-    addSettingIfPresent('userAgent', settings.userAgent);
-    addIfNonNull('zoomEnabled', settings.zoomEnabled);
-    return map;
-  }
-
-  /// Converts a [CreationParams] object to a map as expected by `platform_views` channel.
-  ///
-  /// This is used for the `creationParams` argument of the platform views created by
-  /// [AndroidWebViewBuilder] and [CupertinoWebViewBuilder].
-  static Map<String, dynamic> creationParamsToMap(
-    CreationParams creationParams, {
-    bool usesHybridComposition = false,
-  }) {
-    return <String, dynamic>{
-      'initialUrl': creationParams.initialUrl,
-      'settings': _webSettingsToMap(creationParams.webSettings),
-      'javascriptChannelNames': creationParams.javascriptChannelNames.toList(),
-      'userAgent': creationParams.userAgent,
-      'autoMediaPlaybackPolicy': creationParams.autoMediaPlaybackPolicy.index,
-      'usesHybridComposition': usesHybridComposition,
-      'backgroundColor': creationParams.backgroundColor?.value,
-      'cookies': creationParams.cookies
-          .map((WebViewCookie cookie) => cookie.toJson())
-          .toList()
-    };
-  }
-}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart
similarity index 78%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart
index a66f1de..2df6cff 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_navigation_delegate.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart
@@ -9,6 +9,19 @@
 
 import 'webview_platform.dart';
 
+/// Signature for callbacks that report a pending navigation request.
+typedef NavigationRequestCallback = FutureOr<NavigationDecision> Function(
+    NavigationRequest navigationRequest);
+
+/// Signature for callbacks that report page events triggered by the native web view.
+typedef PageEventCallback = void Function(String url);
+
+/// Signature for callbacks that report loading progress of a page.
+typedef ProgressCallback = void Function(int progress);
+
+/// Signature for callbacks that report a resource loading error.
+typedef WebResourceErrorCallback = void Function(WebResourceError error);
+
 /// An interface defining navigation events that occur on the native platform.
 ///
 /// The [PlatformWebViewController] is notifying this delegate on events that
@@ -40,8 +53,7 @@
   ///
   /// See [PlatformWebViewController.setPlatformNavigationDelegate].
   Future<void> setOnNavigationRequest(
-    FutureOr<bool> Function({required String url, required bool isForMainFrame})
-        onNavigationRequest,
+    NavigationRequestCallback onNavigationRequest,
   ) {
     throw UnimplementedError(
         'setOnNavigationRequest is not implemented on the current platform.');
@@ -51,7 +63,7 @@
   ///
   /// See [PlatformWebViewController.setPlatformNavigationDelegate].
   Future<void> setOnPageStarted(
-    void Function(String url) onPageStarted,
+    PageEventCallback onPageStarted,
   ) {
     throw UnimplementedError(
         'setOnPageStarted is not implemented on the current platform.');
@@ -61,7 +73,7 @@
   ///
   /// See [PlatformWebViewController.setPlatformNavigationDelegate].
   Future<void> setOnPageFinished(
-    void Function(String url) onPageFinished,
+    PageEventCallback onPageFinished,
   ) {
     throw UnimplementedError(
         'setOnPageFinished is not implemented on the current platform.');
@@ -71,7 +83,7 @@
   ///
   /// See [PlatformWebViewController.setPlatformNavigationDelegate].
   Future<void> setOnProgress(
-    void Function(int progress) onProgress,
+    ProgressCallback onProgress,
   ) {
     throw UnimplementedError(
         'setOnProgress is not implemented on the current platform.');
@@ -81,7 +93,7 @@
   ///
   /// See [PlatformWebViewController.setPlatformNavigationDelegate].
   Future<void> setOnWebResourceError(
-    void Function(WebResourceError error) onWebResourceError,
+    WebResourceErrorCallback onWebResourceError,
   ) {
     throw UnimplementedError(
         'setOnWebResourceError is not implemented on the current platform.');
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_controller.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart
similarity index 92%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_controller.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart
index 3585ec8..7bb259c 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_controller.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart
@@ -2,13 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'dart:math';
-import 'dart:ui';
-
 import 'package:flutter/foundation.dart';
+import 'package:flutter/painting.dart';
 import 'package:plugin_platform_interface/plugin_platform_interface.dart';
 
-import 'platform_navigation_delegate.dart';
+import '../../src/platform_navigation_delegate.dart';
 import 'webview_platform.dart';
 
 /// Interface for a platform implementation of a web view controller.
@@ -178,7 +176,7 @@
   /// The Future completes with an error if a JavaScript error occurred, or if the
   /// type the given expression evaluates to is unsupported. Unsupported values include
   /// certain non-primitive types on iOS, as well as `undefined` or `null` on iOS 14+.
-  Future<String> runJavaScriptReturningResult(String javaScript) {
+  Future<Object> runJavaScriptReturningResult(String javaScript) {
     throw UnimplementedError(
         'runJavaScriptReturningResult is not implemented on the current platform');
   }
@@ -226,24 +224,12 @@
   /// Return the current scroll position of this view.
   ///
   /// Scroll position is measured from the top left.
-  Future<Point<int>> getScrollPosition() {
+  Future<Offset> getScrollPosition() {
     throw UnimplementedError(
         'getScrollPosition is not implemented on the current platform');
   }
 
-  /// Whether to enable the platform's webview content debugging tools.
-  Future<void> enableDebugging(bool enabled) {
-    throw UnimplementedError(
-        'enableDebugging is not implemented on the current platform');
-  }
-
-  /// Whether to allow swipe based navigation on supported platforms.
-  Future<void> enableGestureNavigation(bool enabled) {
-    throw UnimplementedError(
-        'enableGestureNavigation is not implemented on the current platform');
-  }
-
-  /// Whhether to support zooming using its on-screen zoom controls and gestures.
+  /// Whether to support zooming using its on-screen zoom controls and gestures.
   Future<void> enableZoom(bool enabled) {
     throw UnimplementedError(
         'enableZoom is not implemented on the current platform');
@@ -269,9 +255,10 @@
 }
 
 /// Describes the parameters necessary for registering a JavaScript channel.
+@immutable
 class JavaScriptChannelParams {
   /// Creates a new [JavaScriptChannelParams] object.
-  JavaScriptChannelParams({
+  const JavaScriptChannelParams({
     required this.name,
     required this.onMessageReceived,
   });
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_cookie_manager.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_widget.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_widget.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/platform_webview_widget.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_widget.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_message.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_message.dart
index 8d08045..b37661a 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_message.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_message.dart
@@ -2,12 +2,49 @@
 // 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';
+
 /// A message that was sent by JavaScript code running in a [WebView].
-class JavascriptMessage {
-  /// Constructs a JavaScript message object.
-  ///
-  /// The `message` parameter must not be null.
-  const JavascriptMessage(this.message) : assert(message != null);
+///
+/// Platform specific implementations can add additional fields by extending
+/// this class and providing a factory method that takes the
+/// [JavaScriptMessage] as a parameter.
+///
+/// {@tool sample}
+/// This example demonstrates how to extend the [JavaScriptMessage] to
+/// provide additional platform specific parameters.
+///
+/// When extending [JavaScriptMessage] additional parameters should always
+/// accept `null` or have a default value to prevent breaking changes.
+///
+/// ```dart
+/// @immutable
+/// class WKWebViewScriptMessage extends JavaScriptMessage {
+///   WKWebViewScriptMessage._(
+///     JavaScriptMessage javaScriptMessage,
+///     this.extraData,
+///   ) : super(javaScriptMessage.message);
+///
+///   factory WKWebViewScriptMessage.fromJavaScripMessage(
+///     JavaScriptMessage javaScripMessage, {
+///     String? extraData,
+///   }) {
+///     return WKWebViewScriptMessage._(
+///       javaScriptMessage,
+///       extraData: extraData,
+///     );
+///   }
+///
+///   final String? extraData;
+/// }
+/// ```
+/// {@end-tool}
+@immutable
+class JavaScriptMessage {
+  /// Creates a new JavaScript message object.
+  const JavaScriptMessage({
+    required this.message,
+  });
 
   /// The contents of the message that was sent by the JavaScript code.
   final String message;
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_mode.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_mode.dart
index 53d0491..bcbebff 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_mode.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_mode.dart
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /// Describes the state of JavaScript support in a given web view.
-enum JavascriptMode {
+enum JavaScriptMode {
   /// JavaScript execution is disabled.
   disabled,
 
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/load_request_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/load_request_params.dart
similarity index 94%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/load_request_params.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/load_request_params.dart
index a0d1c88..ad934d6 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/load_request_params.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/load_request_params.dart
@@ -72,8 +72,8 @@
   /// Used by the platform implementation to create a new [LoadRequestParams].
   const LoadRequestParams({
     required this.uri,
-    required this.method,
-    required this.headers,
+    this.method = LoadRequestMethod.get,
+    this.headers = const <String, String>{},
     this.body,
   });
 
@@ -81,6 +81,8 @@
   final Uri uri;
 
   /// HTTP method used to make the request.
+  ///
+  /// Defaults to [LoadRequestMethod.get].
   final LoadRequestMethod method;
 
   /// Headers for the request.
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_decision.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_decision.dart
new file mode 100644
index 0000000..d8178ac
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_decision.dart
@@ -0,0 +1,12 @@
+// 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.
+
+/// A decision on how to handle a navigation request.
+enum NavigationDecision {
+  /// Prevent the navigation from taking place.
+  prevent,
+
+  /// Allow the navigation to take place.
+  navigate,
+}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_request.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_request.dart
new file mode 100644
index 0000000..ee3f1f9
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/navigation_request.dart
@@ -0,0 +1,18 @@
+// 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.
+
+/// Defines the parameters of the pending navigation callback.
+class NavigationRequest {
+  /// Creates a [NavigationRequest].
+  const NavigationRequest({
+    required this.url,
+    required this.isMainFrame,
+  });
+
+  /// The URL of the pending navigation request.
+  final String url;
+
+  /// Indicates whether the request was made in the web site's main frame or a subframe.
+  final bool isMainFrame;
+}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_navigation_delegate_creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_navigation_delegate_creation_params.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_navigation_delegate_creation_params.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_navigation_delegate_creation_params.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_controller_creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_controller_creation_params.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_controller_creation_params.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_controller_creation_params.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_cookie_manager_creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_cookie_manager_creation_params.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_cookie_manager_creation_params.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_cookie_manager_creation_params.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_widget_creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_widget_creation_params.dart
similarity index 100%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/platform_webview_widget_creation_params.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/platform_webview_widget_creation_params.dart
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart
index f2bcf19..4df8800 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart
@@ -2,13 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-export 'auto_media_playback_policy.dart';
-export 'creation_params.dart';
-export 'javascript_channel.dart';
 export 'javascript_message.dart';
 export 'javascript_mode.dart';
+export 'load_request_params.dart';
+export 'navigation_decision.dart';
+export 'navigation_request.dart';
+export 'platform_navigation_delegate_creation_params.dart';
+export 'platform_webview_controller_creation_params.dart';
+export 'platform_webview_cookie_manager_creation_params.dart';
+export 'platform_webview_widget_creation_params.dart';
 export 'web_resource_error.dart';
-export 'web_resource_error_type.dart';
-export 'web_settings.dart';
 export 'webview_cookie.dart';
-export 'webview_request.dart';
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error.dart
index b61671f..e2522da 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_error.dart
@@ -2,56 +2,122 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'web_resource_error_type.dart';
+import 'package:flutter/foundation.dart';
+
+/// Possible error type categorizations used by [WebResourceError].
+enum WebResourceErrorType {
+  /// User authentication failed on server.
+  authentication,
+
+  /// Malformed URL.
+  badUrl,
+
+  /// Failed to connect to the server.
+  connect,
+
+  /// Failed to perform SSL handshake.
+  failedSslHandshake,
+
+  /// Generic file error.
+  file,
+
+  /// File not found.
+  fileNotFound,
+
+  /// Server or proxy hostname lookup failed.
+  hostLookup,
+
+  /// Failed to read or write to the server.
+  io,
+
+  /// User authentication failed on proxy.
+  proxyAuthentication,
+
+  /// Too many redirects.
+  redirectLoop,
+
+  /// Connection timed out.
+  timeout,
+
+  /// Too many requests during this load.
+  tooManyRequests,
+
+  /// Generic error.
+  unknown,
+
+  /// Resource load was canceled by Safe Browsing.
+  unsafeResource,
+
+  /// Unsupported authentication scheme (not basic or digest).
+  unsupportedAuthScheme,
+
+  /// Unsupported URI scheme.
+  unsupportedScheme,
+
+  /// The web content process was terminated.
+  webContentProcessTerminated,
+
+  /// The web view was invalidated.
+  webViewInvalidated,
+
+  /// A JavaScript exception occurred.
+  javaScriptExceptionOccurred,
+
+  /// The result of JavaScript execution could not be returned.
+  javaScriptResultTypeIsUnsupported,
+}
 
 /// Error returned in `WebView.onWebResourceError` when a web resource loading error has occurred.
+///
+/// Platform specific implementations can add additional fields by extending
+/// this class.
+///
+/// {@tool sample}
+/// This example demonstrates how to extend the [WebResourceError] to
+/// provide additional platform specific parameters.
+///
+/// When extending [WebResourceError] additional parameters should always
+/// accept `null` or have a default value to prevent breaking changes.
+///
+/// ```dart
+/// class IOSWebResourceError extends WebResourceError {
+///   IOSWebResourceError._(WebResourceError error, {required this.domain})
+///       : super(
+///           errorCode: error.errorCode,
+///           description: error.description,
+///           errorType: error.errorType,
+///         );
+///
+///   factory IOSWebResourceError.fromWebResourceError(
+///     WebResourceError error, {
+///     required String? domain,
+///   }) {
+///     return IOSWebResourceError._(error, domain: domain);
+///   }
+///
+///   final String? domain;
+/// }
+/// ```
+/// {@end-tool}
+@immutable
 class WebResourceError {
-  /// Creates a new [WebResourceError]
-  ///
-  /// A user should not need to instantiate this class, but will receive one in
-  /// [WebResourceErrorCallback].
-  WebResourceError({
+  /// Used by the platform implementation to create a new [WebResourceError].
+  const WebResourceError({
     required this.errorCode,
     required this.description,
-    this.domain,
     this.errorType,
-    this.failingUrl,
-  })  : assert(errorCode != null),
-        assert(description != null);
+    this.isForMainFrame,
+  });
 
   /// Raw code of the error from the respective platform.
-  ///
-  /// On Android, the error code will be a constant from a
-  /// [WebViewClient](https://developer.android.com/reference/android/webkit/WebViewClient#summary) and
-  /// will have a corresponding [errorType].
-  ///
-  /// On iOS, the error code will be a constant from `NSError.code` in
-  /// Objective-C. See
-  /// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html
-  /// for more information on error handling on iOS. Some possible error codes
-  /// can be found at https://developer.apple.com/documentation/webkit/wkerrorcode?language=objc.
   final int errorCode;
 
-  /// The domain of where to find the error code.
-  ///
-  /// This field is only available on iOS and represents a "domain" from where
-  /// the [errorCode] is from. This value is taken directly from an `NSError`
-  /// in Objective-C. See
-  /// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html
-  /// for more information on error handling on iOS.
-  final String? domain;
-
   /// Description of the error that can be used to communicate the problem to the user.
   final String description;
 
   /// The type this error can be categorized as.
-  ///
-  /// This will never be `null` on Android, but can be `null` on iOS.
   final WebResourceErrorType? errorType;
 
-  /// Gets the URL for which the resource request was made.
-  ///
-  /// This value is not provided on iOS. Alternatively, you can keep track of
-  /// the last values provided to [WebViewPlatformController.loadUrl].
-  final String? failingUrl;
+  /// Whether the error originated from the main frame.
+  final bool? isForMainFrame;
 }
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart
index 406c510..7f56a31 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/webview_cookie.dart
@@ -2,15 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-/// A cookie that can be set globally for all web views
-/// using [WebViewCookieManagerPlatform].
+import 'package:flutter/foundation.dart';
+
+/// A cookie that can be set globally for all web views using [WebViewCookieManagerPlatform].
+@immutable
 class WebViewCookie {
-  /// Constructs a new [WebViewCookie].
-  const WebViewCookie(
-      {required this.name,
-      required this.value,
-      required this.domain,
-      this.path = '/'});
+  /// Creates a new [WebViewCookieDelegate]
+  const WebViewCookie({
+    required this.name,
+    required this.value,
+    required this.domain,
+    this.path = '/',
+  });
 
   /// The cookie-name of the cookie.
   ///
@@ -30,20 +33,9 @@
   /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1
   final String domain;
 
-  /// The path-value of the cookie.
-  /// Is set to `/` in the constructor by default.
+  /// The path-value of the cookie, set to `/` by default.
   ///
   /// Its value should match "path-value" in RFC6265bis:
   /// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-02#section-4.1.1
   final String path;
-
-  /// Serializes the [WebViewCookie] to a Map<String, String>.
-  Map<String, String> toJson() {
-    return <String, String>{
-      'name': name,
-      'value': value,
-      'domain': domain,
-      'path': path
-    };
-  }
 }
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_flutter_platform_interface_legacy.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_flutter_platform_interface_legacy.dart
new file mode 100644
index 0000000..1964e70
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_flutter_platform_interface_legacy.dart
@@ -0,0 +1,6 @@
+// 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.
+
+export 'legacy/platform_interface/platform_interface.dart';
+export 'legacy/types/types.dart';
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/webview_platform.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_platform.dart
similarity index 97%
rename from packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/webview_platform.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_platform.dart
index c5c5dff..e913962 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/webview_platform.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/webview_platform.dart
@@ -4,7 +4,7 @@
 
 import 'package:plugin_platform_interface/plugin_platform_interface.dart';
 
-import 'platform_navigation_delegate.dart';
+import '../../src/platform_navigation_delegate.dart';
 import 'platform_webview_controller.dart';
 import 'platform_webview_cookie_manager.dart';
 import 'platform_webview_widget.dart';
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_message.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_message.dart
deleted file mode 100644
index b37661a..0000000
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/javascript_message.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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/foundation.dart';
-
-/// A message that was sent by JavaScript code running in a [WebView].
-///
-/// Platform specific implementations can add additional fields by extending
-/// this class and providing a factory method that takes the
-/// [JavaScriptMessage] as a parameter.
-///
-/// {@tool sample}
-/// This example demonstrates how to extend the [JavaScriptMessage] to
-/// provide additional platform specific parameters.
-///
-/// When extending [JavaScriptMessage] additional parameters should always
-/// accept `null` or have a default value to prevent breaking changes.
-///
-/// ```dart
-/// @immutable
-/// class WKWebViewScriptMessage extends JavaScriptMessage {
-///   WKWebViewScriptMessage._(
-///     JavaScriptMessage javaScriptMessage,
-///     this.extraData,
-///   ) : super(javaScriptMessage.message);
-///
-///   factory WKWebViewScriptMessage.fromJavaScripMessage(
-///     JavaScriptMessage javaScripMessage, {
-///     String? extraData,
-///   }) {
-///     return WKWebViewScriptMessage._(
-///       javaScriptMessage,
-///       extraData: extraData,
-///     );
-///   }
-///
-///   final String? extraData;
-/// }
-/// ```
-/// {@end-tool}
-@immutable
-class JavaScriptMessage {
-  /// Creates a new JavaScript message object.
-  const JavaScriptMessage({
-    required this.message,
-  });
-
-  /// The contents of the message that was sent by the JavaScript code.
-  final String message;
-}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart
deleted file mode 100644
index 05504ff..0000000
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/types.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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.
-
-export 'javascript_message.dart';
-export 'javascript_mode.dart';
-export 'load_request_params.dart';
-export 'platform_navigation_delegate_creation_params.dart';
-export 'platform_webview_controller_creation_params.dart';
-export 'platform_webview_cookie_manager_creation_params.dart';
-export 'platform_webview_widget_creation_params.dart';
-export 'web_resource_error.dart';
-export 'webview_cookie.dart';
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/web_resource_error.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/web_resource_error.dart
deleted file mode 100644
index 4657994..0000000
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/src/types/web_resource_error.dart
+++ /dev/null
@@ -1,119 +0,0 @@
-// 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/foundation.dart';
-
-/// Possible error type categorizations used by [WebResourceError].
-enum WebResourceErrorType {
-  /// User authentication failed on server.
-  authentication,
-
-  /// Malformed URL.
-  badUrl,
-
-  /// Failed to connect to the server.
-  connect,
-
-  /// Failed to perform SSL handshake.
-  failedSslHandshake,
-
-  /// Generic file error.
-  file,
-
-  /// File not found.
-  fileNotFound,
-
-  /// Server or proxy hostname lookup failed.
-  hostLookup,
-
-  /// Failed to read or write to the server.
-  io,
-
-  /// User authentication failed on proxy.
-  proxyAuthentication,
-
-  /// Too many redirects.
-  redirectLoop,
-
-  /// Connection timed out.
-  timeout,
-
-  /// Too many requests during this load.
-  tooManyRequests,
-
-  /// Generic error.
-  unknown,
-
-  /// Resource load was canceled by Safe Browsing.
-  unsafeResource,
-
-  /// Unsupported authentication scheme (not basic or digest).
-  unsupportedAuthScheme,
-
-  /// Unsupported URI scheme.
-  unsupportedScheme,
-
-  /// The web content process was terminated.
-  webContentProcessTerminated,
-
-  /// The web view was invalidated.
-  webViewInvalidated,
-
-  /// A JavaScript exception occurred.
-  javaScriptExceptionOccurred,
-
-  /// The result of JavaScript execution could not be returned.
-  javaScriptResultTypeIsUnsupported,
-}
-
-/// Error returned in `WebView.onWebResourceError` when a web resource loading error has occurred.
-///
-/// Platform specific implementations can add additional fields by extending
-/// this class.
-///
-/// {@tool sample}
-/// This example demonstrates how to extend the [WebResourceError] to
-/// provide additional platform specific parameters.
-///
-/// When extending [WebResourceError] additional parameters should always
-/// accept `null` or have a default value to prevent breaking changes.
-///
-/// ```dart
-/// class IOSWebResourceError extends WebResourceError {
-///   IOSWebResourceError._(WebResourceError error, {required this.domain})
-///       : super(
-///           errorCode: error.errorCode,
-///           description: error.description,
-///           errorType: error.errorType,
-///         );
-///
-///   factory IOSWebResourceError.fromWebResourceError(
-///     WebResourceError error, {
-///     required String? domain,
-///   }) {
-///     return IOSWebResourceError._(error, domain: domain);
-///   }
-///
-///   final String? domain;
-/// }
-/// ```
-/// {@end-tool}
-@immutable
-class WebResourceError {
-  /// Used by the platform implementation to create a new [WebResourceError].
-  const WebResourceError({
-    required this.errorCode,
-    required this.description,
-    this.errorType,
-  });
-
-  /// Raw code of the error from the respective platform.
-  final int errorCode;
-
-  /// Description of the error that can be used to communicate the problem to the user.
-  final String description;
-
-  /// The type this error can be categorized as.
-  final WebResourceErrorType? errorType;
-}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/webview_flutter_platform_interface.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/webview_flutter_platform_interface.dart
deleted file mode 100644
index d14fec1..0000000
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/v4/webview_flutter_platform_interface.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-// 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.
-
-export 'src/platform_navigation_delegate.dart';
-export 'src/platform_webview_controller.dart';
-export 'src/platform_webview_cookie_manager.dart';
-export 'src/platform_webview_widget.dart';
-export 'src/types/types.dart';
-export 'src/webview_platform.dart';
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/webview_flutter_platform_interface.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/webview_flutter_platform_interface.dart
index aa41c82..d14fec1 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/webview_flutter_platform_interface.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/webview_flutter_platform_interface.dart
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-export 'src/method_channel/webview_method_channel.dart';
-export 'src/platform_interface/platform_interface.dart';
+export 'src/platform_navigation_delegate.dart';
+export 'src/platform_webview_controller.dart';
+export 'src/platform_webview_cookie_manager.dart';
+export 'src/platform_webview_widget.dart';
 export 'src/types/types.dart';
+export 'src/webview_platform.dart';
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
index 8f60592..3ba7a56 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22
 # NOTE: We strongly prefer non-breaking changes, even at the expense of a
 # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 1.9.5
+version: 2.0.0
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/javascript_channel_registry_test.dart
similarity index 94%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/javascript_channel_registry_test.dart
index aec568e..c9d27c6 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/javascript_channel_registry_test.dart
@@ -3,8 +3,7 @@
 // found in the LICENSE file.
 
 import 'package:flutter_test/flutter_test.dart';
-import 'package:webview_flutter_platform_interface/src/platform_interface/javascript_channel_registry.dart';
-import 'package:webview_flutter_platform_interface/src/types/types.dart';
+import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart';
 
 void main() {
   final Map<String, String> log = <String, String>{};
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/webview_cookie_manager_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/webview_cookie_manager_test.dart
similarity index 81%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/webview_cookie_manager_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/webview_cookie_manager_test.dart
index e0aae21..a9faea5 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/webview_cookie_manager_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/platform_interface/webview_cookie_manager_test.dart
@@ -3,8 +3,7 @@
 // found in the LICENSE file.
 
 import 'package:flutter_test/flutter_test.dart';
-import 'package:webview_flutter_platform_interface/src/platform_interface/platform_interface.dart';
-import 'package:webview_flutter_platform_interface/src/types/webview_cookie.dart';
+import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart';
 
 void main() {
   WebViewCookieManagerPlatform? cookieManager;
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/javascript_channel_test.dart
similarity index 93%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/javascript_channel_test.dart
index 8d71771..ecb9c3f 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/javascript_channel_test.dart
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'package:flutter_test/flutter_test.dart';
-import 'package:webview_flutter_platform_interface/src/types/javascript_channel.dart';
+import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart';
 
 void main() {
   final List<String> validChars =
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_cookie_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_cookie_test.dart
similarity index 87%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_cookie_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_cookie_test.dart
index f058b86..f1702f4 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_cookie_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_cookie_test.dart
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'package:flutter_test/flutter_test.dart';
-import 'package:webview_flutter_platform_interface/src/types/types.dart';
+import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart';
 
 void main() {
   test('WebViewCookie should serialize correctly', () {
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_request_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_request_test.dart
similarity index 93%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_request_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_request_test.dart
index 6e1a4d7..fff1a9b 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/webview_request_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/legacy/types/webview_request_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:typed_data';
 import 'package:flutter_test/flutter_test.dart';
-import 'package:webview_flutter_platform_interface/src/types/types.dart';
+import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart';
 
 void main() {
   test('WebViewRequestMethod should serialize correctly', () {
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_navigation_delegate_test.dart
similarity index 94%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/platform_navigation_delegate_test.dart
index dd4a26c..5e9aa2e 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_navigation_delegate_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_navigation_delegate_test.dart
@@ -5,8 +5,7 @@
 import 'package:flutter_test/flutter_test.dart';
 import 'package:mockito/mockito.dart';
 import 'package:plugin_platform_interface/plugin_platform_interface.dart';
-import 'package:webview_flutter_platform_interface/v4/src/platform_navigation_delegate.dart';
-import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart';
+import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
 
 import 'webview_platform_test.mocks.dart';
 
@@ -61,7 +60,7 @@
 
     expect(
       () => callbackDelegate.setOnNavigationRequest(
-          ({required bool isForMainFrame, required String url}) => true),
+          (NavigationRequest navigationRequest) => NavigationDecision.navigate),
       throwsUnimplementedError,
     );
   });
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart
similarity index 92%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart
index 32374fb..6710f34 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart
@@ -7,9 +7,7 @@
 import 'package:mockito/annotations.dart';
 import 'package:mockito/mockito.dart';
 import 'package:plugin_platform_interface/plugin_platform_interface.dart';
-import 'package:webview_flutter_platform_interface/v4/src/platform_navigation_delegate.dart';
-import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart';
-import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart';
+import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
 
 import 'platform_navigation_delegate_test.dart';
 import 'webview_platform_test.mocks.dart';
@@ -359,34 +357,6 @@
 
   test(
       // ignore: lines_longer_than_80_chars
-      'Default implementation of enableDebugging should throw unimplemented error',
-      () {
-    final PlatformWebViewController controller =
-        ExtendsPlatformWebViewController(
-            const PlatformWebViewControllerCreationParams());
-
-    expect(
-      () => controller.enableDebugging(true),
-      throwsUnimplementedError,
-    );
-  });
-
-  test(
-      // ignore: lines_longer_than_80_chars
-      'Default implementation of enableGestureNavigation should throw unimplemented error',
-      () {
-    final PlatformWebViewController controller =
-        ExtendsPlatformWebViewController(
-            const PlatformWebViewControllerCreationParams());
-
-    expect(
-      () => controller.enableGestureNavigation(true),
-      throwsUnimplementedError,
-    );
-  });
-
-  test(
-      // ignore: lines_longer_than_80_chars
       'Default implementation of enableZoom should throw unimplemented error',
       () {
     final PlatformWebViewController controller =
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart
new file mode 100644
index 0000000..db142fe
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart
@@ -0,0 +1,106 @@
+// Mocks generated by Mockito 5.3.2 from annotations
+// in webview_flutter_platform_interface/test/platform_webview_controller_test.dart.
+// Do not manually edit this file.
+
+// ignore_for_file: no_leading_underscores_for_library_prefixes
+import 'dart:async' as _i4;
+
+import 'package:mockito/mockito.dart' as _i1;
+import 'package:webview_flutter_platform_interface/src/platform_navigation_delegate.dart'
+    as _i3;
+import 'package:webview_flutter_platform_interface/src/webview_platform.dart'
+    as _i2;
+
+// 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 _FakePlatformNavigationDelegateCreationParams_0 extends _i1.SmartFake
+    implements _i2.PlatformNavigationDelegateCreationParams {
+  _FakePlatformNavigationDelegateCreationParams_0(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+/// A class which mocks [PlatformNavigationDelegate].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockPlatformNavigationDelegate extends _i1.Mock
+    implements _i3.PlatformNavigationDelegate {
+  MockPlatformNavigationDelegate() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i2.PlatformNavigationDelegateCreationParams get params =>
+      (super.noSuchMethod(
+        Invocation.getter(#params),
+        returnValue: _FakePlatformNavigationDelegateCreationParams_0(
+          this,
+          Invocation.getter(#params),
+        ),
+      ) as _i2.PlatformNavigationDelegateCreationParams);
+  @override
+  _i4.Future<void> setOnNavigationRequest(
+          _i3.NavigationRequestCallback? onNavigationRequest) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #setOnNavigationRequest,
+          [onNavigationRequest],
+        ),
+        returnValue: _i4.Future<void>.value(),
+        returnValueForMissingStub: _i4.Future<void>.value(),
+      ) as _i4.Future<void>);
+  @override
+  _i4.Future<void> setOnPageStarted(_i3.PageEventCallback? onPageStarted) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #setOnPageStarted,
+          [onPageStarted],
+        ),
+        returnValue: _i4.Future<void>.value(),
+        returnValueForMissingStub: _i4.Future<void>.value(),
+      ) as _i4.Future<void>);
+  @override
+  _i4.Future<void> setOnPageFinished(_i3.PageEventCallback? onPageFinished) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #setOnPageFinished,
+          [onPageFinished],
+        ),
+        returnValue: _i4.Future<void>.value(),
+        returnValueForMissingStub: _i4.Future<void>.value(),
+      ) as _i4.Future<void>);
+  @override
+  _i4.Future<void> setOnProgress(_i3.ProgressCallback? onProgress) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #setOnProgress,
+          [onProgress],
+        ),
+        returnValue: _i4.Future<void>.value(),
+        returnValueForMissingStub: _i4.Future<void>.value(),
+      ) as _i4.Future<void>);
+  @override
+  _i4.Future<void> setOnWebResourceError(
+          _i3.WebResourceErrorCallback? onWebResourceError) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #setOnWebResourceError,
+          [onWebResourceError],
+        ),
+        returnValue: _i4.Future<void>.value(),
+        returnValueForMissingStub: _i4.Future<void>.value(),
+      ) as _i4.Future<void>);
+}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_widget_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_widget_test.dart
similarity index 92%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_widget_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_widget_test.dart
index ede16c1..652f326 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_widget_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_widget_test.dart
@@ -6,9 +6,7 @@
 import 'package:flutter_test/flutter_test.dart';
 import 'package:mockito/mockito.dart';
 import 'package:plugin_platform_interface/plugin_platform_interface.dart';
-import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart';
-import 'package:webview_flutter_platform_interface/v4/src/platform_webview_widget.dart';
-import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart';
+import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
 
 import 'webview_platform_test.mocks.dart';
 
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart
deleted file mode 100644
index ea9eb92..0000000
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/method_channel/webview_method_channel_test.dart
+++ /dev/null
@@ -1,746 +0,0 @@
-// 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.
-
-// TODO(a14n): remove this import once Flutter 3.1 or later reaches stable (including flutter/flutter#106316)
-// ignore: unnecessary_import
-import 'dart:typed_data';
-
-// TODO(a14n): remove this import once Flutter 3.1 or later reaches stable (including flutter/flutter#106316)
-// ignore: unnecessary_import
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/services.dart';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:mockito/mockito.dart';
-import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
-
-void main() {
-  TestWidgetsFlutterBinding.ensureInitialized();
-
-  group('Tests on `plugin.flutter.io/webview_<channel_id>` channel', () {
-    const int channelId = 1;
-    const MethodChannel channel =
-        MethodChannel('plugins.flutter.io/webview_$channelId');
-    final WebViewPlatformCallbacksHandler callbacksHandler =
-        MockWebViewPlatformCallbacksHandler();
-    final JavascriptChannelRegistry javascriptChannelRegistry =
-        MockJavascriptChannelRegistry();
-
-    final List<MethodCall> log = <MethodCall>[];
-    channel.setMockMethodCallHandler((MethodCall methodCall) async {
-      log.add(methodCall);
-
-      switch (methodCall.method) {
-        case 'currentUrl':
-          return 'https://test.url';
-        case 'canGoBack':
-        case 'canGoForward':
-          return true;
-        case 'loadFile':
-          if (methodCall.arguments == 'invalid file') {
-            throw PlatformException(
-                code: 'loadFile_failed', message: 'Failed loading file.');
-          } else if (methodCall.arguments == 'some error') {
-            throw PlatformException(
-              code: 'some_error',
-              message: 'Some error occurred.',
-            );
-          }
-          return null;
-        case 'loadFlutterAsset':
-          if (methodCall.arguments == 'invalid key') {
-            throw PlatformException(
-              code: 'loadFlutterAsset_invalidKey',
-              message: 'Failed loading asset.',
-            );
-          } else if (methodCall.arguments == 'some error') {
-            throw PlatformException(
-              code: 'some_error',
-              message: 'Some error occurred.',
-            );
-          }
-          return null;
-        case 'runJavascriptReturningResult':
-        case 'evaluateJavascript':
-          return methodCall.arguments as String;
-        case 'getScrollX':
-          return 10;
-        case 'getScrollY':
-          return 20;
-      }
-
-      // Return null explicitly instead of relying on the implicit null
-      // returned by the method channel if no return statement is specified.
-      return null;
-    });
-
-    final MethodChannelWebViewPlatform webViewPlatform =
-        MethodChannelWebViewPlatform(
-      channelId,
-      callbacksHandler,
-      javascriptChannelRegistry,
-    );
-
-    tearDown(() {
-      log.clear();
-    });
-
-    test('loadFile', () async {
-      await webViewPlatform.loadFile(
-        '/folder/asset.html',
-      );
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'loadFile',
-            arguments: '/folder/asset.html',
-          ),
-        ],
-      );
-    });
-
-    test('loadFile with invalid file', () async {
-      expect(
-        () => webViewPlatform.loadFile('invalid file'),
-        throwsA(
-          isA<ArgumentError>().having(
-            (ArgumentError error) => error.message,
-            'message',
-            'Failed loading file.',
-          ),
-        ),
-      );
-    });
-
-    test('loadFile with some error.', () async {
-      expect(
-        () => webViewPlatform.loadFile('some error'),
-        throwsA(
-          isA<PlatformException>().having(
-            (PlatformException error) => error.message,
-            'message',
-            'Some error occurred.',
-          ),
-        ),
-      );
-    });
-
-    test('loadFlutterAsset', () async {
-      await webViewPlatform.loadFlutterAsset(
-        'folder/asset.html',
-      );
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'loadFlutterAsset',
-            arguments: 'folder/asset.html',
-          ),
-        ],
-      );
-    });
-
-    test('loadFlutterAsset with empty key', () async {
-      expect(() => webViewPlatform.loadFlutterAsset(''), throwsAssertionError);
-    });
-
-    test('loadFlutterAsset with invalid key', () async {
-      expect(
-        () => webViewPlatform.loadFlutterAsset('invalid key'),
-        throwsA(
-          isA<ArgumentError>().having(
-            (ArgumentError error) => error.message,
-            'message',
-            'Failed loading asset.',
-          ),
-        ),
-      );
-    });
-
-    test('loadFlutterAsset with some error.', () async {
-      expect(
-        () => webViewPlatform.loadFlutterAsset('some error'),
-        throwsA(
-          isA<PlatformException>().having(
-            (PlatformException error) => error.message,
-            'message',
-            'Some error occurred.',
-          ),
-        ),
-      );
-    });
-
-    test('loadHtmlString without base URL', () async {
-      await webViewPlatform.loadHtmlString(
-        'Test HTML string',
-      );
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'loadHtmlString',
-            arguments: <String, String?>{
-              'html': 'Test HTML string',
-              'baseUrl': null,
-            },
-          ),
-        ],
-      );
-    });
-
-    test('loadHtmlString without base URL', () async {
-      await webViewPlatform.loadHtmlString(
-        'Test HTML string',
-        baseUrl: 'https://flutter.dev',
-      );
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'loadHtmlString',
-            arguments: <String, String?>{
-              'html': 'Test HTML string',
-              'baseUrl': 'https://flutter.dev',
-            },
-          ),
-        ],
-      );
-    });
-
-    test('loadUrl with headers', () async {
-      await webViewPlatform.loadUrl(
-        'https://test.url',
-        const <String, String>{
-          'Content-Type': 'text/plain',
-          'Accept': 'text/html',
-        },
-      );
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'loadUrl',
-            arguments: <String, dynamic>{
-              'url': 'https://test.url',
-              'headers': <String, String>{
-                'Content-Type': 'text/plain',
-                'Accept': 'text/html',
-              },
-            },
-          ),
-        ],
-      );
-    });
-
-    test('loadUrl without headers', () async {
-      await webViewPlatform.loadUrl(
-        'https://test.url',
-        null,
-      );
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'loadUrl',
-            arguments: <String, dynamic>{
-              'url': 'https://test.url',
-              'headers': null,
-            },
-          ),
-        ],
-      );
-    });
-
-    test('loadRequest', () async {
-      await webViewPlatform.loadRequest(WebViewRequest(
-        uri: Uri.parse('https://test.url'),
-        method: WebViewRequestMethod.get,
-      ));
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'loadRequest',
-            arguments: <String, dynamic>{
-              'request': <String, dynamic>{
-                'uri': 'https://test.url',
-                'method': 'get',
-                'headers': <String, String>{},
-                'body': null,
-              }
-            },
-          ),
-        ],
-      );
-    });
-
-    test('loadRequest with optional parameters', () async {
-      await webViewPlatform.loadRequest(WebViewRequest(
-        uri: Uri.parse('https://test.url'),
-        method: WebViewRequestMethod.get,
-        headers: <String, String>{'foo': 'bar'},
-        body: Uint8List.fromList('hello world'.codeUnits),
-      ));
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'loadRequest',
-            arguments: <String, dynamic>{
-              'request': <String, dynamic>{
-                'uri': 'https://test.url',
-                'method': 'get',
-                'headers': <String, String>{'foo': 'bar'},
-                'body': 'hello world'.codeUnits,
-              }
-            },
-          ),
-        ],
-      );
-    });
-
-    test('currentUrl', () async {
-      final String? currentUrl = await webViewPlatform.currentUrl();
-
-      expect(currentUrl, 'https://test.url');
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'currentUrl',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('canGoBack', () async {
-      final bool canGoBack = await webViewPlatform.canGoBack();
-
-      expect(canGoBack, true);
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'canGoBack',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('canGoForward', () async {
-      final bool canGoForward = await webViewPlatform.canGoForward();
-
-      expect(canGoForward, true);
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'canGoForward',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('goBack', () async {
-      await webViewPlatform.goBack();
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'goBack',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('goForward', () async {
-      await webViewPlatform.goForward();
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'goForward',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('reload', () async {
-      await webViewPlatform.reload();
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'reload',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('clearCache', () async {
-      await webViewPlatform.clearCache();
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'clearCache',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('updateSettings', () async {
-      final WebSettings settings =
-          WebSettings(userAgent: const WebSetting<String?>.of('Dart Test'));
-      await webViewPlatform.updateSettings(settings);
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'updateSettings',
-            arguments: <String, dynamic>{
-              'userAgent': 'Dart Test',
-            },
-          ),
-        ],
-      );
-    });
-
-    test('updateSettings all parameters', () async {
-      final WebSettings settings = WebSettings(
-        userAgent: const WebSetting<String?>.of('Dart Test'),
-        javascriptMode: JavascriptMode.disabled,
-        hasNavigationDelegate: true,
-        hasProgressTracking: true,
-        debuggingEnabled: true,
-        gestureNavigationEnabled: true,
-        allowsInlineMediaPlayback: true,
-        zoomEnabled: false,
-      );
-      await webViewPlatform.updateSettings(settings);
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'updateSettings',
-            arguments: <String, dynamic>{
-              'userAgent': 'Dart Test',
-              'jsMode': 0,
-              'hasNavigationDelegate': true,
-              'hasProgressTracking': true,
-              'debuggingEnabled': true,
-              'gestureNavigationEnabled': true,
-              'allowsInlineMediaPlayback': true,
-              'zoomEnabled': false,
-            },
-          ),
-        ],
-      );
-    });
-
-    test('updateSettings without settings', () async {
-      final WebSettings settings =
-          WebSettings(userAgent: const WebSetting<String?>.absent());
-      await webViewPlatform.updateSettings(settings);
-
-      expect(
-        log.isEmpty,
-        true,
-      );
-    });
-
-    test('evaluateJavascript', () async {
-      final String evaluateJavascript =
-          await webViewPlatform.evaluateJavascript(
-        'This simulates some JavaScript code.',
-      );
-
-      expect('This simulates some JavaScript code.', evaluateJavascript);
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'evaluateJavascript',
-            arguments: 'This simulates some JavaScript code.',
-          ),
-        ],
-      );
-    });
-
-    test('runJavascript', () async {
-      await webViewPlatform.runJavascript(
-        'This simulates some JavaScript code.',
-      );
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'runJavascript',
-            arguments: 'This simulates some JavaScript code.',
-          ),
-        ],
-      );
-    });
-
-    test('runJavascriptReturningResult', () async {
-      final String evaluateJavascript =
-          await webViewPlatform.runJavascriptReturningResult(
-        'This simulates some JavaScript code.',
-      );
-
-      expect('This simulates some JavaScript code.', evaluateJavascript);
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'runJavascriptReturningResult',
-            arguments: 'This simulates some JavaScript code.',
-          ),
-        ],
-      );
-    });
-
-    test('addJavascriptChannels', () async {
-      final Set<String> channels = <String>{'channel one', 'channel two'};
-      await webViewPlatform.addJavascriptChannels(channels);
-
-      expect(log, <Matcher>[
-        isMethodCall(
-          'addJavascriptChannels',
-          arguments: <String>[
-            'channel one',
-            'channel two',
-          ],
-        ),
-      ]);
-    });
-
-    test('addJavascriptChannels without channels', () async {
-      final Set<String> channels = <String>{};
-      await webViewPlatform.addJavascriptChannels(channels);
-
-      expect(log, <Matcher>[
-        isMethodCall(
-          'addJavascriptChannels',
-          arguments: <String>[],
-        ),
-      ]);
-    });
-
-    test('removeJavascriptChannels', () async {
-      final Set<String> channels = <String>{'channel one', 'channel two'};
-      await webViewPlatform.removeJavascriptChannels(channels);
-
-      expect(log, <Matcher>[
-        isMethodCall(
-          'removeJavascriptChannels',
-          arguments: <String>[
-            'channel one',
-            'channel two',
-          ],
-        ),
-      ]);
-    });
-
-    test('removeJavascriptChannels without channels', () async {
-      final Set<String> channels = <String>{};
-      await webViewPlatform.removeJavascriptChannels(channels);
-
-      expect(log, <Matcher>[
-        isMethodCall(
-          'removeJavascriptChannels',
-          arguments: <String>[],
-        ),
-      ]);
-    });
-
-    test('getTitle', () async {
-      final String? title = await webViewPlatform.getTitle();
-
-      expect(title, null);
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall('getTitle', arguments: null),
-        ],
-      );
-    });
-
-    test('scrollTo', () async {
-      await webViewPlatform.scrollTo(10, 20);
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'scrollTo',
-            arguments: <String, int>{
-              'x': 10,
-              'y': 20,
-            },
-          ),
-        ],
-      );
-    });
-
-    test('scrollBy', () async {
-      await webViewPlatform.scrollBy(10, 20);
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'scrollBy',
-            arguments: <String, int>{
-              'x': 10,
-              'y': 20,
-            },
-          ),
-        ],
-      );
-    });
-
-    test('getScrollX', () async {
-      final int x = await webViewPlatform.getScrollX();
-
-      expect(x, 10);
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'getScrollX',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('getScrollY', () async {
-      final int y = await webViewPlatform.getScrollY();
-
-      expect(y, 20);
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'getScrollY',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('backgroundColor is null by default', () {
-      final CreationParams creationParams = CreationParams(
-        webSettings: WebSettings(
-          userAgent: const WebSetting<String?>.of('Dart Test'),
-        ),
-      );
-      final Map<String, dynamic> creationParamsMap =
-          MethodChannelWebViewPlatform.creationParamsToMap(creationParams);
-
-      expect(creationParamsMap['backgroundColor'], null);
-    });
-
-    test('backgroundColor is converted to an int', () {
-      const Color whiteColor = Color(0xFFFFFFFF);
-      final CreationParams creationParams = CreationParams(
-        backgroundColor: whiteColor,
-        webSettings: WebSettings(
-          userAgent: const WebSetting<String?>.of('Dart Test'),
-        ),
-      );
-      final Map<String, dynamic> creationParamsMap =
-          MethodChannelWebViewPlatform.creationParamsToMap(creationParams);
-
-      expect(creationParamsMap['backgroundColor'], whiteColor.value);
-    });
-  });
-
-  group('Tests on `plugins.flutter.io/cookie_manager` channel', () {
-    const MethodChannel cookieChannel =
-        MethodChannel('plugins.flutter.io/cookie_manager');
-
-    final List<MethodCall> log = <MethodCall>[];
-    cookieChannel.setMockMethodCallHandler((MethodCall methodCall) async {
-      log.add(methodCall);
-
-      if (methodCall.method == 'clearCookies') {
-        return true;
-      }
-
-      // Return null explicitly instead of relying on the implicit null
-      // returned by the method channel if no return statement is specified.
-      return null;
-    });
-
-    tearDown(() {
-      log.clear();
-    });
-
-    test('clearCookies', () async {
-      final bool clearCookies =
-          await MethodChannelWebViewPlatform.clearCookies();
-
-      expect(clearCookies, true);
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'clearCookies',
-            arguments: null,
-          ),
-        ],
-      );
-    });
-
-    test('setCookie', () async {
-      await MethodChannelWebViewPlatform.setCookie(const WebViewCookie(
-          name: 'foo', value: 'bar', domain: 'flutter.dev'));
-
-      expect(
-        log,
-        <Matcher>[
-          isMethodCall(
-            'setCookie',
-            arguments: <String, String>{
-              'name': 'foo',
-              'value': 'bar',
-              'domain': 'flutter.dev',
-              'path': '/',
-            },
-          ),
-        ],
-      );
-    });
-  });
-}
-
-class MockWebViewPlatformCallbacksHandler extends Mock
-    implements WebViewPlatformCallbacksHandler {}
-
-class MockJavascriptChannelRegistry extends Mock
-    implements JavascriptChannelRegistry {}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart
deleted file mode 100644
index 47e6737..0000000
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.mocks.dart
+++ /dev/null
@@ -1,72 +0,0 @@
-// Mocks generated by Mockito 5.0.16 from annotations
-// in webview_flutter_platform_interface/test/src/v4/platform_webview_controller_test.dart.
-// Do not manually edit this file.
-
-import 'dart:async' as _i4;
-
-import 'package:mockito/mockito.dart' as _i1;
-import 'package:webview_flutter_platform_interface/v4/src/platform_navigation_delegate.dart'
-    as _i3;
-import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart'
-    as _i2;
-
-// 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
-
-class _FakePlatformNavigationDelegateCreationParams_0 extends _i1.Fake
-    implements _i2.PlatformNavigationDelegateCreationParams {}
-
-/// A class which mocks [PlatformNavigationDelegate].
-///
-/// See the documentation for Mockito's code generation for more information.
-class MockPlatformNavigationDelegate extends _i1.Mock
-    implements _i3.PlatformNavigationDelegate {
-  MockPlatformNavigationDelegate() {
-    _i1.throwOnMissingStub(this);
-  }
-
-  @override
-  _i2.PlatformNavigationDelegateCreationParams get params =>
-      (super.noSuchMethod(Invocation.getter(#params),
-              returnValue: _FakePlatformNavigationDelegateCreationParams_0())
-          as _i2.PlatformNavigationDelegateCreationParams);
-  @override
-  _i4.Future<void> setOnNavigationRequest(
-          _i4.FutureOr<bool> Function({bool isForMainFrame, String url})?
-              onNavigationRequest) =>
-      (super.noSuchMethod(
-          Invocation.method(#setOnNavigationRequest, [onNavigationRequest]),
-          returnValue: Future<void>.value(),
-          returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
-  @override
-  _i4.Future<void> setOnPageStarted(void Function(String)? onPageStarted) =>
-      (super.noSuchMethod(Invocation.method(#setOnPageStarted, [onPageStarted]),
-          returnValue: Future<void>.value(),
-          returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
-  @override
-  _i4.Future<void> setOnPageFinished(void Function(String)? onPageFinished) =>
-      (super.noSuchMethod(
-          Invocation.method(#setOnPageFinished, [onPageFinished]),
-          returnValue: Future<void>.value(),
-          returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
-  @override
-  _i4.Future<void> setOnProgress(void Function(int)? onProgress) =>
-      (super.noSuchMethod(Invocation.method(#setOnProgress, [onProgress]),
-          returnValue: Future<void>.value(),
-          returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
-  @override
-  _i4.Future<void> setOnWebResourceError(
-          void Function(_i2.WebResourceError)? onWebResourceError) =>
-      (super.noSuchMethod(
-          Invocation.method(#setOnWebResourceError, [onWebResourceError]),
-          returnValue: Future<void>.value(),
-          returnValueForMissingStub: Future<void>.value()) as _i4.Future<void>);
-  @override
-  String toString() => super.toString();
-}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.mocks.dart
deleted file mode 100644
index 5ce0075..0000000
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.mocks.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-// Mocks generated by Mockito 5.0.16 from annotations
-// in webview_flutter_platform_interface/test/src/v4/webview_platform_test.dart.
-// Do not manually edit this file.
-
-import 'package:mockito/mockito.dart' as _i1;
-import 'package:webview_flutter_platform_interface/v4/src/platform_navigation_delegate.dart'
-    as _i3;
-import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart'
-    as _i4;
-import 'package:webview_flutter_platform_interface/v4/src/platform_webview_cookie_manager.dart'
-    as _i2;
-import 'package:webview_flutter_platform_interface/v4/src/platform_webview_widget.dart'
-    as _i5;
-import 'package:webview_flutter_platform_interface/v4/src/types/types.dart'
-    as _i7;
-import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart'
-    as _i6;
-
-// 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
-
-class _FakePlatformWebViewCookieManager_0 extends _i1.Fake
-    implements _i2.PlatformWebViewCookieManager {}
-
-class _FakePlatformNavigationDelegate_1 extends _i1.Fake
-    implements _i3.PlatformNavigationDelegate {}
-
-class _FakePlatformWebViewController_2 extends _i1.Fake
-    implements _i4.PlatformWebViewController {}
-
-class _FakePlatformWebViewWidget_3 extends _i1.Fake
-    implements _i5.PlatformWebViewWidget {}
-
-/// A class which mocks [WebViewPlatform].
-///
-/// See the documentation for Mockito's code generation for more information.
-class MockWebViewPlatform extends _i1.Mock implements _i6.WebViewPlatform {
-  MockWebViewPlatform() {
-    _i1.throwOnMissingStub(this);
-  }
-
-  @override
-  _i2.PlatformWebViewCookieManager createPlatformCookieManager(
-          _i7.PlatformWebViewCookieManagerCreationParams? params) =>
-      (super.noSuchMethod(
-              Invocation.method(#createPlatformCookieManager, [params]),
-              returnValue: _FakePlatformWebViewCookieManager_0())
-          as _i2.PlatformWebViewCookieManager);
-  @override
-  _i3.PlatformNavigationDelegate createPlatformNavigationDelegate(
-          _i7.PlatformNavigationDelegateCreationParams? params) =>
-      (super.noSuchMethod(
-              Invocation.method(#createPlatformNavigationDelegate, [params]),
-              returnValue: _FakePlatformNavigationDelegate_1())
-          as _i3.PlatformNavigationDelegate);
-  @override
-  _i4.PlatformWebViewController createPlatformWebViewController(
-          _i7.PlatformWebViewControllerCreationParams? params) =>
-      (super.noSuchMethod(
-              Invocation.method(#createPlatformWebViewController, [params]),
-              returnValue: _FakePlatformWebViewController_2())
-          as _i4.PlatformWebViewController);
-  @override
-  _i5.PlatformWebViewWidget createPlatformWebViewWidget(
-          _i7.PlatformWebViewWidgetCreationParams? params) =>
-      (super.noSuchMethod(
-              Invocation.method(#createPlatformWebViewWidget, [params]),
-              returnValue: _FakePlatformWebViewWidget_3())
-          as _i5.PlatformWebViewWidget);
-  @override
-  String toString() => super.toString();
-}
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart
similarity index 95%
rename from packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.dart
rename to packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart
index 4ab6d58..34f8406 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/v4/webview_platform_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart
@@ -6,8 +6,7 @@
 import 'package:mockito/annotations.dart';
 import 'package:mockito/mockito.dart';
 import 'package:plugin_platform_interface/plugin_platform_interface.dart';
-import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart';
-import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart';
+import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
 
 import 'webview_platform_test.mocks.dart';
 
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart
new file mode 100644
index 0000000..d613cdd
--- /dev/null
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart
@@ -0,0 +1,146 @@
+// Mocks generated by Mockito 5.3.2 from annotations
+// in webview_flutter_platform_interface/test/webview_platform_test.dart.
+// Do not manually edit this file.
+
+// ignore_for_file: no_leading_underscores_for_library_prefixes
+import 'package:mockito/mockito.dart' as _i1;
+import 'package:webview_flutter_platform_interface/src/platform_navigation_delegate.dart'
+    as _i3;
+import 'package:webview_flutter_platform_interface/src/platform_webview_controller.dart'
+    as _i4;
+import 'package:webview_flutter_platform_interface/src/platform_webview_cookie_manager.dart'
+    as _i2;
+import 'package:webview_flutter_platform_interface/src/platform_webview_widget.dart'
+    as _i5;
+import 'package:webview_flutter_platform_interface/src/types/types.dart' as _i7;
+import 'package:webview_flutter_platform_interface/src/webview_platform.dart'
+    as _i6;
+
+// 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 _FakePlatformWebViewCookieManager_0 extends _i1.SmartFake
+    implements _i2.PlatformWebViewCookieManager {
+  _FakePlatformWebViewCookieManager_0(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePlatformNavigationDelegate_1 extends _i1.SmartFake
+    implements _i3.PlatformNavigationDelegate {
+  _FakePlatformNavigationDelegate_1(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePlatformWebViewController_2 extends _i1.SmartFake
+    implements _i4.PlatformWebViewController {
+  _FakePlatformWebViewController_2(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+class _FakePlatformWebViewWidget_3 extends _i1.SmartFake
+    implements _i5.PlatformWebViewWidget {
+  _FakePlatformWebViewWidget_3(
+    Object parent,
+    Invocation parentInvocation,
+  ) : super(
+          parent,
+          parentInvocation,
+        );
+}
+
+/// A class which mocks [WebViewPlatform].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockWebViewPlatform extends _i1.Mock implements _i6.WebViewPlatform {
+  MockWebViewPlatform() {
+    _i1.throwOnMissingStub(this);
+  }
+
+  @override
+  _i2.PlatformWebViewCookieManager createPlatformCookieManager(
+          _i7.PlatformWebViewCookieManagerCreationParams? params) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createPlatformCookieManager,
+          [params],
+        ),
+        returnValue: _FakePlatformWebViewCookieManager_0(
+          this,
+          Invocation.method(
+            #createPlatformCookieManager,
+            [params],
+          ),
+        ),
+      ) as _i2.PlatformWebViewCookieManager);
+  @override
+  _i3.PlatformNavigationDelegate createPlatformNavigationDelegate(
+          _i7.PlatformNavigationDelegateCreationParams? params) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createPlatformNavigationDelegate,
+          [params],
+        ),
+        returnValue: _FakePlatformNavigationDelegate_1(
+          this,
+          Invocation.method(
+            #createPlatformNavigationDelegate,
+            [params],
+          ),
+        ),
+      ) as _i3.PlatformNavigationDelegate);
+  @override
+  _i4.PlatformWebViewController createPlatformWebViewController(
+          _i7.PlatformWebViewControllerCreationParams? params) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createPlatformWebViewController,
+          [params],
+        ),
+        returnValue: _FakePlatformWebViewController_2(
+          this,
+          Invocation.method(
+            #createPlatformWebViewController,
+            [params],
+          ),
+        ),
+      ) as _i4.PlatformWebViewController);
+  @override
+  _i5.PlatformWebViewWidget createPlatformWebViewWidget(
+          _i7.PlatformWebViewWidgetCreationParams? params) =>
+      (super.noSuchMethod(
+        Invocation.method(
+          #createPlatformWebViewWidget,
+          [params],
+        ),
+        returnValue: _FakePlatformWebViewWidget_3(
+          this,
+          Invocation.method(
+            #createPlatformWebViewWidget,
+            [params],
+          ),
+        ),
+      ) as _i5.PlatformWebViewWidget);
+}
diff --git a/script/configs/exclude_all_plugins_app.yaml b/script/configs/exclude_all_plugins_app.yaml
index 8dd0fde..62b20d9 100644
--- a/script/configs/exclude_all_plugins_app.yaml
+++ b/script/configs/exclude_all_plugins_app.yaml
@@ -8,3 +8,4 @@
 
 # This is a permament entry, as it should never be a direct app dependency.
 - plugin_platform_interface
+- webview_flutter_platform_interface
