[webview_flutter_platform_interface] Improves error message when `WebViewPlatform.instance` is null (#6938)

* add assertion

* formatting
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
index a4be504..19a7950 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.1
+
+* Improves error message when a platform interface class is used before `WebViewPlatform.instance` has been set.
+
 ## 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)
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart
index 2df6cff..ec7af71 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_navigation_delegate.dart
@@ -31,6 +31,13 @@
   /// Creates a new [PlatformNavigationDelegate]
   factory PlatformNavigationDelegate(
       PlatformNavigationDelegateCreationParams params) {
+    assert(
+      WebViewPlatform.instance != null,
+      'A platform implementation for `webview_flutter` has not been set. Please '
+      'ensure that an implementation of `WebViewPlatform` has been set to '
+      '`WebViewPlatform.instance` before use. For unit testing, '
+      '`WebViewPlatform.instance` can be set with your own test implementation.',
+    );
     final PlatformNavigationDelegate callbackDelegate =
         WebViewPlatform.instance!.createPlatformNavigationDelegate(params);
     PlatformInterface.verify(callbackDelegate, _token);
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart
index 7bb259c..bdeaa97 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart
@@ -21,6 +21,13 @@
   /// Creates a new [PlatformWebViewController]
   factory PlatformWebViewController(
       PlatformWebViewControllerCreationParams params) {
+    assert(
+      WebViewPlatform.instance != null,
+      'A platform implementation for `webview_flutter` has not been set. Please '
+      'ensure that an implementation of `WebViewPlatform` has been set to '
+      '`WebViewPlatform.instance` before use. For unit testing, '
+      '`WebViewPlatform.instance` can be set with your own test implementation.',
+    );
     final PlatformWebViewController webViewControllerDelegate =
         WebViewPlatform.instance!.createPlatformWebViewController(params);
     PlatformInterface.verify(webViewControllerDelegate, _token);
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart
index 9e981c9..a674067 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_cookie_manager.dart
@@ -19,6 +19,13 @@
   /// Creates a new [PlatformWebViewCookieManager]
   factory PlatformWebViewCookieManager(
       PlatformWebViewCookieManagerCreationParams params) {
+    assert(
+      WebViewPlatform.instance != null,
+      'A platform implementation for `webview_flutter` has not been set. Please '
+      'ensure that an implementation of `WebViewPlatform` has been set to '
+      '`WebViewPlatform.instance` before use. For unit testing, '
+      '`WebViewPlatform.instance` can be set with your own test implementation.',
+    );
     final PlatformWebViewCookieManager cookieManagerDelegate =
         WebViewPlatform.instance!.createPlatformCookieManager(params);
     PlatformInterface.verify(cookieManagerDelegate, _token);
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_widget.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_widget.dart
index 40334c6..2e49c80 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_widget.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_widget.dart
@@ -11,6 +11,13 @@
 abstract class PlatformWebViewWidget extends PlatformInterface {
   /// Creates a new [PlatformWebViewWidget]
   factory PlatformWebViewWidget(PlatformWebViewWidgetCreationParams params) {
+    assert(
+      WebViewPlatform.instance != null,
+      'A platform implementation for `webview_flutter` has not been set. Please '
+      'ensure that an implementation of `WebViewPlatform` has been set to '
+      '`WebViewPlatform.instance` before use. For unit testing, '
+      '`WebViewPlatform.instance` can be set with your own test implementation.',
+    );
     final PlatformWebViewWidget webViewWidgetDelegate =
         WebViewPlatform.instance!.createPlatformWebViewWidget(params);
     PlatformInterface.verify(webViewWidgetDelegate, _token);
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
index 3ba7a56..8653072 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: 2.0.0
+version: 2.0.1
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart
index 34f8406..ec24dd7 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.dart
@@ -18,6 +18,69 @@
     expect(WebViewPlatform.instance, isNull);
   });
 
+  // This test can only run while `WebViewPlatform.instance` is still null.
+  test(
+      'Interface classes throw assertion error when `WebViewPlatform.instance` is null',
+      () {
+    expect(
+      () => PlatformNavigationDelegate(
+        const PlatformNavigationDelegateCreationParams(),
+      ),
+      throwsA(isA<AssertionError>().having(
+        (AssertionError error) => error.message,
+        'message',
+        'A platform implementation for `webview_flutter` has not been set. Please '
+            'ensure that an implementation of `WebViewPlatform` has been set to '
+            '`WebViewPlatform.instance` before use. For unit testing, '
+            '`WebViewPlatform.instance` can be set with your own test implementation.',
+      )),
+    );
+
+    expect(
+      () => PlatformWebViewController(
+        const PlatformWebViewControllerCreationParams(),
+      ),
+      throwsA(isA<AssertionError>().having(
+        (AssertionError error) => error.message,
+        'message',
+        'A platform implementation for `webview_flutter` has not been set. Please '
+            'ensure that an implementation of `WebViewPlatform` has been set to '
+            '`WebViewPlatform.instance` before use. For unit testing, '
+            '`WebViewPlatform.instance` can be set with your own test implementation.',
+      )),
+    );
+
+    expect(
+      () => PlatformWebViewCookieManager(
+        const PlatformWebViewCookieManagerCreationParams(),
+      ),
+      throwsA(isA<AssertionError>().having(
+        (AssertionError error) => error.message,
+        'message',
+        'A platform implementation for `webview_flutter` has not been set. Please '
+            'ensure that an implementation of `WebViewPlatform` has been set to '
+            '`WebViewPlatform.instance` before use. For unit testing, '
+            '`WebViewPlatform.instance` can be set with your own test implementation.',
+      )),
+    );
+
+    expect(
+      () => PlatformWebViewWidget(
+        PlatformWebViewWidgetCreationParams(
+          controller: MockWebViewControllerDelegate(),
+        ),
+      ),
+      throwsA(isA<AssertionError>().having(
+        (AssertionError error) => error.message,
+        'message',
+        'A platform implementation for `webview_flutter` has not been set. Please '
+            'ensure that an implementation of `WebViewPlatform` has been set to '
+            '`WebViewPlatform.instance` before use. For unit testing, '
+            '`WebViewPlatform.instance` can be set with your own test implementation.',
+      )),
+    );
+  });
+
   test('Cannot be implemented with `implements`', () {
     expect(() {
       WebViewPlatform.instance = ImplementsWebViewPlatform();