[webview_flutter_android] Updates `pigeon` version to support null safety (#5395)

diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index fb5a2b8..c9d0239 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.8.6
+
+* Updates pigeon developer dependency to the latest version which adds support for null safety.
+
 ## 2.8.5
 
 * Migrates deprecated `Scaffold.showSnackBar` to `ScaffoldMessenger` in example app.
diff --git a/packages/webview_flutter/webview_flutter_android/README.md b/packages/webview_flutter/webview_flutter_android/README.md
index 020f1fc..04cbde2 100644
--- a/packages/webview_flutter/webview_flutter_android/README.md
+++ b/packages/webview_flutter/webview_flutter_android/README.md
@@ -9,7 +9,10 @@
 
 ## Contributing
 
-This package uses [pigeon][3] to generate the communication layer between Flutter and the host platform (Android). The communication interface is defined in the `pigeons/android_webview.dart` file. After editing the communication interface regenerate the communication layer by running the `./generatePigeons.sh` shell script.
+This package uses [pigeon][3] to generate the communication layer between Flutter and the host
+platform (Android). The communication interface is defined in the `pigeons/android_webview.dart`
+file. After editing the communication interface regenerate the communication layer by running
+`flutter pub run pigeon --input pigeons/android_webview.dart`.
 
 Due to [flutter/flutter#97744](https://github.com/flutter/flutter/issues/97744), the generated test
 pigeon file needs one of its imports updated to properly work with `mockito`.
@@ -26,7 +29,8 @@
 import 'package:webview_flutter_android/src/android_webview.pigeon.dart';
 ```
 
-Besides [pigeon][3] this package also uses [mockito][4] to generate mock objects for testing purposes. To generate the mock objects run the following command:
+Besides [pigeon][3] this package also uses [mockito][4] to generate mock objects for testing
+purposes. To generate the mock objects run the following command:
 ```bash
 flutter packages pub run build_runner build --delete-conflicting-outputs
 ```
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
index afca5ee..2e16331 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java
@@ -1,12 +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.
-
-// Autogenerated from Pigeon (v1.0.9), do not edit directly.
+// Autogenerated from Pigeon (v3.0.3), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 package io.flutter.plugins.webviewflutter;
 
+import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import io.flutter.plugin.common.BasicMessageChannel;
 import io.flutter.plugin.common.BinaryMessenger;
 import io.flutter.plugin.common.MessageCodec;
@@ -25,66 +27,140 @@
 
   /** Generated class from Pigeon that represents data sent in messages. */
   public static class WebResourceRequestData {
-    private String url;
+    private @NonNull String url;
 
-    public String getUrl() {
+    public @NonNull String getUrl() {
       return url;
     }
 
-    public void setUrl(String setterArg) {
+    public void setUrl(@NonNull String setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"url\" is null.");
+      }
       this.url = setterArg;
     }
 
-    private Boolean isForMainFrame;
+    private @NonNull Boolean isForMainFrame;
 
-    public Boolean getIsForMainFrame() {
+    public @NonNull Boolean getIsForMainFrame() {
       return isForMainFrame;
     }
 
-    public void setIsForMainFrame(Boolean setterArg) {
+    public void setIsForMainFrame(@NonNull Boolean setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"isForMainFrame\" is null.");
+      }
       this.isForMainFrame = setterArg;
     }
 
-    private Boolean isRedirect;
+    private @Nullable Boolean isRedirect;
 
-    public Boolean getIsRedirect() {
+    public @Nullable Boolean getIsRedirect() {
       return isRedirect;
     }
 
-    public void setIsRedirect(Boolean setterArg) {
+    public void setIsRedirect(@Nullable Boolean setterArg) {
       this.isRedirect = setterArg;
     }
 
-    private Boolean hasGesture;
+    private @NonNull Boolean hasGesture;
 
-    public Boolean getHasGesture() {
+    public @NonNull Boolean getHasGesture() {
       return hasGesture;
     }
 
-    public void setHasGesture(Boolean setterArg) {
+    public void setHasGesture(@NonNull Boolean setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"hasGesture\" is null.");
+      }
       this.hasGesture = setterArg;
     }
 
-    private String method;
+    private @NonNull String method;
 
-    public String getMethod() {
+    public @NonNull String getMethod() {
       return method;
     }
 
-    public void setMethod(String setterArg) {
+    public void setMethod(@NonNull String setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"method\" is null.");
+      }
       this.method = setterArg;
     }
 
-    private Map<String, String> requestHeaders;
+    private @NonNull Map<String, String> requestHeaders;
 
-    public Map<String, String> getRequestHeaders() {
+    public @NonNull Map<String, String> getRequestHeaders() {
       return requestHeaders;
     }
 
-    public void setRequestHeaders(Map<String, String> setterArg) {
+    public void setRequestHeaders(@NonNull Map<String, String> setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"requestHeaders\" is null.");
+      }
       this.requestHeaders = setterArg;
     }
 
+    /** Constructor is private to enforce null safety; use Builder. */
+    private WebResourceRequestData() {}
+
+    public static final class Builder {
+      private @Nullable String url;
+
+      public @NonNull Builder setUrl(@NonNull String setterArg) {
+        this.url = setterArg;
+        return this;
+      }
+
+      private @Nullable Boolean isForMainFrame;
+
+      public @NonNull Builder setIsForMainFrame(@NonNull Boolean setterArg) {
+        this.isForMainFrame = setterArg;
+        return this;
+      }
+
+      private @Nullable Boolean isRedirect;
+
+      public @NonNull Builder setIsRedirect(@Nullable Boolean setterArg) {
+        this.isRedirect = setterArg;
+        return this;
+      }
+
+      private @Nullable Boolean hasGesture;
+
+      public @NonNull Builder setHasGesture(@NonNull Boolean setterArg) {
+        this.hasGesture = setterArg;
+        return this;
+      }
+
+      private @Nullable String method;
+
+      public @NonNull Builder setMethod(@NonNull String setterArg) {
+        this.method = setterArg;
+        return this;
+      }
+
+      private @Nullable Map<String, String> requestHeaders;
+
+      public @NonNull Builder setRequestHeaders(@NonNull Map<String, String> setterArg) {
+        this.requestHeaders = setterArg;
+        return this;
+      }
+
+      public @NonNull WebResourceRequestData build() {
+        WebResourceRequestData pigeonReturn = new WebResourceRequestData();
+        pigeonReturn.setUrl(url);
+        pigeonReturn.setIsForMainFrame(isForMainFrame);
+        pigeonReturn.setIsRedirect(isRedirect);
+        pigeonReturn.setHasGesture(hasGesture);
+        pigeonReturn.setMethod(method);
+        pigeonReturn.setRequestHeaders(requestHeaders);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
     Map<String, Object> toMap() {
       Map<String, Object> toMapResult = new HashMap<>();
       toMapResult.put("url", url);
@@ -96,46 +172,79 @@
       return toMapResult;
     }
 
-    static WebResourceRequestData fromMap(Map<String, Object> map) {
-      WebResourceRequestData fromMapResult = new WebResourceRequestData();
+    static @NonNull WebResourceRequestData fromMap(@NonNull Map<String, Object> map) {
+      WebResourceRequestData pigeonResult = new WebResourceRequestData();
       Object url = map.get("url");
-      fromMapResult.url = (String) url;
+      pigeonResult.setUrl((String) url);
       Object isForMainFrame = map.get("isForMainFrame");
-      fromMapResult.isForMainFrame = (Boolean) isForMainFrame;
+      pigeonResult.setIsForMainFrame((Boolean) isForMainFrame);
       Object isRedirect = map.get("isRedirect");
-      fromMapResult.isRedirect = (Boolean) isRedirect;
+      pigeonResult.setIsRedirect((Boolean) isRedirect);
       Object hasGesture = map.get("hasGesture");
-      fromMapResult.hasGesture = (Boolean) hasGesture;
+      pigeonResult.setHasGesture((Boolean) hasGesture);
       Object method = map.get("method");
-      fromMapResult.method = (String) method;
+      pigeonResult.setMethod((String) method);
       Object requestHeaders = map.get("requestHeaders");
-      fromMapResult.requestHeaders = (Map<String, String>) requestHeaders;
-      return fromMapResult;
+      pigeonResult.setRequestHeaders((Map<String, String>) requestHeaders);
+      return pigeonResult;
     }
   }
 
   /** Generated class from Pigeon that represents data sent in messages. */
   public static class WebResourceErrorData {
-    private Long errorCode;
+    private @NonNull Long errorCode;
 
-    public Long getErrorCode() {
+    public @NonNull Long getErrorCode() {
       return errorCode;
     }
 
-    public void setErrorCode(Long setterArg) {
+    public void setErrorCode(@NonNull Long setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"errorCode\" is null.");
+      }
       this.errorCode = setterArg;
     }
 
-    private String description;
+    private @NonNull String description;
 
-    public String getDescription() {
+    public @NonNull String getDescription() {
       return description;
     }
 
-    public void setDescription(String setterArg) {
+    public void setDescription(@NonNull String setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"description\" is null.");
+      }
       this.description = setterArg;
     }
 
+    /** Constructor is private to enforce null safety; use Builder. */
+    private WebResourceErrorData() {}
+
+    public static final class Builder {
+      private @Nullable Long errorCode;
+
+      public @NonNull Builder setErrorCode(@NonNull Long setterArg) {
+        this.errorCode = setterArg;
+        return this;
+      }
+
+      private @Nullable String description;
+
+      public @NonNull Builder setDescription(@NonNull String setterArg) {
+        this.description = setterArg;
+        return this;
+      }
+
+      public @NonNull WebResourceErrorData build() {
+        WebResourceErrorData pigeonReturn = new WebResourceErrorData();
+        pigeonReturn.setErrorCode(errorCode);
+        pigeonReturn.setDescription(description);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
     Map<String, Object> toMap() {
       Map<String, Object> toMapResult = new HashMap<>();
       toMapResult.put("errorCode", errorCode);
@@ -143,16 +252,16 @@
       return toMapResult;
     }
 
-    static WebResourceErrorData fromMap(Map<String, Object> map) {
-      WebResourceErrorData fromMapResult = new WebResourceErrorData();
+    static @NonNull WebResourceErrorData fromMap(@NonNull Map<String, Object> map) {
+      WebResourceErrorData pigeonResult = new WebResourceErrorData();
       Object errorCode = map.get("errorCode");
-      fromMapResult.errorCode =
+      pigeonResult.setErrorCode(
           (errorCode == null)
               ? null
-              : ((errorCode instanceof Integer) ? (Integer) errorCode : (Long) errorCode);
+              : ((errorCode instanceof Integer) ? (Integer) errorCode : (Long) errorCode));
       Object description = map.get("description");
-      fromMapResult.description = (String) description;
-      return fromMapResult;
+      pigeonResult.setDescription((String) description);
+      return pigeonResult;
     }
   }
 
@@ -172,7 +281,7 @@
   public interface CookieManagerHostApi {
     void clearCookies(Result<Boolean> result);
 
-    void setCookie(String url, String value);
+    void setCookie(@NonNull String url, @NonNull String value);
 
     /** The codec used by CookieManagerHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -258,63 +367,76 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebViewHostApi {
-    void create(Long instanceId, Boolean useHybridComposition);
+    void create(@NonNull Long instanceId, @NonNull Boolean useHybridComposition);
 
-    void dispose(Long instanceId);
+    void dispose(@NonNull Long instanceId);
 
-    void loadData(Long instanceId, String data, String mimeType, String encoding);
+    void loadData(
+        @NonNull Long instanceId,
+        @NonNull String data,
+        @Nullable String mimeType,
+        @Nullable String encoding);
 
     void loadDataWithBaseUrl(
-        Long instanceId,
-        String baseUrl,
-        String data,
-        String mimeType,
-        String encoding,
-        String historyUrl);
+        @NonNull Long instanceId,
+        @Nullable String baseUrl,
+        @NonNull String data,
+        @Nullable String mimeType,
+        @Nullable String encoding,
+        @Nullable String historyUrl);
 
-    void loadUrl(Long instanceId, String url, Map<String, String> headers);
+    void loadUrl(
+        @NonNull Long instanceId, @NonNull String url, @NonNull Map<String, String> headers);
 
-    void postUrl(Long instanceId, String url, byte[] data);
+    void postUrl(@NonNull Long instanceId, @NonNull String url, @NonNull byte[] data);
 
-    String getUrl(Long instanceId);
+    @Nullable
+    String getUrl(@NonNull Long instanceId);
 
-    Boolean canGoBack(Long instanceId);
+    @NonNull
+    Boolean canGoBack(@NonNull Long instanceId);
 
-    Boolean canGoForward(Long instanceId);
+    @NonNull
+    Boolean canGoForward(@NonNull Long instanceId);
 
-    void goBack(Long instanceId);
+    void goBack(@NonNull Long instanceId);
 
-    void goForward(Long instanceId);
+    void goForward(@NonNull Long instanceId);
 
-    void reload(Long instanceId);
+    void reload(@NonNull Long instanceId);
 
-    void clearCache(Long instanceId, Boolean includeDiskFiles);
+    void clearCache(@NonNull Long instanceId, @NonNull Boolean includeDiskFiles);
 
-    void evaluateJavascript(Long instanceId, String javascriptString, Result<String> result);
+    void evaluateJavascript(
+        @NonNull Long instanceId, @NonNull String javascriptString, Result<String> result);
 
-    String getTitle(Long instanceId);
+    @Nullable
+    String getTitle(@NonNull Long instanceId);
 
-    void scrollTo(Long instanceId, Long x, Long y);
+    void scrollTo(@NonNull Long instanceId, @NonNull Long x, @NonNull Long y);
 
-    void scrollBy(Long instanceId, Long x, Long y);
+    void scrollBy(@NonNull Long instanceId, @NonNull Long x, @NonNull Long y);
 
-    Long getScrollX(Long instanceId);
+    @NonNull
+    Long getScrollX(@NonNull Long instanceId);
 
-    Long getScrollY(Long instanceId);
+    @NonNull
+    Long getScrollY(@NonNull Long instanceId);
 
-    void setWebContentsDebuggingEnabled(Boolean enabled);
+    void setWebContentsDebuggingEnabled(@NonNull Boolean enabled);
 
-    void setWebViewClient(Long instanceId, Long webViewClientInstanceId);
+    void setWebViewClient(@NonNull Long instanceId, @NonNull Long webViewClientInstanceId);
 
-    void addJavaScriptChannel(Long instanceId, Long javaScriptChannelInstanceId);
+    void addJavaScriptChannel(@NonNull Long instanceId, @NonNull Long javaScriptChannelInstanceId);
 
-    void removeJavaScriptChannel(Long instanceId, Long javaScriptChannelInstanceId);
+    void removeJavaScriptChannel(
+        @NonNull Long instanceId, @NonNull Long javaScriptChannelInstanceId);
 
-    void setDownloadListener(Long instanceId, Long listenerInstanceId);
+    void setDownloadListener(@NonNull Long instanceId, @Nullable Long listenerInstanceId);
 
-    void setWebChromeClient(Long instanceId, Long clientInstanceId);
+    void setWebChromeClient(@NonNull Long instanceId, @Nullable Long clientInstanceId);
 
-    void setBackgroundColor(Long instanceId, Long color);
+    void setBackgroundColor(@NonNull Long instanceId, @NonNull Long color);
 
     /** The codec used by WebViewHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -341,7 +463,9 @@
                   if (useHybridCompositionArg == null) {
                     throw new NullPointerException("useHybridCompositionArg unexpectedly null.");
                   }
-                  api.create(instanceIdArg.longValue(), useHybridCompositionArg);
+                  api.create(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      useHybridCompositionArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -366,7 +490,7 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  api.dispose(instanceIdArg.longValue());
+                  api.dispose((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -396,14 +520,12 @@
                     throw new NullPointerException("dataArg unexpectedly null.");
                   }
                   String mimeTypeArg = (String) args.get(2);
-                  if (mimeTypeArg == null) {
-                    throw new NullPointerException("mimeTypeArg unexpectedly null.");
-                  }
                   String encodingArg = (String) args.get(3);
-                  if (encodingArg == null) {
-                    throw new NullPointerException("encodingArg unexpectedly null.");
-                  }
-                  api.loadData(instanceIdArg.longValue(), dataArg, mimeTypeArg, encodingArg);
+                  api.loadData(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      dataArg,
+                      mimeTypeArg,
+                      encodingArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -431,27 +553,15 @@
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
                   String baseUrlArg = (String) args.get(1);
-                  if (baseUrlArg == null) {
-                    throw new NullPointerException("baseUrlArg unexpectedly null.");
-                  }
                   String dataArg = (String) args.get(2);
                   if (dataArg == null) {
                     throw new NullPointerException("dataArg unexpectedly null.");
                   }
                   String mimeTypeArg = (String) args.get(3);
-                  if (mimeTypeArg == null) {
-                    throw new NullPointerException("mimeTypeArg unexpectedly null.");
-                  }
                   String encodingArg = (String) args.get(4);
-                  if (encodingArg == null) {
-                    throw new NullPointerException("encodingArg unexpectedly null.");
-                  }
                   String historyUrlArg = (String) args.get(5);
-                  if (historyUrlArg == null) {
-                    throw new NullPointerException("historyUrlArg unexpectedly null.");
-                  }
                   api.loadDataWithBaseUrl(
-                      instanceIdArg.longValue(),
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
                       baseUrlArg,
                       dataArg,
                       mimeTypeArg,
@@ -489,7 +599,10 @@
                   if (headersArg == null) {
                     throw new NullPointerException("headersArg unexpectedly null.");
                   }
-                  api.loadUrl(instanceIdArg.longValue(), urlArg, headersArg);
+                  api.loadUrl(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      urlArg,
+                      headersArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -522,7 +635,8 @@
                   if (dataArg == null) {
                     throw new NullPointerException("dataArg unexpectedly null.");
                   }
-                  api.postUrl(instanceIdArg.longValue(), urlArg, dataArg);
+                  api.postUrl(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), urlArg, dataArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -547,7 +661,8 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  String output = api.getUrl(instanceIdArg.longValue());
+                  String output =
+                      api.getUrl((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", output);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -572,7 +687,8 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  Boolean output = api.canGoBack(instanceIdArg.longValue());
+                  Boolean output =
+                      api.canGoBack((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", output);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -597,7 +713,8 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  Boolean output = api.canGoForward(instanceIdArg.longValue());
+                  Boolean output =
+                      api.canGoForward((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", output);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -622,7 +739,7 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  api.goBack(instanceIdArg.longValue());
+                  api.goBack((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -647,7 +764,7 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  api.goForward(instanceIdArg.longValue());
+                  api.goForward((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -672,7 +789,7 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  api.reload(instanceIdArg.longValue());
+                  api.reload((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -701,7 +818,9 @@
                   if (includeDiskFilesArg == null) {
                     throw new NullPointerException("includeDiskFilesArg unexpectedly null.");
                   }
-                  api.clearCache(instanceIdArg.longValue(), includeDiskFilesArg);
+                  api.clearCache(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      includeDiskFilesArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -746,7 +865,9 @@
                       };
 
                   api.evaluateJavascript(
-                      instanceIdArg.longValue(), javascriptStringArg, resultCallback);
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      javascriptStringArg,
+                      resultCallback);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                   reply.reply(wrapped);
@@ -770,7 +891,8 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  String output = api.getTitle(instanceIdArg.longValue());
+                  String output =
+                      api.getTitle((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", output);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -803,7 +925,10 @@
                   if (yArg == null) {
                     throw new NullPointerException("yArg unexpectedly null.");
                   }
-                  api.scrollTo(instanceIdArg.longValue(), xArg.longValue(), yArg.longValue());
+                  api.scrollTo(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (xArg == null) ? null : xArg.longValue(),
+                      (yArg == null) ? null : yArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -836,7 +961,10 @@
                   if (yArg == null) {
                     throw new NullPointerException("yArg unexpectedly null.");
                   }
-                  api.scrollBy(instanceIdArg.longValue(), xArg.longValue(), yArg.longValue());
+                  api.scrollBy(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (xArg == null) ? null : xArg.longValue(),
+                      (yArg == null) ? null : yArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -861,7 +989,8 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  Long output = api.getScrollX(instanceIdArg.longValue());
+                  Long output =
+                      api.getScrollX((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", output);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -886,7 +1015,8 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  Long output = api.getScrollY(instanceIdArg.longValue());
+                  Long output =
+                      api.getScrollY((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", output);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -943,7 +1073,10 @@
                     throw new NullPointerException("webViewClientInstanceIdArg unexpectedly null.");
                   }
                   api.setWebViewClient(
-                      instanceIdArg.longValue(), webViewClientInstanceIdArg.longValue());
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (webViewClientInstanceIdArg == null)
+                          ? null
+                          : webViewClientInstanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -976,7 +1109,10 @@
                         "javaScriptChannelInstanceIdArg unexpectedly null.");
                   }
                   api.addJavaScriptChannel(
-                      instanceIdArg.longValue(), javaScriptChannelInstanceIdArg.longValue());
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (javaScriptChannelInstanceIdArg == null)
+                          ? null
+                          : javaScriptChannelInstanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1009,7 +1145,10 @@
                         "javaScriptChannelInstanceIdArg unexpectedly null.");
                   }
                   api.removeJavaScriptChannel(
-                      instanceIdArg.longValue(), javaScriptChannelInstanceIdArg.longValue());
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (javaScriptChannelInstanceIdArg == null)
+                          ? null
+                          : javaScriptChannelInstanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1037,11 +1176,9 @@
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
                   Number listenerInstanceIdArg = (Number) args.get(1);
-                  if (listenerInstanceIdArg == null) {
-                    throw new NullPointerException("listenerInstanceIdArg unexpectedly null.");
-                  }
                   api.setDownloadListener(
-                      instanceIdArg.longValue(), listenerInstanceIdArg.longValue());
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (listenerInstanceIdArg == null) ? null : listenerInstanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1069,11 +1206,9 @@
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
                   Number clientInstanceIdArg = (Number) args.get(1);
-                  if (clientInstanceIdArg == null) {
-                    throw new NullPointerException("clientInstanceIdArg unexpectedly null.");
-                  }
                   api.setWebChromeClient(
-                      instanceIdArg.longValue(), clientInstanceIdArg.longValue());
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (clientInstanceIdArg == null) ? null : clientInstanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1104,7 +1239,9 @@
                   if (colorArg == null) {
                     throw new NullPointerException("colorArg unexpectedly null.");
                   }
-                  api.setBackgroundColor(instanceIdArg.longValue(), colorArg.longValue());
+                  api.setBackgroundColor(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (colorArg == null) ? null : colorArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1126,33 +1263,33 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebSettingsHostApi {
-    void create(Long instanceId, Long webViewInstanceId);
+    void create(@NonNull Long instanceId, @NonNull Long webViewInstanceId);
 
-    void dispose(Long instanceId);
+    void dispose(@NonNull Long instanceId);
 
-    void setDomStorageEnabled(Long instanceId, Boolean flag);
+    void setDomStorageEnabled(@NonNull Long instanceId, @NonNull Boolean flag);
 
-    void setJavaScriptCanOpenWindowsAutomatically(Long instanceId, Boolean flag);
+    void setJavaScriptCanOpenWindowsAutomatically(@NonNull Long instanceId, @NonNull Boolean flag);
 
-    void setSupportMultipleWindows(Long instanceId, Boolean support);
+    void setSupportMultipleWindows(@NonNull Long instanceId, @NonNull Boolean support);
 
-    void setJavaScriptEnabled(Long instanceId, Boolean flag);
+    void setJavaScriptEnabled(@NonNull Long instanceId, @NonNull Boolean flag);
 
-    void setUserAgentString(Long instanceId, String userAgentString);
+    void setUserAgentString(@NonNull Long instanceId, @Nullable String userAgentString);
 
-    void setMediaPlaybackRequiresUserGesture(Long instanceId, Boolean require);
+    void setMediaPlaybackRequiresUserGesture(@NonNull Long instanceId, @NonNull Boolean require);
 
-    void setSupportZoom(Long instanceId, Boolean support);
+    void setSupportZoom(@NonNull Long instanceId, @NonNull Boolean support);
 
-    void setLoadWithOverviewMode(Long instanceId, Boolean overview);
+    void setLoadWithOverviewMode(@NonNull Long instanceId, @NonNull Boolean overview);
 
-    void setUseWideViewPort(Long instanceId, Boolean use);
+    void setUseWideViewPort(@NonNull Long instanceId, @NonNull Boolean use);
 
-    void setDisplayZoomControls(Long instanceId, Boolean enabled);
+    void setDisplayZoomControls(@NonNull Long instanceId, @NonNull Boolean enabled);
 
-    void setBuiltInZoomControls(Long instanceId, Boolean enabled);
+    void setBuiltInZoomControls(@NonNull Long instanceId, @NonNull Boolean enabled);
 
-    void setAllowFileAccess(Long instanceId, Boolean enabled);
+    void setAllowFileAccess(@NonNull Long instanceId, @NonNull Boolean enabled);
 
     /** The codec used by WebSettingsHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -1181,7 +1318,9 @@
                   if (webViewInstanceIdArg == null) {
                     throw new NullPointerException("webViewInstanceIdArg unexpectedly null.");
                   }
-                  api.create(instanceIdArg.longValue(), webViewInstanceIdArg.longValue());
+                  api.create(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (webViewInstanceIdArg == null) ? null : webViewInstanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1206,7 +1345,7 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  api.dispose(instanceIdArg.longValue());
+                  api.dispose((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1237,7 +1376,8 @@
                   if (flagArg == null) {
                     throw new NullPointerException("flagArg unexpectedly null.");
                   }
-                  api.setDomStorageEnabled(instanceIdArg.longValue(), flagArg);
+                  api.setDomStorageEnabled(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), flagArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1268,7 +1408,8 @@
                   if (flagArg == null) {
                     throw new NullPointerException("flagArg unexpectedly null.");
                   }
-                  api.setJavaScriptCanOpenWindowsAutomatically(instanceIdArg.longValue(), flagArg);
+                  api.setJavaScriptCanOpenWindowsAutomatically(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), flagArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1299,7 +1440,8 @@
                   if (supportArg == null) {
                     throw new NullPointerException("supportArg unexpectedly null.");
                   }
-                  api.setSupportMultipleWindows(instanceIdArg.longValue(), supportArg);
+                  api.setSupportMultipleWindows(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), supportArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1330,7 +1472,8 @@
                   if (flagArg == null) {
                     throw new NullPointerException("flagArg unexpectedly null.");
                   }
-                  api.setJavaScriptEnabled(instanceIdArg.longValue(), flagArg);
+                  api.setJavaScriptEnabled(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), flagArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1358,10 +1501,9 @@
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
                   String userAgentStringArg = (String) args.get(1);
-                  if (userAgentStringArg == null) {
-                    throw new NullPointerException("userAgentStringArg unexpectedly null.");
-                  }
-                  api.setUserAgentString(instanceIdArg.longValue(), userAgentStringArg);
+                  api.setUserAgentString(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      userAgentStringArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1392,7 +1534,8 @@
                   if (requireArg == null) {
                     throw new NullPointerException("requireArg unexpectedly null.");
                   }
-                  api.setMediaPlaybackRequiresUserGesture(instanceIdArg.longValue(), requireArg);
+                  api.setMediaPlaybackRequiresUserGesture(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), requireArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1423,7 +1566,8 @@
                   if (supportArg == null) {
                     throw new NullPointerException("supportArg unexpectedly null.");
                   }
-                  api.setSupportZoom(instanceIdArg.longValue(), supportArg);
+                  api.setSupportZoom(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), supportArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1454,7 +1598,8 @@
                   if (overviewArg == null) {
                     throw new NullPointerException("overviewArg unexpectedly null.");
                   }
-                  api.setLoadWithOverviewMode(instanceIdArg.longValue(), overviewArg);
+                  api.setLoadWithOverviewMode(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), overviewArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1485,7 +1630,8 @@
                   if (useArg == null) {
                     throw new NullPointerException("useArg unexpectedly null.");
                   }
-                  api.setUseWideViewPort(instanceIdArg.longValue(), useArg);
+                  api.setUseWideViewPort(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), useArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1516,7 +1662,8 @@
                   if (enabledArg == null) {
                     throw new NullPointerException("enabledArg unexpectedly null.");
                   }
-                  api.setDisplayZoomControls(instanceIdArg.longValue(), enabledArg);
+                  api.setDisplayZoomControls(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), enabledArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1547,7 +1694,8 @@
                   if (enabledArg == null) {
                     throw new NullPointerException("enabledArg unexpectedly null.");
                   }
-                  api.setBuiltInZoomControls(instanceIdArg.longValue(), enabledArg);
+                  api.setBuiltInZoomControls(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), enabledArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1578,7 +1726,8 @@
                   if (enabledArg == null) {
                     throw new NullPointerException("enabledArg unexpectedly null.");
                   }
-                  api.setAllowFileAccess(instanceIdArg.longValue(), enabledArg);
+                  api.setAllowFileAccess(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), enabledArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1601,7 +1750,7 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface JavaScriptChannelHostApi {
-    void create(Long instanceId, String channelName);
+    void create(@NonNull Long instanceId, @NonNull String channelName);
 
     /** The codec used by JavaScriptChannelHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -1631,7 +1780,8 @@
                   if (channelNameArg == null) {
                     throw new NullPointerException("channelNameArg unexpectedly null.");
                   }
-                  api.create(instanceIdArg.longValue(), channelNameArg);
+                  api.create(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(), channelNameArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1668,7 +1818,7 @@
       return JavaScriptChannelFlutterApiCodec.INSTANCE;
     }
 
-    public void dispose(Long instanceIdArg, Reply<Void> callback) {
+    public void dispose(@NonNull Long instanceIdArg, Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger,
@@ -1681,7 +1831,8 @@
           });
     }
 
-    public void postMessage(Long instanceIdArg, String messageArg, Reply<Void> callback) {
+    public void postMessage(
+        @NonNull Long instanceIdArg, @NonNull String messageArg, Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger,
@@ -1703,7 +1854,7 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebViewClientHostApi {
-    void create(Long instanceId, Boolean shouldOverrideUrlLoading);
+    void create(@NonNull Long instanceId, @NonNull Boolean shouldOverrideUrlLoading);
 
     /** The codec used by WebViewClientHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -1734,7 +1885,9 @@
                     throw new NullPointerException(
                         "shouldOverrideUrlLoadingArg unexpectedly null.");
                   }
-                  api.create(instanceIdArg.longValue(), shouldOverrideUrlLoadingArg);
+                  api.create(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      shouldOverrideUrlLoadingArg);
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1797,7 +1950,7 @@
       return WebViewClientFlutterApiCodec.INSTANCE;
     }
 
-    public void dispose(Long instanceIdArg, Reply<Void> callback) {
+    public void dispose(@NonNull Long instanceIdArg, Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger, "dev.flutter.pigeon.WebViewClientFlutterApi.dispose", getCodec());
@@ -1809,7 +1962,10 @@
     }
 
     public void onPageStarted(
-        Long instanceIdArg, Long webViewInstanceIdArg, String urlArg, Reply<Void> callback) {
+        @NonNull Long instanceIdArg,
+        @NonNull Long webViewInstanceIdArg,
+        @NonNull String urlArg,
+        Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger,
@@ -1823,7 +1979,10 @@
     }
 
     public void onPageFinished(
-        Long instanceIdArg, Long webViewInstanceIdArg, String urlArg, Reply<Void> callback) {
+        @NonNull Long instanceIdArg,
+        @NonNull Long webViewInstanceIdArg,
+        @NonNull String urlArg,
+        Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger,
@@ -1837,10 +1996,10 @@
     }
 
     public void onReceivedRequestError(
-        Long instanceIdArg,
-        Long webViewInstanceIdArg,
-        WebResourceRequestData requestArg,
-        WebResourceErrorData errorArg,
+        @NonNull Long instanceIdArg,
+        @NonNull Long webViewInstanceIdArg,
+        @NonNull WebResourceRequestData requestArg,
+        @NonNull WebResourceErrorData errorArg,
         Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
@@ -1856,11 +2015,11 @@
     }
 
     public void onReceivedError(
-        Long instanceIdArg,
-        Long webViewInstanceIdArg,
-        Long errorCodeArg,
-        String descriptionArg,
-        String failingUrlArg,
+        @NonNull Long instanceIdArg,
+        @NonNull Long webViewInstanceIdArg,
+        @NonNull Long errorCodeArg,
+        @NonNull String descriptionArg,
+        @NonNull String failingUrlArg,
         Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
@@ -1881,9 +2040,9 @@
     }
 
     public void requestLoading(
-        Long instanceIdArg,
-        Long webViewInstanceIdArg,
-        WebResourceRequestData requestArg,
+        @NonNull Long instanceIdArg,
+        @NonNull Long webViewInstanceIdArg,
+        @NonNull WebResourceRequestData requestArg,
         Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
@@ -1898,7 +2057,10 @@
     }
 
     public void urlLoading(
-        Long instanceIdArg, Long webViewInstanceIdArg, String urlArg, Reply<Void> callback) {
+        @NonNull Long instanceIdArg,
+        @NonNull Long webViewInstanceIdArg,
+        @NonNull String urlArg,
+        Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger, "dev.flutter.pigeon.WebViewClientFlutterApi.urlLoading", getCodec());
@@ -1918,7 +2080,7 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface DownloadListenerHostApi {
-    void create(Long instanceId);
+    void create(@NonNull Long instanceId);
 
     /** The codec used by DownloadListenerHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -1944,7 +2106,7 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  api.create(instanceIdArg.longValue());
+                  api.create((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -1981,7 +2143,7 @@
       return DownloadListenerFlutterApiCodec.INSTANCE;
     }
 
-    public void dispose(Long instanceIdArg, Reply<Void> callback) {
+    public void dispose(@NonNull Long instanceIdArg, Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger, "dev.flutter.pigeon.DownloadListenerFlutterApi.dispose", getCodec());
@@ -1993,12 +2155,12 @@
     }
 
     public void onDownloadStart(
-        Long instanceIdArg,
-        String urlArg,
-        String userAgentArg,
-        String contentDispositionArg,
-        String mimetypeArg,
-        Long contentLengthArg,
+        @NonNull Long instanceIdArg,
+        @NonNull String urlArg,
+        @NonNull String userAgentArg,
+        @NonNull String contentDispositionArg,
+        @NonNull String mimetypeArg,
+        @NonNull Long contentLengthArg,
         Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
@@ -2028,7 +2190,7 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebChromeClientHostApi {
-    void create(Long instanceId, Long webViewClientInstanceId);
+    void create(@NonNull Long instanceId, @NonNull Long webViewClientInstanceId);
 
     /** The codec used by WebChromeClientHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -2058,7 +2220,11 @@
                   if (webViewClientInstanceIdArg == null) {
                     throw new NullPointerException("webViewClientInstanceIdArg unexpectedly null.");
                   }
-                  api.create(instanceIdArg.longValue(), webViewClientInstanceIdArg.longValue());
+                  api.create(
+                      (instanceIdArg == null) ? null : instanceIdArg.longValue(),
+                      (webViewClientInstanceIdArg == null)
+                          ? null
+                          : webViewClientInstanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -2081,9 +2247,11 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface FlutterAssetManagerHostApi {
-    List<String> list(String path);
+    @NonNull
+    List<String> list(@NonNull String path);
 
-    String getAssetFilePathByName(String name);
+    @NonNull
+    String getAssetFilePathByName(@NonNull String name);
 
     /** The codec used by FlutterAssetManagerHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -2173,7 +2341,7 @@
       return WebChromeClientFlutterApiCodec.INSTANCE;
     }
 
-    public void dispose(Long instanceIdArg, Reply<Void> callback) {
+    public void dispose(@NonNull Long instanceIdArg, Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger, "dev.flutter.pigeon.WebChromeClientFlutterApi.dispose", getCodec());
@@ -2185,7 +2353,10 @@
     }
 
     public void onProgressChanged(
-        Long instanceIdArg, Long webViewInstanceIdArg, Long progressArg, Reply<Void> callback) {
+        @NonNull Long instanceIdArg,
+        @NonNull Long webViewInstanceIdArg,
+        @NonNull Long progressArg,
+        Reply<Void> callback) {
       BasicMessageChannel<Object> channel =
           new BasicMessageChannel<>(
               binaryMessenger,
@@ -2207,9 +2378,9 @@
 
   /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
   public interface WebStorageHostApi {
-    void create(Long instanceId);
+    void create(@NonNull Long instanceId);
 
-    void deleteAllData(Long instanceId);
+    void deleteAllData(@NonNull Long instanceId);
 
     /** The codec used by WebStorageHostApi. */
     static MessageCodec<Object> getCodec() {
@@ -2234,7 +2405,7 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  api.create(instanceIdArg.longValue());
+                  api.create((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -2259,7 +2430,7 @@
                   if (instanceIdArg == null) {
                     throw new NullPointerException("instanceIdArg unexpectedly null.");
                   }
-                  api.deleteAllData(instanceIdArg.longValue());
+                  api.deleteAllData((instanceIdArg == null) ? null : instanceIdArg.longValue());
                   wrapped.put("result", null);
                 } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
@@ -2277,7 +2448,9 @@
     Map<String, Object> errorMap = new HashMap<>();
     errorMap.put("message", exception.toString());
     errorMap.put("code", exception.getClass().getSimpleName());
-    errorMap.put("details", null);
+    errorMap.put(
+        "details",
+        "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception));
     return errorMap;
   }
 }
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientFlutterApiImpl.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientFlutterApiImpl.java
index 9e462fa..b488568 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientFlutterApiImpl.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientFlutterApiImpl.java
@@ -14,6 +14,7 @@
 import androidx.webkit.WebResourceErrorCompat;
 import io.flutter.plugin.common.BinaryMessenger;
 import io.flutter.plugins.webviewflutter.GeneratedAndroidWebView.WebViewClientFlutterApi;
+import java.util.HashMap;
 
 /**
  * Flutter Api implementation for {@link WebViewClient}.
@@ -26,40 +27,39 @@
   @RequiresApi(api = Build.VERSION_CODES.M)
   static GeneratedAndroidWebView.WebResourceErrorData createWebResourceErrorData(
       WebResourceError error) {
-    final GeneratedAndroidWebView.WebResourceErrorData errorData =
-        new GeneratedAndroidWebView.WebResourceErrorData();
-    errorData.setErrorCode((long) error.getErrorCode());
-    errorData.setDescription(error.getDescription().toString());
-
-    return errorData;
+    return new GeneratedAndroidWebView.WebResourceErrorData.Builder()
+        .setErrorCode((long) error.getErrorCode())
+        .setDescription(error.getDescription().toString())
+        .build();
   }
 
   @SuppressLint("RequiresFeature")
   static GeneratedAndroidWebView.WebResourceErrorData createWebResourceErrorData(
       WebResourceErrorCompat error) {
-    final GeneratedAndroidWebView.WebResourceErrorData errorData =
-        new GeneratedAndroidWebView.WebResourceErrorData();
-    errorData.setErrorCode((long) error.getErrorCode());
-    errorData.setDescription(error.getDescription().toString());
-
-    return errorData;
+    return new GeneratedAndroidWebView.WebResourceErrorData.Builder()
+        .setErrorCode((long) error.getErrorCode())
+        .setDescription(error.getDescription().toString())
+        .build();
   }
 
   @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
   static GeneratedAndroidWebView.WebResourceRequestData createWebResourceRequestData(
       WebResourceRequest request) {
-    final GeneratedAndroidWebView.WebResourceRequestData requestData =
-        new GeneratedAndroidWebView.WebResourceRequestData();
-    requestData.setUrl(request.getUrl().toString());
-    requestData.setIsForMainFrame(request.isForMainFrame());
+    final GeneratedAndroidWebView.WebResourceRequestData.Builder requestData =
+        new GeneratedAndroidWebView.WebResourceRequestData.Builder()
+            .setUrl(request.getUrl().toString())
+            .setIsForMainFrame(request.isForMainFrame())
+            .setHasGesture(request.hasGesture())
+            .setMethod(request.getMethod())
+            .setRequestHeaders(
+                request.getRequestHeaders() != null
+                    ? request.getRequestHeaders()
+                    : new HashMap<>());
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
       requestData.setIsRedirect(request.isRedirect());
     }
-    requestData.setHasGesture(request.hasGesture());
-    requestData.setMethod(request.getMethod());
-    requestData.setRequestHeaders(request.getRequestHeaders());
 
-    return requestData;
+    return requestData.build();
   }
 
   /**
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java
index 0f31613..afc3efe 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java
@@ -28,11 +28,6 @@
  * <p>Handles creating {@link WebView}s that intercommunicate with a paired Dart object.
  */
 public class WebViewHostApiImpl implements WebViewHostApi {
-  // TODO(bparrishMines): This can be removed once pigeon supports null values: https://github.com/flutter/flutter/issues/59118
-  // Workaround to represent null Strings since pigeon doesn't support null
-  // values.
-  private static final String nullStringIdentifier = "<null-value>";
-
   private final InstanceManager instanceManager;
   private final WebViewProxy webViewProxy;
   // Only used with WebView using virtual displays.
@@ -355,8 +350,7 @@
   @Override
   public void loadData(Long instanceId, String data, String mimeType, String encoding) {
     final WebView webView = (WebView) instanceManager.getInstance(instanceId);
-    webView.loadData(
-        data, parseNullStringIdentifier(mimeType), parseNullStringIdentifier(encoding));
+    webView.loadData(data, mimeType, encoding);
   }
 
   @Override
@@ -368,12 +362,7 @@
       String encoding,
       String historyUrl) {
     final WebView webView = (WebView) instanceManager.getInstance(instanceId);
-    webView.loadDataWithBaseURL(
-        parseNullStringIdentifier(baseUrl),
-        data,
-        parseNullStringIdentifier(mimeType),
-        parseNullStringIdentifier(encoding),
-        parseNullStringIdentifier(historyUrl));
+    webView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);
   }
 
   @Override
@@ -391,8 +380,7 @@
   @Override
   public String getUrl(Long instanceId) {
     final WebView webView = (WebView) instanceManager.getInstance(instanceId);
-    final String result = webView.getUrl();
-    return result != null ? result : nullStringIdentifier;
+    return webView.getUrl();
   }
 
   @Override
@@ -441,8 +429,7 @@
   @Override
   public String getTitle(Long instanceId) {
     final WebView webView = (WebView) instanceManager.getInstance(instanceId);
-    final String result = webView.getTitle();
-    return result != null ? result : nullStringIdentifier;
+    return webView.getTitle();
   }
 
   @Override
@@ -513,13 +500,4 @@
     final WebView webView = (WebView) instanceManager.getInstance(instanceId);
     webView.setBackgroundColor(color.intValue());
   }
-
-  @Nullable
-  private static String parseNullStringIdentifier(String value) {
-    if (value.equals(nullStringIdentifier)) {
-      return null;
-    }
-
-    return value;
-  }
 }
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientTest.java
index 62d2723..c2abd25 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientTest.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientTest.java
@@ -4,16 +4,22 @@
 
 package io.flutter.plugins.webviewflutter;
 
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
+import android.net.Uri;
+import android.webkit.WebResourceRequest;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import io.flutter.plugins.webviewflutter.WebViewClientHostApiImpl.WebViewClientCompatImpl;
 import io.flutter.plugins.webviewflutter.WebViewClientHostApiImpl.WebViewClientCreator;
+import java.util.HashMap;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -96,4 +102,20 @@
     webViewClient.shouldOverrideUrlLoading(mockWebView, "");
     verify(mockFlutterApi, never()).urlLoading((WebViewClient) any(), any(), any(), any());
   }
+
+  @Test
+  public void convertWebResourceRequestWithNullHeaders() {
+    final Uri mockUri = mock(Uri.class);
+    when(mockUri.toString()).thenReturn("");
+
+    final WebResourceRequest mockRequest = mock(WebResourceRequest.class);
+    when(mockRequest.getMethod()).thenReturn("method");
+    when(mockRequest.getUrl()).thenReturn(mockUri);
+    when(mockRequest.isForMainFrame()).thenReturn(true);
+    when(mockRequest.getRequestHeaders()).thenReturn(null);
+
+    final GeneratedAndroidWebView.WebResourceRequestData data =
+        WebViewClientFlutterApiImpl.createWebResourceRequestData(mockRequest);
+    assertEquals(data.getRequestHeaders(), new HashMap<String, String>());
+  }
 }
diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewTest.java
index 2312b76..5be39ab 100644
--- a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewTest.java
+++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewTest.java
@@ -166,8 +166,7 @@
 
   @Test
   public void loadDataWithNullValues() {
-    testHostApiImpl.loadData(
-        0L, "VGhpcyBkYXRhIGlzIGJhc2U2NCBlbmNvZGVkLg==", "<null-value>", "<null-value>");
+    testHostApiImpl.loadData(0L, "VGhpcyBkYXRhIGlzIGJhc2U2NCBlbmNvZGVkLg==", null, null);
     verify(mockWebView).loadData("VGhpcyBkYXRhIGlzIGJhc2U2NCBlbmNvZGVkLg==", null, null);
   }
 
@@ -192,12 +191,7 @@
   @Test
   public void loadDataWithBaseUrlAndNullValues() {
     testHostApiImpl.loadDataWithBaseUrl(
-        0L,
-        "<null-value>",
-        "VGhpcyBkYXRhIGlzIGJhc2U2NCBlbmNvZGVkLg==",
-        "<null-value>",
-        "<null-value>",
-        "<null-value>");
+        0L, null, "VGhpcyBkYXRhIGlzIGJhc2U2NCBlbmNvZGVkLg==", null, null, null);
     verify(mockWebView)
         .loadDataWithBaseURL(null, "VGhpcyBkYXRhIGlzIGJhc2U2NCBlbmNvZGVkLg==", null, null, null);
   }
diff --git a/packages/webview_flutter/webview_flutter_android/generatePigeons.sh b/packages/webview_flutter/webview_flutter_android/generatePigeons.sh
deleted file mode 100755
index 30a6918..0000000
--- a/packages/webview_flutter/webview_flutter_android/generatePigeons.sh
+++ /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.
-
-flutter pub run pigeon \
---input pigeons/android_webview.dart \
---dart_out lib/src/android_webview.pigeon.dart \
---dart_test_out test/android_webview.pigeon.dart \
---java_out android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.Java \
---java_package io.flutter.plugins.webviewflutter
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
index bd50640..f858fb3 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart
@@ -11,11 +11,6 @@
 import 'android_webview.pigeon.dart';
 import 'android_webview_api_impls.dart';
 
-// TODO(bparrishMines): This can be removed once pigeon supports null values: https://github.com/flutter/flutter/issues/59118
-// Workaround to represent null Strings since pigeon doesn't support null
-// values.
-const String _nullStringIdentifier = '<null-value>';
-
 /// An Android View that displays web pages.
 ///
 /// **Basic usage**
@@ -102,8 +97,8 @@
     return api.loadDataFromInstance(
       this,
       data,
-      mimeType ?? _nullStringIdentifier,
-      encoding ?? _nullStringIdentifier,
+      mimeType,
+      encoding,
     );
   }
 
@@ -151,11 +146,11 @@
   }) {
     return api.loadDataWithBaseUrlFromInstance(
       this,
-      baseUrl ?? _nullStringIdentifier,
+      baseUrl,
       data,
-      mimeType ?? _nullStringIdentifier,
-      encoding ?? _nullStringIdentifier,
-      historyUrl ?? _nullStringIdentifier,
+      mimeType,
+      encoding,
+      historyUrl,
     );
   }
 
@@ -184,12 +179,8 @@
   /// begun, the current page may not have changed.
   ///
   /// Returns null if no page has been loaded.
-  Future<String?> getUrl() async {
-    final String result = await api.getUrlFromInstance(this);
-    if (result == _nullStringIdentifier) {
-      return null;
-    }
-    return result;
+  Future<String?> getUrl() {
+    return api.getUrlFromInstance(this);
   }
 
   /// Whether this WebView has a back history item.
@@ -235,27 +226,19 @@
   /// JavaScript state from an empty WebView is no longer persisted across
   /// navigations like [loadUrl]. For example, global variables and functions
   /// defined before calling [loadUrl]) will not exist in the loaded page.
-  Future<String?> evaluateJavascript(String javascriptString) async {
-    final String result = await api.evaluateJavascriptFromInstance(
+  Future<String?> evaluateJavascript(String javascriptString) {
+    return api.evaluateJavascriptFromInstance(
       this,
       javascriptString,
     );
-    if (result == _nullStringIdentifier) {
-      return null;
-    }
-    return result;
   }
 
   // TODO(bparrishMines): Update documentation when WebViewClient.onReceivedTitle is added.
   /// Gets the title for the current page.
   ///
   /// Returns null if no page has been loaded.
-  Future<String?> getTitle() async {
-    final String result = await api.getTitleFromInstance(this);
-    if (result == _nullStringIdentifier) {
-      return null;
-    }
-    return result;
+  Future<String?> getTitle() {
+    return api.getTitleFromInstance(this);
   }
 
   // TODO(bparrishMines): Update documentation when onScrollChanged is added.
@@ -337,9 +320,11 @@
   /// Registers the interface to be used when content can not be handled by the rendering engine, and should be downloaded instead.
   ///
   /// This will replace the current handler.
-  Future<void> setDownloadListener(DownloadListener listener) {
-    DownloadListener.api.createFromInstance(listener);
-    return api.setDownloadListenerFromInstance(this, listener);
+  Future<void> setDownloadListener(DownloadListener? listener) async {
+    await Future.wait(<Future<void>>[
+      if (listener != null) DownloadListener.api.createFromInstance(listener),
+      api.setDownloadListenerFromInstance(this, listener)
+    ]);
   }
 
   /// Sets the chrome handler.
@@ -347,7 +332,7 @@
   /// This is an implementation of [WebChromeClient] for use in handling
   /// JavaScript dialogs, favicons, titles, and the progress. This will replace
   /// the current handler.
-  Future<void> setWebChromeClient(WebChromeClient client) {
+  Future<void> setWebChromeClient(WebChromeClient? client) async {
     // WebView requires a WebViewClient because of a bug fix that makes
     // calls to WebViewClient.requestLoading/WebViewClient.urlLoading when a new
     // window is opened. This is to make sure a url opened by `Window.open` has
@@ -356,8 +341,11 @@
       _currentWebViewClient != null,
       "Can't set a WebChromeClient without setting a WebViewClient first.",
     );
-    WebChromeClient.api.createFromInstance(client, _currentWebViewClient!);
-    return api.setWebChromeClientFromInstance(this, client);
+    await Future.wait(<Future<void>>[
+      if (client != null)
+        WebChromeClient.api.createFromInstance(client, _currentWebViewClient!),
+      api.setWebChromeClientFromInstance(this, client),
+    ]);
   }
 
   /// Sets the background color of this WebView.
@@ -477,7 +465,7 @@
   /// If the string is empty, the system default value will be used. Note that
   /// starting from KITKAT Android version, changing the user-agent while
   /// loading a web page causes WebView to initiate loading once again.
-  Future<void> setUserAgentString(String userAgentString) {
+  Future<void> setUserAgentString(String? userAgentString) {
     return api.setUserAgentStringFromInstance(this, userAgentString);
   }
 
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart
index 4a0965e..4491e16 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.pigeon.dart
@@ -1,8 +1,7 @@
 // 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.
-
-// Autogenerated from Pigeon (v1.0.9), do not edit directly.
+// Autogenerated from Pigeon (v3.0.3), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name
 // @dart = 2.12
@@ -13,12 +12,21 @@
 import 'package:flutter/services.dart';
 
 class WebResourceRequestData {
-  String? url;
-  bool? isForMainFrame;
+  WebResourceRequestData({
+    required this.url,
+    required this.isForMainFrame,
+    this.isRedirect,
+    required this.hasGesture,
+    required this.method,
+    required this.requestHeaders,
+  });
+
+  String url;
+  bool isForMainFrame;
   bool? isRedirect;
-  bool? hasGesture;
-  String? method;
-  Map<String?, String?>? requestHeaders;
+  bool hasGesture;
+  String method;
+  Map<String?, String?> requestHeaders;
 
   Object encode() {
     final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
@@ -33,20 +41,26 @@
 
   static WebResourceRequestData decode(Object message) {
     final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return WebResourceRequestData()
-      ..url = pigeonMap['url'] as String?
-      ..isForMainFrame = pigeonMap['isForMainFrame'] as bool?
-      ..isRedirect = pigeonMap['isRedirect'] as bool?
-      ..hasGesture = pigeonMap['hasGesture'] as bool?
-      ..method = pigeonMap['method'] as String?
-      ..requestHeaders = (pigeonMap['requestHeaders'] as Map<Object?, Object?>?)
-          ?.cast<String?, String?>();
+    return WebResourceRequestData(
+      url: pigeonMap['url']! as String,
+      isForMainFrame: pigeonMap['isForMainFrame']! as bool,
+      isRedirect: pigeonMap['isRedirect'] as bool?,
+      hasGesture: pigeonMap['hasGesture']! as bool,
+      method: pigeonMap['method']! as String,
+      requestHeaders: (pigeonMap['requestHeaders'] as Map<Object?, Object?>?)!
+          .cast<String?, String?>(),
+    );
   }
 }
 
 class WebResourceErrorData {
-  int? errorCode;
-  String? description;
+  WebResourceErrorData({
+    required this.errorCode,
+    required this.description,
+  });
+
+  int errorCode;
+  String description;
 
   Object encode() {
     final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
@@ -57,9 +71,10 @@
 
   static WebResourceErrorData decode(Object message) {
     final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return WebResourceErrorData()
-      ..errorCode = pigeonMap['errorCode'] as int?
-      ..description = pigeonMap['description'] as String?;
+    return WebResourceErrorData(
+      errorCode: pigeonMap['errorCode']! as int,
+      description: pigeonMap['description']! as String,
+    );
   }
 }
 
@@ -88,7 +103,6 @@
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -98,6 +112,11 @@
         message: error['message'] as String?,
         details: error['details'],
       );
+    } else if (replyMap['result'] == null) {
+      throw PlatformException(
+        code: 'null-error',
+        message: 'Host platform returned null value for non-null return value.',
+      );
     } else {
       return (replyMap['result'] as bool?)!;
     }
@@ -108,12 +127,11 @@
         'dev.flutter.pigeon.CookieManagerHostApi.setCookie', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_url, arg_value]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_url, arg_value]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -149,13 +167,12 @@
         'dev.flutter.pigeon.WebViewHostApi.create', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_useHybridComposition])
+        await channel.send(<Object?>[arg_instanceId, arg_useHybridComposition])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -175,12 +192,11 @@
         'dev.flutter.pigeon.WebViewHostApi.dispose', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -196,18 +212,17 @@
   }
 
   Future<void> loadData(int arg_instanceId, String arg_data,
-      String arg_mimeType, String arg_encoding) async {
+      String? arg_mimeType, String? arg_encoding) async {
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.loadData', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel.send(
-            <Object>[arg_instanceId, arg_data, arg_mimeType, arg_encoding])
+            <Object?>[arg_instanceId, arg_data, arg_mimeType, arg_encoding])
         as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -224,15 +239,15 @@
 
   Future<void> loadDataWithBaseUrl(
       int arg_instanceId,
-      String arg_baseUrl,
+      String? arg_baseUrl,
       String arg_data,
-      String arg_mimeType,
-      String arg_encoding,
-      String arg_historyUrl) async {
+      String? arg_mimeType,
+      String? arg_encoding,
+      String? arg_historyUrl) async {
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.loadDataWithBaseUrl', codec,
         binaryMessenger: _binaryMessenger);
-    final Map<Object?, Object?>? replyMap = await channel.send(<Object>[
+    final Map<Object?, Object?>? replyMap = await channel.send(<Object?>[
       arg_instanceId,
       arg_baseUrl,
       arg_data,
@@ -244,7 +259,6 @@
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -265,13 +279,12 @@
         'dev.flutter.pigeon.WebViewHostApi.loadUrl', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_url, arg_headers])
+        await channel.send(<Object?>[arg_instanceId, arg_url, arg_headers])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -292,13 +305,12 @@
         'dev.flutter.pigeon.WebViewHostApi.postUrl', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_url, arg_data])
+        await channel.send(<Object?>[arg_instanceId, arg_url, arg_data])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -313,17 +325,16 @@
     }
   }
 
-  Future<String> getUrl(int arg_instanceId) async {
+  Future<String?> getUrl(int arg_instanceId) async {
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.getUrl', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -334,7 +345,7 @@
         details: error['details'],
       );
     } else {
-      return (replyMap['result'] as String?)!;
+      return (replyMap['result'] as String?);
     }
   }
 
@@ -343,12 +354,11 @@
         'dev.flutter.pigeon.WebViewHostApi.canGoBack', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -358,6 +368,11 @@
         message: error['message'] as String?,
         details: error['details'],
       );
+    } else if (replyMap['result'] == null) {
+      throw PlatformException(
+        code: 'null-error',
+        message: 'Host platform returned null value for non-null return value.',
+      );
     } else {
       return (replyMap['result'] as bool?)!;
     }
@@ -368,12 +383,11 @@
         'dev.flutter.pigeon.WebViewHostApi.canGoForward', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -383,6 +397,11 @@
         message: error['message'] as String?,
         details: error['details'],
       );
+    } else if (replyMap['result'] == null) {
+      throw PlatformException(
+        code: 'null-error',
+        message: 'Host platform returned null value for non-null return value.',
+      );
     } else {
       return (replyMap['result'] as bool?)!;
     }
@@ -393,12 +412,11 @@
         'dev.flutter.pigeon.WebViewHostApi.goBack', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -418,12 +436,11 @@
         'dev.flutter.pigeon.WebViewHostApi.goForward', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -443,12 +460,11 @@
         'dev.flutter.pigeon.WebViewHostApi.reload', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -468,13 +484,12 @@
         'dev.flutter.pigeon.WebViewHostApi.clearCache', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_includeDiskFiles])
+        await channel.send(<Object?>[arg_instanceId, arg_includeDiskFiles])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -489,19 +504,18 @@
     }
   }
 
-  Future<String> evaluateJavascript(
+  Future<String?> evaluateJavascript(
       int arg_instanceId, String arg_javascriptString) async {
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.evaluateJavascript', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_javascriptString])
+        await channel.send(<Object?>[arg_instanceId, arg_javascriptString])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -512,21 +526,20 @@
         details: error['details'],
       );
     } else {
-      return (replyMap['result'] as String?)!;
+      return (replyMap['result'] as String?);
     }
   }
 
-  Future<String> getTitle(int arg_instanceId) async {
+  Future<String?> getTitle(int arg_instanceId) async {
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.getTitle', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -537,7 +550,7 @@
         details: error['details'],
       );
     } else {
-      return (replyMap['result'] as String?)!;
+      return (replyMap['result'] as String?);
     }
   }
 
@@ -545,13 +558,13 @@
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.scrollTo', codec,
         binaryMessenger: _binaryMessenger);
-    final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_x, arg_y]) as Map<Object?, Object?>?;
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object?>[arg_instanceId, arg_x, arg_y])
+            as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -570,13 +583,13 @@
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.scrollBy', codec,
         binaryMessenger: _binaryMessenger);
-    final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_x, arg_y]) as Map<Object?, Object?>?;
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object?>[arg_instanceId, arg_x, arg_y])
+            as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -596,12 +609,11 @@
         'dev.flutter.pigeon.WebViewHostApi.getScrollX', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -611,6 +623,11 @@
         message: error['message'] as String?,
         details: error['details'],
       );
+    } else if (replyMap['result'] == null) {
+      throw PlatformException(
+        code: 'null-error',
+        message: 'Host platform returned null value for non-null return value.',
+      );
     } else {
       return (replyMap['result'] as int?)!;
     }
@@ -621,12 +638,11 @@
         'dev.flutter.pigeon.WebViewHostApi.getScrollY', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -636,6 +652,11 @@
         message: error['message'] as String?,
         details: error['details'],
       );
+    } else if (replyMap['result'] == null) {
+      throw PlatformException(
+        code: 'null-error',
+        message: 'Host platform returned null value for non-null return value.',
+      );
     } else {
       return (replyMap['result'] as int?)!;
     }
@@ -647,12 +668,11 @@
         codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_enabled]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_enabled]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -673,13 +693,12 @@
         'dev.flutter.pigeon.WebViewHostApi.setWebViewClient', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-            .send(<Object>[arg_instanceId, arg_webViewClientInstanceId])
+            .send(<Object?>[arg_instanceId, arg_webViewClientInstanceId])
         as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -700,13 +719,12 @@
         'dev.flutter.pigeon.WebViewHostApi.addJavaScriptChannel', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-            .send(<Object>[arg_instanceId, arg_javaScriptChannelInstanceId])
+            .send(<Object?>[arg_instanceId, arg_javaScriptChannelInstanceId])
         as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -727,13 +745,12 @@
         'dev.flutter.pigeon.WebViewHostApi.removeJavaScriptChannel', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-            .send(<Object>[arg_instanceId, arg_javaScriptChannelInstanceId])
+            .send(<Object?>[arg_instanceId, arg_javaScriptChannelInstanceId])
         as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -749,18 +766,17 @@
   }
 
   Future<void> setDownloadListener(
-      int arg_instanceId, int arg_listenerInstanceId) async {
+      int arg_instanceId, int? arg_listenerInstanceId) async {
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.setDownloadListener', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_listenerInstanceId])
+        await channel.send(<Object?>[arg_instanceId, arg_listenerInstanceId])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -776,18 +792,17 @@
   }
 
   Future<void> setWebChromeClient(
-      int arg_instanceId, int arg_clientInstanceId) async {
+      int arg_instanceId, int? arg_clientInstanceId) async {
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebViewHostApi.setWebChromeClient', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_clientInstanceId])
+        await channel.send(<Object?>[arg_instanceId, arg_clientInstanceId])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -807,12 +822,11 @@
         'dev.flutter.pigeon.WebViewHostApi.setBackgroundColor', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_color]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_color]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -848,13 +862,12 @@
         'dev.flutter.pigeon.WebSettingsHostApi.create', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_webViewInstanceId])
+        await channel.send(<Object?>[arg_instanceId, arg_webViewInstanceId])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -874,12 +887,11 @@
         'dev.flutter.pigeon.WebSettingsHostApi.dispose', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -899,12 +911,11 @@
         'dev.flutter.pigeon.WebSettingsHostApi.setDomStorageEnabled', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_flag]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_flag]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -926,12 +937,11 @@
         codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_flag]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_flag]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -953,12 +963,11 @@
         codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_support]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_support]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -978,12 +987,11 @@
         'dev.flutter.pigeon.WebSettingsHostApi.setJavaScriptEnabled', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_flag]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_flag]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -999,18 +1007,17 @@
   }
 
   Future<void> setUserAgentString(
-      int arg_instanceId, String arg_userAgentString) async {
+      int arg_instanceId, String? arg_userAgentString) async {
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebSettingsHostApi.setUserAgentString', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_userAgentString])
+        await channel.send(<Object?>[arg_instanceId, arg_userAgentString])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1032,12 +1039,11 @@
         codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_require]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_require]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1057,12 +1063,11 @@
         'dev.flutter.pigeon.WebSettingsHostApi.setSupportZoom', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_support]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_support]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1082,13 +1087,13 @@
     final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
         'dev.flutter.pigeon.WebSettingsHostApi.setLoadWithOverviewMode', codec,
         binaryMessenger: _binaryMessenger);
-    final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_overview]) as Map<Object?, Object?>?;
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object?>[arg_instanceId, arg_overview])
+            as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1108,12 +1113,11 @@
         'dev.flutter.pigeon.WebSettingsHostApi.setUseWideViewPort', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_use]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_use]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1134,12 +1138,11 @@
         'dev.flutter.pigeon.WebSettingsHostApi.setDisplayZoomControls', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_enabled]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_enabled]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1160,12 +1163,11 @@
         'dev.flutter.pigeon.WebSettingsHostApi.setBuiltInZoomControls', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_enabled]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_enabled]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1185,12 +1187,11 @@
         'dev.flutter.pigeon.WebSettingsHostApi.setAllowFileAccess', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-        .send(<Object>[arg_instanceId, arg_enabled]) as Map<Object?, Object?>?;
+        .send(<Object?>[arg_instanceId, arg_enabled]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1226,13 +1227,12 @@
         'dev.flutter.pigeon.JavaScriptChannelHostApi.create', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId, arg_channelName])
+        await channel.send(<Object?>[arg_instanceId, arg_channelName])
             as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1325,13 +1325,12 @@
         'dev.flutter.pigeon.WebViewClientHostApi.create', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-            .send(<Object>[arg_instanceId, arg_shouldOverrideUrlLoading])
+            .send(<Object?>[arg_instanceId, arg_shouldOverrideUrlLoading])
         as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1600,12 +1599,11 @@
         'dev.flutter.pigeon.DownloadListenerHostApi.create', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1712,13 +1710,12 @@
         'dev.flutter.pigeon.WebChromeClientHostApi.create', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap = await channel
-            .send(<Object>[arg_instanceId, arg_webViewClientInstanceId])
+            .send(<Object?>[arg_instanceId, arg_webViewClientInstanceId])
         as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1754,12 +1751,11 @@
         'dev.flutter.pigeon.FlutterAssetManagerHostApi.list', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_path]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_path]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1769,6 +1765,11 @@
         message: error['message'] as String?,
         details: error['details'],
       );
+    } else if (replyMap['result'] == null) {
+      throw PlatformException(
+        code: 'null-error',
+        message: 'Host platform returned null value for non-null return value.',
+      );
     } else {
       return (replyMap['result'] as List<Object?>?)!.cast<String?>();
     }
@@ -1780,12 +1781,11 @@
         codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_name]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_name]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1795,6 +1795,11 @@
         message: error['message'] as String?,
         details: error['details'],
       );
+    } else if (replyMap['result'] == null) {
+      throw PlatformException(
+        code: 'null-error',
+        message: 'Host platform returned null value for non-null return value.',
+      );
     } else {
       return (replyMap['result'] as String?)!;
     }
@@ -1881,12 +1886,11 @@
         'dev.flutter.pigeon.WebStorageHostApi.create', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
@@ -1906,12 +1910,11 @@
         'dev.flutter.pigeon.WebStorageHostApi.deleteAllData', codec,
         binaryMessenger: _binaryMessenger);
     final Map<Object?, Object?>? replyMap =
-        await channel.send(<Object>[arg_instanceId]) as Map<Object?, Object?>?;
+        await channel.send(<Object?>[arg_instanceId]) as Map<Object?, Object?>?;
     if (replyMap == null) {
       throw PlatformException(
         code: 'channel-error',
         message: 'Unable to establish connection on channel.',
-        details: null,
       );
     } else if (replyMap['error'] != null) {
       final Map<Object?, Object?> error =
diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart
index 9c980c8..b40a051 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview_api_impls.dart
@@ -13,21 +13,20 @@
 /// Converts [WebResourceRequestData] to [WebResourceRequest]
 WebResourceRequest _toWebResourceRequest(WebResourceRequestData data) {
   return WebResourceRequest(
-    url: data.url!,
-    isForMainFrame: data.isForMainFrame!,
+    url: data.url,
+    isForMainFrame: data.isForMainFrame,
     isRedirect: data.isRedirect,
-    hasGesture: data.hasGesture!,
-    method: data.method!,
-    requestHeaders:
-        data.requestHeaders?.cast<String, String>() ?? <String, String>{},
+    hasGesture: data.hasGesture,
+    method: data.method,
+    requestHeaders: data.requestHeaders.cast<String, String>(),
   );
 }
 
 /// Converts [WebResourceErrorData] to [WebResourceError].
 WebResourceError _toWebResourceError(WebResourceErrorData data) {
   return WebResourceError(
-    errorCode: data.errorCode!,
-    description: data.description!,
+    errorCode: data.errorCode,
+    description: data.description,
   );
 }
 
@@ -115,8 +114,8 @@
   Future<void> loadDataFromInstance(
     WebView instance,
     String data,
-    String mimeType,
-    String encoding,
+    String? mimeType,
+    String? encoding,
   ) {
     return loadData(
       instanceManager.getInstanceId(instance)!,
@@ -129,11 +128,11 @@
   /// Helper method to convert instances ids to objects.
   Future<void> loadDataWithBaseUrlFromInstance(
     WebView instance,
-    String baseUrl,
+    String? baseUrl,
     String data,
-    String mimeType,
-    String encoding,
-    String historyUrl,
+    String? mimeType,
+    String? encoding,
+    String? historyUrl,
   ) {
     return loadDataWithBaseUrl(
       instanceManager.getInstanceId(instance)!,
@@ -164,7 +163,7 @@
   }
 
   /// Helper method to convert instances ids to objects.
-  Future<String> getUrlFromInstance(WebView instance) {
+  Future<String?> getUrlFromInstance(WebView instance) {
     return getUrl(instanceManager.getInstanceId(instance)!);
   }
 
@@ -202,16 +201,18 @@
   }
 
   /// Helper method to convert instances ids to objects.
-  Future<String> evaluateJavascriptFromInstance(
+  Future<String?> evaluateJavascriptFromInstance(
     WebView instance,
     String javascriptString,
   ) {
     return evaluateJavascript(
-        instanceManager.getInstanceId(instance)!, javascriptString);
+      instanceManager.getInstanceId(instance)!,
+      javascriptString,
+    );
   }
 
   /// Helper method to convert instances ids to objects.
-  Future<String> getTitleFromInstance(WebView instance) {
+  Future<String?> getTitleFromInstance(WebView instance) {
     return getTitle(instanceManager.getInstanceId(instance)!);
   }
 
@@ -271,22 +272,22 @@
   /// Helper method to convert instances ids to objects.
   Future<void> setDownloadListenerFromInstance(
     WebView instance,
-    DownloadListener listener,
+    DownloadListener? listener,
   ) {
     return setDownloadListener(
       instanceManager.getInstanceId(instance)!,
-      instanceManager.getInstanceId(listener)!,
+      listener != null ? instanceManager.getInstanceId(listener) : null,
     );
   }
 
   /// Helper method to convert instances ids to objects.
   Future<void> setWebChromeClientFromInstance(
     WebView instance,
-    WebChromeClient client,
+    WebChromeClient? client,
   ) {
     return setWebChromeClient(
       instanceManager.getInstanceId(instance)!,
-      instanceManager.getInstanceId(client)!,
+      client != null ? instanceManager.getInstanceId(client) : null,
     );
   }
 
@@ -370,7 +371,7 @@
   /// Helper method to convert instances ids to objects.
   Future<void> setUserAgentStringFromInstance(
     WebSettings instance,
-    String userAgentString,
+    String? userAgentString,
   ) {
     return setUserAgentString(
       instanceManager.getInstanceId(instance)!,
diff --git a/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart b/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart
index d3d18f6..70ecd99 100644
--- a/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart
+++ b/packages/webview_flutter/webview_flutter_android/pigeons/android_webview.dart
@@ -4,18 +4,51 @@
 
 import 'package:pigeon/pigeon.dart';
 
+@ConfigurePigeon(
+  PigeonOptions(
+    dartOut: 'lib/src/android_webview.pigeon.dart',
+    dartTestOut: 'test/test_android_webview.pigeon.dart',
+    dartOptions: DartOptions(copyrightHeader: <String>[
+      '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.',
+    ]),
+    javaOut:
+        'android/src/main/java/io/flutter/plugins/webviewflutter/GeneratedAndroidWebView.java',
+    javaOptions: JavaOptions(
+      package: 'io.flutter.plugins.webviewflutter',
+      className: 'GeneratedAndroidWebView',
+      copyrightHeader: <String>[
+        '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.',
+      ],
+    ),
+  ),
+)
 class WebResourceRequestData {
-  String? url;
-  bool? isForMainFrame;
+  WebResourceRequestData(
+    this.url,
+    this.isForMainFrame,
+    this.isRedirect,
+    this.hasGesture,
+    this.method,
+    this.requestHeaders,
+  );
+
+  String url;
+  bool isForMainFrame;
   bool? isRedirect;
-  bool? hasGesture;
-  String? method;
-  Map<String?, String?>? requestHeaders;
+  bool hasGesture;
+  String method;
+  Map<String?, String?> requestHeaders;
 }
 
 class WebResourceErrorData {
-  int? errorCode;
-  String? description;
+  WebResourceErrorData(this.errorCode, this.description);
+
+  int errorCode;
+  String description;
 }
 
 @HostApi()
@@ -35,17 +68,17 @@
   void loadData(
     int instanceId,
     String data,
-    String mimeType,
-    String encoding,
+    String? mimeType,
+    String? encoding,
   );
 
   void loadDataWithBaseUrl(
     int instanceId,
-    String baseUrl,
+    String? baseUrl,
     String data,
-    String mimeType,
-    String encoding,
-    String historyUrl,
+    String? mimeType,
+    String? encoding,
+    String? historyUrl,
   );
 
   void loadUrl(
@@ -60,7 +93,7 @@
     Uint8List data,
   );
 
-  String getUrl(int instanceId);
+  String? getUrl(int instanceId);
 
   bool canGoBack(int instanceId);
 
@@ -75,12 +108,12 @@
   void clearCache(int instanceId, bool includeDiskFiles);
 
   @async
-  String evaluateJavascript(
+  String? evaluateJavascript(
     int instanceId,
     String javascriptString,
   );
 
-  String getTitle(int instanceId);
+  String? getTitle(int instanceId);
 
   void scrollTo(int instanceId, int x, int y);
 
@@ -98,9 +131,9 @@
 
   void removeJavaScriptChannel(int instanceId, int javaScriptChannelInstanceId);
 
-  void setDownloadListener(int instanceId, int listenerInstanceId);
+  void setDownloadListener(int instanceId, int? listenerInstanceId);
 
-  void setWebChromeClient(int instanceId, int clientInstanceId);
+  void setWebChromeClient(int instanceId, int? clientInstanceId);
 
   void setBackgroundColor(int instanceId, int color);
 }
@@ -119,7 +152,7 @@
 
   void setJavaScriptEnabled(int instanceId, bool flag);
 
-  void setUserAgentString(int instanceId, String userAgentString);
+  void setUserAgentString(int instanceId, String? userAgentString);
 
   void setMediaPlaybackRequiresUserGesture(int instanceId, bool require);
 
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index 3fae698..9a7c48a 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin that provides a WebView widget on Android.
 repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutter/webview_flutter_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 2.8.5
+version: 2.8.6
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
@@ -29,4 +29,4 @@
     sdk: flutter
   mockito: ^5.1.0
   pedantic: ^1.10.0
-  pigeon: 1.0.9
+  pigeon: ^3.0.3
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
index e2e6513..4c63ab0 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
@@ -10,8 +10,8 @@
 import 'package:webview_flutter_android/src/android_webview_api_impls.dart';
 import 'package:webview_flutter_android/src/instance_manager.dart';
 
-import 'android_webview.pigeon.dart';
 import 'android_webview_test.mocks.dart';
+import 'test_android_webview.pigeon.dart';
 
 @GenerateMocks(<Type>[
   CookieManagerHostApi,
@@ -85,8 +85,8 @@
         verify(mockPlatformHostApi.loadData(
           webViewInstanceId,
           'hello',
-          '<null-value>',
-          '<null-value>',
+          null,
+          null,
         ));
       });
 
@@ -113,11 +113,11 @@
         webView.loadDataWithBaseUrl(data: 'hello');
         verify(mockPlatformHostApi.loadDataWithBaseUrl(
           webViewInstanceId,
-          '<null-value>',
+          null,
           'hello',
-          '<null-value>',
-          '<null-value>',
-          '<null-value>',
+          null,
+          null,
+          null,
         ));
       });
 
@@ -527,14 +527,15 @@
         flutterApi.onReceivedRequestError(
           mockWebViewClientInstanceId,
           mockWebViewInstanceId,
-          WebResourceRequestData()
-            ..url = 'https://www.google.com'
-            ..isForMainFrame = true
-            ..hasGesture = true
-            ..method = 'POST',
-          WebResourceErrorData()
-            ..errorCode = 34
-            ..description = 'error description',
+          WebResourceRequestData(
+            url: 'https://www.google.com',
+            isForMainFrame: true,
+            hasGesture: true,
+            method: 'POST',
+            isRedirect: false,
+            requestHeaders: <String?, String?>{},
+          ),
+          WebResourceErrorData(errorCode: 34, description: 'error description'),
         );
 
         verify(mockWebViewClient.onReceivedRequestError(
@@ -565,11 +566,14 @@
         flutterApi.requestLoading(
           mockWebViewClientInstanceId,
           mockWebViewInstanceId,
-          WebResourceRequestData()
-            ..url = 'https://www.google.com'
-            ..isForMainFrame = true
-            ..hasGesture = true
-            ..method = 'POST',
+          WebResourceRequestData(
+            url: 'https://www.google.com',
+            isForMainFrame: true,
+            hasGesture: true,
+            method: 'POST',
+            isRedirect: true,
+            requestHeaders: <String?, String?>{},
+          ),
         );
 
         verify(mockWebViewClient.requestLoading(
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart
index e8859c9..85ab668 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.mocks.dart
@@ -10,7 +10,7 @@
 import 'package:webview_flutter_android/src/android_webview.dart' as _i2;
 import 'package:webview_flutter_android/src/android_webview.pigeon.dart' as _i3;
 
-import 'android_webview.pigeon.dart' as _i5;
+import 'test_android_webview.pigeon.dart' as _i5;
 
 // ignore_for_file: type=lint
 // ignore_for_file: avoid_redundant_argument_values
@@ -277,9 +277,8 @@
       super.noSuchMethod(Invocation.method(#postUrl, [instanceId, url, data]),
           returnValueForMissingStub: null);
   @override
-  String getUrl(int? instanceId) =>
-      (super.noSuchMethod(Invocation.method(#getUrl, [instanceId]),
-          returnValue: '') as String);
+  String? getUrl(int? instanceId) =>
+      (super.noSuchMethod(Invocation.method(#getUrl, [instanceId])) as String?);
   @override
   bool canGoBack(int? instanceId) =>
       (super.noSuchMethod(Invocation.method(#canGoBack, [instanceId]),
@@ -306,16 +305,16 @@
           Invocation.method(#clearCache, [instanceId, includeDiskFiles]),
           returnValueForMissingStub: null);
   @override
-  _i4.Future<String> evaluateJavascript(
+  _i4.Future<String?> evaluateJavascript(
           int? instanceId, String? javascriptString) =>
       (super.noSuchMethod(
           Invocation.method(
               #evaluateJavascript, [instanceId, javascriptString]),
-          returnValue: Future<String>.value('')) as _i4.Future<String>);
+          returnValue: Future<String?>.value()) as _i4.Future<String?>);
   @override
-  String getTitle(int? instanceId) =>
-      (super.noSuchMethod(Invocation.method(#getTitle, [instanceId]),
-          returnValue: '') as String);
+  String? getTitle(int? instanceId) =>
+      (super.noSuchMethod(Invocation.method(#getTitle, [instanceId]))
+          as String?);
   @override
   void scrollTo(int? instanceId, int? x, int? y) =>
       super.noSuchMethod(Invocation.method(#scrollTo, [instanceId, x, y]),
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart b/packages/webview_flutter/webview_flutter_android/test/test_android_webview.pigeon.dart
similarity index 95%
rename from packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart
rename to packages/webview_flutter/webview_flutter_android/test/test_android_webview.pigeon.dart
index 4ee4b1d..e3c5909 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview.pigeon.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/test_android_webview.pigeon.dart
@@ -1,10 +1,10 @@
 // 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.
-
-// Autogenerated from Pigeon (v1.0.9), do not edit directly.
+// Autogenerated from Pigeon (v3.0.3), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
-// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import
+// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis
+// ignore_for_file: avoid_relative_lib_imports
 // @dart = 2.12
 import 'dart:async';
 import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List;
@@ -23,20 +23,21 @@
 
   void create(int instanceId, bool useHybridComposition);
   void dispose(int instanceId);
-  void loadData(int instanceId, String data, String mimeType, String encoding);
-  void loadDataWithBaseUrl(int instanceId, String baseUrl, String data,
-      String mimeType, String encoding, String historyUrl);
+  void loadData(
+      int instanceId, String data, String? mimeType, String? encoding);
+  void loadDataWithBaseUrl(int instanceId, String? baseUrl, String data,
+      String? mimeType, String? encoding, String? historyUrl);
   void loadUrl(int instanceId, String url, Map<String?, String?> headers);
   void postUrl(int instanceId, String url, Uint8List data);
-  String getUrl(int instanceId);
+  String? getUrl(int instanceId);
   bool canGoBack(int instanceId);
   bool canGoForward(int instanceId);
   void goBack(int instanceId);
   void goForward(int instanceId);
   void reload(int instanceId);
   void clearCache(int instanceId, bool includeDiskFiles);
-  Future<String> evaluateJavascript(int instanceId, String javascriptString);
-  String getTitle(int instanceId);
+  Future<String?> evaluateJavascript(int instanceId, String javascriptString);
+  String? getTitle(int instanceId);
   void scrollTo(int instanceId, int x, int y);
   void scrollBy(int instanceId, int x, int y);
   int getScrollX(int instanceId);
@@ -45,8 +46,8 @@
   void setWebViewClient(int instanceId, int webViewClientInstanceId);
   void addJavaScriptChannel(int instanceId, int javaScriptChannelInstanceId);
   void removeJavaScriptChannel(int instanceId, int javaScriptChannelInstanceId);
-  void setDownloadListener(int instanceId, int listenerInstanceId);
-  void setWebChromeClient(int instanceId, int clientInstanceId);
+  void setDownloadListener(int instanceId, int? listenerInstanceId);
+  void setWebChromeClient(int instanceId, int? clientInstanceId);
   void setBackgroundColor(int instanceId, int color);
   static void setup(TestWebViewHostApi? api,
       {BinaryMessenger? binaryMessenger}) {
@@ -109,13 +110,8 @@
           assert(arg_data != null,
               'Argument for dev.flutter.pigeon.WebViewHostApi.loadData was null, expected non-null String.');
           final String? arg_mimeType = (args[2] as String?);
-          assert(arg_mimeType != null,
-              'Argument for dev.flutter.pigeon.WebViewHostApi.loadData was null, expected non-null String.');
           final String? arg_encoding = (args[3] as String?);
-          assert(arg_encoding != null,
-              'Argument for dev.flutter.pigeon.WebViewHostApi.loadData was null, expected non-null String.');
-          api.loadData(
-              arg_instanceId!, arg_data!, arg_mimeType!, arg_encoding!);
+          api.loadData(arg_instanceId!, arg_data!, arg_mimeType, arg_encoding);
           return <Object?, Object?>{};
         });
       }
@@ -135,22 +131,14 @@
           assert(arg_instanceId != null,
               'Argument for dev.flutter.pigeon.WebViewHostApi.loadDataWithBaseUrl was null, expected non-null int.');
           final String? arg_baseUrl = (args[1] as String?);
-          assert(arg_baseUrl != null,
-              'Argument for dev.flutter.pigeon.WebViewHostApi.loadDataWithBaseUrl was null, expected non-null String.');
           final String? arg_data = (args[2] as String?);
           assert(arg_data != null,
               'Argument for dev.flutter.pigeon.WebViewHostApi.loadDataWithBaseUrl was null, expected non-null String.');
           final String? arg_mimeType = (args[3] as String?);
-          assert(arg_mimeType != null,
-              'Argument for dev.flutter.pigeon.WebViewHostApi.loadDataWithBaseUrl was null, expected non-null String.');
           final String? arg_encoding = (args[4] as String?);
-          assert(arg_encoding != null,
-              'Argument for dev.flutter.pigeon.WebViewHostApi.loadDataWithBaseUrl was null, expected non-null String.');
           final String? arg_historyUrl = (args[5] as String?);
-          assert(arg_historyUrl != null,
-              'Argument for dev.flutter.pigeon.WebViewHostApi.loadDataWithBaseUrl was null, expected non-null String.');
-          api.loadDataWithBaseUrl(arg_instanceId!, arg_baseUrl!, arg_data!,
-              arg_mimeType!, arg_encoding!, arg_historyUrl!);
+          api.loadDataWithBaseUrl(arg_instanceId!, arg_baseUrl, arg_data!,
+              arg_mimeType, arg_encoding, arg_historyUrl);
           return <Object?, Object?>{};
         });
       }
@@ -220,7 +208,7 @@
           final int? arg_instanceId = (args[0] as int?);
           assert(arg_instanceId != null,
               'Argument for dev.flutter.pigeon.WebViewHostApi.getUrl was null, expected non-null int.');
-          final String output = api.getUrl(arg_instanceId!);
+          final String? output = api.getUrl(arg_instanceId!);
           return <Object?, Object?>{'result': output};
         });
       }
@@ -359,7 +347,7 @@
           final String? arg_javascriptString = (args[1] as String?);
           assert(arg_javascriptString != null,
               'Argument for dev.flutter.pigeon.WebViewHostApi.evaluateJavascript was null, expected non-null String.');
-          final String output = await api.evaluateJavascript(
+          final String? output = await api.evaluateJavascript(
               arg_instanceId!, arg_javascriptString!);
           return <Object?, Object?>{'result': output};
         });
@@ -379,7 +367,7 @@
           final int? arg_instanceId = (args[0] as int?);
           assert(arg_instanceId != null,
               'Argument for dev.flutter.pigeon.WebViewHostApi.getTitle was null, expected non-null int.');
-          final String output = api.getTitle(arg_instanceId!);
+          final String? output = api.getTitle(arg_instanceId!);
           return <Object?, Object?>{'result': output};
         });
       }
@@ -575,9 +563,7 @@
           assert(arg_instanceId != null,
               'Argument for dev.flutter.pigeon.WebViewHostApi.setDownloadListener was null, expected non-null int.');
           final int? arg_listenerInstanceId = (args[1] as int?);
-          assert(arg_listenerInstanceId != null,
-              'Argument for dev.flutter.pigeon.WebViewHostApi.setDownloadListener was null, expected non-null int.');
-          api.setDownloadListener(arg_instanceId!, arg_listenerInstanceId!);
+          api.setDownloadListener(arg_instanceId!, arg_listenerInstanceId);
           return <Object?, Object?>{};
         });
       }
@@ -597,9 +583,7 @@
           assert(arg_instanceId != null,
               'Argument for dev.flutter.pigeon.WebViewHostApi.setWebChromeClient was null, expected non-null int.');
           final int? arg_clientInstanceId = (args[1] as int?);
-          assert(arg_clientInstanceId != null,
-              'Argument for dev.flutter.pigeon.WebViewHostApi.setWebChromeClient was null, expected non-null int.');
-          api.setWebChromeClient(arg_instanceId!, arg_clientInstanceId!);
+          api.setWebChromeClient(arg_instanceId!, arg_clientInstanceId);
           return <Object?, Object?>{};
         });
       }
@@ -642,7 +626,7 @@
   void setJavaScriptCanOpenWindowsAutomatically(int instanceId, bool flag);
   void setSupportMultipleWindows(int instanceId, bool support);
   void setJavaScriptEnabled(int instanceId, bool flag);
-  void setUserAgentString(int instanceId, String userAgentString);
+  void setUserAgentString(int instanceId, String? userAgentString);
   void setMediaPlaybackRequiresUserGesture(int instanceId, bool require);
   void setSupportZoom(int instanceId, bool support);
   void setLoadWithOverviewMode(int instanceId, bool overview);
@@ -799,9 +783,7 @@
           assert(arg_instanceId != null,
               'Argument for dev.flutter.pigeon.WebSettingsHostApi.setUserAgentString was null, expected non-null int.');
           final String? arg_userAgentString = (args[1] as String?);
-          assert(arg_userAgentString != null,
-              'Argument for dev.flutter.pigeon.WebSettingsHostApi.setUserAgentString was null, expected non-null String.');
-          api.setUserAgentString(arg_instanceId!, arg_userAgentString!);
+          api.setUserAgentString(arg_instanceId!, arg_userAgentString);
           return <Object?, Object?>{};
         });
       }
diff --git a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
index 46d6a29..83662fb 100644
--- a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
@@ -16,8 +16,8 @@
 import 'package:webview_flutter_android/webview_android_widget.dart';
 import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
 
-import 'android_webview.pigeon.dart';
 import 'android_webview_test.mocks.dart' show MockTestWebViewHostApi;
+import 'test_android_webview.pigeon.dart';
 import 'webview_android_widget_test.mocks.dart';
 
 @GenerateMocks(<Type>[