[video_player] Updated Pigeon version (#4726)

diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md
index 626b9ef..ec526ee 100644
--- a/packages/video_player/video_player_android/CHANGELOG.md
+++ b/packages/video_player/video_player_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.3.0
+
+* Updates Pigeon to ^1.0.16.
+
 ## 2.2.17
 
 * Splits from `video_player` as a federated implementation.
diff --git a/packages/video_player/video_player_android/CONTRIBUTING.md b/packages/video_player/video_player_android/CONTRIBUTING.md
index 387551b..8dfec9f 100644
--- a/packages/video_player/video_player_android/CONTRIBUTING.md
+++ b/packages/video_player/video_player_android/CONTRIBUTING.md
@@ -1,12 +1,11 @@
 ## Updating pigeon-generated files
 
 If you update files in the pigeons/ directory, run the following
-command in this directory (ignore the errors you get about
-dependencies in the examples directory):
+command in this directory:
 
 ```bash
 flutter pub upgrade
-flutter pub run pigeon --dart_null_safety --input pigeons/messages.dart
+flutter pub run pigeon --input pigeons/messages.dart
 # git commit your changes so that your working environment is clean
 (cd ../../../; ./script/tool_runner.sh format --clang-format=clang-format-7)
 ```
@@ -28,6 +27,5 @@
 the CI tests run the analysis using latest published version of
 pigeon, not your version or the version on master.
 
-In either case, the configuration will be obtained automatically from
-the `pigeons/messages.dart` file (see `configurePigeon` at the bottom
-of that file).
+In either case, the configuration will be obtained automatically from the
+`pigeons/messages.dart` file (see `ConfigurePigeon` at the top of that file).
diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java
index e0a4a3b..0cdf356 100644
--- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java
+++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java
@@ -1,104 +1,490 @@
 // 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 (v0.1.21), do not edit directly.
+// Autogenerated from Pigeon (v1.0.16), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 package io.flutter.plugins.videoplayer;
 
+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;
 import io.flutter.plugin.common.StandardMessageCodec;
+import java.io.ByteArrayOutputStream;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 /** Generated class from Pigeon. */
-@SuppressWarnings("unused")
+@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"})
 public class Messages {
 
   /** Generated class from Pigeon that represents data sent in messages. */
   public static class TextureMessage {
-    private Long textureId;
+    private @NonNull Long textureId;
 
-    public Long getTextureId() {
+    public @NonNull Long getTextureId() {
       return textureId;
     }
 
-    public void setTextureId(Long setterArg) {
+    public void setTextureId(@NonNull Long setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"textureId\" is null.");
+      }
       this.textureId = setterArg;
     }
 
-    HashMap toMap() {
-      HashMap<String, Object> toMapResult = new HashMap<>();
+    /** Constructor is private to enforce null safety; use Builder. */
+    private TextureMessage() {}
+
+    public static class Builder {
+      private @Nullable Long textureId;
+
+      public @NonNull Builder setTextureId(@NonNull Long setterArg) {
+        this.textureId = setterArg;
+        return this;
+      }
+
+      public @NonNull TextureMessage build() {
+        TextureMessage pigeonReturn = new TextureMessage();
+        pigeonReturn.setTextureId(textureId);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    Map<String, Object> toMap() {
+      Map<String, Object> toMapResult = new HashMap<>();
       toMapResult.put("textureId", textureId);
       return toMapResult;
     }
 
-    static TextureMessage fromMap(HashMap map) {
-      TextureMessage fromMapResult = new TextureMessage();
+    static @NonNull TextureMessage fromMap(@NonNull Map<String, Object> map) {
+      TextureMessage pigeonResult = new TextureMessage();
       Object textureId = map.get("textureId");
-      fromMapResult.textureId =
+      pigeonResult.setTextureId(
           (textureId == null)
               ? null
-              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId);
-      return fromMapResult;
+              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId));
+      return pigeonResult;
+    }
+  }
+
+  /** Generated class from Pigeon that represents data sent in messages. */
+  public static class LoopingMessage {
+    private @NonNull Long textureId;
+
+    public @NonNull Long getTextureId() {
+      return textureId;
+    }
+
+    public void setTextureId(@NonNull Long setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"textureId\" is null.");
+      }
+      this.textureId = setterArg;
+    }
+
+    private @NonNull Boolean isLooping;
+
+    public @NonNull Boolean getIsLooping() {
+      return isLooping;
+    }
+
+    public void setIsLooping(@NonNull Boolean setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"isLooping\" is null.");
+      }
+      this.isLooping = setterArg;
+    }
+
+    /** Constructor is private to enforce null safety; use Builder. */
+    private LoopingMessage() {}
+
+    public static class Builder {
+      private @Nullable Long textureId;
+
+      public @NonNull Builder setTextureId(@NonNull Long setterArg) {
+        this.textureId = setterArg;
+        return this;
+      }
+
+      private @Nullable Boolean isLooping;
+
+      public @NonNull Builder setIsLooping(@NonNull Boolean setterArg) {
+        this.isLooping = setterArg;
+        return this;
+      }
+
+      public @NonNull LoopingMessage build() {
+        LoopingMessage pigeonReturn = new LoopingMessage();
+        pigeonReturn.setTextureId(textureId);
+        pigeonReturn.setIsLooping(isLooping);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    Map<String, Object> toMap() {
+      Map<String, Object> toMapResult = new HashMap<>();
+      toMapResult.put("textureId", textureId);
+      toMapResult.put("isLooping", isLooping);
+      return toMapResult;
+    }
+
+    static @NonNull LoopingMessage fromMap(@NonNull Map<String, Object> map) {
+      LoopingMessage pigeonResult = new LoopingMessage();
+      Object textureId = map.get("textureId");
+      pigeonResult.setTextureId(
+          (textureId == null)
+              ? null
+              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId));
+      Object isLooping = map.get("isLooping");
+      pigeonResult.setIsLooping((Boolean) isLooping);
+      return pigeonResult;
+    }
+  }
+
+  /** Generated class from Pigeon that represents data sent in messages. */
+  public static class VolumeMessage {
+    private @NonNull Long textureId;
+
+    public @NonNull Long getTextureId() {
+      return textureId;
+    }
+
+    public void setTextureId(@NonNull Long setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"textureId\" is null.");
+      }
+      this.textureId = setterArg;
+    }
+
+    private @NonNull Double volume;
+
+    public @NonNull Double getVolume() {
+      return volume;
+    }
+
+    public void setVolume(@NonNull Double setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"volume\" is null.");
+      }
+      this.volume = setterArg;
+    }
+
+    /** Constructor is private to enforce null safety; use Builder. */
+    private VolumeMessage() {}
+
+    public static class Builder {
+      private @Nullable Long textureId;
+
+      public @NonNull Builder setTextureId(@NonNull Long setterArg) {
+        this.textureId = setterArg;
+        return this;
+      }
+
+      private @Nullable Double volume;
+
+      public @NonNull Builder setVolume(@NonNull Double setterArg) {
+        this.volume = setterArg;
+        return this;
+      }
+
+      public @NonNull VolumeMessage build() {
+        VolumeMessage pigeonReturn = new VolumeMessage();
+        pigeonReturn.setTextureId(textureId);
+        pigeonReturn.setVolume(volume);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    Map<String, Object> toMap() {
+      Map<String, Object> toMapResult = new HashMap<>();
+      toMapResult.put("textureId", textureId);
+      toMapResult.put("volume", volume);
+      return toMapResult;
+    }
+
+    static @NonNull VolumeMessage fromMap(@NonNull Map<String, Object> map) {
+      VolumeMessage pigeonResult = new VolumeMessage();
+      Object textureId = map.get("textureId");
+      pigeonResult.setTextureId(
+          (textureId == null)
+              ? null
+              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId));
+      Object volume = map.get("volume");
+      pigeonResult.setVolume((Double) volume);
+      return pigeonResult;
+    }
+  }
+
+  /** Generated class from Pigeon that represents data sent in messages. */
+  public static class PlaybackSpeedMessage {
+    private @NonNull Long textureId;
+
+    public @NonNull Long getTextureId() {
+      return textureId;
+    }
+
+    public void setTextureId(@NonNull Long setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"textureId\" is null.");
+      }
+      this.textureId = setterArg;
+    }
+
+    private @NonNull Double speed;
+
+    public @NonNull Double getSpeed() {
+      return speed;
+    }
+
+    public void setSpeed(@NonNull Double setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"speed\" is null.");
+      }
+      this.speed = setterArg;
+    }
+
+    /** Constructor is private to enforce null safety; use Builder. */
+    private PlaybackSpeedMessage() {}
+
+    public static class Builder {
+      private @Nullable Long textureId;
+
+      public @NonNull Builder setTextureId(@NonNull Long setterArg) {
+        this.textureId = setterArg;
+        return this;
+      }
+
+      private @Nullable Double speed;
+
+      public @NonNull Builder setSpeed(@NonNull Double setterArg) {
+        this.speed = setterArg;
+        return this;
+      }
+
+      public @NonNull PlaybackSpeedMessage build() {
+        PlaybackSpeedMessage pigeonReturn = new PlaybackSpeedMessage();
+        pigeonReturn.setTextureId(textureId);
+        pigeonReturn.setSpeed(speed);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    Map<String, Object> toMap() {
+      Map<String, Object> toMapResult = new HashMap<>();
+      toMapResult.put("textureId", textureId);
+      toMapResult.put("speed", speed);
+      return toMapResult;
+    }
+
+    static @NonNull PlaybackSpeedMessage fromMap(@NonNull Map<String, Object> map) {
+      PlaybackSpeedMessage pigeonResult = new PlaybackSpeedMessage();
+      Object textureId = map.get("textureId");
+      pigeonResult.setTextureId(
+          (textureId == null)
+              ? null
+              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId));
+      Object speed = map.get("speed");
+      pigeonResult.setSpeed((Double) speed);
+      return pigeonResult;
+    }
+  }
+
+  /** Generated class from Pigeon that represents data sent in messages. */
+  public static class PositionMessage {
+    private @NonNull Long textureId;
+
+    public @NonNull Long getTextureId() {
+      return textureId;
+    }
+
+    public void setTextureId(@NonNull Long setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"textureId\" is null.");
+      }
+      this.textureId = setterArg;
+    }
+
+    private @NonNull Long position;
+
+    public @NonNull Long getPosition() {
+      return position;
+    }
+
+    public void setPosition(@NonNull Long setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"position\" is null.");
+      }
+      this.position = setterArg;
+    }
+
+    /** Constructor is private to enforce null safety; use Builder. */
+    private PositionMessage() {}
+
+    public static class Builder {
+      private @Nullable Long textureId;
+
+      public @NonNull Builder setTextureId(@NonNull Long setterArg) {
+        this.textureId = setterArg;
+        return this;
+      }
+
+      private @Nullable Long position;
+
+      public @NonNull Builder setPosition(@NonNull Long setterArg) {
+        this.position = setterArg;
+        return this;
+      }
+
+      public @NonNull PositionMessage build() {
+        PositionMessage pigeonReturn = new PositionMessage();
+        pigeonReturn.setTextureId(textureId);
+        pigeonReturn.setPosition(position);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    Map<String, Object> toMap() {
+      Map<String, Object> toMapResult = new HashMap<>();
+      toMapResult.put("textureId", textureId);
+      toMapResult.put("position", position);
+      return toMapResult;
+    }
+
+    static @NonNull PositionMessage fromMap(@NonNull Map<String, Object> map) {
+      PositionMessage pigeonResult = new PositionMessage();
+      Object textureId = map.get("textureId");
+      pigeonResult.setTextureId(
+          (textureId == null)
+              ? null
+              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId));
+      Object position = map.get("position");
+      pigeonResult.setPosition(
+          (position == null)
+              ? null
+              : ((position instanceof Integer) ? (Integer) position : (Long) position));
+      return pigeonResult;
     }
   }
 
   /** Generated class from Pigeon that represents data sent in messages. */
   public static class CreateMessage {
-    private String asset;
+    private @Nullable String asset;
 
-    public String getAsset() {
+    public @Nullable String getAsset() {
       return asset;
     }
 
-    public void setAsset(String setterArg) {
+    public void setAsset(@Nullable String setterArg) {
       this.asset = setterArg;
     }
 
-    private String uri;
+    private @Nullable String uri;
 
-    public String getUri() {
+    public @Nullable String getUri() {
       return uri;
     }
 
-    public void setUri(String setterArg) {
+    public void setUri(@Nullable String setterArg) {
       this.uri = setterArg;
     }
 
-    private String packageName;
+    private @Nullable String packageName;
 
-    public String getPackageName() {
+    public @Nullable String getPackageName() {
       return packageName;
     }
 
-    public void setPackageName(String setterArg) {
+    public void setPackageName(@Nullable String setterArg) {
       this.packageName = setterArg;
     }
 
-    private String formatHint;
+    private @Nullable String formatHint;
 
-    public String getFormatHint() {
+    public @Nullable String getFormatHint() {
       return formatHint;
     }
 
-    public void setFormatHint(String setterArg) {
+    public void setFormatHint(@Nullable String setterArg) {
       this.formatHint = setterArg;
     }
 
-    private HashMap httpHeaders;
+    private @NonNull Map<String, String> httpHeaders;
 
-    public HashMap getHttpHeaders() {
+    public @NonNull Map<String, String> getHttpHeaders() {
       return httpHeaders;
     }
 
-    public void setHttpHeaders(HashMap setterArg) {
+    public void setHttpHeaders(@NonNull Map<String, String> setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"httpHeaders\" is null.");
+      }
       this.httpHeaders = setterArg;
     }
 
-    HashMap toMap() {
-      HashMap<String, Object> toMapResult = new HashMap<>();
+    /** Constructor is private to enforce null safety; use Builder. */
+    private CreateMessage() {}
+
+    public static class Builder {
+      private @Nullable String asset;
+
+      public @NonNull Builder setAsset(@Nullable String setterArg) {
+        this.asset = setterArg;
+        return this;
+      }
+
+      private @Nullable String uri;
+
+      public @NonNull Builder setUri(@Nullable String setterArg) {
+        this.uri = setterArg;
+        return this;
+      }
+
+      private @Nullable String packageName;
+
+      public @NonNull Builder setPackageName(@Nullable String setterArg) {
+        this.packageName = setterArg;
+        return this;
+      }
+
+      private @Nullable String formatHint;
+
+      public @NonNull Builder setFormatHint(@Nullable String setterArg) {
+        this.formatHint = setterArg;
+        return this;
+      }
+
+      private @Nullable Map<String, String> httpHeaders;
+
+      public @NonNull Builder setHttpHeaders(@NonNull Map<String, String> setterArg) {
+        this.httpHeaders = setterArg;
+        return this;
+      }
+
+      public @NonNull CreateMessage build() {
+        CreateMessage pigeonReturn = new CreateMessage();
+        pigeonReturn.setAsset(asset);
+        pigeonReturn.setUri(uri);
+        pigeonReturn.setPackageName(packageName);
+        pigeonReturn.setFormatHint(formatHint);
+        pigeonReturn.setHttpHeaders(httpHeaders);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    Map<String, Object> toMap() {
+      Map<String, Object> toMapResult = new HashMap<>();
       toMapResult.put("asset", asset);
       toMapResult.put("uri", uri);
       toMapResult.put("packageName", packageName);
@@ -107,216 +493,130 @@
       return toMapResult;
     }
 
-    static CreateMessage fromMap(HashMap map) {
-      CreateMessage fromMapResult = new CreateMessage();
+    static @NonNull CreateMessage fromMap(@NonNull Map<String, Object> map) {
+      CreateMessage pigeonResult = new CreateMessage();
       Object asset = map.get("asset");
-      fromMapResult.asset = (String) asset;
+      pigeonResult.setAsset((String) asset);
       Object uri = map.get("uri");
-      fromMapResult.uri = (String) uri;
+      pigeonResult.setUri((String) uri);
       Object packageName = map.get("packageName");
-      fromMapResult.packageName = (String) packageName;
+      pigeonResult.setPackageName((String) packageName);
       Object formatHint = map.get("formatHint");
-      fromMapResult.formatHint = (String) formatHint;
+      pigeonResult.setFormatHint((String) formatHint);
       Object httpHeaders = map.get("httpHeaders");
-      fromMapResult.httpHeaders = (HashMap) httpHeaders;
-      return fromMapResult;
-    }
-  }
-
-  /** Generated class from Pigeon that represents data sent in messages. */
-  public static class LoopingMessage {
-    private Long textureId;
-
-    public Long getTextureId() {
-      return textureId;
-    }
-
-    public void setTextureId(Long setterArg) {
-      this.textureId = setterArg;
-    }
-
-    private Boolean isLooping;
-
-    public Boolean getIsLooping() {
-      return isLooping;
-    }
-
-    public void setIsLooping(Boolean setterArg) {
-      this.isLooping = setterArg;
-    }
-
-    HashMap toMap() {
-      HashMap<String, Object> toMapResult = new HashMap<>();
-      toMapResult.put("textureId", textureId);
-      toMapResult.put("isLooping", isLooping);
-      return toMapResult;
-    }
-
-    static LoopingMessage fromMap(HashMap map) {
-      LoopingMessage fromMapResult = new LoopingMessage();
-      Object textureId = map.get("textureId");
-      fromMapResult.textureId =
-          (textureId == null)
-              ? null
-              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId);
-      Object isLooping = map.get("isLooping");
-      fromMapResult.isLooping = (Boolean) isLooping;
-      return fromMapResult;
-    }
-  }
-
-  /** Generated class from Pigeon that represents data sent in messages. */
-  public static class VolumeMessage {
-    private Long textureId;
-
-    public Long getTextureId() {
-      return textureId;
-    }
-
-    public void setTextureId(Long setterArg) {
-      this.textureId = setterArg;
-    }
-
-    private Double volume;
-
-    public Double getVolume() {
-      return volume;
-    }
-
-    public void setVolume(Double setterArg) {
-      this.volume = setterArg;
-    }
-
-    HashMap toMap() {
-      HashMap<String, Object> toMapResult = new HashMap<>();
-      toMapResult.put("textureId", textureId);
-      toMapResult.put("volume", volume);
-      return toMapResult;
-    }
-
-    static VolumeMessage fromMap(HashMap map) {
-      VolumeMessage fromMapResult = new VolumeMessage();
-      Object textureId = map.get("textureId");
-      fromMapResult.textureId =
-          (textureId == null)
-              ? null
-              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId);
-      Object volume = map.get("volume");
-      fromMapResult.volume = (Double) volume;
-      return fromMapResult;
-    }
-  }
-
-  /** Generated class from Pigeon that represents data sent in messages. */
-  public static class PlaybackSpeedMessage {
-    private Long textureId;
-
-    public Long getTextureId() {
-      return textureId;
-    }
-
-    public void setTextureId(Long setterArg) {
-      this.textureId = setterArg;
-    }
-
-    private Double speed;
-
-    public Double getSpeed() {
-      return speed;
-    }
-
-    public void setSpeed(Double setterArg) {
-      this.speed = setterArg;
-    }
-
-    HashMap toMap() {
-      HashMap<String, Object> toMapResult = new HashMap<>();
-      toMapResult.put("textureId", textureId);
-      toMapResult.put("speed", speed);
-      return toMapResult;
-    }
-
-    static PlaybackSpeedMessage fromMap(HashMap map) {
-      PlaybackSpeedMessage fromMapResult = new PlaybackSpeedMessage();
-      Object textureId = map.get("textureId");
-      fromMapResult.textureId =
-          (textureId == null)
-              ? null
-              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId);
-      Object speed = map.get("speed");
-      fromMapResult.speed = (Double) speed;
-      return fromMapResult;
-    }
-  }
-
-  /** Generated class from Pigeon that represents data sent in messages. */
-  public static class PositionMessage {
-    private Long textureId;
-
-    public Long getTextureId() {
-      return textureId;
-    }
-
-    public void setTextureId(Long setterArg) {
-      this.textureId = setterArg;
-    }
-
-    private Long position;
-
-    public Long getPosition() {
-      return position;
-    }
-
-    public void setPosition(Long setterArg) {
-      this.position = setterArg;
-    }
-
-    HashMap toMap() {
-      HashMap<String, Object> toMapResult = new HashMap<>();
-      toMapResult.put("textureId", textureId);
-      toMapResult.put("position", position);
-      return toMapResult;
-    }
-
-    static PositionMessage fromMap(HashMap map) {
-      PositionMessage fromMapResult = new PositionMessage();
-      Object textureId = map.get("textureId");
-      fromMapResult.textureId =
-          (textureId == null)
-              ? null
-              : ((textureId instanceof Integer) ? (Integer) textureId : (Long) textureId);
-      Object position = map.get("position");
-      fromMapResult.position =
-          (position == null)
-              ? null
-              : ((position instanceof Integer) ? (Integer) position : (Long) position);
-      return fromMapResult;
+      pigeonResult.setHttpHeaders((Map<String, String>) httpHeaders);
+      return pigeonResult;
     }
   }
 
   /** Generated class from Pigeon that represents data sent in messages. */
   public static class MixWithOthersMessage {
-    private Boolean mixWithOthers;
+    private @NonNull Boolean mixWithOthers;
 
-    public Boolean getMixWithOthers() {
+    public @NonNull Boolean getMixWithOthers() {
       return mixWithOthers;
     }
 
-    public void setMixWithOthers(Boolean setterArg) {
+    public void setMixWithOthers(@NonNull Boolean setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"mixWithOthers\" is null.");
+      }
       this.mixWithOthers = setterArg;
     }
 
-    HashMap toMap() {
-      HashMap<String, Object> toMapResult = new HashMap<>();
+    /** Constructor is private to enforce null safety; use Builder. */
+    private MixWithOthersMessage() {}
+
+    public static class Builder {
+      private @Nullable Boolean mixWithOthers;
+
+      public @NonNull Builder setMixWithOthers(@NonNull Boolean setterArg) {
+        this.mixWithOthers = setterArg;
+        return this;
+      }
+
+      public @NonNull MixWithOthersMessage build() {
+        MixWithOthersMessage pigeonReturn = new MixWithOthersMessage();
+        pigeonReturn.setMixWithOthers(mixWithOthers);
+        return pigeonReturn;
+      }
+    }
+
+    @NonNull
+    Map<String, Object> toMap() {
+      Map<String, Object> toMapResult = new HashMap<>();
       toMapResult.put("mixWithOthers", mixWithOthers);
       return toMapResult;
     }
 
-    static MixWithOthersMessage fromMap(HashMap map) {
-      MixWithOthersMessage fromMapResult = new MixWithOthersMessage();
+    static @NonNull MixWithOthersMessage fromMap(@NonNull Map<String, Object> map) {
+      MixWithOthersMessage pigeonResult = new MixWithOthersMessage();
       Object mixWithOthers = map.get("mixWithOthers");
-      fromMapResult.mixWithOthers = (Boolean) mixWithOthers;
-      return fromMapResult;
+      pigeonResult.setMixWithOthers((Boolean) mixWithOthers);
+      return pigeonResult;
+    }
+  }
+
+  private static class VideoPlayerApiCodec extends StandardMessageCodec {
+    public static final VideoPlayerApiCodec INSTANCE = new VideoPlayerApiCodec();
+
+    private VideoPlayerApiCodec() {}
+
+    @Override
+    protected Object readValueOfType(byte type, ByteBuffer buffer) {
+      switch (type) {
+        case (byte) 128:
+          return CreateMessage.fromMap((Map<String, Object>) readValue(buffer));
+
+        case (byte) 129:
+          return LoopingMessage.fromMap((Map<String, Object>) readValue(buffer));
+
+        case (byte) 130:
+          return MixWithOthersMessage.fromMap((Map<String, Object>) readValue(buffer));
+
+        case (byte) 131:
+          return PlaybackSpeedMessage.fromMap((Map<String, Object>) readValue(buffer));
+
+        case (byte) 132:
+          return PositionMessage.fromMap((Map<String, Object>) readValue(buffer));
+
+        case (byte) 133:
+          return TextureMessage.fromMap((Map<String, Object>) readValue(buffer));
+
+        case (byte) 134:
+          return VolumeMessage.fromMap((Map<String, Object>) readValue(buffer));
+
+        default:
+          return super.readValueOfType(type, buffer);
+      }
+    }
+
+    @Override
+    protected void writeValue(ByteArrayOutputStream stream, Object value) {
+      if (value instanceof CreateMessage) {
+        stream.write(128);
+        writeValue(stream, ((CreateMessage) value).toMap());
+      } else if (value instanceof LoopingMessage) {
+        stream.write(129);
+        writeValue(stream, ((LoopingMessage) value).toMap());
+      } else if (value instanceof MixWithOthersMessage) {
+        stream.write(130);
+        writeValue(stream, ((MixWithOthersMessage) value).toMap());
+      } else if (value instanceof PlaybackSpeedMessage) {
+        stream.write(131);
+        writeValue(stream, ((PlaybackSpeedMessage) value).toMap());
+      } else if (value instanceof PositionMessage) {
+        stream.write(132);
+        writeValue(stream, ((PositionMessage) value).toMap());
+      } else if (value instanceof TextureMessage) {
+        stream.write(133);
+        writeValue(stream, ((TextureMessage) value).toMap());
+      } else if (value instanceof VolumeMessage) {
+        stream.write(134);
+        writeValue(stream, ((VolumeMessage) value).toMap());
+      } else {
+        super.writeValue(stream, value);
+      }
     }
   }
 
@@ -324,42 +624,45 @@
   public interface VideoPlayerApi {
     void initialize();
 
-    TextureMessage create(CreateMessage arg);
+    TextureMessage create(CreateMessage msg);
 
-    void dispose(TextureMessage arg);
+    void dispose(TextureMessage msg);
 
-    void setLooping(LoopingMessage arg);
+    void setLooping(LoopingMessage msg);
 
-    void setVolume(VolumeMessage arg);
+    void setVolume(VolumeMessage msg);
 
-    void setPlaybackSpeed(PlaybackSpeedMessage arg);
+    void setPlaybackSpeed(PlaybackSpeedMessage msg);
 
-    void play(TextureMessage arg);
+    void play(TextureMessage msg);
 
-    PositionMessage position(TextureMessage arg);
+    PositionMessage position(TextureMessage msg);
 
-    void seekTo(PositionMessage arg);
+    void seekTo(PositionMessage msg);
 
-    void pause(TextureMessage arg);
+    void pause(TextureMessage msg);
 
-    void setMixWithOthers(MixWithOthersMessage arg);
+    void setMixWithOthers(MixWithOthersMessage msg);
 
-    /** Sets up an instance of `VideoPlayerApi` to handle messages through the `binaryMessenger` */
+    /** The codec used by VideoPlayerApi. */
+    static MessageCodec<Object> getCodec() {
+      return VideoPlayerApiCodec.INSTANCE;
+    }
+
+    /** Sets up an instance of `VideoPlayerApi` to handle messages through the `binaryMessenger`. */
     static void setup(BinaryMessenger binaryMessenger, VideoPlayerApi api) {
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.initialize",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.initialize", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
                   api.initialize();
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -371,19 +674,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.create",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.create", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  CreateMessage input = CreateMessage.fromMap((HashMap) message);
-                  TextureMessage output = api.create(input);
-                  wrapped.put("result", output.toMap());
-                } catch (Exception exception) {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  CreateMessage msgArg = (CreateMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  TextureMessage output = api.create(msgArg);
+                  wrapped.put("result", output);
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -395,19 +699,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.dispose",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.dispose", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  TextureMessage input = TextureMessage.fromMap((HashMap) message);
-                  api.dispose(input);
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  TextureMessage msgArg = (TextureMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  api.dispose(msgArg);
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -419,19 +724,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.setLooping",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.setLooping", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  LoopingMessage input = LoopingMessage.fromMap((HashMap) message);
-                  api.setLooping(input);
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  LoopingMessage msgArg = (LoopingMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  api.setLooping(msgArg);
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -443,19 +749,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.setVolume",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.setVolume", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  VolumeMessage input = VolumeMessage.fromMap((HashMap) message);
-                  api.setVolume(input);
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  VolumeMessage msgArg = (VolumeMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  api.setVolume(msgArg);
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -467,19 +774,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  PlaybackSpeedMessage input = PlaybackSpeedMessage.fromMap((HashMap) message);
-                  api.setPlaybackSpeed(input);
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  PlaybackSpeedMessage msgArg = (PlaybackSpeedMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  api.setPlaybackSpeed(msgArg);
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -491,19 +799,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.play",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.play", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  TextureMessage input = TextureMessage.fromMap((HashMap) message);
-                  api.play(input);
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  TextureMessage msgArg = (TextureMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  api.play(msgArg);
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -515,19 +824,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.position",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.position", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  TextureMessage input = TextureMessage.fromMap((HashMap) message);
-                  PositionMessage output = api.position(input);
-                  wrapped.put("result", output.toMap());
-                } catch (Exception exception) {
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  TextureMessage msgArg = (TextureMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  PositionMessage output = api.position(msgArg);
+                  wrapped.put("result", output);
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -539,19 +849,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.seekTo",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.seekTo", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  PositionMessage input = PositionMessage.fromMap((HashMap) message);
-                  api.seekTo(input);
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  PositionMessage msgArg = (PositionMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  api.seekTo(msgArg);
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -563,19 +874,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.pause",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.pause", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  TextureMessage input = TextureMessage.fromMap((HashMap) message);
-                  api.pause(input);
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  TextureMessage msgArg = (TextureMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  api.pause(msgArg);
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -587,19 +899,20 @@
       {
         BasicMessageChannel<Object> channel =
             new BasicMessageChannel<>(
-                binaryMessenger,
-                "dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers",
-                new StandardMessageCodec());
+                binaryMessenger, "dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers", getCodec());
         if (api != null) {
           channel.setMessageHandler(
               (message, reply) -> {
-                HashMap<String, HashMap> wrapped = new HashMap<>();
+                Map<String, Object> wrapped = new HashMap<>();
                 try {
-                  @SuppressWarnings("ConstantConditions")
-                  MixWithOthersMessage input = MixWithOthersMessage.fromMap((HashMap) message);
-                  api.setMixWithOthers(input);
+                  ArrayList<Object> args = (ArrayList<Object>) message;
+                  MixWithOthersMessage msgArg = (MixWithOthersMessage) args.get(0);
+                  if (msgArg == null) {
+                    throw new NullPointerException("msgArg unexpectedly null.");
+                  }
+                  api.setMixWithOthers(msgArg);
                   wrapped.put("result", null);
-                } catch (Exception exception) {
+                } catch (Error | RuntimeException exception) {
                   wrapped.put("error", wrapError(exception));
                 }
                 reply.reply(wrapped);
@@ -611,11 +924,13 @@
     }
   }
 
-  private static HashMap wrapError(Exception exception) {
-    HashMap<String, Object> errorMap = new HashMap<>();
+  private static Map<String, Object> wrapError(Throwable exception) {
+    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/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java
index 887d3d1..3359326 100644
--- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java
+++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java
@@ -10,6 +10,7 @@
 import android.content.Context;
 import android.net.Uri;
 import android.view.Surface;
+import androidx.annotation.NonNull;
 import com.google.android.exoplayer2.C;
 import com.google.android.exoplayer2.ExoPlaybackException;
 import com.google.android.exoplayer2.Format;
@@ -64,7 +65,7 @@
       TextureRegistry.SurfaceTextureEntry textureEntry,
       String dataSource,
       String formatHint,
-      Map<String, String> httpHeaders,
+      @NonNull Map<String, String> httpHeaders,
       VideoPlayerOptions options) {
     this.eventChannel = eventChannel;
     this.textureEntry = textureEntry;
diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java
index d77b45e..168d90d 100644
--- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java
+++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java
@@ -156,8 +156,7 @@
     }
     videoPlayers.put(handle.id(), player);
 
-    TextureMessage result = new TextureMessage();
-    result.setTextureId(handle.id());
+    TextureMessage result = new TextureMessage.Builder().setTextureId(handle.id()).build();
     return result;
   }
 
@@ -189,8 +188,11 @@
 
   public PositionMessage position(TextureMessage arg) {
     VideoPlayer player = videoPlayers.get(arg.getTextureId());
-    PositionMessage result = new PositionMessage();
-    result.setPosition(player.getPosition());
+    PositionMessage result =
+        new PositionMessage.Builder()
+            .setPosition(player.getPosition())
+            .setTextureId(arg.getTextureId())
+            .build();
     player.sendBufferingUpdate();
     return result;
   }
diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart b/packages/video_player/video_player_android/lib/src/android_video_player.dart
index adb386a..d713b28 100644
--- a/packages/video_player/video_player_android/lib/src/android_video_player.dart
+++ b/packages/video_player/video_player_android/lib/src/android_video_player.dart
@@ -9,7 +9,7 @@
 import 'package:flutter/widgets.dart';
 import 'package:video_player_platform_interface/video_player_platform_interface.dart';
 
-import 'messages.dart';
+import 'messages.g.dart';
 
 /// An Android implementation of [VideoPlayerPlatform] that uses the
 /// Pigeon-generated [VideoPlayerApi].
@@ -28,30 +28,40 @@
 
   @override
   Future<void> dispose(int textureId) {
-    return _api.dispose(TextureMessage()..textureId = textureId);
+    return _api.dispose(TextureMessage(textureId: textureId));
   }
 
   @override
   Future<int?> create(DataSource dataSource) async {
-    final CreateMessage message = CreateMessage();
-
+    String? asset;
+    String? packageName;
+    String? uri;
+    String? formatHint;
+    Map<String, String> httpHeaders = <String, String>{};
     switch (dataSource.sourceType) {
       case DataSourceType.asset:
-        message.asset = dataSource.asset;
-        message.packageName = dataSource.package;
+        asset = dataSource.asset;
+        packageName = dataSource.package;
         break;
       case DataSourceType.network:
-        message.uri = dataSource.uri;
-        message.formatHint = _videoFormatStringMap[dataSource.formatHint];
-        message.httpHeaders = dataSource.httpHeaders;
+        uri = dataSource.uri;
+        formatHint = _videoFormatStringMap[dataSource.formatHint];
+        httpHeaders = dataSource.httpHeaders;
         break;
       case DataSourceType.file:
-        message.uri = dataSource.uri;
+        uri = dataSource.uri;
         break;
       case DataSourceType.contentUri:
-        message.uri = dataSource.uri;
+        uri = dataSource.uri;
         break;
     }
+    final CreateMessage message = CreateMessage(
+      asset: asset,
+      packageName: packageName,
+      uri: uri,
+      httpHeaders: httpHeaders,
+      formatHint: formatHint,
+    );
 
     final TextureMessage response = await _api.create(message);
     return response.textureId;
@@ -59,49 +69,53 @@
 
   @override
   Future<void> setLooping(int textureId, bool looping) {
-    return _api.setLooping(LoopingMessage()
-      ..textureId = textureId
-      ..isLooping = looping);
+    return _api.setLooping(LoopingMessage(
+      textureId: textureId,
+      isLooping: looping,
+    ));
   }
 
   @override
   Future<void> play(int textureId) {
-    return _api.play(TextureMessage()..textureId = textureId);
+    return _api.play(TextureMessage(textureId: textureId));
   }
 
   @override
   Future<void> pause(int textureId) {
-    return _api.pause(TextureMessage()..textureId = textureId);
+    return _api.pause(TextureMessage(textureId: textureId));
   }
 
   @override
   Future<void> setVolume(int textureId, double volume) {
-    return _api.setVolume(VolumeMessage()
-      ..textureId = textureId
-      ..volume = volume);
+    return _api.setVolume(VolumeMessage(
+      textureId: textureId,
+      volume: volume,
+    ));
   }
 
   @override
   Future<void> setPlaybackSpeed(int textureId, double speed) {
     assert(speed > 0);
 
-    return _api.setPlaybackSpeed(PlaybackSpeedMessage()
-      ..textureId = textureId
-      ..speed = speed);
+    return _api.setPlaybackSpeed(PlaybackSpeedMessage(
+      textureId: textureId,
+      speed: speed,
+    ));
   }
 
   @override
   Future<void> seekTo(int textureId, Duration position) {
-    return _api.seekTo(PositionMessage()
-      ..textureId = textureId
-      ..position = position.inMilliseconds);
+    return _api.seekTo(PositionMessage(
+      textureId: textureId,
+      position: position.inMilliseconds,
+    ));
   }
 
   @override
   Future<Duration> getPosition(int textureId) async {
     final PositionMessage response =
-        await _api.position(TextureMessage()..textureId = textureId);
-    return Duration(milliseconds: response.position!);
+        await _api.position(TextureMessage(textureId: textureId));
+    return Duration(milliseconds: response.position);
   }
 
   @override
@@ -146,9 +160,8 @@
 
   @override
   Future<void> setMixWithOthers(bool mixWithOthers) {
-    return _api.setMixWithOthers(
-      MixWithOthersMessage()..mixWithOthers = mixWithOthers,
-    );
+    return _api
+        .setMixWithOthers(MixWithOthersMessage(mixWithOthers: mixWithOthers));
   }
 
   EventChannel _eventChannelFor(int textureId) {
diff --git a/packages/video_player/video_player_android/lib/src/messages.dart b/packages/video_player/video_player_android/lib/src/messages.dart
deleted file mode 100644
index 831f4e3..0000000
--- a/packages/video_player/video_player_android/lib/src/messages.dart
+++ /dev/null
@@ -1,425 +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.
-
-// Autogenerated from Pigeon (v0.1.21), 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, cast_nullable_to_non_nullable
-// @dart = 2.12
-import 'dart:async';
-import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List;
-
-import 'package:flutter/services.dart';
-
-class TextureMessage {
-  int? textureId;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    return pigeonMap;
-  }
-
-  static TextureMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return TextureMessage()..textureId = pigeonMap['textureId'] as int?;
-  }
-}
-
-class CreateMessage {
-  String? asset;
-  String? uri;
-  String? packageName;
-  String? formatHint;
-  Map<Object?, Object?>? httpHeaders;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['asset'] = asset;
-    pigeonMap['uri'] = uri;
-    pigeonMap['packageName'] = packageName;
-    pigeonMap['formatHint'] = formatHint;
-    pigeonMap['httpHeaders'] = httpHeaders;
-    return pigeonMap;
-  }
-
-  static CreateMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return CreateMessage()
-      ..asset = pigeonMap['asset'] as String?
-      ..uri = pigeonMap['uri'] as String?
-      ..packageName = pigeonMap['packageName'] as String?
-      ..formatHint = pigeonMap['formatHint'] as String?
-      ..httpHeaders = pigeonMap['httpHeaders'] as Map<Object?, Object?>?;
-  }
-}
-
-class LoopingMessage {
-  int? textureId;
-  bool? isLooping;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    pigeonMap['isLooping'] = isLooping;
-    return pigeonMap;
-  }
-
-  static LoopingMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return LoopingMessage()
-      ..textureId = pigeonMap['textureId'] as int?
-      ..isLooping = pigeonMap['isLooping'] as bool?;
-  }
-}
-
-class VolumeMessage {
-  int? textureId;
-  double? volume;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    pigeonMap['volume'] = volume;
-    return pigeonMap;
-  }
-
-  static VolumeMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return VolumeMessage()
-      ..textureId = pigeonMap['textureId'] as int?
-      ..volume = pigeonMap['volume'] as double?;
-  }
-}
-
-class PlaybackSpeedMessage {
-  int? textureId;
-  double? speed;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    pigeonMap['speed'] = speed;
-    return pigeonMap;
-  }
-
-  static PlaybackSpeedMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return PlaybackSpeedMessage()
-      ..textureId = pigeonMap['textureId'] as int?
-      ..speed = pigeonMap['speed'] as double?;
-  }
-}
-
-class PositionMessage {
-  int? textureId;
-  int? position;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    pigeonMap['position'] = position;
-    return pigeonMap;
-  }
-
-  static PositionMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return PositionMessage()
-      ..textureId = pigeonMap['textureId'] as int?
-      ..position = pigeonMap['position'] as int?;
-  }
-}
-
-class MixWithOthersMessage {
-  bool? mixWithOthers;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['mixWithOthers'] = mixWithOthers;
-    return pigeonMap;
-  }
-
-  static MixWithOthersMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return MixWithOthersMessage()
-      ..mixWithOthers = pigeonMap['mixWithOthers'] as bool?;
-  }
-}
-
-class VideoPlayerApi {
-  Future<void> initialize() async {
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.initialize', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(null) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<TextureMessage> create(CreateMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.create', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      return TextureMessage.decode(replyMap['result']!);
-    }
-  }
-
-  Future<void> dispose(TextureMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.dispose', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> setLooping(LoopingMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.setLooping', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> setVolume(VolumeMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.setVolume', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> setPlaybackSpeed(PlaybackSpeedMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed',
-        StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> play(TextureMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.play', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<PositionMessage> position(TextureMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.position', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      return PositionMessage.decode(replyMap['result']!);
-    }
-  }
-
-  Future<void> seekTo(PositionMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.seekTo', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> pause(TextureMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.pause', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> setMixWithOthers(MixWithOthersMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers',
-        StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-}
diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart b/packages/video_player/video_player_android/lib/src/messages.g.dart
new file mode 100644
index 0000000..5fa09e3
--- /dev/null
+++ b/packages/video_player/video_player_android/lib/src/messages.g.dart
@@ -0,0 +1,539 @@
+// 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.16), 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
+import 'dart:async';
+import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List;
+
+import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer;
+import 'package:flutter/services.dart';
+
+class TextureMessage {
+  TextureMessage({
+    required this.textureId,
+  });
+
+  int textureId;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    return pigeonMap;
+  }
+
+  static TextureMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return TextureMessage(
+      textureId: pigeonMap['textureId']! as int,
+    );
+  }
+}
+
+class LoopingMessage {
+  LoopingMessage({
+    required this.textureId,
+    required this.isLooping,
+  });
+
+  int textureId;
+  bool isLooping;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    pigeonMap['isLooping'] = isLooping;
+    return pigeonMap;
+  }
+
+  static LoopingMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return LoopingMessage(
+      textureId: pigeonMap['textureId']! as int,
+      isLooping: pigeonMap['isLooping']! as bool,
+    );
+  }
+}
+
+class VolumeMessage {
+  VolumeMessage({
+    required this.textureId,
+    required this.volume,
+  });
+
+  int textureId;
+  double volume;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    pigeonMap['volume'] = volume;
+    return pigeonMap;
+  }
+
+  static VolumeMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return VolumeMessage(
+      textureId: pigeonMap['textureId']! as int,
+      volume: pigeonMap['volume']! as double,
+    );
+  }
+}
+
+class PlaybackSpeedMessage {
+  PlaybackSpeedMessage({
+    required this.textureId,
+    required this.speed,
+  });
+
+  int textureId;
+  double speed;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    pigeonMap['speed'] = speed;
+    return pigeonMap;
+  }
+
+  static PlaybackSpeedMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return PlaybackSpeedMessage(
+      textureId: pigeonMap['textureId']! as int,
+      speed: pigeonMap['speed']! as double,
+    );
+  }
+}
+
+class PositionMessage {
+  PositionMessage({
+    required this.textureId,
+    required this.position,
+  });
+
+  int textureId;
+  int position;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    pigeonMap['position'] = position;
+    return pigeonMap;
+  }
+
+  static PositionMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return PositionMessage(
+      textureId: pigeonMap['textureId']! as int,
+      position: pigeonMap['position']! as int,
+    );
+  }
+}
+
+class CreateMessage {
+  CreateMessage({
+    this.asset,
+    this.uri,
+    this.packageName,
+    this.formatHint,
+    required this.httpHeaders,
+  });
+
+  String? asset;
+  String? uri;
+  String? packageName;
+  String? formatHint;
+  Map<String?, String?> httpHeaders;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['asset'] = asset;
+    pigeonMap['uri'] = uri;
+    pigeonMap['packageName'] = packageName;
+    pigeonMap['formatHint'] = formatHint;
+    pigeonMap['httpHeaders'] = httpHeaders;
+    return pigeonMap;
+  }
+
+  static CreateMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return CreateMessage(
+      asset: pigeonMap['asset'] as String?,
+      uri: pigeonMap['uri'] as String?,
+      packageName: pigeonMap['packageName'] as String?,
+      formatHint: pigeonMap['formatHint'] as String?,
+      httpHeaders: (pigeonMap['httpHeaders'] as Map<Object?, Object?>?)!
+          .cast<String?, String?>(),
+    );
+  }
+}
+
+class MixWithOthersMessage {
+  MixWithOthersMessage({
+    required this.mixWithOthers,
+  });
+
+  bool mixWithOthers;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['mixWithOthers'] = mixWithOthers;
+    return pigeonMap;
+  }
+
+  static MixWithOthersMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return MixWithOthersMessage(
+      mixWithOthers: pigeonMap['mixWithOthers']! as bool,
+    );
+  }
+}
+
+class _VideoPlayerApiCodec extends StandardMessageCodec {
+  const _VideoPlayerApiCodec();
+  @override
+  void writeValue(WriteBuffer buffer, Object? value) {
+    if (value is CreateMessage) {
+      buffer.putUint8(128);
+      writeValue(buffer, value.encode());
+    } else if (value is LoopingMessage) {
+      buffer.putUint8(129);
+      writeValue(buffer, value.encode());
+    } else if (value is MixWithOthersMessage) {
+      buffer.putUint8(130);
+      writeValue(buffer, value.encode());
+    } else if (value is PlaybackSpeedMessage) {
+      buffer.putUint8(131);
+      writeValue(buffer, value.encode());
+    } else if (value is PositionMessage) {
+      buffer.putUint8(132);
+      writeValue(buffer, value.encode());
+    } else if (value is TextureMessage) {
+      buffer.putUint8(133);
+      writeValue(buffer, value.encode());
+    } else if (value is VolumeMessage) {
+      buffer.putUint8(134);
+      writeValue(buffer, value.encode());
+    } else {
+      super.writeValue(buffer, value);
+    }
+  }
+
+  @override
+  Object? readValueOfType(int type, ReadBuffer buffer) {
+    switch (type) {
+      case 128:
+        return CreateMessage.decode(readValue(buffer)!);
+
+      case 129:
+        return LoopingMessage.decode(readValue(buffer)!);
+
+      case 130:
+        return MixWithOthersMessage.decode(readValue(buffer)!);
+
+      case 131:
+        return PlaybackSpeedMessage.decode(readValue(buffer)!);
+
+      case 132:
+        return PositionMessage.decode(readValue(buffer)!);
+
+      case 133:
+        return TextureMessage.decode(readValue(buffer)!);
+
+      case 134:
+        return VolumeMessage.decode(readValue(buffer)!);
+
+      default:
+        return super.readValueOfType(type, buffer);
+    }
+  }
+}
+
+class VideoPlayerApi {
+  /// Constructor for [VideoPlayerApi].  The [binaryMessenger] named argument is
+  /// available for dependency injection.  If it is left null, the default
+  /// BinaryMessenger will be used which routes to the host platform.
+  VideoPlayerApi({BinaryMessenger? binaryMessenger})
+      : _binaryMessenger = binaryMessenger;
+
+  final BinaryMessenger? _binaryMessenger;
+
+  static const MessageCodec<Object?> codec = _VideoPlayerApiCodec();
+
+  Future<void> initialize() async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.initialize', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(null) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<TextureMessage> create(CreateMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.create', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return (replyMap['result'] as TextureMessage?)!;
+    }
+  }
+
+  Future<void> dispose(TextureMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.dispose', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> setLooping(LoopingMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.setLooping', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> setVolume(VolumeMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.setVolume', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> setPlaybackSpeed(PlaybackSpeedMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> play(TextureMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.play', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<PositionMessage> position(TextureMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.position', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return (replyMap['result'] as PositionMessage?)!;
+    }
+  }
+
+  Future<void> seekTo(PositionMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.seekTo', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> pause(TextureMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.pause', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> setMixWithOthers(MixWithOthersMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+}
diff --git a/packages/video_player/video_player_android/pigeons/copyright.txt b/packages/video_player/video_player_android/pigeons/copyright.txt
new file mode 100644
index 0000000..1236b63
--- /dev/null
+++ b/packages/video_player/video_player_android/pigeons/copyright.txt
@@ -0,0 +1,3 @@
+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.
diff --git a/packages/video_player/video_player_android/pigeons/messages.dart b/packages/video_player/video_player_android/pigeons/messages.dart
index 42d9640..9efbfc9 100644
--- a/packages/video_player/video_player_android/pigeons/messages.dart
+++ b/packages/video_player/video_player_android/pigeons/messages.dart
@@ -2,43 +2,57 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.9
+import 'package:pigeon/pigeon.dart';
 
-import 'package:pigeon/pigeon_lib.dart';
-
+@ConfigurePigeon(PigeonOptions(
+  dartOut: 'lib/src/messages.g.dart',
+  dartTestOut: 'test/test_api.dart',
+  javaOut: 'android/src/main/java/io/flutter/plugins/videoplayer/Messages.java',
+  javaOptions: JavaOptions(
+    package: 'io.flutter.plugins.videoplayer',
+  ),
+  copyrightHeader: 'pigeons/copyright.txt',
+))
 class TextureMessage {
+  TextureMessage(this.textureId);
   int textureId;
 }
 
 class LoopingMessage {
+  LoopingMessage(this.textureId, this.isLooping);
   int textureId;
   bool isLooping;
 }
 
 class VolumeMessage {
+  VolumeMessage(this.textureId, this.volume);
   int textureId;
   double volume;
 }
 
 class PlaybackSpeedMessage {
+  PlaybackSpeedMessage(this.textureId, this.speed);
   int textureId;
   double speed;
 }
 
 class PositionMessage {
+  PositionMessage(this.textureId, this.position);
   int textureId;
   int position;
 }
 
 class CreateMessage {
-  String asset;
-  String uri;
-  String packageName;
-  String formatHint;
-  Map<String, String> httpHeaders;
+  CreateMessage({required this.httpHeaders});
+  String? asset;
+  String? uri;
+  String? packageName;
+  String? formatHint;
+  Map<String?, String?> httpHeaders;
 }
 
 class MixWithOthersMessage {
+  MixWithOthersMessage(this.mixWithOthers);
   bool mixWithOthers;
 }
 
@@ -56,14 +70,3 @@
   void pause(TextureMessage msg);
   void setMixWithOthers(MixWithOthersMessage msg);
 }
-
-void configurePigeon(PigeonOptions opts) {
-  opts.dartOut = 'lib/src/messages.dart';
-  opts.dartTestOut = 'test/test_api.dart';
-  opts.objcHeaderOut = 'ios/Classes/messages.h';
-  opts.objcSourceOut = 'ios/Classes/messages.m';
-  opts.objcOptions.prefix = 'FLT';
-  opts.javaOut =
-      'android/src/main/java/io/flutter/plugins/videoplayer/Messages.java';
-  opts.javaOptions.package = 'io.flutter.plugins.videoplayer';
-}
diff --git a/packages/video_player/video_player_android/pubspec.yaml b/packages/video_player/video_player_android/pubspec.yaml
index 423c5ad..c40d518 100644
--- a/packages/video_player/video_player_android/pubspec.yaml
+++ b/packages/video_player/video_player_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the video_player plugin.
 repository: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
-version: 2.2.17
+version: 2.3.0
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
@@ -25,4 +25,4 @@
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  pigeon: ^0.1.21
+  pigeon: ^1.0.16
diff --git a/packages/video_player/video_player_android/test/android_video_player_test.dart b/packages/video_player/video_player_android/test/android_video_player_test.dart
index 9eac540..b7cf763 100644
--- a/packages/video_player/video_player_android/test/android_video_player_test.dart
+++ b/packages/video_player/video_player_android/test/android_video_player_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
-import 'package:video_player_android/src/messages.dart';
+import 'package:video_player_android/src/messages.g.dart';
 import 'package:video_player_android/video_player_android.dart';
 import 'package:video_player_platform_interface/video_player_platform_interface.dart';
 
@@ -26,7 +26,7 @@
   TextureMessage create(CreateMessage arg) {
     log.add('create');
     createMessage = arg;
-    return TextureMessage()..textureId = 3;
+    return TextureMessage(textureId: 3);
   }
 
   @override
@@ -62,7 +62,7 @@
   PositionMessage position(TextureMessage arg) {
     log.add('position');
     textureMessage = arg;
-    return PositionMessage()..position = 234;
+    return PositionMessage(textureId: arg.textureId, position: 234);
   }
 
   @override
diff --git a/packages/video_player/video_player_android/test/test_api.dart b/packages/video_player/video_player_android/test/test_api.dart
index 2fbcbcf..e8bc9d8 100644
--- a/packages/video_player/video_player_android/test/test_api.dart
+++ b/packages/video_player/video_player_android/test/test_api.dart
@@ -1,35 +1,99 @@
 // 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 (v0.1.21), do not edit directly.
+// Autogenerated from Pigeon (v1.0.16), 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
 // @dart = 2.12
 import 'dart:async';
 import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List;
-
+import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer;
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
-import 'package:video_player_android/src/messages.dart';
+
+// TODO(gaaclarke): This had to be hand tweaked from a relative path.
+import 'package:video_player_android/src/messages.g.dart';
+
+class _TestHostVideoPlayerApiCodec extends StandardMessageCodec {
+  const _TestHostVideoPlayerApiCodec();
+  @override
+  void writeValue(WriteBuffer buffer, Object? value) {
+    if (value is CreateMessage) {
+      buffer.putUint8(128);
+      writeValue(buffer, value.encode());
+    } else if (value is LoopingMessage) {
+      buffer.putUint8(129);
+      writeValue(buffer, value.encode());
+    } else if (value is MixWithOthersMessage) {
+      buffer.putUint8(130);
+      writeValue(buffer, value.encode());
+    } else if (value is PlaybackSpeedMessage) {
+      buffer.putUint8(131);
+      writeValue(buffer, value.encode());
+    } else if (value is PositionMessage) {
+      buffer.putUint8(132);
+      writeValue(buffer, value.encode());
+    } else if (value is TextureMessage) {
+      buffer.putUint8(133);
+      writeValue(buffer, value.encode());
+    } else if (value is VolumeMessage) {
+      buffer.putUint8(134);
+      writeValue(buffer, value.encode());
+    } else {
+      super.writeValue(buffer, value);
+    }
+  }
+
+  @override
+  Object? readValueOfType(int type, ReadBuffer buffer) {
+    switch (type) {
+      case 128:
+        return CreateMessage.decode(readValue(buffer)!);
+
+      case 129:
+        return LoopingMessage.decode(readValue(buffer)!);
+
+      case 130:
+        return MixWithOthersMessage.decode(readValue(buffer)!);
+
+      case 131:
+        return PlaybackSpeedMessage.decode(readValue(buffer)!);
+
+      case 132:
+        return PositionMessage.decode(readValue(buffer)!);
+
+      case 133:
+        return TextureMessage.decode(readValue(buffer)!);
+
+      case 134:
+        return VolumeMessage.decode(readValue(buffer)!);
+
+      default:
+        return super.readValueOfType(type, buffer);
+    }
+  }
+}
 
 abstract class TestHostVideoPlayerApi {
+  static const MessageCodec<Object?> codec = _TestHostVideoPlayerApiCodec();
+
   void initialize();
-  TextureMessage create(CreateMessage arg);
-  void dispose(TextureMessage arg);
-  void setLooping(LoopingMessage arg);
-  void setVolume(VolumeMessage arg);
-  void setPlaybackSpeed(PlaybackSpeedMessage arg);
-  void play(TextureMessage arg);
-  PositionMessage position(TextureMessage arg);
-  void seekTo(PositionMessage arg);
-  void pause(TextureMessage arg);
-  void setMixWithOthers(MixWithOthersMessage arg);
-  static void setup(TestHostVideoPlayerApi? api) {
+  TextureMessage create(CreateMessage msg);
+  void dispose(TextureMessage msg);
+  void setLooping(LoopingMessage msg);
+  void setVolume(VolumeMessage msg);
+  void setPlaybackSpeed(PlaybackSpeedMessage msg);
+  void play(TextureMessage msg);
+  PositionMessage position(TextureMessage msg);
+  void seekTo(PositionMessage msg);
+  void pause(TextureMessage msg);
+  void setMixWithOthers(MixWithOthersMessage msg);
+  static void setup(TestHostVideoPlayerApi? api,
+      {BinaryMessenger? binaryMessenger}) {
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.initialize',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.initialize', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
@@ -41,157 +105,193 @@
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.create', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.create', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.create was null. Expected CreateMessage.');
-          final CreateMessage input = CreateMessage.decode(message!);
-          final TextureMessage output = api.create(input);
-          return <Object?, Object?>{'result': output.encode()};
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.create was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final CreateMessage? arg_msg = (args[0] as CreateMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.create was null, expected non-null CreateMessage.');
+          final TextureMessage output = api.create(arg_msg!);
+          return <Object?, Object?>{'result': output};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.dispose', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.dispose', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.dispose was null. Expected TextureMessage.');
-          final TextureMessage input = TextureMessage.decode(message!);
-          api.dispose(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.dispose was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final TextureMessage? arg_msg = (args[0] as TextureMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.dispose was null, expected non-null TextureMessage.');
+          api.dispose(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.setLooping',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.setLooping', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.setLooping was null. Expected LoopingMessage.');
-          final LoopingMessage input = LoopingMessage.decode(message!);
-          api.setLooping(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setLooping was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final LoopingMessage? arg_msg = (args[0] as LoopingMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setLooping was null, expected non-null LoopingMessage.');
+          api.setLooping(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.setVolume',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.setVolume', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.setVolume was null. Expected VolumeMessage.');
-          final VolumeMessage input = VolumeMessage.decode(message!);
-          api.setVolume(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setVolume was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final VolumeMessage? arg_msg = (args[0] as VolumeMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setVolume was null, expected non-null VolumeMessage.');
+          api.setVolume(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed was null. Expected PlaybackSpeedMessage.');
-          final PlaybackSpeedMessage input =
-              PlaybackSpeedMessage.decode(message!);
-          api.setPlaybackSpeed(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final PlaybackSpeedMessage? arg_msg =
+              (args[0] as PlaybackSpeedMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed was null, expected non-null PlaybackSpeedMessage.');
+          api.setPlaybackSpeed(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.play', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.play', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.play was null. Expected TextureMessage.');
-          final TextureMessage input = TextureMessage.decode(message!);
-          api.play(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.play was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final TextureMessage? arg_msg = (args[0] as TextureMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.play was null, expected non-null TextureMessage.');
+          api.play(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.position', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.position', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.position was null. Expected TextureMessage.');
-          final TextureMessage input = TextureMessage.decode(message!);
-          final PositionMessage output = api.position(input);
-          return <Object?, Object?>{'result': output.encode()};
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.position was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final TextureMessage? arg_msg = (args[0] as TextureMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.position was null, expected non-null TextureMessage.');
+          final PositionMessage output = api.position(arg_msg!);
+          return <Object?, Object?>{'result': output};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.seekTo', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.seekTo', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.seekTo was null. Expected PositionMessage.');
-          final PositionMessage input = PositionMessage.decode(message!);
-          api.seekTo(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.seekTo was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final PositionMessage? arg_msg = (args[0] as PositionMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.seekTo was null, expected non-null PositionMessage.');
+          api.seekTo(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.pause', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.pause', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.pause was null. Expected TextureMessage.');
-          final TextureMessage input = TextureMessage.decode(message!);
-          api.pause(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.pause was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final TextureMessage? arg_msg = (args[0] as TextureMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.pause was null, expected non-null TextureMessage.');
+          api.pause(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers was null. Expected MixWithOthersMessage.');
-          final MixWithOthersMessage input =
-              MixWithOthersMessage.decode(message!);
-          api.setMixWithOthers(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final MixWithOthersMessage? arg_msg =
+              (args[0] as MixWithOthersMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers was null, expected non-null MixWithOthersMessage.');
+          api.setMixWithOthers(arg_msg!);
           return <Object?, Object?>{};
         });
       }
diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md
index 161e900..d6ecabd 100644
--- a/packages/video_player/video_player_avfoundation/CHANGELOG.md
+++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.3.0
+
+* Updates Pigeon to ^1.0.16.
+
 ## 2.2.18
 
 * Wait to initialize m3u8 videos until size is set, fixing aspect ratio.
diff --git a/packages/video_player/video_player_avfoundation/CONTRIBUTING.md b/packages/video_player/video_player_avfoundation/CONTRIBUTING.md
index 387551b..8dfec9f 100644
--- a/packages/video_player/video_player_avfoundation/CONTRIBUTING.md
+++ b/packages/video_player/video_player_avfoundation/CONTRIBUTING.md
@@ -1,12 +1,11 @@
 ## Updating pigeon-generated files
 
 If you update files in the pigeons/ directory, run the following
-command in this directory (ignore the errors you get about
-dependencies in the examples directory):
+command in this directory:
 
 ```bash
 flutter pub upgrade
-flutter pub run pigeon --dart_null_safety --input pigeons/messages.dart
+flutter pub run pigeon --input pigeons/messages.dart
 # git commit your changes so that your working environment is clean
 (cd ../../../; ./script/tool_runner.sh format --clang-format=clang-format-7)
 ```
@@ -28,6 +27,5 @@
 the CI tests run the analysis using latest published version of
 pigeon, not your version or the version on master.
 
-In either case, the configuration will be obtained automatically from
-the `pigeons/messages.dart` file (see `configurePigeon` at the bottom
-of that file).
+In either case, the configuration will be obtained automatically from the
+`pigeons/messages.dart` file (see `ConfigurePigeon` at the top of that file).
diff --git a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m
index d7044fa..6d8b396 100644
--- a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m
+++ b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m
@@ -33,9 +33,7 @@
   OCMStub([partialRegistrar textures]).andReturn(mockTextureRegistry);
   FLTVideoPlayerPlugin *videoPlayerPlugin =
       (FLTVideoPlayerPlugin *)[[FLTVideoPlayerPlugin alloc] initWithRegistrar:partialRegistrar];
-  FLTPositionMessage *message = [[FLTPositionMessage alloc] init];
-  message.textureId = @101;
-  message.position = @0;
+  FLTPositionMessage *message = [FLTPositionMessage makeWithTextureId:@101 position:@0];
   FlutterError *error;
   [videoPlayerPlugin seekTo:message error:&error];
   OCMVerify([mockTextureRegistry textureFrameAvailable:message.textureId.intValue]);
@@ -53,8 +51,12 @@
   [videoPlayerPlugin initialize:&error];
   XCTAssertNil(error);
 
-  FLTCreateMessage *create = [[FLTCreateMessage alloc] init];
-  create.uri = @"https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4";
+  FLTCreateMessage *create = [FLTCreateMessage
+      makeWithAsset:nil
+                uri:@"https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4"
+        packageName:nil
+         formatHint:nil
+        httpHeaders:@{}];
   FLTTextureMessage *textureMessage = [videoPlayerPlugin create:create error:&error];
   XCTAssertNil(error);
   XCTAssertNotNil(textureMessage);
@@ -125,8 +127,11 @@
   [videoPlayerPlugin initialize:&error];
   XCTAssertNil(error);
 
-  FLTCreateMessage *create = [[FLTCreateMessage alloc] init];
-  create.uri = uri;
+  FLTCreateMessage *create = [FLTCreateMessage makeWithAsset:nil
+                                                         uri:uri
+                                                 packageName:nil
+                                                  formatHint:nil
+                                                 httpHeaders:@{}];
   FLTTextureMessage *textureMessage = [videoPlayerPlugin create:create error:&error];
 
   NSNumber *textureId = textureMessage.textureId;
@@ -152,18 +157,15 @@
   XCTAssertEqual(avPlayer.timeControlStatus, AVPlayerTimeControlStatusPaused);
 
   // Change playback speed.
-  FLTPlaybackSpeedMessage *playback = [[FLTPlaybackSpeedMessage alloc] init];
-  playback.textureId = textureId;
-  playback.speed = @2;
+  FLTPlaybackSpeedMessage *playback = [FLTPlaybackSpeedMessage makeWithTextureId:textureId
+                                                                           speed:@2];
   [videoPlayerPlugin setPlaybackSpeed:playback error:&error];
   XCTAssertNil(error);
   XCTAssertEqual(avPlayer.rate, 2);
   XCTAssertEqual(avPlayer.timeControlStatus, AVPlayerTimeControlStatusWaitingToPlayAtSpecifiedRate);
 
   // Volume
-  FLTVolumeMessage *volume = [[FLTVolumeMessage alloc] init];
-  volume.textureId = textureId;
-  volume.volume = @(0.1);
+  FLTVolumeMessage *volume = [FLTVolumeMessage makeWithTextureId:textureId volume:@0.1];
   [videoPlayerPlugin setVolume:volume error:&error];
   XCTAssertNil(error);
   XCTAssertEqual(avPlayer.volume, 0.1f);
diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m
index 55021cc..026b576 100644
--- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m
+++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m
@@ -5,7 +5,7 @@
 #import "FLTVideoPlayerPlugin.h"
 #import <AVFoundation/AVFoundation.h>
 #import <GLKit/GLKit.h>
-#import "messages.h"
+#import "messages.g.h"
 
 #if !__has_feature(objc_arc)
 #error Code Requires ARC.
@@ -43,7 +43,7 @@
 @property(nonatomic, readonly) BOOL isInitialized;
 - (instancetype)initWithURL:(NSURL *)url
                frameUpdater:(FLTFrameUpdater *)frameUpdater
-                httpHeaders:(NSDictionary<NSString *, NSString *> *)headers;
+                httpHeaders:(nonnull NSDictionary<NSString *, NSString *> *)headers;
 @end
 
 static void *timeRangeContext = &timeRangeContext;
@@ -57,7 +57,7 @@
 @implementation FLTVideoPlayer
 - (instancetype)initWithAsset:(NSString *)asset frameUpdater:(FLTFrameUpdater *)frameUpdater {
   NSString *path = [[NSBundle mainBundle] pathForResource:asset ofType:nil];
-  return [self initWithURL:[NSURL fileURLWithPath:path] frameUpdater:frameUpdater httpHeaders:nil];
+  return [self initWithURL:[NSURL fileURLWithPath:path] frameUpdater:frameUpdater httpHeaders:@{}];
 }
 
 - (void)addObservers:(AVPlayerItem *)item {
@@ -177,9 +177,9 @@
 
 - (instancetype)initWithURL:(NSURL *)url
                frameUpdater:(FLTFrameUpdater *)frameUpdater
-                httpHeaders:(NSDictionary<NSString *, NSString *> *)headers {
+                httpHeaders:(nonnull NSDictionary<NSString *, NSString *> *)headers {
   NSDictionary<NSString *, id> *options = nil;
-  if (headers != nil && [headers count] != 0) {
+  if ([headers count] != 0) {
     options = @{@"AVURLAssetHTTPHeaderFieldsKey" : headers};
   }
   AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:url options:options];
@@ -544,8 +544,7 @@
   [eventChannel setStreamHandler:player];
   player.eventChannel = eventChannel;
   self.playersByTextureId[@(textureId)] = player;
-  FLTTextureMessage *result = [[FLTTextureMessage alloc] init];
-  result.textureId = @(textureId);
+  FLTTextureMessage *result = [FLTTextureMessage makeWithTextureId:@(textureId)];
   return result;
 }
 
@@ -628,8 +627,8 @@
 
 - (FLTPositionMessage *)position:(FLTTextureMessage *)input error:(FlutterError **)error {
   FLTVideoPlayer *player = self.playersByTextureId[input.textureId];
-  FLTPositionMessage *result = [[FLTPositionMessage alloc] init];
-  result.position = @([player position]);
+  FLTPositionMessage *result = [FLTPositionMessage makeWithTextureId:input.textureId
+                                                            position:@([player position])];
   return result;
 }
 
diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/messages.g.h b/packages/video_player/video_player_avfoundation/ios/Classes/messages.g.h
new file mode 100644
index 0000000..96d02d2
--- /dev/null
+++ b/packages/video_player/video_player_avfoundation/ios/Classes/messages.g.h
@@ -0,0 +1,107 @@
+// 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.17), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+#import <Foundation/Foundation.h>
+@protocol FlutterBinaryMessenger;
+@protocol FlutterMessageCodec;
+@class FlutterError;
+@class FlutterStandardTypedData;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class FLTTextureMessage;
+@class FLTLoopingMessage;
+@class FLTVolumeMessage;
+@class FLTPlaybackSpeedMessage;
+@class FLTPositionMessage;
+@class FLTCreateMessage;
+@class FLTMixWithOthersMessage;
+
+@interface FLTTextureMessage : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithTextureId:(NSNumber *)textureId;
+@property(nonatomic, strong) NSNumber *textureId;
+@end
+
+@interface FLTLoopingMessage : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithTextureId:(NSNumber *)textureId isLooping:(NSNumber *)isLooping;
+@property(nonatomic, strong) NSNumber *textureId;
+@property(nonatomic, strong) NSNumber *isLooping;
+@end
+
+@interface FLTVolumeMessage : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithTextureId:(NSNumber *)textureId volume:(NSNumber *)volume;
+@property(nonatomic, strong) NSNumber *textureId;
+@property(nonatomic, strong) NSNumber *volume;
+@end
+
+@interface FLTPlaybackSpeedMessage : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithTextureId:(NSNumber *)textureId speed:(NSNumber *)speed;
+@property(nonatomic, strong) NSNumber *textureId;
+@property(nonatomic, strong) NSNumber *speed;
+@end
+
+@interface FLTPositionMessage : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithTextureId:(NSNumber *)textureId position:(NSNumber *)position;
+@property(nonatomic, strong) NSNumber *textureId;
+@property(nonatomic, strong) NSNumber *position;
+@end
+
+@interface FLTCreateMessage : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithAsset:(nullable NSString *)asset
+                          uri:(nullable NSString *)uri
+                  packageName:(nullable NSString *)packageName
+                   formatHint:(nullable NSString *)formatHint
+                  httpHeaders:(NSDictionary<NSString *, NSString *> *)httpHeaders;
+@property(nonatomic, copy, nullable) NSString *asset;
+@property(nonatomic, copy, nullable) NSString *uri;
+@property(nonatomic, copy, nullable) NSString *packageName;
+@property(nonatomic, copy, nullable) NSString *formatHint;
+@property(nonatomic, strong) NSDictionary<NSString *, NSString *> *httpHeaders;
+@end
+
+@interface FLTMixWithOthersMessage : NSObject
+/// `init` unavailable to enforce nonnull fields, see the `make` class method.
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)makeWithMixWithOthers:(NSNumber *)mixWithOthers;
+@property(nonatomic, strong) NSNumber *mixWithOthers;
+@end
+
+/// The codec used by FLTVideoPlayerApi.
+NSObject<FlutterMessageCodec> *FLTVideoPlayerApiGetCodec(void);
+
+@protocol FLTVideoPlayerApi
+- (void)initialize:(FlutterError *_Nullable *_Nonnull)error;
+- (nullable FLTTextureMessage *)create:(FLTCreateMessage *)msg
+                                 error:(FlutterError *_Nullable *_Nonnull)error;
+- (void)dispose:(FLTTextureMessage *)msg error:(FlutterError *_Nullable *_Nonnull)error;
+- (void)setLooping:(FLTLoopingMessage *)msg error:(FlutterError *_Nullable *_Nonnull)error;
+- (void)setVolume:(FLTVolumeMessage *)msg error:(FlutterError *_Nullable *_Nonnull)error;
+- (void)setPlaybackSpeed:(FLTPlaybackSpeedMessage *)msg
+                   error:(FlutterError *_Nullable *_Nonnull)error;
+- (void)play:(FLTTextureMessage *)msg error:(FlutterError *_Nullable *_Nonnull)error;
+- (nullable FLTPositionMessage *)position:(FLTTextureMessage *)msg
+                                    error:(FlutterError *_Nullable *_Nonnull)error;
+- (void)seekTo:(FLTPositionMessage *)msg error:(FlutterError *_Nullable *_Nonnull)error;
+- (void)pause:(FLTTextureMessage *)msg error:(FlutterError *_Nullable *_Nonnull)error;
+- (void)setMixWithOthers:(FLTMixWithOthersMessage *)msg
+                   error:(FlutterError *_Nullable *_Nonnull)error;
+@end
+
+extern void FLTVideoPlayerApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
+                                   NSObject<FLTVideoPlayerApi> *_Nullable api);
+
+NS_ASSUME_NONNULL_END
diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/messages.g.m b/packages/video_player/video_player_avfoundation/ios/Classes/messages.g.m
new file mode 100644
index 0000000..c9acee4
--- /dev/null
+++ b/packages/video_player/video_player_avfoundation/ios/Classes/messages.g.m
@@ -0,0 +1,522 @@
+// 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.17), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+#import "messages.g.h"
+#import <Flutter/Flutter.h>
+
+#if !__has_feature(objc_arc)
+#error File requires ARC to be enabled.
+#endif
+
+static NSDictionary<NSString *, id> *wrapResult(id result, FlutterError *error) {
+  NSDictionary *errorDict = (NSDictionary *)[NSNull null];
+  if (error) {
+    errorDict = @{
+      @"code" : (error.code ? error.code : [NSNull null]),
+      @"message" : (error.message ? error.message : [NSNull null]),
+      @"details" : (error.details ? error.details : [NSNull null]),
+    };
+  }
+  return @{
+    @"result" : (result ? result : [NSNull null]),
+    @"error" : errorDict,
+  };
+}
+static id GetNullableObject(NSDictionary *dict, id key) {
+  id result = dict[key];
+  return (result == [NSNull null]) ? nil : result;
+}
+
+@interface FLTTextureMessage ()
++ (FLTTextureMessage *)fromMap:(NSDictionary *)dict;
+- (NSDictionary *)toMap;
+@end
+@interface FLTLoopingMessage ()
++ (FLTLoopingMessage *)fromMap:(NSDictionary *)dict;
+- (NSDictionary *)toMap;
+@end
+@interface FLTVolumeMessage ()
++ (FLTVolumeMessage *)fromMap:(NSDictionary *)dict;
+- (NSDictionary *)toMap;
+@end
+@interface FLTPlaybackSpeedMessage ()
++ (FLTPlaybackSpeedMessage *)fromMap:(NSDictionary *)dict;
+- (NSDictionary *)toMap;
+@end
+@interface FLTPositionMessage ()
++ (FLTPositionMessage *)fromMap:(NSDictionary *)dict;
+- (NSDictionary *)toMap;
+@end
+@interface FLTCreateMessage ()
++ (FLTCreateMessage *)fromMap:(NSDictionary *)dict;
+- (NSDictionary *)toMap;
+@end
+@interface FLTMixWithOthersMessage ()
++ (FLTMixWithOthersMessage *)fromMap:(NSDictionary *)dict;
+- (NSDictionary *)toMap;
+@end
+
+@implementation FLTTextureMessage
++ (instancetype)makeWithTextureId:(NSNumber *)textureId {
+  FLTTextureMessage *pigeonResult = [[FLTTextureMessage alloc] init];
+  pigeonResult.textureId = textureId;
+  return pigeonResult;
+}
++ (FLTTextureMessage *)fromMap:(NSDictionary *)dict {
+  FLTTextureMessage *pigeonResult = [[FLTTextureMessage alloc] init];
+  pigeonResult.textureId = GetNullableObject(dict, @"textureId");
+  NSAssert(pigeonResult.textureId != nil, @"");
+  return pigeonResult;
+}
+- (NSDictionary *)toMap {
+  return
+      [NSDictionary dictionaryWithObjectsAndKeys:(self.textureId ? self.textureId : [NSNull null]),
+                                                 @"textureId", nil];
+}
+@end
+
+@implementation FLTLoopingMessage
++ (instancetype)makeWithTextureId:(NSNumber *)textureId isLooping:(NSNumber *)isLooping {
+  FLTLoopingMessage *pigeonResult = [[FLTLoopingMessage alloc] init];
+  pigeonResult.textureId = textureId;
+  pigeonResult.isLooping = isLooping;
+  return pigeonResult;
+}
++ (FLTLoopingMessage *)fromMap:(NSDictionary *)dict {
+  FLTLoopingMessage *pigeonResult = [[FLTLoopingMessage alloc] init];
+  pigeonResult.textureId = GetNullableObject(dict, @"textureId");
+  NSAssert(pigeonResult.textureId != nil, @"");
+  pigeonResult.isLooping = GetNullableObject(dict, @"isLooping");
+  NSAssert(pigeonResult.isLooping != nil, @"");
+  return pigeonResult;
+}
+- (NSDictionary *)toMap {
+  return [NSDictionary
+      dictionaryWithObjectsAndKeys:(self.textureId ? self.textureId : [NSNull null]), @"textureId",
+                                   (self.isLooping ? self.isLooping : [NSNull null]), @"isLooping",
+                                   nil];
+}
+@end
+
+@implementation FLTVolumeMessage
++ (instancetype)makeWithTextureId:(NSNumber *)textureId volume:(NSNumber *)volume {
+  FLTVolumeMessage *pigeonResult = [[FLTVolumeMessage alloc] init];
+  pigeonResult.textureId = textureId;
+  pigeonResult.volume = volume;
+  return pigeonResult;
+}
++ (FLTVolumeMessage *)fromMap:(NSDictionary *)dict {
+  FLTVolumeMessage *pigeonResult = [[FLTVolumeMessage alloc] init];
+  pigeonResult.textureId = GetNullableObject(dict, @"textureId");
+  NSAssert(pigeonResult.textureId != nil, @"");
+  pigeonResult.volume = GetNullableObject(dict, @"volume");
+  NSAssert(pigeonResult.volume != nil, @"");
+  return pigeonResult;
+}
+- (NSDictionary *)toMap {
+  return [NSDictionary
+      dictionaryWithObjectsAndKeys:(self.textureId ? self.textureId : [NSNull null]), @"textureId",
+                                   (self.volume ? self.volume : [NSNull null]), @"volume", nil];
+}
+@end
+
+@implementation FLTPlaybackSpeedMessage
++ (instancetype)makeWithTextureId:(NSNumber *)textureId speed:(NSNumber *)speed {
+  FLTPlaybackSpeedMessage *pigeonResult = [[FLTPlaybackSpeedMessage alloc] init];
+  pigeonResult.textureId = textureId;
+  pigeonResult.speed = speed;
+  return pigeonResult;
+}
++ (FLTPlaybackSpeedMessage *)fromMap:(NSDictionary *)dict {
+  FLTPlaybackSpeedMessage *pigeonResult = [[FLTPlaybackSpeedMessage alloc] init];
+  pigeonResult.textureId = GetNullableObject(dict, @"textureId");
+  NSAssert(pigeonResult.textureId != nil, @"");
+  pigeonResult.speed = GetNullableObject(dict, @"speed");
+  NSAssert(pigeonResult.speed != nil, @"");
+  return pigeonResult;
+}
+- (NSDictionary *)toMap {
+  return [NSDictionary
+      dictionaryWithObjectsAndKeys:(self.textureId ? self.textureId : [NSNull null]), @"textureId",
+                                   (self.speed ? self.speed : [NSNull null]), @"speed", nil];
+}
+@end
+
+@implementation FLTPositionMessage
++ (instancetype)makeWithTextureId:(NSNumber *)textureId position:(NSNumber *)position {
+  FLTPositionMessage *pigeonResult = [[FLTPositionMessage alloc] init];
+  pigeonResult.textureId = textureId;
+  pigeonResult.position = position;
+  return pigeonResult;
+}
++ (FLTPositionMessage *)fromMap:(NSDictionary *)dict {
+  FLTPositionMessage *pigeonResult = [[FLTPositionMessage alloc] init];
+  pigeonResult.textureId = GetNullableObject(dict, @"textureId");
+  NSAssert(pigeonResult.textureId != nil, @"");
+  pigeonResult.position = GetNullableObject(dict, @"position");
+  NSAssert(pigeonResult.position != nil, @"");
+  return pigeonResult;
+}
+- (NSDictionary *)toMap {
+  return [NSDictionary
+      dictionaryWithObjectsAndKeys:(self.textureId ? self.textureId : [NSNull null]), @"textureId",
+                                   (self.position ? self.position : [NSNull null]), @"position",
+                                   nil];
+}
+@end
+
+@implementation FLTCreateMessage
++ (instancetype)makeWithAsset:(nullable NSString *)asset
+                          uri:(nullable NSString *)uri
+                  packageName:(nullable NSString *)packageName
+                   formatHint:(nullable NSString *)formatHint
+                  httpHeaders:(NSDictionary<NSString *, NSString *> *)httpHeaders {
+  FLTCreateMessage *pigeonResult = [[FLTCreateMessage alloc] init];
+  pigeonResult.asset = asset;
+  pigeonResult.uri = uri;
+  pigeonResult.packageName = packageName;
+  pigeonResult.formatHint = formatHint;
+  pigeonResult.httpHeaders = httpHeaders;
+  return pigeonResult;
+}
++ (FLTCreateMessage *)fromMap:(NSDictionary *)dict {
+  FLTCreateMessage *pigeonResult = [[FLTCreateMessage alloc] init];
+  pigeonResult.asset = GetNullableObject(dict, @"asset");
+  pigeonResult.uri = GetNullableObject(dict, @"uri");
+  pigeonResult.packageName = GetNullableObject(dict, @"packageName");
+  pigeonResult.formatHint = GetNullableObject(dict, @"formatHint");
+  pigeonResult.httpHeaders = GetNullableObject(dict, @"httpHeaders");
+  NSAssert(pigeonResult.httpHeaders != nil, @"");
+  return pigeonResult;
+}
+- (NSDictionary *)toMap {
+  return [NSDictionary
+      dictionaryWithObjectsAndKeys:(self.asset ? self.asset : [NSNull null]), @"asset",
+                                   (self.uri ? self.uri : [NSNull null]), @"uri",
+                                   (self.packageName ? self.packageName : [NSNull null]),
+                                   @"packageName",
+                                   (self.formatHint ? self.formatHint : [NSNull null]),
+                                   @"formatHint",
+                                   (self.httpHeaders ? self.httpHeaders : [NSNull null]),
+                                   @"httpHeaders", nil];
+}
+@end
+
+@implementation FLTMixWithOthersMessage
++ (instancetype)makeWithMixWithOthers:(NSNumber *)mixWithOthers {
+  FLTMixWithOthersMessage *pigeonResult = [[FLTMixWithOthersMessage alloc] init];
+  pigeonResult.mixWithOthers = mixWithOthers;
+  return pigeonResult;
+}
++ (FLTMixWithOthersMessage *)fromMap:(NSDictionary *)dict {
+  FLTMixWithOthersMessage *pigeonResult = [[FLTMixWithOthersMessage alloc] init];
+  pigeonResult.mixWithOthers = GetNullableObject(dict, @"mixWithOthers");
+  NSAssert(pigeonResult.mixWithOthers != nil, @"");
+  return pigeonResult;
+}
+- (NSDictionary *)toMap {
+  return [NSDictionary
+      dictionaryWithObjectsAndKeys:(self.mixWithOthers ? self.mixWithOthers : [NSNull null]),
+                                   @"mixWithOthers", nil];
+}
+@end
+
+@interface FLTVideoPlayerApiCodecReader : FlutterStandardReader
+@end
+@implementation FLTVideoPlayerApiCodecReader
+- (nullable id)readValueOfType:(UInt8)type {
+  switch (type) {
+    case 128:
+      return [FLTCreateMessage fromMap:[self readValue]];
+
+    case 129:
+      return [FLTLoopingMessage fromMap:[self readValue]];
+
+    case 130:
+      return [FLTMixWithOthersMessage fromMap:[self readValue]];
+
+    case 131:
+      return [FLTPlaybackSpeedMessage fromMap:[self readValue]];
+
+    case 132:
+      return [FLTPositionMessage fromMap:[self readValue]];
+
+    case 133:
+      return [FLTTextureMessage fromMap:[self readValue]];
+
+    case 134:
+      return [FLTVolumeMessage fromMap:[self readValue]];
+
+    default:
+      return [super readValueOfType:type];
+  }
+}
+@end
+
+@interface FLTVideoPlayerApiCodecWriter : FlutterStandardWriter
+@end
+@implementation FLTVideoPlayerApiCodecWriter
+- (void)writeValue:(id)value {
+  if ([value isKindOfClass:[FLTCreateMessage class]]) {
+    [self writeByte:128];
+    [self writeValue:[value toMap]];
+  } else if ([value isKindOfClass:[FLTLoopingMessage class]]) {
+    [self writeByte:129];
+    [self writeValue:[value toMap]];
+  } else if ([value isKindOfClass:[FLTMixWithOthersMessage class]]) {
+    [self writeByte:130];
+    [self writeValue:[value toMap]];
+  } else if ([value isKindOfClass:[FLTPlaybackSpeedMessage class]]) {
+    [self writeByte:131];
+    [self writeValue:[value toMap]];
+  } else if ([value isKindOfClass:[FLTPositionMessage class]]) {
+    [self writeByte:132];
+    [self writeValue:[value toMap]];
+  } else if ([value isKindOfClass:[FLTTextureMessage class]]) {
+    [self writeByte:133];
+    [self writeValue:[value toMap]];
+  } else if ([value isKindOfClass:[FLTVolumeMessage class]]) {
+    [self writeByte:134];
+    [self writeValue:[value toMap]];
+  } else {
+    [super writeValue:value];
+  }
+}
+@end
+
+@interface FLTVideoPlayerApiCodecReaderWriter : FlutterStandardReaderWriter
+@end
+@implementation FLTVideoPlayerApiCodecReaderWriter
+- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data {
+  return [[FLTVideoPlayerApiCodecWriter alloc] initWithData:data];
+}
+- (FlutterStandardReader *)readerWithData:(NSData *)data {
+  return [[FLTVideoPlayerApiCodecReader alloc] initWithData:data];
+}
+@end
+
+NSObject<FlutterMessageCodec> *FLTVideoPlayerApiGetCodec() {
+  static dispatch_once_t sPred = 0;
+  static FlutterStandardMessageCodec *sSharedObject = nil;
+  dispatch_once(&sPred, ^{
+    FLTVideoPlayerApiCodecReaderWriter *readerWriter =
+        [[FLTVideoPlayerApiCodecReaderWriter alloc] init];
+    sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter];
+  });
+  return sSharedObject;
+}
+
+void FLTVideoPlayerApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
+                            NSObject<FLTVideoPlayerApi> *api) {
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.initialize"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(initialize:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(initialize:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        FlutterError *error;
+        [api initialize:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.create"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(create:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(create:error:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTCreateMessage *arg_msg = args[0];
+        FlutterError *error;
+        FLTTextureMessage *output = [api create:arg_msg error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.dispose"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(dispose:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(dispose:error:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTTextureMessage *arg_msg = args[0];
+        FlutterError *error;
+        [api dispose:arg_msg error:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.setLooping"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(setLooping:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(setLooping:error:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTLoopingMessage *arg_msg = args[0];
+        FlutterError *error;
+        [api setLooping:arg_msg error:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.setVolume"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(setVolume:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(setVolume:error:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTVolumeMessage *arg_msg = args[0];
+        FlutterError *error;
+        [api setVolume:arg_msg error:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(setPlaybackSpeed:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(setPlaybackSpeed:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTPlaybackSpeedMessage *arg_msg = args[0];
+        FlutterError *error;
+        [api setPlaybackSpeed:arg_msg error:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel =
+        [FlutterBasicMessageChannel messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.play"
+                                           binaryMessenger:binaryMessenger
+                                                     codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(play:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(play:error:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTTextureMessage *arg_msg = args[0];
+        FlutterError *error;
+        [api play:arg_msg error:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.position"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(position:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(position:error:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTTextureMessage *arg_msg = args[0];
+        FlutterError *error;
+        FLTPositionMessage *output = [api position:arg_msg error:&error];
+        callback(wrapResult(output, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.seekTo"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(seekTo:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(seekTo:error:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTPositionMessage *arg_msg = args[0];
+        FlutterError *error;
+        [api seekTo:arg_msg error:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.pause"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(pause:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(pause:error:)", api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTTextureMessage *arg_msg = args[0];
+        FlutterError *error;
+        [api pause:arg_msg error:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+  {
+    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
+        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers"
+               binaryMessenger:binaryMessenger
+                         codec:FLTVideoPlayerApiGetCodec()];
+    if (api) {
+      NSCAssert([api respondsToSelector:@selector(setMixWithOthers:error:)],
+                @"FLTVideoPlayerApi api (%@) doesn't respond to @selector(setMixWithOthers:error:)",
+                api);
+      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
+        NSArray *args = message;
+        FLTMixWithOthersMessage *arg_msg = args[0];
+        FlutterError *error;
+        [api setMixWithOthers:arg_msg error:&error];
+        callback(wrapResult(nil, error));
+      }];
+    } else {
+      [channel setMessageHandler:nil];
+    }
+  }
+}
diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/messages.h b/packages/video_player/video_player_avfoundation/ios/Classes/messages.h
deleted file mode 100644
index e21e786..0000000
--- a/packages/video_player/video_player_avfoundation/ios/Classes/messages.h
+++ /dev/null
@@ -1,79 +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.
-
-// Autogenerated from Pigeon (v0.1.21), do not edit directly.
-// See also: https://pub.dev/packages/pigeon
-#import <Foundation/Foundation.h>
-@protocol FlutterBinaryMessenger;
-@class FlutterError;
-@class FlutterStandardTypedData;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class FLTTextureMessage;
-@class FLTCreateMessage;
-@class FLTLoopingMessage;
-@class FLTVolumeMessage;
-@class FLTPlaybackSpeedMessage;
-@class FLTPositionMessage;
-@class FLTMixWithOthersMessage;
-
-@interface FLTTextureMessage : NSObject
-@property(nonatomic, strong, nullable) NSNumber *textureId;
-@end
-
-@interface FLTCreateMessage : NSObject
-@property(nonatomic, copy, nullable) NSString *asset;
-@property(nonatomic, copy, nullable) NSString *uri;
-@property(nonatomic, copy, nullable) NSString *packageName;
-@property(nonatomic, copy, nullable) NSString *formatHint;
-@property(nonatomic, strong, nullable) NSDictionary *httpHeaders;
-@end
-
-@interface FLTLoopingMessage : NSObject
-@property(nonatomic, strong, nullable) NSNumber *textureId;
-@property(nonatomic, strong, nullable) NSNumber *isLooping;
-@end
-
-@interface FLTVolumeMessage : NSObject
-@property(nonatomic, strong, nullable) NSNumber *textureId;
-@property(nonatomic, strong, nullable) NSNumber *volume;
-@end
-
-@interface FLTPlaybackSpeedMessage : NSObject
-@property(nonatomic, strong, nullable) NSNumber *textureId;
-@property(nonatomic, strong, nullable) NSNumber *speed;
-@end
-
-@interface FLTPositionMessage : NSObject
-@property(nonatomic, strong, nullable) NSNumber *textureId;
-@property(nonatomic, strong, nullable) NSNumber *position;
-@end
-
-@interface FLTMixWithOthersMessage : NSObject
-@property(nonatomic, strong, nullable) NSNumber *mixWithOthers;
-@end
-
-@protocol FLTVideoPlayerApi
-- (void)initialize:(FlutterError *_Nullable *_Nonnull)error;
-- (nullable FLTTextureMessage *)create:(FLTCreateMessage *)input
-                                 error:(FlutterError *_Nullable *_Nonnull)error;
-- (void)dispose:(FLTTextureMessage *)input error:(FlutterError *_Nullable *_Nonnull)error;
-- (void)setLooping:(FLTLoopingMessage *)input error:(FlutterError *_Nullable *_Nonnull)error;
-- (void)setVolume:(FLTVolumeMessage *)input error:(FlutterError *_Nullable *_Nonnull)error;
-- (void)setPlaybackSpeed:(FLTPlaybackSpeedMessage *)input
-                   error:(FlutterError *_Nullable *_Nonnull)error;
-- (void)play:(FLTTextureMessage *)input error:(FlutterError *_Nullable *_Nonnull)error;
-- (nullable FLTPositionMessage *)position:(FLTTextureMessage *)input
-                                    error:(FlutterError *_Nullable *_Nonnull)error;
-- (void)seekTo:(FLTPositionMessage *)input error:(FlutterError *_Nullable *_Nonnull)error;
-- (void)pause:(FLTTextureMessage *)input error:(FlutterError *_Nullable *_Nonnull)error;
-- (void)setMixWithOthers:(FLTMixWithOthersMessage *)input
-                   error:(FlutterError *_Nullable *_Nonnull)error;
-@end
-
-extern void FLTVideoPlayerApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
-                                   id<FLTVideoPlayerApi> _Nullable api);
-
-NS_ASSUME_NONNULL_END
diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/messages.m b/packages/video_player/video_player_avfoundation/ios/Classes/messages.m
deleted file mode 100644
index 0936bbc..0000000
--- a/packages/video_player/video_player_avfoundation/ios/Classes/messages.m
+++ /dev/null
@@ -1,379 +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.
-
-// Autogenerated from Pigeon (v0.1.21), do not edit directly.
-// See also: https://pub.dev/packages/pigeon
-#import "messages.h"
-#import <Flutter/Flutter.h>
-
-#if !__has_feature(objc_arc)
-#error File requires ARC to be enabled.
-#endif
-
-static NSDictionary<NSString *, id> *wrapResult(NSDictionary *result, FlutterError *error) {
-  NSDictionary *errorDict = (NSDictionary *)[NSNull null];
-  if (error) {
-    errorDict = @{
-      @"code" : (error.code ? error.code : [NSNull null]),
-      @"message" : (error.message ? error.message : [NSNull null]),
-      @"details" : (error.details ? error.details : [NSNull null]),
-    };
-  }
-  return @{
-    @"result" : (result ? result : [NSNull null]),
-    @"error" : errorDict,
-  };
-}
-
-@interface FLTTextureMessage ()
-+ (FLTTextureMessage *)fromMap:(NSDictionary *)dict;
-- (NSDictionary *)toMap;
-@end
-@interface FLTCreateMessage ()
-+ (FLTCreateMessage *)fromMap:(NSDictionary *)dict;
-- (NSDictionary *)toMap;
-@end
-@interface FLTLoopingMessage ()
-+ (FLTLoopingMessage *)fromMap:(NSDictionary *)dict;
-- (NSDictionary *)toMap;
-@end
-@interface FLTVolumeMessage ()
-+ (FLTVolumeMessage *)fromMap:(NSDictionary *)dict;
-- (NSDictionary *)toMap;
-@end
-@interface FLTPlaybackSpeedMessage ()
-+ (FLTPlaybackSpeedMessage *)fromMap:(NSDictionary *)dict;
-- (NSDictionary *)toMap;
-@end
-@interface FLTPositionMessage ()
-+ (FLTPositionMessage *)fromMap:(NSDictionary *)dict;
-- (NSDictionary *)toMap;
-@end
-@interface FLTMixWithOthersMessage ()
-+ (FLTMixWithOthersMessage *)fromMap:(NSDictionary *)dict;
-- (NSDictionary *)toMap;
-@end
-
-@implementation FLTTextureMessage
-+ (FLTTextureMessage *)fromMap:(NSDictionary *)dict {
-  FLTTextureMessage *result = [[FLTTextureMessage alloc] init];
-  result.textureId = dict[@"textureId"];
-  if ((NSNull *)result.textureId == [NSNull null]) {
-    result.textureId = nil;
-  }
-  return result;
-}
-- (NSDictionary *)toMap {
-  return [NSDictionary
-      dictionaryWithObjectsAndKeys:(self.textureId != nil ? self.textureId : [NSNull null]),
-                                   @"textureId", nil];
-}
-@end
-
-@implementation FLTCreateMessage
-+ (FLTCreateMessage *)fromMap:(NSDictionary *)dict {
-  FLTCreateMessage *result = [[FLTCreateMessage alloc] init];
-  result.asset = dict[@"asset"];
-  if ((NSNull *)result.asset == [NSNull null]) {
-    result.asset = nil;
-  }
-  result.uri = dict[@"uri"];
-  if ((NSNull *)result.uri == [NSNull null]) {
-    result.uri = nil;
-  }
-  result.packageName = dict[@"packageName"];
-  if ((NSNull *)result.packageName == [NSNull null]) {
-    result.packageName = nil;
-  }
-  result.formatHint = dict[@"formatHint"];
-  if ((NSNull *)result.formatHint == [NSNull null]) {
-    result.formatHint = nil;
-  }
-  result.httpHeaders = dict[@"httpHeaders"];
-  if ((NSNull *)result.httpHeaders == [NSNull null]) {
-    result.httpHeaders = nil;
-  }
-  return result;
-}
-- (NSDictionary *)toMap {
-  return [NSDictionary
-      dictionaryWithObjectsAndKeys:(self.asset ? self.asset : [NSNull null]), @"asset",
-                                   (self.uri ? self.uri : [NSNull null]), @"uri",
-                                   (self.packageName ? self.packageName : [NSNull null]),
-                                   @"packageName",
-                                   (self.formatHint ? self.formatHint : [NSNull null]),
-                                   @"formatHint",
-                                   (self.httpHeaders ? self.httpHeaders : [NSNull null]),
-                                   @"httpHeaders", nil];
-}
-@end
-
-@implementation FLTLoopingMessage
-+ (FLTLoopingMessage *)fromMap:(NSDictionary *)dict {
-  FLTLoopingMessage *result = [[FLTLoopingMessage alloc] init];
-  result.textureId = dict[@"textureId"];
-  if ((NSNull *)result.textureId == [NSNull null]) {
-    result.textureId = nil;
-  }
-  result.isLooping = dict[@"isLooping"];
-  if ((NSNull *)result.isLooping == [NSNull null]) {
-    result.isLooping = nil;
-  }
-  return result;
-}
-- (NSDictionary *)toMap {
-  return [NSDictionary
-      dictionaryWithObjectsAndKeys:(self.textureId != nil ? self.textureId : [NSNull null]),
-                                   @"textureId",
-                                   (self.isLooping != nil ? self.isLooping : [NSNull null]),
-                                   @"isLooping", nil];
-}
-@end
-
-@implementation FLTVolumeMessage
-+ (FLTVolumeMessage *)fromMap:(NSDictionary *)dict {
-  FLTVolumeMessage *result = [[FLTVolumeMessage alloc] init];
-  result.textureId = dict[@"textureId"];
-  if ((NSNull *)result.textureId == [NSNull null]) {
-    result.textureId = nil;
-  }
-  result.volume = dict[@"volume"];
-  if ((NSNull *)result.volume == [NSNull null]) {
-    result.volume = nil;
-  }
-  return result;
-}
-- (NSDictionary *)toMap {
-  return [NSDictionary
-      dictionaryWithObjectsAndKeys:(self.textureId != nil ? self.textureId : [NSNull null]),
-                                   @"textureId", (self.volume != nil ? self.volume : [NSNull null]),
-                                   @"volume", nil];
-}
-@end
-
-@implementation FLTPlaybackSpeedMessage
-+ (FLTPlaybackSpeedMessage *)fromMap:(NSDictionary *)dict {
-  FLTPlaybackSpeedMessage *result = [[FLTPlaybackSpeedMessage alloc] init];
-  result.textureId = dict[@"textureId"];
-  if ((NSNull *)result.textureId == [NSNull null]) {
-    result.textureId = nil;
-  }
-  result.speed = dict[@"speed"];
-  if ((NSNull *)result.speed == [NSNull null]) {
-    result.speed = nil;
-  }
-  return result;
-}
-- (NSDictionary *)toMap {
-  return [NSDictionary
-      dictionaryWithObjectsAndKeys:(self.textureId != nil ? self.textureId : [NSNull null]),
-                                   @"textureId", (self.speed != nil ? self.speed : [NSNull null]),
-                                   @"speed", nil];
-}
-@end
-
-@implementation FLTPositionMessage
-+ (FLTPositionMessage *)fromMap:(NSDictionary *)dict {
-  FLTPositionMessage *result = [[FLTPositionMessage alloc] init];
-  result.textureId = dict[@"textureId"];
-  if ((NSNull *)result.textureId == [NSNull null]) {
-    result.textureId = nil;
-  }
-  result.position = dict[@"position"];
-  if ((NSNull *)result.position == [NSNull null]) {
-    result.position = nil;
-  }
-  return result;
-}
-- (NSDictionary *)toMap {
-  return [NSDictionary
-      dictionaryWithObjectsAndKeys:(self.textureId != nil ? self.textureId : [NSNull null]),
-                                   @"textureId",
-                                   (self.position != nil ? self.position : [NSNull null]),
-                                   @"position", nil];
-}
-@end
-
-@implementation FLTMixWithOthersMessage
-+ (FLTMixWithOthersMessage *)fromMap:(NSDictionary *)dict {
-  FLTMixWithOthersMessage *result = [[FLTMixWithOthersMessage alloc] init];
-  result.mixWithOthers = dict[@"mixWithOthers"];
-  if ((NSNull *)result.mixWithOthers == [NSNull null]) {
-    result.mixWithOthers = nil;
-  }
-  return result;
-}
-- (NSDictionary *)toMap {
-  return [NSDictionary
-      dictionaryWithObjectsAndKeys:(self.mixWithOthers != nil ? self.mixWithOthers : [NSNull null]),
-                                   @"mixWithOthers", nil];
-}
-@end
-
-void FLTVideoPlayerApiSetup(id<FlutterBinaryMessenger> binaryMessenger, id<FLTVideoPlayerApi> api) {
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.initialize"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FlutterError *error;
-        [api initialize:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.create"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTCreateMessage *input = [FLTCreateMessage fromMap:message];
-        FlutterError *error;
-        FLTTextureMessage *output = [api create:input error:&error];
-        callback(wrapResult([output toMap], error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.dispose"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTTextureMessage *input = [FLTTextureMessage fromMap:message];
-        FlutterError *error;
-        [api dispose:input error:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.setLooping"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTLoopingMessage *input = [FLTLoopingMessage fromMap:message];
-        FlutterError *error;
-        [api setLooping:input error:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.setVolume"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTVolumeMessage *input = [FLTVolumeMessage fromMap:message];
-        FlutterError *error;
-        [api setVolume:input error:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTPlaybackSpeedMessage *input = [FLTPlaybackSpeedMessage fromMap:message];
-        FlutterError *error;
-        [api setPlaybackSpeed:input error:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel =
-        [FlutterBasicMessageChannel messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.play"
-                                           binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTTextureMessage *input = [FLTTextureMessage fromMap:message];
-        FlutterError *error;
-        [api play:input error:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.position"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTTextureMessage *input = [FLTTextureMessage fromMap:message];
-        FlutterError *error;
-        FLTPositionMessage *output = [api position:input error:&error];
-        callback(wrapResult([output toMap], error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.seekTo"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTPositionMessage *input = [FLTPositionMessage fromMap:message];
-        FlutterError *error;
-        [api seekTo:input error:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.pause"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTTextureMessage *input = [FLTTextureMessage fromMap:message];
-        FlutterError *error;
-        [api pause:input error:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-  {
-    FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel
-        messageChannelWithName:@"dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers"
-               binaryMessenger:binaryMessenger];
-    if (api) {
-      [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
-        FLTMixWithOthersMessage *input = [FLTMixWithOthersMessage fromMap:message];
-        FlutterError *error;
-        [api setMixWithOthers:input error:&error];
-        callback(wrapResult(nil, error));
-      }];
-    } else {
-      [channel setMessageHandler:nil];
-    }
-  }
-}
diff --git a/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart b/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart
index db7e04b..bf1518d 100644
--- a/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart
+++ b/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart
@@ -9,7 +9,7 @@
 import 'package:flutter/widgets.dart';
 import 'package:video_player_platform_interface/video_player_platform_interface.dart';
 
-import 'messages.dart';
+import 'messages.g.dart';
 
 /// An iOS implementation of [VideoPlayerPlatform] that uses the
 /// Pigeon-generated [VideoPlayerApi].
@@ -28,30 +28,40 @@
 
   @override
   Future<void> dispose(int textureId) {
-    return _api.dispose(TextureMessage()..textureId = textureId);
+    return _api.dispose(TextureMessage(textureId: textureId));
   }
 
   @override
   Future<int?> create(DataSource dataSource) async {
-    final CreateMessage message = CreateMessage();
-
+    String? asset;
+    String? packageName;
+    String? uri;
+    String? formatHint;
+    Map<String, String> httpHeaders = <String, String>{};
     switch (dataSource.sourceType) {
       case DataSourceType.asset:
-        message.asset = dataSource.asset;
-        message.packageName = dataSource.package;
+        asset = dataSource.asset;
+        packageName = dataSource.package;
         break;
       case DataSourceType.network:
-        message.uri = dataSource.uri;
-        message.formatHint = _videoFormatStringMap[dataSource.formatHint];
-        message.httpHeaders = dataSource.httpHeaders;
+        uri = dataSource.uri;
+        formatHint = _videoFormatStringMap[dataSource.formatHint];
+        httpHeaders = dataSource.httpHeaders;
         break;
       case DataSourceType.file:
-        message.uri = dataSource.uri;
+        uri = dataSource.uri;
         break;
       case DataSourceType.contentUri:
-        message.uri = dataSource.uri;
+        uri = dataSource.uri;
         break;
     }
+    final CreateMessage message = CreateMessage(
+      asset: asset,
+      packageName: packageName,
+      uri: uri,
+      httpHeaders: httpHeaders,
+      formatHint: formatHint,
+    );
 
     final TextureMessage response = await _api.create(message);
     return response.textureId;
@@ -59,49 +69,53 @@
 
   @override
   Future<void> setLooping(int textureId, bool looping) {
-    return _api.setLooping(LoopingMessage()
-      ..textureId = textureId
-      ..isLooping = looping);
+    return _api.setLooping(LoopingMessage(
+      textureId: textureId,
+      isLooping: looping,
+    ));
   }
 
   @override
   Future<void> play(int textureId) {
-    return _api.play(TextureMessage()..textureId = textureId);
+    return _api.play(TextureMessage(textureId: textureId));
   }
 
   @override
   Future<void> pause(int textureId) {
-    return _api.pause(TextureMessage()..textureId = textureId);
+    return _api.pause(TextureMessage(textureId: textureId));
   }
 
   @override
   Future<void> setVolume(int textureId, double volume) {
-    return _api.setVolume(VolumeMessage()
-      ..textureId = textureId
-      ..volume = volume);
+    return _api.setVolume(VolumeMessage(
+      textureId: textureId,
+      volume: volume,
+    ));
   }
 
   @override
   Future<void> setPlaybackSpeed(int textureId, double speed) {
     assert(speed > 0);
 
-    return _api.setPlaybackSpeed(PlaybackSpeedMessage()
-      ..textureId = textureId
-      ..speed = speed);
+    return _api.setPlaybackSpeed(PlaybackSpeedMessage(
+      textureId: textureId,
+      speed: speed,
+    ));
   }
 
   @override
   Future<void> seekTo(int textureId, Duration position) {
-    return _api.seekTo(PositionMessage()
-      ..textureId = textureId
-      ..position = position.inMilliseconds);
+    return _api.seekTo(PositionMessage(
+      textureId: textureId,
+      position: position.inMilliseconds,
+    ));
   }
 
   @override
   Future<Duration> getPosition(int textureId) async {
     final PositionMessage response =
-        await _api.position(TextureMessage()..textureId = textureId);
-    return Duration(milliseconds: response.position!);
+        await _api.position(TextureMessage(textureId: textureId));
+    return Duration(milliseconds: response.position);
   }
 
   @override
@@ -146,9 +160,8 @@
 
   @override
   Future<void> setMixWithOthers(bool mixWithOthers) {
-    return _api.setMixWithOthers(
-      MixWithOthersMessage()..mixWithOthers = mixWithOthers,
-    );
+    return _api
+        .setMixWithOthers(MixWithOthersMessage(mixWithOthers: mixWithOthers));
   }
 
   EventChannel _eventChannelFor(int textureId) {
diff --git a/packages/video_player/video_player_avfoundation/lib/src/messages.dart b/packages/video_player/video_player_avfoundation/lib/src/messages.dart
deleted file mode 100644
index 831f4e3..0000000
--- a/packages/video_player/video_player_avfoundation/lib/src/messages.dart
+++ /dev/null
@@ -1,425 +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.
-
-// Autogenerated from Pigeon (v0.1.21), 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, cast_nullable_to_non_nullable
-// @dart = 2.12
-import 'dart:async';
-import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List;
-
-import 'package:flutter/services.dart';
-
-class TextureMessage {
-  int? textureId;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    return pigeonMap;
-  }
-
-  static TextureMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return TextureMessage()..textureId = pigeonMap['textureId'] as int?;
-  }
-}
-
-class CreateMessage {
-  String? asset;
-  String? uri;
-  String? packageName;
-  String? formatHint;
-  Map<Object?, Object?>? httpHeaders;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['asset'] = asset;
-    pigeonMap['uri'] = uri;
-    pigeonMap['packageName'] = packageName;
-    pigeonMap['formatHint'] = formatHint;
-    pigeonMap['httpHeaders'] = httpHeaders;
-    return pigeonMap;
-  }
-
-  static CreateMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return CreateMessage()
-      ..asset = pigeonMap['asset'] as String?
-      ..uri = pigeonMap['uri'] as String?
-      ..packageName = pigeonMap['packageName'] as String?
-      ..formatHint = pigeonMap['formatHint'] as String?
-      ..httpHeaders = pigeonMap['httpHeaders'] as Map<Object?, Object?>?;
-  }
-}
-
-class LoopingMessage {
-  int? textureId;
-  bool? isLooping;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    pigeonMap['isLooping'] = isLooping;
-    return pigeonMap;
-  }
-
-  static LoopingMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return LoopingMessage()
-      ..textureId = pigeonMap['textureId'] as int?
-      ..isLooping = pigeonMap['isLooping'] as bool?;
-  }
-}
-
-class VolumeMessage {
-  int? textureId;
-  double? volume;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    pigeonMap['volume'] = volume;
-    return pigeonMap;
-  }
-
-  static VolumeMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return VolumeMessage()
-      ..textureId = pigeonMap['textureId'] as int?
-      ..volume = pigeonMap['volume'] as double?;
-  }
-}
-
-class PlaybackSpeedMessage {
-  int? textureId;
-  double? speed;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    pigeonMap['speed'] = speed;
-    return pigeonMap;
-  }
-
-  static PlaybackSpeedMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return PlaybackSpeedMessage()
-      ..textureId = pigeonMap['textureId'] as int?
-      ..speed = pigeonMap['speed'] as double?;
-  }
-}
-
-class PositionMessage {
-  int? textureId;
-  int? position;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['textureId'] = textureId;
-    pigeonMap['position'] = position;
-    return pigeonMap;
-  }
-
-  static PositionMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return PositionMessage()
-      ..textureId = pigeonMap['textureId'] as int?
-      ..position = pigeonMap['position'] as int?;
-  }
-}
-
-class MixWithOthersMessage {
-  bool? mixWithOthers;
-
-  Object encode() {
-    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
-    pigeonMap['mixWithOthers'] = mixWithOthers;
-    return pigeonMap;
-  }
-
-  static MixWithOthersMessage decode(Object message) {
-    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
-    return MixWithOthersMessage()
-      ..mixWithOthers = pigeonMap['mixWithOthers'] as bool?;
-  }
-}
-
-class VideoPlayerApi {
-  Future<void> initialize() async {
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.initialize', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(null) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<TextureMessage> create(CreateMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.create', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      return TextureMessage.decode(replyMap['result']!);
-    }
-  }
-
-  Future<void> dispose(TextureMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.dispose', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> setLooping(LoopingMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.setLooping', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> setVolume(VolumeMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.setVolume', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> setPlaybackSpeed(PlaybackSpeedMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed',
-        StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> play(TextureMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.play', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<PositionMessage> position(TextureMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.position', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      return PositionMessage.decode(replyMap['result']!);
-    }
-  }
-
-  Future<void> seekTo(PositionMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.seekTo', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> pause(TextureMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.pause', StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-
-  Future<void> setMixWithOthers(MixWithOthersMessage arg) async {
-    final Object encoded = arg.encode();
-    const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-        'dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers',
-        StandardMessageCodec());
-    final Map<Object?, Object?>? replyMap =
-        await channel.send(encoded) 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 =
-          replyMap['error'] as Map<Object?, Object?>;
-      throw PlatformException(
-        code: error['code'] as String,
-        message: error['message'] as String?,
-        details: error['details'],
-      );
-    } else {
-      // noop
-    }
-  }
-}
diff --git a/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart b/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart
new file mode 100644
index 0000000..1a679d5
--- /dev/null
+++ b/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart
@@ -0,0 +1,539 @@
+// 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.17), 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
+import 'dart:async';
+import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List;
+
+import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer;
+import 'package:flutter/services.dart';
+
+class TextureMessage {
+  TextureMessage({
+    required this.textureId,
+  });
+
+  int textureId;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    return pigeonMap;
+  }
+
+  static TextureMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return TextureMessage(
+      textureId: pigeonMap['textureId']! as int,
+    );
+  }
+}
+
+class LoopingMessage {
+  LoopingMessage({
+    required this.textureId,
+    required this.isLooping,
+  });
+
+  int textureId;
+  bool isLooping;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    pigeonMap['isLooping'] = isLooping;
+    return pigeonMap;
+  }
+
+  static LoopingMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return LoopingMessage(
+      textureId: pigeonMap['textureId']! as int,
+      isLooping: pigeonMap['isLooping']! as bool,
+    );
+  }
+}
+
+class VolumeMessage {
+  VolumeMessage({
+    required this.textureId,
+    required this.volume,
+  });
+
+  int textureId;
+  double volume;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    pigeonMap['volume'] = volume;
+    return pigeonMap;
+  }
+
+  static VolumeMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return VolumeMessage(
+      textureId: pigeonMap['textureId']! as int,
+      volume: pigeonMap['volume']! as double,
+    );
+  }
+}
+
+class PlaybackSpeedMessage {
+  PlaybackSpeedMessage({
+    required this.textureId,
+    required this.speed,
+  });
+
+  int textureId;
+  double speed;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    pigeonMap['speed'] = speed;
+    return pigeonMap;
+  }
+
+  static PlaybackSpeedMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return PlaybackSpeedMessage(
+      textureId: pigeonMap['textureId']! as int,
+      speed: pigeonMap['speed']! as double,
+    );
+  }
+}
+
+class PositionMessage {
+  PositionMessage({
+    required this.textureId,
+    required this.position,
+  });
+
+  int textureId;
+  int position;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['textureId'] = textureId;
+    pigeonMap['position'] = position;
+    return pigeonMap;
+  }
+
+  static PositionMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return PositionMessage(
+      textureId: pigeonMap['textureId']! as int,
+      position: pigeonMap['position']! as int,
+    );
+  }
+}
+
+class CreateMessage {
+  CreateMessage({
+    this.asset,
+    this.uri,
+    this.packageName,
+    this.formatHint,
+    required this.httpHeaders,
+  });
+
+  String? asset;
+  String? uri;
+  String? packageName;
+  String? formatHint;
+  Map<String?, String?> httpHeaders;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['asset'] = asset;
+    pigeonMap['uri'] = uri;
+    pigeonMap['packageName'] = packageName;
+    pigeonMap['formatHint'] = formatHint;
+    pigeonMap['httpHeaders'] = httpHeaders;
+    return pigeonMap;
+  }
+
+  static CreateMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return CreateMessage(
+      asset: pigeonMap['asset'] as String?,
+      uri: pigeonMap['uri'] as String?,
+      packageName: pigeonMap['packageName'] as String?,
+      formatHint: pigeonMap['formatHint'] as String?,
+      httpHeaders: (pigeonMap['httpHeaders'] as Map<Object?, Object?>?)!
+          .cast<String?, String?>(),
+    );
+  }
+}
+
+class MixWithOthersMessage {
+  MixWithOthersMessage({
+    required this.mixWithOthers,
+  });
+
+  bool mixWithOthers;
+
+  Object encode() {
+    final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
+    pigeonMap['mixWithOthers'] = mixWithOthers;
+    return pigeonMap;
+  }
+
+  static MixWithOthersMessage decode(Object message) {
+    final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
+    return MixWithOthersMessage(
+      mixWithOthers: pigeonMap['mixWithOthers']! as bool,
+    );
+  }
+}
+
+class _VideoPlayerApiCodec extends StandardMessageCodec {
+  const _VideoPlayerApiCodec();
+  @override
+  void writeValue(WriteBuffer buffer, Object? value) {
+    if (value is CreateMessage) {
+      buffer.putUint8(128);
+      writeValue(buffer, value.encode());
+    } else if (value is LoopingMessage) {
+      buffer.putUint8(129);
+      writeValue(buffer, value.encode());
+    } else if (value is MixWithOthersMessage) {
+      buffer.putUint8(130);
+      writeValue(buffer, value.encode());
+    } else if (value is PlaybackSpeedMessage) {
+      buffer.putUint8(131);
+      writeValue(buffer, value.encode());
+    } else if (value is PositionMessage) {
+      buffer.putUint8(132);
+      writeValue(buffer, value.encode());
+    } else if (value is TextureMessage) {
+      buffer.putUint8(133);
+      writeValue(buffer, value.encode());
+    } else if (value is VolumeMessage) {
+      buffer.putUint8(134);
+      writeValue(buffer, value.encode());
+    } else {
+      super.writeValue(buffer, value);
+    }
+  }
+
+  @override
+  Object? readValueOfType(int type, ReadBuffer buffer) {
+    switch (type) {
+      case 128:
+        return CreateMessage.decode(readValue(buffer)!);
+
+      case 129:
+        return LoopingMessage.decode(readValue(buffer)!);
+
+      case 130:
+        return MixWithOthersMessage.decode(readValue(buffer)!);
+
+      case 131:
+        return PlaybackSpeedMessage.decode(readValue(buffer)!);
+
+      case 132:
+        return PositionMessage.decode(readValue(buffer)!);
+
+      case 133:
+        return TextureMessage.decode(readValue(buffer)!);
+
+      case 134:
+        return VolumeMessage.decode(readValue(buffer)!);
+
+      default:
+        return super.readValueOfType(type, buffer);
+    }
+  }
+}
+
+class VideoPlayerApi {
+  /// Constructor for [VideoPlayerApi].  The [binaryMessenger] named argument is
+  /// available for dependency injection.  If it is left null, the default
+  /// BinaryMessenger will be used which routes to the host platform.
+  VideoPlayerApi({BinaryMessenger? binaryMessenger})
+      : _binaryMessenger = binaryMessenger;
+
+  final BinaryMessenger? _binaryMessenger;
+
+  static const MessageCodec<Object?> codec = _VideoPlayerApiCodec();
+
+  Future<void> initialize() async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.initialize', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(null) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<TextureMessage> create(CreateMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.create', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return (replyMap['result'] as TextureMessage?)!;
+    }
+  }
+
+  Future<void> dispose(TextureMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.dispose', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> setLooping(LoopingMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.setLooping', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> setVolume(VolumeMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.setVolume', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> setPlaybackSpeed(PlaybackSpeedMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> play(TextureMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.play', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<PositionMessage> position(TextureMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.position', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return (replyMap['result'] as PositionMessage?)!;
+    }
+  }
+
+  Future<void> seekTo(PositionMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.seekTo', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> pause(TextureMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.pause', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+
+  Future<void> setMixWithOthers(MixWithOthersMessage arg_msg) async {
+    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+        'dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers', codec,
+        binaryMessenger: _binaryMessenger);
+    final Map<Object?, Object?>? replyMap =
+        await channel.send(<Object>[arg_msg]) 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 =
+          (replyMap['error'] as Map<Object?, Object?>?)!;
+      throw PlatformException(
+        code: (error['code'] as String?)!,
+        message: error['message'] as String?,
+        details: error['details'],
+      );
+    } else {
+      return;
+    }
+  }
+}
diff --git a/packages/video_player/video_player_avfoundation/pigeons/copyright.txt b/packages/video_player/video_player_avfoundation/pigeons/copyright.txt
new file mode 100644
index 0000000..1236b63
--- /dev/null
+++ b/packages/video_player/video_player_avfoundation/pigeons/copyright.txt
@@ -0,0 +1,3 @@
+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.
diff --git a/packages/video_player/video_player_avfoundation/pigeons/messages.dart b/packages/video_player/video_player_avfoundation/pigeons/messages.dart
index 42d9640..d357caf 100644
--- a/packages/video_player/video_player_avfoundation/pigeons/messages.dart
+++ b/packages/video_player/video_player_avfoundation/pigeons/messages.dart
@@ -2,68 +2,83 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.9
+import 'package:pigeon/pigeon.dart';
 
-import 'package:pigeon/pigeon_lib.dart';
-
+@ConfigurePigeon(PigeonOptions(
+  dartOut: 'lib/src/messages.g.dart',
+  dartTestOut: 'test/test_api.dart',
+  objcHeaderOut: 'ios/Classes/messages.g.h',
+  objcSourceOut: 'ios/Classes/messages.g.m',
+  objcOptions: ObjcOptions(
+    prefix: 'FLT',
+  ),
+  copyrightHeader: 'pigeons/copyright.txt',
+))
 class TextureMessage {
+  TextureMessage(this.textureId);
   int textureId;
 }
 
 class LoopingMessage {
+  LoopingMessage(this.textureId, this.isLooping);
   int textureId;
   bool isLooping;
 }
 
 class VolumeMessage {
+  VolumeMessage(this.textureId, this.volume);
   int textureId;
   double volume;
 }
 
 class PlaybackSpeedMessage {
+  PlaybackSpeedMessage(this.textureId, this.speed);
   int textureId;
   double speed;
 }
 
 class PositionMessage {
+  PositionMessage(this.textureId, this.position);
   int textureId;
   int position;
 }
 
 class CreateMessage {
-  String asset;
-  String uri;
-  String packageName;
-  String formatHint;
-  Map<String, String> httpHeaders;
+  CreateMessage({required this.httpHeaders});
+  String? asset;
+  String? uri;
+  String? packageName;
+  String? formatHint;
+  Map<String?, String?> httpHeaders;
 }
 
 class MixWithOthersMessage {
+  MixWithOthersMessage(this.mixWithOthers);
   bool mixWithOthers;
 }
 
 @HostApi(dartHostTestHandler: 'TestHostVideoPlayerApi')
 abstract class VideoPlayerApi {
+  @ObjCSelector('initialize')
   void initialize();
+  @ObjCSelector('create:')
   TextureMessage create(CreateMessage msg);
+  @ObjCSelector('dispose:')
   void dispose(TextureMessage msg);
+  @ObjCSelector('setLooping:')
   void setLooping(LoopingMessage msg);
+  @ObjCSelector('setVolume:')
   void setVolume(VolumeMessage msg);
+  @ObjCSelector('setPlaybackSpeed:')
   void setPlaybackSpeed(PlaybackSpeedMessage msg);
+  @ObjCSelector('play:')
   void play(TextureMessage msg);
+  @ObjCSelector('position:')
   PositionMessage position(TextureMessage msg);
+  @ObjCSelector('seekTo:')
   void seekTo(PositionMessage msg);
+  @ObjCSelector('pause:')
   void pause(TextureMessage msg);
+  @ObjCSelector('setMixWithOthers:')
   void setMixWithOthers(MixWithOthersMessage msg);
 }
-
-void configurePigeon(PigeonOptions opts) {
-  opts.dartOut = 'lib/src/messages.dart';
-  opts.dartTestOut = 'test/test_api.dart';
-  opts.objcHeaderOut = 'ios/Classes/messages.h';
-  opts.objcSourceOut = 'ios/Classes/messages.m';
-  opts.objcOptions.prefix = 'FLT';
-  opts.javaOut =
-      'android/src/main/java/io/flutter/plugins/videoplayer/Messages.java';
-  opts.javaOptions.package = 'io.flutter.plugins.videoplayer';
-}
diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml
index 8b00249..044d15b 100644
--- a/packages/video_player/video_player_avfoundation/pubspec.yaml
+++ b/packages/video_player/video_player_avfoundation/pubspec.yaml
@@ -2,7 +2,7 @@
 description: iOS implementation of the video_player plugin.
 repository: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_avfoundation
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
-version: 2.2.18
+version: 2.3.0
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
@@ -24,4 +24,4 @@
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  pigeon: ^0.1.21
+  pigeon: ^1.0.17
diff --git a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart
index adb29a5..9b6d1df 100644
--- a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart
+++ b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
-import 'package:video_player_avfoundation/src/messages.dart';
+import 'package:video_player_avfoundation/src/messages.g.dart';
 import 'package:video_player_avfoundation/video_player_avfoundation.dart';
 import 'package:video_player_platform_interface/video_player_platform_interface.dart';
 
@@ -26,7 +26,7 @@
   TextureMessage create(CreateMessage arg) {
     log.add('create');
     createMessage = arg;
-    return TextureMessage()..textureId = 3;
+    return TextureMessage(textureId: 3);
   }
 
   @override
@@ -62,7 +62,7 @@
   PositionMessage position(TextureMessage arg) {
     log.add('position');
     textureMessage = arg;
-    return PositionMessage()..position = 234;
+    return PositionMessage(textureId: arg.textureId, position: 234);
   }
 
   @override
diff --git a/packages/video_player/video_player_avfoundation/test/test_api.dart b/packages/video_player/video_player_avfoundation/test/test_api.dart
index b173705..191358e 100644
--- a/packages/video_player/video_player_avfoundation/test/test_api.dart
+++ b/packages/video_player/video_player_avfoundation/test/test_api.dart
@@ -1,34 +1,100 @@
 // 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 (v0.1.21), do not edit directly.
+// Autogenerated from Pigeon (v1.0.17), 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;
+import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer;
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
-import 'package:video_player_avfoundation/src/messages.dart';
+
+// TODO(gaaclarke): The following output had to be tweaked from a relative path to a uri.
+import 'package:video_player_avfoundation/src/messages.g.dart';
+
+class _TestHostVideoPlayerApiCodec extends StandardMessageCodec {
+  const _TestHostVideoPlayerApiCodec();
+  @override
+  void writeValue(WriteBuffer buffer, Object? value) {
+    if (value is CreateMessage) {
+      buffer.putUint8(128);
+      writeValue(buffer, value.encode());
+    } else if (value is LoopingMessage) {
+      buffer.putUint8(129);
+      writeValue(buffer, value.encode());
+    } else if (value is MixWithOthersMessage) {
+      buffer.putUint8(130);
+      writeValue(buffer, value.encode());
+    } else if (value is PlaybackSpeedMessage) {
+      buffer.putUint8(131);
+      writeValue(buffer, value.encode());
+    } else if (value is PositionMessage) {
+      buffer.putUint8(132);
+      writeValue(buffer, value.encode());
+    } else if (value is TextureMessage) {
+      buffer.putUint8(133);
+      writeValue(buffer, value.encode());
+    } else if (value is VolumeMessage) {
+      buffer.putUint8(134);
+      writeValue(buffer, value.encode());
+    } else {
+      super.writeValue(buffer, value);
+    }
+  }
+
+  @override
+  Object? readValueOfType(int type, ReadBuffer buffer) {
+    switch (type) {
+      case 128:
+        return CreateMessage.decode(readValue(buffer)!);
+
+      case 129:
+        return LoopingMessage.decode(readValue(buffer)!);
+
+      case 130:
+        return MixWithOthersMessage.decode(readValue(buffer)!);
+
+      case 131:
+        return PlaybackSpeedMessage.decode(readValue(buffer)!);
+
+      case 132:
+        return PositionMessage.decode(readValue(buffer)!);
+
+      case 133:
+        return TextureMessage.decode(readValue(buffer)!);
+
+      case 134:
+        return VolumeMessage.decode(readValue(buffer)!);
+
+      default:
+        return super.readValueOfType(type, buffer);
+    }
+  }
+}
 
 abstract class TestHostVideoPlayerApi {
+  static const MessageCodec<Object?> codec = _TestHostVideoPlayerApiCodec();
+
   void initialize();
-  TextureMessage create(CreateMessage arg);
-  void dispose(TextureMessage arg);
-  void setLooping(LoopingMessage arg);
-  void setVolume(VolumeMessage arg);
-  void setPlaybackSpeed(PlaybackSpeedMessage arg);
-  void play(TextureMessage arg);
-  PositionMessage position(TextureMessage arg);
-  void seekTo(PositionMessage arg);
-  void pause(TextureMessage arg);
-  void setMixWithOthers(MixWithOthersMessage arg);
-  static void setup(TestHostVideoPlayerApi? api) {
+  TextureMessage create(CreateMessage msg);
+  void dispose(TextureMessage msg);
+  void setLooping(LoopingMessage msg);
+  void setVolume(VolumeMessage msg);
+  void setPlaybackSpeed(PlaybackSpeedMessage msg);
+  void play(TextureMessage msg);
+  PositionMessage position(TextureMessage msg);
+  void seekTo(PositionMessage msg);
+  void pause(TextureMessage msg);
+  void setMixWithOthers(MixWithOthersMessage msg);
+  static void setup(TestHostVideoPlayerApi? api,
+      {BinaryMessenger? binaryMessenger}) {
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.initialize',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.initialize', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
@@ -40,157 +106,193 @@
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.create', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.create', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.create was null. Expected CreateMessage.');
-          final CreateMessage input = CreateMessage.decode(message!);
-          final TextureMessage output = api.create(input);
-          return <Object?, Object?>{'result': output.encode()};
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.create was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final CreateMessage? arg_msg = (args[0] as CreateMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.create was null, expected non-null CreateMessage.');
+          final TextureMessage output = api.create(arg_msg!);
+          return <Object?, Object?>{'result': output};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.dispose', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.dispose', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.dispose was null. Expected TextureMessage.');
-          final TextureMessage input = TextureMessage.decode(message!);
-          api.dispose(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.dispose was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final TextureMessage? arg_msg = (args[0] as TextureMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.dispose was null, expected non-null TextureMessage.');
+          api.dispose(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.setLooping',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.setLooping', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.setLooping was null. Expected LoopingMessage.');
-          final LoopingMessage input = LoopingMessage.decode(message!);
-          api.setLooping(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setLooping was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final LoopingMessage? arg_msg = (args[0] as LoopingMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setLooping was null, expected non-null LoopingMessage.');
+          api.setLooping(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.setVolume',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.setVolume', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.setVolume was null. Expected VolumeMessage.');
-          final VolumeMessage input = VolumeMessage.decode(message!);
-          api.setVolume(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setVolume was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final VolumeMessage? arg_msg = (args[0] as VolumeMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setVolume was null, expected non-null VolumeMessage.');
+          api.setVolume(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed was null. Expected PlaybackSpeedMessage.');
-          final PlaybackSpeedMessage input =
-              PlaybackSpeedMessage.decode(message!);
-          api.setPlaybackSpeed(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final PlaybackSpeedMessage? arg_msg =
+              (args[0] as PlaybackSpeedMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setPlaybackSpeed was null, expected non-null PlaybackSpeedMessage.');
+          api.setPlaybackSpeed(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.play', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.play', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.play was null. Expected TextureMessage.');
-          final TextureMessage input = TextureMessage.decode(message!);
-          api.play(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.play was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final TextureMessage? arg_msg = (args[0] as TextureMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.play was null, expected non-null TextureMessage.');
+          api.play(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.position', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.position', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.position was null. Expected TextureMessage.');
-          final TextureMessage input = TextureMessage.decode(message!);
-          final PositionMessage output = api.position(input);
-          return <Object?, Object?>{'result': output.encode()};
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.position was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final TextureMessage? arg_msg = (args[0] as TextureMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.position was null, expected non-null TextureMessage.');
+          final PositionMessage output = api.position(arg_msg!);
+          return <Object?, Object?>{'result': output};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.seekTo', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.seekTo', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.seekTo was null. Expected PositionMessage.');
-          final PositionMessage input = PositionMessage.decode(message!);
-          api.seekTo(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.seekTo was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final PositionMessage? arg_msg = (args[0] as PositionMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.seekTo was null, expected non-null PositionMessage.');
+          api.seekTo(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.pause', StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.pause', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.pause was null. Expected TextureMessage.');
-          final TextureMessage input = TextureMessage.decode(message!);
-          api.pause(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.pause was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final TextureMessage? arg_msg = (args[0] as TextureMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.pause was null, expected non-null TextureMessage.');
+          api.pause(arg_msg!);
           return <Object?, Object?>{};
         });
       }
     }
     {
-      const BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
-          'dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers',
-          StandardMessageCodec());
+      final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
+          'dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers', codec,
+          binaryMessenger: binaryMessenger);
       if (api == null) {
         channel.setMockMessageHandler(null);
       } else {
         channel.setMockMessageHandler((Object? message) async {
           assert(message != null,
-              'Argument for dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers was null. Expected MixWithOthersMessage.');
-          final MixWithOthersMessage input =
-              MixWithOthersMessage.decode(message!);
-          api.setMixWithOthers(input);
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers was null.');
+          final List<Object?> args = (message as List<Object?>?)!;
+          final MixWithOthersMessage? arg_msg =
+              (args[0] as MixWithOthersMessage?);
+          assert(arg_msg != null,
+              'Argument for dev.flutter.pigeon.VideoPlayerApi.setMixWithOthers was null, expected non-null MixWithOthersMessage.');
+          api.setMixWithOthers(arg_msg!);
           return <Object?, Object?>{};
         });
       }