diff --git a/analysis_options.yaml b/analysis_options.yaml
index 498d19d..3c924bb 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -13,8 +13,6 @@
     # allow self-reference to deprecated members (we do this because otherwise we have
     # to annotate every member in every test, assert, etc, when we deprecate something)
     deprecated_member_use_from_same_package: ignore
-    # Turned off until null-safe rollout is complete.
-    unnecessary_null_comparison: ignore
   exclude: # DIFFERENT FROM FLUTTER/FLUTTER
     # Ignore generated files
     - '**/*.g.dart'
diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md
index b6dc896..856f2ba 100644
--- a/packages/camera/camera/CHANGELOG.md
+++ b/packages/camera/camera/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.10.5+1
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 0.10.5
 
 * Adds NV21 as an image streaming option for Android.
diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart
index 73c9f05..6dad1eb 100644
--- a/packages/camera/camera/example/lib/main.dart
+++ b/packages/camera/camera/example/lib/main.dart
@@ -250,9 +250,7 @@
                         child: Center(
                           child: AspectRatio(
                               aspectRatio:
-                                  localVideoController.value.size != null
-                                      ? localVideoController.value.aspectRatio
-                                      : 1.0,
+                                  localVideoController.value.aspectRatio,
                               child: VideoPlayer(localVideoController)),
                         ),
                       ),
@@ -1000,7 +998,7 @@
         : VideoPlayerController.file(File(videoFile!.path));
 
     videoPlayerListener = () {
-      if (videoController != null && videoController!.value.size != null) {
+      if (videoController != null) {
         // Refreshing the state to update video player with the correct ratio.
         if (mounted) {
           setState(() {});
diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml
index 28648ad..5f18563 100644
--- a/packages/camera/camera/pubspec.yaml
+++ b/packages/camera/camera/pubspec.yaml
@@ -4,7 +4,7 @@
   Dart.
 repository: https://github.com/flutter/packages/tree/main/packages/camera/camera
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
-version: 0.10.5
+version: 0.10.5+1
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md
index 3e81bba..28552d3 100644
--- a/packages/camera/camera_android/CHANGELOG.md
+++ b/packages/camera/camera_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.10.8+2
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 0.10.8+1
 
 * Fixes lint errors.
diff --git a/packages/camera/camera_android/example/lib/main.dart b/packages/camera/camera_android/example/lib/main.dart
index dd02be3..5162d3a 100644
--- a/packages/camera/camera_android/example/lib/main.dart
+++ b/packages/camera/camera_android/example/lib/main.dart
@@ -253,9 +253,7 @@
                         child: Center(
                           child: AspectRatio(
                               aspectRatio:
-                                  localVideoController.value.size != null
-                                      ? localVideoController.value.aspectRatio
-                                      : 1.0,
+                                  localVideoController.value.aspectRatio,
                               child: VideoPlayer(localVideoController)),
                         ),
                       ),
@@ -1008,7 +1006,7 @@
         : VideoPlayerController.file(File(videoFile!.path));
 
     videoPlayerListener = () {
-      if (videoController != null && videoController!.value.size != null) {
+      if (videoController != null) {
         // Refreshing the state to update video player with the correct ratio.
         if (mounted) {
           setState(() {});
diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml
index 9ba23af..9da6328 100644
--- a/packages/camera/camera_android/pubspec.yaml
+++ b/packages/camera/camera_android/pubspec.yaml
@@ -3,7 +3,7 @@
 repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
 
-version: 0.10.8+1
+version: 0.10.8+2
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md
index a07f285..16da75f 100644
--- a/packages/camera/camera_android_camerax/CHANGELOG.md
+++ b/packages/camera/camera_android_camerax/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.0+4
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 0.5.0+3
 
 * Fixes Java lints.
diff --git a/packages/camera/camera_android_camerax/example/lib/main.dart b/packages/camera/camera_android_camerax/example/lib/main.dart
index 16ba863..1e051d4 100644
--- a/packages/camera/camera_android_camerax/example/lib/main.dart
+++ b/packages/camera/camera_android_camerax/example/lib/main.dart
@@ -253,9 +253,7 @@
                         child: Center(
                           child: AspectRatio(
                               aspectRatio:
-                                  localVideoController.value.size != null
-                                      ? localVideoController.value.aspectRatio
-                                      : 1.0,
+                                  localVideoController.value.aspectRatio,
                               child: VideoPlayer(localVideoController)),
                         ),
                       ),
@@ -985,7 +983,7 @@
         : VideoPlayerController.file(File(videoFile!.path));
 
     videoPlayerListener = () {
-      if (videoController != null && videoController!.value.size != null) {
+      if (videoController != null) {
         // Refreshing the state to update video player with the correct ratio.
         if (mounted) {
           setState(() {});
diff --git a/packages/camera/camera_android_camerax/lib/src/system_services.dart b/packages/camera/camera_android_camerax/lib/src/system_services.dart
index 2f41861..a2513e0 100644
--- a/packages/camera/camera_android_camerax/lib/src/system_services.dart
+++ b/packages/camera/camera_android_camerax/lib/src/system_services.dart
@@ -125,9 +125,6 @@
   void onDeviceOrientationChanged(String orientation) {
     final DeviceOrientation deviceOrientation =
         deserializeDeviceOrientation(orientation);
-    if (deviceOrientation == null) {
-      return;
-    }
     SystemServices.deviceOrientationChangedStreamController
         .add(DeviceOrientationChangedEvent(deviceOrientation));
   }
diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml
index 97a95de..7275c68 100644
--- a/packages/camera/camera_android_camerax/pubspec.yaml
+++ b/packages/camera/camera_android_camerax/pubspec.yaml
@@ -3,7 +3,7 @@
 repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
 
-version: 0.5.0+3
+version: 0.5.0+4
 
 environment:
   sdk: ">=2.19.0 <4.0.0"
diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md
index bee2ab3..4a4be5f 100644
--- a/packages/camera/camera_avfoundation/CHANGELOG.md
+++ b/packages/camera/camera_avfoundation/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.9.13+2
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 0.9.13+1
diff --git a/packages/camera/camera_avfoundation/example/lib/main.dart b/packages/camera/camera_avfoundation/example/lib/main.dart
index dd02be3..5162d3a 100644
--- a/packages/camera/camera_avfoundation/example/lib/main.dart
+++ b/packages/camera/camera_avfoundation/example/lib/main.dart
@@ -253,9 +253,7 @@
                         child: Center(
                           child: AspectRatio(
                               aspectRatio:
-                                  localVideoController.value.size != null
-                                      ? localVideoController.value.aspectRatio
-                                      : 1.0,
+                                  localVideoController.value.aspectRatio,
                               child: VideoPlayer(localVideoController)),
                         ),
                       ),
@@ -1008,7 +1006,7 @@
         : VideoPlayerController.file(File(videoFile!.path));
 
     videoPlayerListener = () {
-      if (videoController != null && videoController!.value.size != null) {
+      if (videoController != null) {
         // Refreshing the state to update video player with the correct ratio.
         if (mounted) {
           setState(() {});
diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml
index 5575119..937a1c2 100644
--- a/packages/camera/camera_avfoundation/pubspec.yaml
+++ b/packages/camera/camera_avfoundation/pubspec.yaml
@@ -2,7 +2,7 @@
 description: iOS implementation of the camera plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_avfoundation
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
-version: 0.9.13+1
+version: 0.9.13+2
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md
index a889b6f..7b21165 100644
--- a/packages/camera/camera_platform_interface/CHANGELOG.md
+++ b/packages/camera/camera_platform_interface/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.5.1
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 2.5.0
diff --git a/packages/camera/camera_platform_interface/lib/src/events/camera_event.dart b/packages/camera/camera_platform_interface/lib/src/events/camera_event.dart
index 95f61a9..1c76c34 100644
--- a/packages/camera/camera_platform_interface/lib/src/events/camera_event.dart
+++ b/packages/camera/camera_platform_interface/lib/src/events/camera_event.dart
@@ -27,7 +27,7 @@
   /// Build a Camera Event, that relates a `cameraId`.
   ///
   /// The `cameraId` is the ID of the camera that triggered the event.
-  const CameraEvent(this.cameraId) : assert(cameraId != null);
+  const CameraEvent(this.cameraId);
 
   /// The ID of the Camera this event is associated to.
   final int cameraId;
diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml
index 0b0d0a9..3dc49ce 100644
--- a/packages/camera/camera_platform_interface/pubspec.yaml
+++ b/packages/camera/camera_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
 # NOTE: We strongly prefer non-breaking changes, even at the expense of a
 # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 2.5.0
+version: 2.5.1
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/camera/camera_web/CHANGELOG.md b/packages/camera/camera_web/CHANGELOG.md
index 004488a..1d736b0 100644
--- a/packages/camera/camera_web/CHANGELOG.md
+++ b/packages/camera/camera_web/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.3.1+4
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 0.3.1+3
diff --git a/packages/camera/camera_web/lib/src/camera.dart b/packages/camera/camera_web/lib/src/camera.dart
index 13ef21b..79bacad 100644
--- a/packages/camera/camera_web/lib/src/camera.dart
+++ b/packages/camera/camera_web/lib/src/camera.dart
@@ -471,9 +471,7 @@
     _onVideoRecordingErrorSubscription =
         mediaRecorder!.onError.listen((html.Event event) {
       final html.ErrorEvent error = event as html.ErrorEvent;
-      if (error != null) {
-        videoRecordingErrorController.add(error);
-      }
+      videoRecordingErrorController.add(error);
     });
 
     if (maxVideoDuration != null) {
diff --git a/packages/camera/camera_web/pubspec.yaml b/packages/camera/camera_web/pubspec.yaml
index ade36cd..382444d 100644
--- a/packages/camera/camera_web/pubspec.yaml
+++ b/packages/camera/camera_web/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin for getting information about and controlling the camera on Web.
 repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_web
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
-version: 0.3.1+3
+version: 0.3.1+4
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/dynamic_layouts/CHANGELOG.md b/packages/dynamic_layouts/CHANGELOG.md
index 908eb54..2c71313 100644
--- a/packages/dynamic_layouts/CHANGELOG.md
+++ b/packages/dynamic_layouts/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.0.1+1
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 * Aligns Dart and Flutter SDK constraints.
 * Updates minimum Flutter version to 3.0.
diff --git a/packages/dynamic_layouts/lib/src/staggered_layout.dart b/packages/dynamic_layouts/lib/src/staggered_layout.dart
index 941875a..f5fb4fb 100644
--- a/packages/dynamic_layouts/lib/src/staggered_layout.dart
+++ b/packages/dynamic_layouts/lib/src/staggered_layout.dart
@@ -47,9 +47,9 @@
     required this.crossAxisSpacing,
     required this.childCrossAxisExtent,
     required this.scrollDirection,
-  })  : assert(crossAxisCount != null && crossAxisCount > 0),
-        assert(crossAxisSpacing != null && crossAxisSpacing >= 0),
-        assert(childCrossAxisExtent != null && childCrossAxisExtent >= 0);
+  })  : assert(crossAxisCount > 0),
+        assert(crossAxisSpacing >= 0),
+        assert(childCrossAxisExtent >= 0);
 
   /// The number of children in the cross axis.
   final int crossAxisCount;
@@ -200,9 +200,9 @@
     required super.crossAxisCount,
     super.mainAxisSpacing = 0.0,
     super.crossAxisSpacing = 0.0,
-  })  : assert(crossAxisCount != null && crossAxisCount > 0),
-        assert(mainAxisSpacing != null && mainAxisSpacing >= 0),
-        assert(crossAxisSpacing != null && crossAxisSpacing >= 0);
+  })  : assert(crossAxisCount > 0),
+        assert(mainAxisSpacing >= 0),
+        assert(crossAxisSpacing >= 0);
 
   bool _debugAssertIsValid() {
     assert(crossAxisCount > 0);
@@ -283,9 +283,9 @@
     required super.maxCrossAxisExtent,
     super.mainAxisSpacing = 0.0,
     super.crossAxisSpacing = 0.0,
-  })  : assert(maxCrossAxisExtent != null && maxCrossAxisExtent > 0),
-        assert(mainAxisSpacing != null && mainAxisSpacing >= 0),
-        assert(crossAxisSpacing != null && crossAxisSpacing >= 0);
+  })  : assert(maxCrossAxisExtent > 0),
+        assert(mainAxisSpacing >= 0),
+        assert(crossAxisSpacing >= 0);
 
   bool _debugAssertIsValid(double crossAxisExtent) {
     assert(crossAxisExtent > 0.0);
diff --git a/packages/dynamic_layouts/lib/src/wrap_layout.dart b/packages/dynamic_layouts/lib/src/wrap_layout.dart
index 83b630d..b39ab87 100644
--- a/packages/dynamic_layouts/lib/src/wrap_layout.dart
+++ b/packages/dynamic_layouts/lib/src/wrap_layout.dart
@@ -54,14 +54,13 @@
     required this.childCrossAxisExtent,
     required this.crossAxisExtent,
     required this.scrollDirection,
-  })  : assert(mainAxisSpacing != null && mainAxisSpacing >= 0),
-        assert(crossAxisSpacing != null && crossAxisSpacing >= 0),
-        assert(childMainAxisExtent != null && childMainAxisExtent >= 0),
-        assert(childCrossAxisExtent != null && childCrossAxisExtent >= 0),
-        assert(crossAxisExtent != null && crossAxisExtent >= 0),
-        assert(scrollDirection != null &&
-            (scrollDirection == Axis.horizontal ||
-                scrollDirection == Axis.vertical));
+  })  : assert(mainAxisSpacing >= 0),
+        assert(crossAxisSpacing >= 0),
+        assert(childMainAxisExtent >= 0),
+        assert(childCrossAxisExtent >= 0),
+        assert(crossAxisExtent >= 0),
+        assert(scrollDirection == Axis.horizontal ||
+            scrollDirection == Axis.vertical);
 
   /// The direction in which the layout should be built.
   final Axis scrollDirection;
@@ -216,8 +215,8 @@
     this.crossAxisSpacing = 0.0,
     this.childCrossAxisExtent = double.infinity,
     this.childMainAxisExtent = double.infinity,
-  })  : assert(mainAxisSpacing != null && mainAxisSpacing >= 0),
-        assert(crossAxisSpacing != null && crossAxisSpacing >= 0);
+  })  : assert(mainAxisSpacing >= 0),
+        assert(crossAxisSpacing >= 0);
 
   /// The number of pixels from the leading edge of one tile to the trailing
   /// edge of the same tile in the main axis.
diff --git a/packages/dynamic_layouts/pubspec.yaml b/packages/dynamic_layouts/pubspec.yaml
index 99989e9..9803a7f 100644
--- a/packages/dynamic_layouts/pubspec.yaml
+++ b/packages/dynamic_layouts/pubspec.yaml
@@ -1,6 +1,6 @@
 name: dynamic_layouts
 description: Widgets for building dynamic grid layouts.
-version: 0.0.1
+version: 0.0.1+1
 issue_tracker: https://github.com/flutter/flutter/labels/p%3A%20dynamic_layouts
 repository: https://github.com/flutter/packages/tree/main/packages/dynamic_layouts
 # Temporarily unpublished while in process of releasing full package in multiple stages.
diff --git a/packages/flutter_markdown/test/utils.dart b/packages/flutter_markdown/test/utils.dart
index 0ce7f16..544b8b2 100644
--- a/packages/flutter_markdown/test/utils.dart
+++ b/packages/flutter_markdown/test/utils.dart
@@ -208,9 +208,6 @@
           io.File('${rootDirectory.path}/test/assets/images/logo.png');
 
       final ByteData asset = ByteData.view(file.readAsBytesSync().buffer);
-      if (asset == null) {
-        throw FlutterError('Unable to load asset: $key');
-      }
       return asset;
     } else {
       throw ArgumentError('Unknown asset key: $key');
diff --git a/packages/flutter_migrate/CHANGELOG.md b/packages/flutter_migrate/CHANGELOG.md
index 5aaff1c..f71225f 100644
--- a/packages/flutter_migrate/CHANGELOG.md
+++ b/packages/flutter_migrate/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.0.1+3
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 0.0.1+2
 
 * Removes use of `runtimeType.toString()`.
diff --git a/packages/flutter_migrate/lib/src/base/logger.dart b/packages/flutter_migrate/lib/src/base/logger.dart
index c84f098..70ff228 100644
--- a/packages/flutter_migrate/lib/src/base/logger.dart
+++ b/packages/flutter_migrate/lib/src/base/logger.dart
@@ -708,7 +708,6 @@
     String? progressId,
     int progressIndicatorPadding = kDefaultStatusPadding,
   }) {
-    assert(progressIndicatorPadding != null);
     printStatus(message);
     return SilentStatus(
       stopwatch: _stopwatchFactory.createStopwatch(),
@@ -983,7 +982,6 @@
 
   void _callback(Timer timer) {
     assert(this.timer == timer);
-    assert(timer != null);
     assert(timer.isActive);
     _writeToStdOut(_backspaceChar * _lastAnimationFrameLength);
     ticks += 1;
@@ -1147,7 +1145,7 @@
   int? indent,
 }) {
   assert(columnWidth >= 0);
-  if (text == null || text.isEmpty) {
+  if (text.isEmpty) {
     return '';
   }
   indent ??= 0;
@@ -1231,7 +1229,7 @@
   required int columnWidth,
   required bool shouldWrap,
 }) {
-  if (text == null || text.isEmpty) {
+  if (text.isEmpty) {
     return <String>[''];
   }
   assert(start >= 0);
diff --git a/packages/flutter_migrate/lib/src/base/project.dart b/packages/flutter_migrate/lib/src/base/project.dart
index b8158d6..9aa2cc6 100644
--- a/packages/flutter_migrate/lib/src/base/project.dart
+++ b/packages/flutter_migrate/lib/src/base/project.dart
@@ -27,7 +27,6 @@
   /// Returns a [FlutterProject] view of the given directory or a ToolExit error,
   /// if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
   FlutterProject fromDirectory(Directory directory) {
-    assert(directory != null);
     return projects.putIfAbsent(directory.path, () {
       return FlutterProject(directory);
     });
@@ -36,7 +35,7 @@
 
 /// Represents the contents of a Flutter project at the specified [directory].
 class FlutterProject {
-  FlutterProject(this.directory) : assert(directory != null);
+  FlutterProject(this.directory);
 
   /// Returns a [FlutterProject] view of the current directory or a ToolExit error,
   /// if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
diff --git a/packages/flutter_migrate/lib/src/base/terminal.dart b/packages/flutter_migrate/lib/src/base/terminal.dart
index aeb8f28..8bb5480 100644
--- a/packages/flutter_migrate/lib/src/base/terminal.dart
+++ b/packages/flutter_migrate/lib/src/base/terminal.dart
@@ -235,7 +235,6 @@
 
   @override
   String bolden(String message) {
-    assert(message != null);
     if (!supportsColor || message.isEmpty) {
       return message;
     }
@@ -256,8 +255,7 @@
 
   @override
   String color(String message, TerminalColor color) {
-    assert(message != null);
-    if (!supportsColor || color == null || message.isEmpty) {
+    if (!supportsColor || message.isEmpty) {
       return message;
     }
     final StringBuffer buffer = StringBuffer();
diff --git a/packages/flutter_migrate/lib/src/flutter_project_metadata.dart b/packages/flutter_migrate/lib/src/flutter_project_metadata.dart
index 281ec8e..d8f4026 100644
--- a/packages/flutter_migrate/lib/src/flutter_project_metadata.dart
+++ b/packages/flutter_migrate/lib/src/flutter_project_metadata.dart
@@ -195,12 +195,6 @@
   /// needs to be able to write the .migrate_config file into legacy apps.
   void writeFile({File? outputFile}) {
     outputFile = outputFile ?? file;
-    if (outputFile == null) {
-      // In-memory FlutterProjectMetadata instances requires an output file to
-      // be passed or specified in the constructor.
-      throw const FileSystemException(
-          'No outputFile specified to write .metadata to. Initialize with a file or provide one when writing.');
-    }
     outputFile
       ..createSync(recursive: true)
       ..writeAsStringSync(toString(), flush: true);
diff --git a/packages/flutter_migrate/pubspec.yaml b/packages/flutter_migrate/pubspec.yaml
index 6b7ea83..8d5ee02 100644
--- a/packages/flutter_migrate/pubspec.yaml
+++ b/packages/flutter_migrate/pubspec.yaml
@@ -1,6 +1,6 @@
 name: flutter_migrate
 description: A tool to migrate legacy flutter projects to modern versions.
-version: 0.0.1+2
+version: 0.0.1+3
 repository: https://github.com/flutter/packages/tree/main/packages/flutter_migrate
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3Ap%3A%20flutter_migrate
 publish_to: none
diff --git a/packages/flutter_migrate/test/src/fakes.dart b/packages/flutter_migrate/test/src/fakes.dart
index b78ed64..498213a 100644
--- a/packages/flutter_migrate/test/src/fakes.dart
+++ b/packages/flutter_migrate/test/src/fakes.dart
@@ -127,7 +127,6 @@
   @override
   bool get hasTerminal => _hasTerminal;
   set hasTerminal(bool value) {
-    assert(value != null);
     _hasTerminal = value;
   }
 
@@ -139,7 +138,6 @@
   @override
   bool get supportsAnsiEscapes => _supportsAnsiEscapes;
   set supportsAnsiEscapes(bool value) {
-    assert(value != null);
     _supportsAnsiEscapes = value;
   }
 
diff --git a/packages/flutter_migrate/test/test_data/migrate_project.dart b/packages/flutter_migrate/test/test_data/migrate_project.dart
index 90d6889..e62afdf 100644
--- a/packages/flutter_migrate/test/test_data/migrate_project.dart
+++ b/packages/flutter_migrate/test/test_data/migrate_project.dart
@@ -67,10 +67,8 @@
   }) async {
     this.dir = dir;
     _appPath = dir.path;
-    if (androidLocalProperties != null) {
-      writeFile(fileSystem.path.join(dir.path, 'android', 'local.properties'),
-          androidLocalProperties);
-    }
+    writeFile(fileSystem.path.join(dir.path, 'android', 'local.properties'),
+        androidLocalProperties);
     final Directory tempDir = createResolvedTempDirectorySync('cipd_dest.');
     final Directory depotToolsDir =
         createResolvedTempDirectorySync('depot_tools.');
diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md
index dc2b5c0..4a0d29b 100644
--- a/packages/go_router/CHANGELOG.md
+++ b/packages/go_router/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 7.1.1
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 7.1.0
 
 - Introduces `StatefulShellRoute` to support using separate navigators for child routes as well as preserving state in each navigation tree (flutter/flutter#99124).
@@ -39,7 +43,7 @@
 
 ## 6.5.7
 
-- Fixes a bug that go_router would crash if `GoRoute.pageBuilder` depends on `InheritedWidget`s. 
+- Fixes a bug that go_router would crash if `GoRoute.pageBuilder` depends on `InheritedWidget`s.
 
 ## 6.5.6
 
diff --git a/packages/go_router/lib/src/route.dart b/packages/go_router/lib/src/route.dart
index 69b27e3..80a885e 100644
--- a/packages/go_router/lib/src/route.dart
+++ b/packages/go_router/lib/src/route.dart
@@ -1198,7 +1198,7 @@
 
   @override
   Object? toPrimitives() {
-    if (value != null && value.isNotEmpty) {
+    if (value.isNotEmpty) {
       return _matchListCodec.encodeMatchList(value);
     }
     return null;
diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml
index 00f849d..7aae5cb 100644
--- a/packages/go_router/pubspec.yaml
+++ b/packages/go_router/pubspec.yaml
@@ -1,7 +1,7 @@
 name: go_router
 description: A declarative router for Flutter based on Navigation 2 supporting
   deep linking, data-driven routes and more
-version: 7.1.0
+version: 7.1.1
 repository: https://github.com/flutter/packages/tree/main/packages/go_router
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router%22
 
diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
index dce753c..b3ccb37 100644
--- a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.2.7
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 2.2.6
diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
index cd3d078..dedb840 100644
--- a/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
@@ -27,7 +27,6 @@
     CameraPosition initialCameraPosition,
     _GoogleMapState googleMapState,
   ) async {
-    assert(id != null);
     await GoogleMapsFlutterPlatform.instance.init(id);
     return GoogleMapController._(
       googleMapState,
@@ -100,7 +99,6 @@
   ///
   /// The returned [Future] completes after listeners have been notified.
   Future<void> _updateMarkers(MarkerUpdates markerUpdates) {
-    assert(markerUpdates != null);
     return GoogleMapsFlutterPlatform.instance
         .updateMarkers(markerUpdates, mapId: mapId);
   }
@@ -112,7 +110,6 @@
   ///
   /// The returned [Future] completes after listeners have been notified.
   Future<void> _updatePolygons(PolygonUpdates polygonUpdates) {
-    assert(polygonUpdates != null);
     return GoogleMapsFlutterPlatform.instance
         .updatePolygons(polygonUpdates, mapId: mapId);
   }
@@ -124,7 +121,6 @@
   ///
   /// The returned [Future] completes after listeners have been notified.
   Future<void> _updatePolylines(PolylineUpdates polylineUpdates) {
-    assert(polylineUpdates != null);
     return GoogleMapsFlutterPlatform.instance
         .updatePolylines(polylineUpdates, mapId: mapId);
   }
@@ -136,7 +132,6 @@
   ///
   /// The returned [Future] completes after listeners have been notified.
   Future<void> _updateCircles(CircleUpdates circleUpdates) {
-    assert(circleUpdates != null);
     return GoogleMapsFlutterPlatform.instance
         .updateCircles(circleUpdates, mapId: mapId);
   }
@@ -160,7 +155,6 @@
   /// in-memory cache of tiles. If you want to cache tiles for longer, you
   /// should implement an on-disk cache.
   Future<void> clearTileCache(TileOverlayId tileOverlayId) async {
-    assert(tileOverlayId != null);
     return GoogleMapsFlutterPlatform.instance
         .clearTileCache(tileOverlayId, mapId: mapId);
   }
@@ -234,7 +228,6 @@
   ///   * [hideMarkerInfoWindow] to hide the Info Window.
   ///   * [isMarkerInfoWindowShown] to check if the Info Window is showing.
   Future<void> showMarkerInfoWindow(MarkerId markerId) {
-    assert(markerId != null);
     return GoogleMapsFlutterPlatform.instance
         .showMarkerInfoWindow(markerId, mapId: mapId);
   }
@@ -248,7 +241,6 @@
   ///   * [showMarkerInfoWindow] to show the Info Window.
   ///   * [isMarkerInfoWindowShown] to check if the Info Window is showing.
   Future<void> hideMarkerInfoWindow(MarkerId markerId) {
-    assert(markerId != null);
     return GoogleMapsFlutterPlatform.instance
         .hideMarkerInfoWindow(markerId, mapId: mapId);
   }
@@ -262,7 +254,6 @@
   ///   * [showMarkerInfoWindow] to show the Info Window.
   ///   * [hideMarkerInfoWindow] to hide the Info Window.
   Future<bool> isMarkerInfoWindowShown(MarkerId markerId) {
-    assert(markerId != null);
     return GoogleMapsFlutterPlatform.instance
         .isMarkerInfoWindowShown(markerId, mapId: mapId);
   }
diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
index 15ea618..a081eab 100644
--- a/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
@@ -123,7 +123,7 @@
     this.onCameraIdle,
     this.onTap,
     this.onLongPress,
-  }) : assert(initialCameraPosition != null);
+  });
 
   /// Callback method for when the map is ready to be used.
   ///
@@ -418,7 +418,6 @@
   }
 
   void onMarkerTap(MarkerId markerId) {
-    assert(markerId != null);
     final Marker? marker = _markers[markerId];
     if (marker == null) {
       throw UnknownMapObjectIdError('marker', markerId, 'onTap');
@@ -430,7 +429,6 @@
   }
 
   void onMarkerDragStart(MarkerId markerId, LatLng position) {
-    assert(markerId != null);
     final Marker? marker = _markers[markerId];
     if (marker == null) {
       throw UnknownMapObjectIdError('marker', markerId, 'onDragStart');
@@ -442,7 +440,6 @@
   }
 
   void onMarkerDrag(MarkerId markerId, LatLng position) {
-    assert(markerId != null);
     final Marker? marker = _markers[markerId];
     if (marker == null) {
       throw UnknownMapObjectIdError('marker', markerId, 'onDrag');
@@ -454,7 +451,6 @@
   }
 
   void onMarkerDragEnd(MarkerId markerId, LatLng position) {
-    assert(markerId != null);
     final Marker? marker = _markers[markerId];
     if (marker == null) {
       throw UnknownMapObjectIdError('marker', markerId, 'onDragEnd');
@@ -466,7 +462,6 @@
   }
 
   void onPolygonTap(PolygonId polygonId) {
-    assert(polygonId != null);
     final Polygon? polygon = _polygons[polygonId];
     if (polygon == null) {
       throw UnknownMapObjectIdError('polygon', polygonId, 'onTap');
@@ -478,7 +473,6 @@
   }
 
   void onPolylineTap(PolylineId polylineId) {
-    assert(polylineId != null);
     final Polyline? polyline = _polylines[polylineId];
     if (polyline == null) {
       throw UnknownMapObjectIdError('polyline', polylineId, 'onTap');
@@ -490,7 +484,6 @@
   }
 
   void onCircleTap(CircleId circleId) {
-    assert(circleId != null);
     final Circle? circle = _circles[circleId];
     if (circle == null) {
       throw UnknownMapObjectIdError('marker', circleId, 'onTap');
@@ -502,7 +495,6 @@
   }
 
   void onInfoWindowTap(MarkerId markerId) {
-    assert(markerId != null);
     final Marker? marker = _markers[markerId];
     if (marker == null) {
       throw UnknownMapObjectIdError('marker', markerId, 'InfoWindow onTap');
@@ -514,7 +506,6 @@
   }
 
   void onTap(LatLng position) {
-    assert(position != null);
     final ArgumentCallback<LatLng>? onTap = widget.onTap;
     if (onTap != null) {
       onTap(position);
@@ -522,7 +513,6 @@
   }
 
   void onLongPress(LatLng position) {
-    assert(position != null);
     final ArgumentCallback<LatLng>? onLongPress = widget.onLongPress;
     if (onLongPress != null) {
       onLongPress(position);
diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
index 46911bc..48b1562 100644
--- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin for integrating Google Maps in iOS and Android applications.
 repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
-version: 2.2.6
+version: 2.2.7
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/google_maps_flutter/google_maps_flutter/test/fake_maps_controllers.dart b/packages/google_maps_flutter/google_maps_flutter/test/fake_maps_controllers.dart
index 2c6aba1..c28ff1f 100644
--- a/packages/google_maps_flutter/google_maps_flutter/test/fake_maps_controllers.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/test/fake_maps_controllers.dart
@@ -293,9 +293,6 @@
   }
 
   void updateTileOverlays(Map<String, dynamic> updateTileOverlayUpdates) {
-    if (updateTileOverlayUpdates == null) {
-      return;
-    }
     final List<Map<dynamic, dynamic>>? tileOverlaysToAddList =
         updateTileOverlayUpdates['tileOverlaysToAdd'] != null
             ? List.castFrom<dynamic, Map<dynamic, dynamic>>(
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md
index 4f93399..7b054ce 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.4.15
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 2.4.14
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart
index e072952..132cd49 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_android/lib/src/google_maps_flutter_android.dart
@@ -307,7 +307,6 @@
     Map<String, dynamic> optionsUpdate, {
     required int mapId,
   }) {
-    assert(optionsUpdate != null);
     return _channel(mapId).invokeMethod<void>(
       'map#update',
       <String, dynamic>{
@@ -321,7 +320,6 @@
     MarkerUpdates markerUpdates, {
     required int mapId,
   }) {
-    assert(markerUpdates != null);
     return _channel(mapId).invokeMethod<void>(
       'markers#update',
       markerUpdates.toJson(),
@@ -333,7 +331,6 @@
     PolygonUpdates polygonUpdates, {
     required int mapId,
   }) {
-    assert(polygonUpdates != null);
     return _channel(mapId).invokeMethod<void>(
       'polygons#update',
       polygonUpdates.toJson(),
@@ -345,7 +342,6 @@
     PolylineUpdates polylineUpdates, {
     required int mapId,
   }) {
-    assert(polylineUpdates != null);
     return _channel(mapId).invokeMethod<void>(
       'polylines#update',
       polylineUpdates.toJson(),
@@ -357,7 +353,6 @@
     CircleUpdates circleUpdates, {
     required int mapId,
   }) {
-    assert(circleUpdates != null);
     return _channel(mapId).invokeMethod<void>(
       'circles#update',
       circleUpdates.toJson(),
@@ -468,7 +463,6 @@
     MarkerId markerId, {
     required int mapId,
   }) {
-    assert(markerId != null);
     return _channel(mapId).invokeMethod<void>(
         'markers#showInfoWindow', <String, String>{'markerId': markerId.value});
   }
@@ -478,7 +472,6 @@
     MarkerId markerId, {
     required int mapId,
   }) {
-    assert(markerId != null);
     return _channel(mapId).invokeMethod<void>(
         'markers#hideInfoWindow', <String, String>{'markerId': markerId.value});
   }
@@ -488,7 +481,6 @@
     MarkerId markerId, {
     required int mapId,
   }) async {
-    assert(markerId != null);
     return (await _channel(mapId).invokeMethod<bool>(
         'markers#isInfoWindowShown',
         <String, String>{'markerId': markerId.value}))!;
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml
index 726ad02..04c9f12 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the google_maps_flutter plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
-version: 2.4.14
+version: 2.4.15
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md
index 5913424..7030102 100644
--- a/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.2.3
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 2.2.2
diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart
index affd706..b1ecca2 100644
--- a/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_ios/lib/src/google_maps_flutter_ios.dart
@@ -289,7 +289,6 @@
     Map<String, dynamic> optionsUpdate, {
     required int mapId,
   }) {
-    assert(optionsUpdate != null);
     return _channel(mapId).invokeMethod<void>(
       'map#update',
       <String, dynamic>{
@@ -303,7 +302,6 @@
     MarkerUpdates markerUpdates, {
     required int mapId,
   }) {
-    assert(markerUpdates != null);
     return _channel(mapId).invokeMethod<void>(
       'markers#update',
       markerUpdates.toJson(),
@@ -315,7 +313,6 @@
     PolygonUpdates polygonUpdates, {
     required int mapId,
   }) {
-    assert(polygonUpdates != null);
     return _channel(mapId).invokeMethod<void>(
       'polygons#update',
       polygonUpdates.toJson(),
@@ -327,7 +324,6 @@
     PolylineUpdates polylineUpdates, {
     required int mapId,
   }) {
-    assert(polylineUpdates != null);
     return _channel(mapId).invokeMethod<void>(
       'polylines#update',
       polylineUpdates.toJson(),
@@ -339,7 +335,6 @@
     CircleUpdates circleUpdates, {
     required int mapId,
   }) {
-    assert(circleUpdates != null);
     return _channel(mapId).invokeMethod<void>(
       'circles#update',
       circleUpdates.toJson(),
@@ -450,7 +445,6 @@
     MarkerId markerId, {
     required int mapId,
   }) {
-    assert(markerId != null);
     return _channel(mapId).invokeMethod<void>(
         'markers#showInfoWindow', <String, String>{'markerId': markerId.value});
   }
@@ -460,7 +454,6 @@
     MarkerId markerId, {
     required int mapId,
   }) {
-    assert(markerId != null);
     return _channel(mapId).invokeMethod<void>(
         'markers#hideInfoWindow', <String, String>{'markerId': markerId.value});
   }
@@ -470,7 +463,6 @@
     MarkerId markerId, {
     required int mapId,
   }) async {
-    assert(markerId != null);
     return (await _channel(mapId).invokeMethod<bool>(
         'markers#isInfoWindowShown',
         <String, String>{'markerId': markerId.value}))!;
diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml
index f24935c..499387f 100644
--- a/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml
@@ -2,7 +2,7 @@
 description: iOS implementation of the google_maps_flutter plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_ios
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
-version: 2.2.2
+version: 2.2.3
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md
index 0fb0375..c93d3e2 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.2.7
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum Flutter version to 3.3.
 * Aligns Dart and Flutter SDK constraints.
 
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart
index 3fd860e..dc55e74 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart
@@ -292,7 +292,6 @@
     Map<String, dynamic> optionsUpdate, {
     required int mapId,
   }) {
-    assert(optionsUpdate != null);
     return channel(mapId).invokeMethod<void>(
       'map#update',
       <String, dynamic>{
@@ -306,7 +305,6 @@
     MarkerUpdates markerUpdates, {
     required int mapId,
   }) {
-    assert(markerUpdates != null);
     return channel(mapId).invokeMethod<void>(
       'markers#update',
       markerUpdates.toJson(),
@@ -318,7 +316,6 @@
     PolygonUpdates polygonUpdates, {
     required int mapId,
   }) {
-    assert(polygonUpdates != null);
     return channel(mapId).invokeMethod<void>(
       'polygons#update',
       polygonUpdates.toJson(),
@@ -330,7 +327,6 @@
     PolylineUpdates polylineUpdates, {
     required int mapId,
   }) {
-    assert(polylineUpdates != null);
     return channel(mapId).invokeMethod<void>(
       'polylines#update',
       polylineUpdates.toJson(),
@@ -342,7 +338,6 @@
     CircleUpdates circleUpdates, {
     required int mapId,
   }) {
-    assert(circleUpdates != null);
     return channel(mapId).invokeMethod<void>(
       'circles#update',
       circleUpdates.toJson(),
@@ -452,7 +447,6 @@
     MarkerId markerId, {
     required int mapId,
   }) {
-    assert(markerId != null);
     return channel(mapId).invokeMethod<void>(
         'markers#showInfoWindow', <String, String>{'markerId': markerId.value});
   }
@@ -462,7 +456,6 @@
     MarkerId markerId, {
     required int mapId,
   }) {
-    assert(markerId != null);
     return channel(mapId).invokeMethod<void>(
         'markers#hideInfoWindow', <String, String>{'markerId': markerId.value});
   }
@@ -472,7 +465,6 @@
     MarkerId markerId, {
     required int mapId,
   }) async {
-    assert(markerId != null);
     return (await channel(mapId).invokeMethod<bool>('markers#isInfoWindowShown',
         <String, String>{'markerId': markerId.value}))!;
   }
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/callbacks.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/callbacks.dart
index 5d6af90..41f0fe2 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/callbacks.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/callbacks.dart
@@ -44,7 +44,6 @@
 
   /// Adds a callback to this collection.
   void add(ArgumentCallback<T> callback) {
-    assert(callback != null);
     _callbacks.add(callback);
   }
 
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/camera.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/camera.dart
index 6d1ce16..01126af 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/camera.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/camera.dart
@@ -23,10 +23,7 @@
     required this.target,
     this.tilt = 0.0,
     this.zoom = 0.0,
-  })  : assert(bearing != null),
-        assert(target != null),
-        assert(tilt != null),
-        assert(zoom != null);
+  });
 
   /// The camera's bearing in degrees, measured clockwise from north.
   ///
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/cap.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/cap.dart
index 5bef7ba..3ca7958 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/cap.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/cap.dart
@@ -43,7 +43,6 @@
     BitmapDescriptor bitmapDescriptor, {
     double refWidth = 10,
   }) {
-    assert(bitmapDescriptor != null);
     assert(refWidth > 0.0);
     return Cap._(<Object>['customCap', bitmapDescriptor.toJson(), refWidth]);
   }
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/location.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/location.dart
index 81fe08b..b00446a 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/location.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/location.dart
@@ -16,9 +16,7 @@
   /// The longitude is normalized to the half-open interval from -180.0
   /// (inclusive) to +180.0 (exclusive).
   const LatLng(double latitude, double longitude)
-      : assert(latitude != null),
-        assert(longitude != null),
-        latitude =
+      : latitude =
             latitude < -90.0 ? -90.0 : (90.0 < latitude ? 90.0 : latitude),
         // Avoids normalization if possible to prevent unnecessary loss of precision
         longitude = longitude >= -180 && longitude < 180
@@ -76,9 +74,7 @@
   /// The latitude of the southwest corner cannot be larger than the
   /// latitude of the northeast corner.
   LatLngBounds({required this.southwest, required this.northeast})
-      : assert(southwest != null),
-        assert(northeast != null),
-        assert(southwest.latitude <= northeast.latitude);
+      : assert(southwest.latitude <= northeast.latitude);
 
   /// The southwest corner of the rectangle.
   final LatLng southwest;
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/maps_object.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/maps_object.dart
index 953746d..2f2216c 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/maps_object.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/maps_object.dart
@@ -13,7 +13,7 @@
   /// Creates an immutable object representing a [T] among [GoogleMap] Ts.
   ///
   /// An [AssertionError] will be thrown if [value] is null.
-  const MapsObjectId(this.value) : assert(value != null);
+  const MapsObjectId(this.value);
 
   /// The value of the id.
   final String value;
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/marker.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/marker.dart
index da3f89d..cd68b53 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/marker.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/marker.dart
@@ -155,7 +155,7 @@
     this.onDrag,
     this.onDragStart,
     this.onDragEnd,
-  }) : assert(alpha == null || (0.0 <= alpha && alpha <= 1.0));
+  }) : assert(0.0 <= alpha && alpha <= 1.0);
 
   /// Uniquely identifies a [Marker].
   final MarkerId markerId;
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/polygon.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/polygon.dart
index ce78d33..8298b90 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/polygon.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/polygon.dart
@@ -148,13 +148,9 @@
     addIfPresent('visible', visible);
     addIfPresent('zIndex', zIndex);
 
-    if (points != null) {
-      json['points'] = _pointsToJson();
-    }
+    json['points'] = _pointsToJson();
 
-    if (holes != null) {
-      json['holes'] = _holesToJson();
-    }
+    json['holes'] = _holesToJson();
 
     return json;
   }
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/polyline.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/polyline.dart
index cd0a64e..b7d50cd 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/polyline.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/polyline.dart
@@ -180,13 +180,9 @@
     addIfPresent('width', width);
     addIfPresent('zIndex', zIndex);
 
-    if (points != null) {
-      json['points'] = _pointsToJson();
-    }
+    json['points'] = _pointsToJson();
 
-    if (patterns != null) {
-      json['pattern'] = _patternToJson();
-    }
+    json['pattern'] = _patternToJson();
 
     return json;
   }
@@ -228,9 +224,7 @@
   Object _patternToJson() {
     final List<Object> result = <Object>[];
     for (final PatternItem patternItem in patterns) {
-      if (patternItem != null) {
-        result.add(patternItem.toJson());
-      }
+      result.add(patternItem.toJson());
     }
     return result;
   }
diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml
index 8796049..20abc39 100644
--- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
 # NOTE: We strongly prefer non-breaking changes, even at the expense of a
 # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 2.2.6
+version: 2.2.7
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
index 077d012..b42ce52 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.4.0+9
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 0.4.0+8
 
 * Updates minimum Flutter version to 3.3.
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/circles.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/circles.dart
index bc6eac1..e307941 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/circles.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/circles.dart
@@ -30,10 +30,6 @@
   }
 
   void _addCircle(Circle circle) {
-    if (circle == null) {
-      return;
-    }
-
     final gmaps.CircleOptions circleOptions = _circleOptionsFromCircle(circle);
     final gmaps.Circle gmCircle = gmaps.Circle(circleOptions)..map = googleMap;
     final CircleController controller = CircleController(
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart
index dcce8d3..3840ef2 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart
@@ -9,23 +9,13 @@
 final gmaps.LatLngBounds _nullGmapsLatLngBounds =
     gmaps.LatLngBounds(_nullGmapsLatLng, _nullGmapsLatLng);
 
-// Defaults taken from the Google Maps Platform SDK documentation.
-const String _defaultCssColor = '#000000';
-const double _defaultCssOpacity = 0.0;
-
 // Converts a [Color] into a valid CSS value #RRGGBB.
 String _getCssColor(Color color) {
-  if (color == null) {
-    return _defaultCssColor;
-  }
   return '#${color.value.toRadixString(16).padLeft(8, '0').substring(2)}';
 }
 
 // Extracts the opacity from a [Color].
 double _getCssOpacity(Color color) {
-  if (color == null) {
-    return _defaultCssOpacity;
-  }
   return color.opacity;
 }
 
@@ -114,11 +104,9 @@
   gmaps.MapOptions options,
 ) {
   // Adjust the initial position, if passed...
-  if (initialPosition != null) {
-    options.zoom = initialPosition.zoom;
-    options.center = gmaps.LatLng(
-        initialPosition.target.latitude, initialPosition.target.longitude);
-  }
+  options.zoom = initialPosition.zoom;
+  options.center = gmaps.LatLng(
+      initialPosition.target.latitude, initialPosition.target.longitude);
   return options;
 }
 
@@ -255,33 +243,31 @@
 
   gmaps.Icon? icon;
 
-  if (iconConfig != null) {
-    if (iconConfig[0] == 'fromAssetImage') {
-      assert(iconConfig.length >= 2);
-      // iconConfig[2] contains the DPIs of the screen, but that information is
-      // already encoded in the iconConfig[1]
-      icon = gmaps.Icon()
-        ..url = ui.webOnlyAssetManager.getAssetUrl(iconConfig[1]! as String);
+  if (iconConfig[0] == 'fromAssetImage') {
+    assert(iconConfig.length >= 2);
+    // iconConfig[2] contains the DPIs of the screen, but that information is
+    // already encoded in the iconConfig[1]
+    icon = gmaps.Icon()
+      ..url = ui.webOnlyAssetManager.getAssetUrl(iconConfig[1]! as String);
 
-      final gmaps.Size? size = _gmSizeFromIconConfig(iconConfig, 3);
-      if (size != null) {
-        icon
-          ..size = size
-          ..scaledSize = size;
-      }
-    } else if (iconConfig[0] == 'fromBytes') {
-      // Grab the bytes, and put them into a blob
-      final List<int> bytes = iconConfig[1]! as List<int>;
-      // Create a Blob from bytes, but let the browser figure out the encoding
-      final Blob blob = Blob(<dynamic>[bytes]);
-      icon = gmaps.Icon()..url = Url.createObjectUrlFromBlob(blob);
+    final gmaps.Size? size = _gmSizeFromIconConfig(iconConfig, 3);
+    if (size != null) {
+      icon
+        ..size = size
+        ..scaledSize = size;
+    }
+  } else if (iconConfig[0] == 'fromBytes') {
+    // Grab the bytes, and put them into a blob
+    final List<int> bytes = iconConfig[1]! as List<int>;
+    // Create a Blob from bytes, but let the browser figure out the encoding
+    final Blob blob = Blob(<dynamic>[bytes]);
+    icon = gmaps.Icon()..url = Url.createObjectUrlFromBlob(blob);
 
-      final gmaps.Size? size = _gmSizeFromIconConfig(iconConfig, 2);
-      if (size != null) {
-        icon
-          ..size = size
-          ..scaledSize = size;
-      }
+    final gmaps.Size? size = _gmSizeFromIconConfig(iconConfig, 2);
+    if (size != null) {
+      icon
+        ..size = size
+        ..scaledSize = size;
     }
   }
 
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart
index c2085a2..b64f995 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart
@@ -39,7 +39,7 @@
     // The internal instance of our controller is initialized eagerly in `buildView`,
     // so we don't have to do anything in this method, which is left intentionally
     // blank.
-    assert(_map(mapId) != null, 'Must call buildWidget before init!');
+    assert(_mapById[mapId] != null, 'Must call buildWidget before init!');
   }
 
   /// Updates the options of a given `mapId`.
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/marker.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/marker.dart
index 9d607e9..50b4bd3 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/marker.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/marker.dart
@@ -25,25 +25,19 @@
     }
     if (onDragStart != null) {
       marker.onDragstart.listen((gmaps.MapMouseEvent event) {
-        if (marker != null) {
-          marker.position = event.latLng;
-        }
+        marker.position = event.latLng;
         onDragStart.call(event.latLng ?? _nullGmapsLatLng);
       });
     }
     if (onDrag != null) {
       marker.onDrag.listen((gmaps.MapMouseEvent event) {
-        if (marker != null) {
-          marker.position = event.latLng;
-        }
+        marker.position = event.latLng;
         onDrag.call(event.latLng ?? _nullGmapsLatLng);
       });
     }
     if (onDragEnd != null) {
       marker.onDragend.listen((gmaps.MapMouseEvent event) {
-        if (marker != null) {
-          marker.position = event.latLng;
-        }
+        marker.position = event.latLng;
         onDragEnd.call(event.latLng ?? _nullGmapsLatLng);
       });
     }
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart
index 1a712b1..0c378f9 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart
@@ -30,10 +30,6 @@
   }
 
   void _addMarker(Marker marker) {
-    if (marker == null) {
-      return;
-    }
-
     final gmaps.InfoWindowOptions? infoWindowOptions =
         _infoWindowOptionsFromMarker(marker);
     gmaps.InfoWindow? gmInfoWindow;
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/polygons.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/polygons.dart
index 12e378c..412fd15 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/polygons.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/polygons.dart
@@ -26,16 +26,10 @@
   ///
   /// Wraps each Polygon into its corresponding [PolygonController].
   void addPolygons(Set<Polygon> polygonsToAdd) {
-    if (polygonsToAdd != null) {
-      polygonsToAdd.forEach(_addPolygon);
-    }
+    polygonsToAdd.forEach(_addPolygon);
   }
 
   void _addPolygon(Polygon polygon) {
-    if (polygon == null) {
-      return;
-    }
-
     final gmaps.PolygonOptions polygonOptions =
         _polygonOptionsFromPolygon(googleMap, polygon);
     final gmaps.Polygon gmPolygon = gmaps.Polygon(polygonOptions)
@@ -51,9 +45,7 @@
 
   /// Updates a set of [Polygon] objects with new options.
   void changePolygons(Set<Polygon> polygonsToChange) {
-    if (polygonsToChange != null) {
-      polygonsToChange.forEach(_changePolygon);
-    }
+    polygonsToChange.forEach(_changePolygon);
   }
 
   void _changePolygon(Polygon polygon) {
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/polylines.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/polylines.dart
index 2d3f161..0384ea1 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/polylines.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/polylines.dart
@@ -30,10 +30,6 @@
   }
 
   void _addPolyline(Polyline polyline) {
-    if (polyline == null) {
-      return;
-    }
-
     final gmaps.PolylineOptions polylineOptions =
         _polylineOptionsFromPolyline(googleMap, polyline);
     final gmaps.Polyline gmPolyline = gmaps.Polyline(polylineOptions)
diff --git a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
index 67df16f..c88b2ae 100644
--- a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Web platform implementation of google_maps_flutter
 repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_web
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
-version: 0.4.0+8
+version: 0.4.0+9
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/google_sign_in/google_sign_in/CHANGELOG.md b/packages/google_sign_in/google_sign_in/CHANGELOG.md
index 2b728ba..1751c5c 100644
--- a/packages/google_sign_in/google_sign_in/CHANGELOG.md
+++ b/packages/google_sign_in/google_sign_in/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.1.1
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 6.1.0
 
 * Exposes the new method `canAccessScopes`.
diff --git a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart
index f3afb11..4af1229 100644
--- a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart
+++ b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart
@@ -48,9 +48,7 @@
         id = data.id,
         photoUrl = data.photoUrl,
         serverAuthCode = data.serverAuthCode,
-        _idToken = data.idToken {
-    assert(id != null);
-  }
+        _idToken = data.idToken;
 
   // These error codes must match with ones declared on Android and iOS sides.
 
diff --git a/packages/google_sign_in/google_sign_in/lib/widgets.dart b/packages/google_sign_in/google_sign_in/lib/widgets.dart
index 8d67e60..ab04de4 100644
--- a/packages/google_sign_in/google_sign_in/lib/widgets.dart
+++ b/packages/google_sign_in/google_sign_in/lib/widgets.dart
@@ -27,7 +27,7 @@
     this.placeholderPhotoUrl,
     this.foregroundColor,
     this.backgroundColor,
-  }) : assert(identity != null);
+  });
 
   /// A regular expression that matches against the "size directive" path
   /// segment of Google profile image URLs.
diff --git a/packages/google_sign_in/google_sign_in/pubspec.yaml b/packages/google_sign_in/google_sign_in/pubspec.yaml
index f2b7bdd..3ac3bf5 100644
--- a/packages/google_sign_in/google_sign_in/pubspec.yaml
+++ b/packages/google_sign_in/google_sign_in/pubspec.yaml
@@ -3,7 +3,7 @@
   for signing in with a Google account on Android and iOS.
 repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
-version: 6.1.0
+version: 6.1.1
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
index 053daa4..cf62ad3 100644
--- a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.0+2
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 0.3.0+1
 
 * Fixes misaligned method signature strings.
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.dart
index 564b7b4..8132c5b 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/billing_client_wrappers/billing_client_wrapper.dart
@@ -205,7 +205,6 @@
       String? oldProduct,
       String? purchaseToken,
       ProrationMode? prorationMode}) async {
-    assert(product != null);
     assert((oldProduct == null) == (purchaseToken == null),
         'oldProduct and purchaseToken must both be set, or both be null.');
     final Map<String, dynamic> arguments = <String, dynamic>{
@@ -237,7 +236,6 @@
   /// This wraps
   /// [`BillingClient#queryPurchasesAsync(QueryPurchaseParams, PurchaseResponseListener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,%20com.android.billingclient.api.PurchasesResponseListener)).
   Future<PurchasesResultWrapper> queryPurchases(ProductType productType) async {
-    assert(productType != null);
     return PurchasesResultWrapper.fromJson(
         (await channel.invokeMapMethod<String, dynamic>(
               'BillingClient#queryPurchasesAsync(QueryPurchaseParams, PurchaseResponseListener)',
@@ -262,7 +260,6 @@
   /// [`BillingClient#queryPurchaseHistoryAsync(QueryPurchaseHistoryParams, PurchaseHistoryResponseListener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchaseHistoryAsync(com.android.billingclient.api.QueryPurchaseHistoryParams,%20com.android.billingclient.api.PurchaseHistoryResponseListener)).
   Future<PurchasesHistoryResult> queryPurchaseHistory(
       ProductType productType) async {
-    assert(productType != null);
     return PurchasesHistoryResult.fromJson((await channel.invokeMapMethod<
                 String, dynamic>(
             'BillingClient#queryPurchaseHistoryAsync(QueryPurchaseHistoryParams, PurchaseHistoryResponseListener)',
@@ -280,7 +277,6 @@
   /// This wraps
   /// [`BillingClient#consumeAsync(ConsumeParams, ConsumeResponseListener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#consumeAsync(java.lang.String,%20com.android.billingclient.api.ConsumeResponseListener))
   Future<BillingResultWrapper> consumeAsync(String purchaseToken) async {
-    assert(purchaseToken != null);
     return BillingResultWrapper.fromJson((await channel.invokeMapMethod<String,
                 dynamic>(
             'BillingClient#consumeAsync(ConsumeParams, ConsumeResponseListener)',
@@ -309,7 +305,6 @@
   /// This wraps
   /// [`BillingClient#acknowledgePurchase(AcknowledgePurchaseParams, AcknowledgePurchaseResponseListener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#acknowledgePurchase(com.android.billingclient.api.AcknowledgePurchaseParams,%20com.android.billingclient.api.AcknowledgePurchaseResponseListener))
   Future<BillingResultWrapper> acknowledgePurchase(String purchaseToken) async {
-    assert(purchaseToken != null);
     return BillingResultWrapper.fromJson((await channel.invokeMapMethod<String,
                 dynamic>(
             'BillingClient#acknowledgePurchase(AcknowledgePurchaseParams, AcknowledgePurchaseResponseListener)',
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform.dart
index ead8620..2e4ed5b 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform.dart
@@ -184,11 +184,6 @@
       return const BillingResultWrapper(responseCode: BillingResponse.ok);
     }
 
-    if (googlePurchase.verificationData == null) {
-      throw ArgumentError(
-          'completePurchase unsuccessful. The `purchase.verificationData` is not valid');
-    }
-
     return billingClientManager.runWithClient(
       (BillingClient client) => client.acknowledgePurchase(
           purchase.verificationData.serverVerificationData),
diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform_addition.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform_addition.dart
index 3917ac6..eb58d15 100644
--- a/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform_addition.dart
+++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform_addition.dart
@@ -50,10 +50,6 @@
   /// delivered. The user won't be able to buy the same product again until the
   /// purchase of the product is consumed.
   Future<BillingResultWrapper> consumePurchase(PurchaseDetails purchase) {
-    if (purchase.verificationData == null) {
-      throw ArgumentError(
-          'consumePurchase unsuccessful. The `purchase.verificationData` is not valid');
-    }
     return _billingClientManager.runWithClient(
       (BillingClient client) =>
           client.consumeAsync(purchase.verificationData.serverVerificationData),
diff --git a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
index 3bf2e84..a29be3d 100644
--- a/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the Android platform of the Flutter `in_app_purchase` plugin. This uses the Android BillingClient APIs.
 repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 0.3.0+1
+version: 0.3.0+2
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/in_app_purchase/in_app_purchase_platform_interface/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_platform_interface/CHANGELOG.md
index c639d58..25fed8d 100644
--- a/packages/in_app_purchase/in_app_purchase_platform_interface/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_platform_interface/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 1.3.4
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum Flutter version to 3.3.
 * Aligns Dart and Flutter SDK constraints.
 
diff --git a/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/errors/in_app_purchase_exception.dart b/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/errors/in_app_purchase_exception.dart
index 0a89a6e..8bac26f 100644
--- a/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/errors/in_app_purchase_exception.dart
+++ b/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/errors/in_app_purchase_exception.dart
@@ -11,7 +11,7 @@
     required this.source,
     required this.code,
     this.message,
-  }) : assert(code != null);
+  });
 
   /// An error code.
   final String code;
diff --git a/packages/in_app_purchase/in_app_purchase_platform_interface/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_platform_interface/pubspec.yaml
index 868f758..ae851c7 100644
--- a/packages/in_app_purchase/in_app_purchase_platform_interface/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
 # NOTE: We strongly prefer non-breaking changes, even at the expense of a
 # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 1.3.3
+version: 1.3.4
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md
index 7f05c0f..4c13eab 100644
--- a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.3.6+4
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 0.3.6+3
diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart
index 0e5e420..36d706c 100644
--- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart
+++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart
@@ -131,12 +131,10 @@
           invalidProductIdentifiers: identifiers.toList());
     }
     List<AppStoreProductDetails> productDetails = <AppStoreProductDetails>[];
-    if (response.products != null) {
-      productDetails = response.products
-          .map((SKProductWrapper productWrapper) =>
-              AppStoreProductDetails.fromSKProduct(productWrapper))
-          .toList();
-    }
+    productDetails = response.products
+        .map((SKProductWrapper productWrapper) =>
+            AppStoreProductDetails.fromSKProduct(productWrapper))
+        .toList();
     List<String> invalidIdentifiers = response.invalidProductIdentifiers;
     if (productDetails.isEmpty) {
       invalidIdentifiers = identifiers.toList();
diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
index 859946b..361cb3a 100644
--- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
+++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart
@@ -398,7 +398,6 @@
   /// types of all of the members on this class. The `map` parameter must not be
   /// null.
   factory SKPaymentWrapper.fromJson(Map<String, dynamic> map) {
-    assert(map != null);
     return _$SKPaymentWrapperFromJson(map);
   }
 
@@ -515,7 +514,6 @@
   /// The map needs to have named string keys with values matching the names and
   /// types of all of the members on this class.
   factory SKPaymentDiscountWrapper.fromJson(Map<String, dynamic> map) {
-    assert(map != null);
     return _$SKPaymentDiscountWrapperFromJson(map);
   }
 
diff --git a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml
index 79a41cb..48a6e34 100644
--- a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the iOS and macOS platforms of the Flutter `in_app_purchase` plugin. This uses the StoreKit Framework.
 repository: https://github.com/flutter/packages/tree/main/packages/in_app_purchase/in_app_purchase_storekit
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 0.3.6+3
+version: 0.3.6+4
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/ios_platform_images/example/test/widget_test.dart b/packages/ios_platform_images/example/test/widget_test.dart
index f3cd4c6..5b50a0f 100644
--- a/packages/ios_platform_images/example/test/widget_test.dart
+++ b/packages/ios_platform_images/example/test/widget_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'dart:io';
-
 import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 
@@ -16,8 +14,7 @@
 
     expect(
       find.byWidgetPredicate(
-        (Widget widget) =>
-            widget is Image && (!Platform.isIOS || widget.image != null),
+        (Widget widget) => widget is Image,
       ),
       findsOneWidget,
     );
diff --git a/packages/metrics_center/CHANGELOG.md b/packages/metrics_center/CHANGELOG.md
index ca21682..ba74ca1 100644
--- a/packages/metrics_center/CHANGELOG.md
+++ b/packages/metrics_center/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 1.0.8
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum Flutter version to 3.3.
 
 ## 1.0.7
diff --git a/packages/metrics_center/lib/src/gcs_lock.dart b/packages/metrics_center/lib/src/gcs_lock.dart
index 5e6b2df..6f89fc8 100644
--- a/packages/metrics_center/lib/src/gcs_lock.dart
+++ b/packages/metrics_center/lib/src/gcs_lock.dart
@@ -12,9 +12,7 @@
   /// Create a lock with an authenticated client and a GCS bucket name.
   ///
   /// The client is used to communicate with Google Cloud Storage APIs.
-  GcsLock(this._client, this._bucketName)
-      : assert(_client != null),
-        assert(_bucketName != null) {
+  GcsLock(this._client, this._bucketName) {
     _api = StorageApi(_client);
   }
 
diff --git a/packages/metrics_center/lib/src/skiaperf.dart b/packages/metrics_center/lib/src/skiaperf.dart
index 1e30e63..45a00f3 100644
--- a/packages/metrics_center/lib/src/skiaperf.dart
+++ b/packages/metrics_center/lib/src/skiaperf.dart
@@ -201,7 +201,7 @@
 class SkiaPerfGcsAdaptor {
   /// Construct the adaptor given the associated GCS bucket where the data is
   /// read from and written to.
-  SkiaPerfGcsAdaptor(this._gcsBucket) : assert(_gcsBucket != null);
+  SkiaPerfGcsAdaptor(this._gcsBucket);
 
   /// Used by Skia to differentiate json file format versions.
   static const int version = 1;
@@ -285,7 +285,6 @@
     final String firstGcsNameComponent = objectName.split('/')[0];
     _populateGcsNameToGithubRepoMapIfNeeded();
     final String githubRepo = _gcsNameToGithubRepo[firstGcsNameComponent]!;
-    assert(githubRepo != null);
 
     final String? gitHash = decodedJson[kSkiaPerfGitHashKey] as String?;
     final Map<String, dynamic> results =
@@ -403,11 +402,9 @@
         <String, Map<String, Map<String, SkiaPerfPoint>>>{};
     for (final SkiaPerfPoint p
         in points.map((MetricPoint x) => SkiaPerfPoint.fromPoint(x))) {
-      if (p != null) {
-        pointMap[p.githubRepo] ??= <String, Map<String, SkiaPerfPoint>>{};
-        pointMap[p.githubRepo]![p.gitHash] ??= <String, SkiaPerfPoint>{};
-        pointMap[p.githubRepo]![p.gitHash]![p.id] = p;
-      }
+      pointMap[p.githubRepo] ??= <String, Map<String, SkiaPerfPoint>>{};
+      pointMap[p.githubRepo]![p.gitHash] ??= <String, SkiaPerfPoint>{};
+      pointMap[p.githubRepo]![p.gitHash]![p.id] = p;
     }
 
     // All created locks must be released before returning
diff --git a/packages/metrics_center/pubspec.yaml b/packages/metrics_center/pubspec.yaml
index 2898107..488efd4 100644
--- a/packages/metrics_center/pubspec.yaml
+++ b/packages/metrics_center/pubspec.yaml
@@ -1,5 +1,5 @@
 name: metrics_center
-version: 1.0.7
+version: 1.0.8
 description:
   Support multiple performance metrics sources/formats and destinations.
 repository: https://github.com/flutter/packages/tree/main/packages/metrics_center
diff --git a/packages/path_provider/path_provider_linux/CHANGELOG.md b/packages/path_provider/path_provider_linux/CHANGELOG.md
index 248150a..7b4f83d 100644
--- a/packages/path_provider/path_provider_linux/CHANGELOG.md
+++ b/packages/path_provider/path_provider_linux/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.1.11
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 2.1.10
diff --git a/packages/path_provider/path_provider_linux/lib/src/get_application_id_real.dart b/packages/path_provider/path_provider_linux/lib/src/get_application_id_real.dart
index f01c3e4..5e16df0 100644
--- a/packages/path_provider/path_provider_linux/lib/src/get_application_id_real.dart
+++ b/packages/path_provider/path_provider_linux/lib/src/get_application_id_real.dart
@@ -71,7 +71,7 @@
     return null;
   }
   final Pointer<Utf8> appId = gio.gApplicationGetApplicationId(app);
-  if (appId == null || appId == nullptr) {
+  if (appId == nullptr) {
     return null;
   }
   return appId.toDartString();
diff --git a/packages/path_provider/path_provider_linux/pubspec.yaml b/packages/path_provider/path_provider_linux/pubspec.yaml
index e5b1f8a..a72228f 100644
--- a/packages/path_provider/path_provider_linux/pubspec.yaml
+++ b/packages/path_provider/path_provider_linux/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Linux implementation of the path_provider plugin
 repository: https://github.com/flutter/packages/tree/main/packages/path_provider/path_provider_linux
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+path_provider%22
-version: 2.1.10
+version: 2.1.11
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/quick_actions/quick_actions/CHANGELOG.md b/packages/quick_actions/quick_actions/CHANGELOG.md
index 47e1dcc..4c5a3ce 100644
--- a/packages/quick_actions/quick_actions/CHANGELOG.md
+++ b/packages/quick_actions/quick_actions/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.4
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 1.0.3
 
 * Updates iOS minimum version in README.
diff --git a/packages/quick_actions/quick_actions/example/lib/main.dart b/packages/quick_actions/quick_actions/example/lib/main.dart
index 759f7f1..1442928 100644
--- a/packages/quick_actions/quick_actions/example/lib/main.dart
+++ b/packages/quick_actions/quick_actions/example/lib/main.dart
@@ -43,9 +43,7 @@
     const QuickActions quickActions = QuickActions();
     quickActions.initialize((String shortcutType) {
       setState(() {
-        if (shortcutType != null) {
-          shortcut = shortcutType;
-        }
+        shortcut = shortcutType;
       });
     });
 
diff --git a/packages/quick_actions/quick_actions/pubspec.yaml b/packages/quick_actions/quick_actions/pubspec.yaml
index 6c3c4ff..5fea6a0 100644
--- a/packages/quick_actions/quick_actions/pubspec.yaml
+++ b/packages/quick_actions/quick_actions/pubspec.yaml
@@ -3,7 +3,7 @@
   Quick Actions on iOS and App Shortcuts on Android.
 repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+quick_actions%22
-version: 1.0.3
+version: 1.0.4
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/quick_actions/quick_actions_android/CHANGELOG.md b/packages/quick_actions/quick_actions_android/CHANGELOG.md
index 7b64d19..c1a07dc 100644
--- a/packages/quick_actions/quick_actions_android/CHANGELOG.md
+++ b/packages/quick_actions/quick_actions_android/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 1.0.6
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 1.0.5
diff --git a/packages/quick_actions/quick_actions_android/example/lib/main.dart b/packages/quick_actions/quick_actions_android/example/lib/main.dart
index e39e6af..a0352c8 100644
--- a/packages/quick_actions/quick_actions_android/example/lib/main.dart
+++ b/packages/quick_actions/quick_actions_android/example/lib/main.dart
@@ -43,9 +43,7 @@
     final QuickActionsAndroid quickActions = QuickActionsAndroid();
     quickActions.initialize((String shortcutType) {
       setState(() {
-        if (shortcutType != null) {
-          shortcut = '$shortcutType has launched';
-        }
+        shortcut = '$shortcutType has launched';
       });
     });
 
diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml
index 2091c28..04884c4 100644
--- a/packages/quick_actions/quick_actions_android/pubspec.yaml
+++ b/packages/quick_actions/quick_actions_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the Android platform of the Flutter `quick_actions` plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 1.0.5
+version: 1.0.6
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md
index 904db78..205e1ce 100644
--- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md
+++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 1.0.6
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 1.0.5
diff --git a/packages/quick_actions/quick_actions_ios/example/lib/main.dart b/packages/quick_actions/quick_actions_ios/example/lib/main.dart
index f2c8d61..f3e9f92 100644
--- a/packages/quick_actions/quick_actions_ios/example/lib/main.dart
+++ b/packages/quick_actions/quick_actions_ios/example/lib/main.dart
@@ -43,9 +43,7 @@
     final QuickActionsIos quickActions = QuickActionsIos();
     quickActions.initialize((String shortcutType) {
       setState(() {
-        if (shortcutType != null) {
-          shortcut = shortcutType;
-        }
+        shortcut = shortcutType;
       });
     });
 
diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml
index aa9cfb0..6800f01 100644
--- a/packages/quick_actions/quick_actions_ios/pubspec.yaml
+++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml
@@ -2,7 +2,7 @@
 description: An implementation for the iOS platform of the Flutter `quick_actions` plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/quick_actions/quick_actions_ios
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 1.0.5
+version: 1.0.6
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md
index 91ef9e4..ad65f30 100644
--- a/packages/url_launcher/url_launcher_web/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.0.17
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum Flutter version to 3.3.
 
 ## 2.0.16
diff --git a/packages/url_launcher/url_launcher_web/lib/src/link.dart b/packages/url_launcher/url_launcher_web/lib/src/link.dart
index df1fd14..ecb595c 100644
--- a/packages/url_launcher/url_launcher_web/lib/src/link.dart
+++ b/packages/url_launcher/url_launcher_web/lib/src/link.dart
@@ -166,8 +166,6 @@
 
   late html.Element _element;
 
-  bool get _isInitialized => _element != null;
-
   Future<void> _initialize() async {
     _element = html.Element.tag('a');
     setProperty(_element, linkViewIdProperty, viewId);
@@ -219,7 +217,6 @@
   ///
   /// When Uri is null, the `href` attribute of the link is removed.
   void setUri(Uri? uri) {
-    assert(_isInitialized);
     _uri = uri;
     if (uri == null) {
       _element.removeAttribute('href');
@@ -236,7 +233,6 @@
 
   /// Set the [LinkTarget] value for this link.
   void setTarget(LinkTarget target) {
-    assert(_isInitialized);
     _element.setAttribute('target', _getHtmlTarget(target));
   }
 
@@ -270,14 +266,12 @@
 
   @override
   Future<void> dispose() async {
-    if (_isInitialized) {
-      assert(_instances[viewId] == this);
-      _instances.remove(viewId);
-      if (_instances.isEmpty) {
-        await _clickSubscription.cancel();
-      }
-      await SystemChannels.platform_views.invokeMethod<void>('dispose', viewId);
+    assert(_instances[viewId] == this);
+    _instances.remove(viewId);
+    if (_instances.isEmpty) {
+      await _clickSubscription.cancel();
     }
+    await SystemChannels.platform_views.invokeMethod<void>('dispose', viewId);
   }
 }
 
diff --git a/packages/url_launcher/url_launcher_web/lib/src/third_party/platform_detect/browser.dart b/packages/url_launcher/url_launcher_web/lib/src/third_party/platform_detect/browser.dart
index 6935cb5..ed24b92 100644
--- a/packages/url_launcher/url_launcher_web/lib/src/third_party/platform_detect/browser.dart
+++ b/packages/url_launcher/url_launcher_web/lib/src/third_party/platform_detect/browser.dart
@@ -28,8 +28,5 @@
   // An web view running in an iOS app does not have a 'Version/X.X.X' string in the appVersion
   final String vendor = navigator.vendor;
   final String appVersion = navigator.appVersion;
-  return vendor != null &&
-      vendor.contains('Apple') &&
-      appVersion != null &&
-      appVersion.contains('Version');
+  return vendor.contains('Apple') && appVersion.contains('Version');
 }
diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart
index 636cd8c..4764d5c 100644
--- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart
+++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart
@@ -83,8 +83,8 @@
     bool universalLinksOnly = false,
     Map<String, String> headers = const <String, String>{},
     String? webOnlyWindowName,
-  }) {
-    return Future<bool>.value(
-        openNewWindow(url, webOnlyWindowName: webOnlyWindowName) != null);
+  }) async {
+    openNewWindow(url, webOnlyWindowName: webOnlyWindowName);
+    return true;
   }
 }
diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml
index 755dcd5..b8b1869 100644
--- a/packages/url_launcher/url_launcher_web/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_web/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Web platform implementation of url_launcher
 repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_web
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 2.0.16
+version: 2.0.17
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/web_benchmarks/CHANGELOG.md b/packages/web_benchmarks/CHANGELOG.md
index 9fba3a5..f01d493 100644
--- a/packages/web_benchmarks/CHANGELOG.md
+++ b/packages/web_benchmarks/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.1.0+4
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 
 ## 0.1.0+3
diff --git a/packages/web_benchmarks/lib/client.dart b/packages/web_benchmarks/lib/client.dart
index 6676dc8..43ef711 100644
--- a/packages/web_benchmarks/lib/client.dart
+++ b/packages/web_benchmarks/lib/client.dart
@@ -30,8 +30,6 @@
 /// When used without a server, prompts the user to select a benchmark to
 /// run next.
 Future<void> runBenchmarks(Map<String, RecorderFactory> benchmarks) async {
-  assert(benchmarks != null);
-
   // Set local benchmarks.
   _benchmarks = benchmarks;
 
diff --git a/packages/web_benchmarks/lib/src/benchmark_result.dart b/packages/web_benchmarks/lib/src/benchmark_result.dart
index f432629..125bc2c 100644
--- a/packages/web_benchmarks/lib/src/benchmark_result.dart
+++ b/packages/web_benchmarks/lib/src/benchmark_result.dart
@@ -10,7 +10,7 @@
   BenchmarkScore({
     required this.metric,
     required this.value,
-  }) : assert(metric != null && value != null);
+  });
 
   /// The name of the metric that this score is categorized under.
   ///
diff --git a/packages/web_benchmarks/lib/src/browser.dart b/packages/web_benchmarks/lib/src/browser.dart
index 40894dd..0918730 100644
--- a/packages/web_benchmarks/lib/src/browser.dart
+++ b/packages/web_benchmarks/lib/src/browser.dart
@@ -345,12 +345,6 @@
         orElse: () => throw noMeasuredFramesFound(),
       );
 
-      if (firstMeasuredFrameEvent == null) {
-        // This happens in benchmarks that do not measure frames, such as some
-        // of the text layout benchmarks.
-        return null;
-      }
-
       final int tabPid = firstMeasuredFrameEvent.pid;
 
       // Filter out data from unrelated processes
diff --git a/packages/web_benchmarks/lib/src/recorder.dart b/packages/web_benchmarks/lib/src/recorder.dart
index 52dc6b8..51fa697 100644
--- a/packages/web_benchmarks/lib/src/recorder.dart
+++ b/packages/web_benchmarks/lib/src/recorder.dart
@@ -827,8 +827,7 @@
   ///
   /// [name] and [useCustomWarmUp] must not be null.
   Profile({required this.name, this.useCustomWarmUp = false})
-      : assert(name != null),
-        _isWarmingUp = useCustomWarmUp;
+      : _isWarmingUp = useCustomWarmUp;
 
   /// The name of the benchmark that produced this profile.
   final String name;
@@ -1213,13 +1212,6 @@
 /// If another listener is already registered, overrides it.
 void registerEngineBenchmarkValueListener(
     String name, EngineBenchmarkValueListener listener) {
-  if (listener == null) {
-    throw ArgumentError(
-      'Listener must not be null. To stop listening to engine benchmark values '
-      'under label "$name", call stopListeningToEngineBenchmarkValues(\'$name\').',
-    );
-  }
-
   if (_engineBenchmarkListeners.containsKey(name)) {
     throw StateError('A listener for "$name" is already registered.\n'
         'Call `stopListeningToEngineBenchmarkValues` to unregister the previous '
diff --git a/packages/web_benchmarks/lib/src/runner.dart b/packages/web_benchmarks/lib/src/runner.dart
index 7c58e62..8ab5d27 100644
--- a/packages/web_benchmarks/lib/src/runner.dart
+++ b/packages/web_benchmarks/lib/src/runner.dart
@@ -278,11 +278,11 @@
 
         final List<String> scoreKeys =
             List<String>.from(profile['scoreKeys'] as Iterable<dynamic>);
-        if (scoreKeys == null || scoreKeys.isEmpty) {
+        if (scoreKeys.isEmpty) {
           throw StateError('No score keys in benchmark "$benchmarkName"');
         }
         for (final String scoreKey in scoreKeys) {
-          if (scoreKey == null || scoreKey.isEmpty) {
+          if (scoreKey.isEmpty) {
             throw StateError(
                 'Score key is empty in benchmark "$benchmarkName". '
                 'Received [${scoreKeys.join(', ')}]');
diff --git a/packages/web_benchmarks/pubspec.yaml b/packages/web_benchmarks/pubspec.yaml
index 3bc8324..18c8337 100644
--- a/packages/web_benchmarks/pubspec.yaml
+++ b/packages/web_benchmarks/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A benchmark harness for performance-testing Flutter apps in Chrome.
 repository: https://github.com/flutter/packages/tree/main/packages/web_benchmarks
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+web_benchmarks%22
-version: 0.1.0+3
+version: 0.1.0+4
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md
index 3b05257..bf535d2 100644
--- a/packages/webview_flutter/webview_flutter/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 4.2.1
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 4.2.0
 
 * Adds support to receive permission requests. See `WebViewController(onPermissionRequest)`.
diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart
index 9cbfc01..c7fbd63 100644
--- a/packages/webview_flutter/webview_flutter/example/lib/main.dart
+++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart
@@ -440,7 +440,7 @@
   }
 
   Widget _getCookieList(String cookies) {
-    if (cookies == null || cookies == '""') {
+    if (cookies == '""') {
       return Container();
     }
     final List<String> cookieList = cookies.split(';');
diff --git a/packages/webview_flutter/webview_flutter/lib/src/legacy/webview.dart b/packages/webview_flutter/webview_flutter/lib/src/legacy/webview.dart
index 06ba026..55826a5 100644
--- a/packages/webview_flutter/webview_flutter/lib/src/legacy/webview.dart
+++ b/packages/webview_flutter/webview_flutter/lib/src/legacy/webview.dart
@@ -98,9 +98,7 @@
         AutoMediaPlaybackPolicy.require_user_action_for_all_media_types,
     this.allowsInlineMediaPlayback = false,
     this.backgroundColor,
-  })  : assert(javascriptMode != null),
-        assert(initialMediaPlaybackPolicy != null),
-        assert(allowsInlineMediaPlayback != null);
+  });
 
   static WebViewPlatform? _platform;
 
@@ -395,11 +393,9 @@
   assert(currentValue.hasNavigationDelegate != null);
   assert(currentValue.hasProgressTracking != null);
   assert(currentValue.debuggingEnabled != null);
-  assert(currentValue.userAgent != null);
   assert(newValue.javascriptMode != null);
   assert(newValue.hasNavigationDelegate != null);
   assert(newValue.debuggingEnabled != null);
-  assert(newValue.userAgent != null);
   assert(newValue.zoomEnabled != null);
 
   JavascriptMode? javascriptMode;
@@ -500,7 +496,7 @@
     this._widget,
     this._webViewPlatformController,
     this._javascriptChannelRegistry,
-  ) : assert(_webViewPlatformController != null) {
+  ) {
     _settings = _webSettingsFromWidget(_widget);
   }
 
@@ -561,7 +557,6 @@
     String url, {
     Map<String, String>? headers,
   }) async {
-    assert(url != null);
     _validateUrlString(url);
     return _webViewPlatformController.loadUrl(url, headers);
   }
diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml
index 05d6cd2..b931c9e 100644
--- a/packages/webview_flutter/webview_flutter/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin that provides a WebView widget on Android and iOS.
 repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 4.2.0
+version: 4.2.1
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index 3f95f7a..3160b85 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.7.1
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 3.7.0
 
 * Adds support to accept third party cookies. See
diff --git a/packages/webview_flutter/webview_flutter_android/example/lib/legacy/web_view.dart b/packages/webview_flutter/webview_flutter_android/example/lib/legacy/web_view.dart
index bd57786..909056f 100644
--- a/packages/webview_flutter/webview_flutter_android/example/lib/legacy/web_view.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/lib/legacy/web_view.dart
@@ -81,9 +81,7 @@
         AutoMediaPlaybackPolicy.require_user_action_for_all_media_types,
     this.allowsInlineMediaPlayback = false,
     this.backgroundColor,
-  })  : assert(javascriptMode != null),
-        assert(initialMediaPlaybackPolicy != null),
-        assert(allowsInlineMediaPlayback != null);
+  });
 
   /// The WebView platform that's used by this WebView.
   ///
@@ -366,7 +364,7 @@
     this._widget,
     this._webViewPlatformController,
     this._javascriptChannelRegistry,
-  ) : assert(_webViewPlatformController != null) {
+  ) {
     _settings = _webSettingsFromWidget(_widget);
   }
 
@@ -420,7 +418,6 @@
     String url, {
     Map<String, String>? headers,
   }) async {
-    assert(url != null);
     _validateUrlString(url);
     return _webViewPlatformController.loadUrl(url, headers);
   }
@@ -607,11 +604,9 @@
     assert(currentValue.hasNavigationDelegate != null);
     assert(currentValue.hasProgressTracking != null);
     assert(currentValue.debuggingEnabled != null);
-    assert(currentValue.userAgent != null);
     assert(newValue.javascriptMode != null);
     assert(newValue.hasNavigationDelegate != null);
     assert(newValue.debuggingEnabled != null);
-    assert(newValue.userAgent != null);
     assert(newValue.zoomEnabled != null);
 
     JavascriptMode? javascriptMode;
diff --git a/packages/webview_flutter/webview_flutter_android/example/lib/main.dart b/packages/webview_flutter/webview_flutter_android/example/lib/main.dart
index a8714d3..b618c8f 100644
--- a/packages/webview_flutter/webview_flutter_android/example/lib/main.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/lib/main.dart
@@ -441,7 +441,7 @@
   }
 
   Widget _getCookieList(String cookies) {
-    if (cookies == null || cookies == '""') {
+    if (cookies == '""') {
       return Container();
     }
     final List<String> cookieList = cookies.split(';');
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index b674a5a..b398dfa 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin that provides a WebView widget on Android.
 repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 3.7.0
+version: 3.7.1
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
index af8135f..a407df5 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.3.1
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 2.3.0
 
 * Adds support to receive permission requests. See
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/creation_params.dart
index 7c3edf3..0c33cde 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/creation_params.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/creation_params.dart
@@ -23,7 +23,7 @@
         AutoMediaPlaybackPolicy.require_user_action_for_all_media_types,
     this.backgroundColor,
     this.cookies = const <WebViewCookie>[],
-  }) : assert(autoMediaPlaybackPolicy != null);
+  });
 
   /// The initialUrl to load in the webview.
   ///
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_channel.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_channel.dart
index 49e505e..e340625 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_channel.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_channel.dart
@@ -17,9 +17,7 @@
   JavascriptChannel({
     required this.name,
     required this.onMessageReceived,
-  })  : assert(name != null),
-        assert(onMessageReceived != null),
-        assert(_validChannelNames.hasMatch(name));
+  }) : assert(_validChannelNames.hasMatch(name));
 
   /// The channel's name.
   ///
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart
index 8d08045..c3aceec 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/javascript_message.dart
@@ -7,7 +7,7 @@
   /// Constructs a JavaScript message object.
   ///
   /// The `message` parameter must not be null.
-  const JavascriptMessage(this.message) : assert(message != null);
+  const JavascriptMessage(this.message);
 
   /// The contents of the message that was sent by the JavaScript code.
   final String message;
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart
index b61671f..fdd8143 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_resource_error.dart
@@ -16,8 +16,7 @@
     this.domain,
     this.errorType,
     this.failingUrl,
-  })  : assert(errorCode != null),
-        assert(description != null);
+  });
 
   /// Raw code of the error from the respective platform.
   ///
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_settings.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_settings.dart
index 102ab10..91f0768 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_settings.dart
+++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/legacy/types/web_settings.dart
@@ -85,7 +85,7 @@
     this.allowsInlineMediaPlayback,
     this.zoomEnabled,
     required this.userAgent,
-  }) : assert(userAgent != null);
+  });
 
   /// The JavaScript execution mode to be used by the webview.
   final JavascriptMode? javascriptMode;
diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
index 12c4050..7e48f6c 100644
--- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22
 # NOTE: We strongly prefer non-breaking changes, even at the expense of a
 # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 2.3.0
+version: 2.3.1
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/webview_flutter/webview_flutter_web/CHANGELOG.md b/packages/webview_flutter/webview_flutter_web/CHANGELOG.md
index 38f28aa..658efbe 100644
--- a/packages/webview_flutter/webview_flutter_web/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_web/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## NEXT
 
+* Removes obsolete null checks on non-nullable values.
 * Updates minimum Flutter version to 3.3.
 * Aligns Dart and Flutter SDK constraints.
 
diff --git a/packages/webview_flutter/webview_flutter_web/example/lib/legacy/web_view.dart b/packages/webview_flutter/webview_flutter_web/example/lib/legacy/web_view.dart
index 7f1eead..8b390c7 100644
--- a/packages/webview_flutter/webview_flutter_web/example/lib/legacy/web_view.dart
+++ b/packages/webview_flutter/webview_flutter_web/example/lib/legacy/web_view.dart
@@ -129,7 +129,7 @@
   WebViewController(
     this._widget,
     this._webViewPlatformController,
-  ) : assert(_webViewPlatformController != null) {
+  ) {
     _settings = _webSettingsFromWidget(_widget);
   }
 
@@ -151,7 +151,6 @@
     String url, {
     Map<String, String>? headers,
   }) async {
-    assert(url != null);
     _validateUrlString(url);
     return _webViewPlatformController.loadUrl(url, headers);
   }
@@ -317,11 +316,9 @@
     assert(currentValue.hasNavigationDelegate != null);
     assert(currentValue.hasProgressTracking != null);
     assert(currentValue.debuggingEnabled != null);
-    assert(currentValue.userAgent != null);
     assert(newValue.javascriptMode != null);
     assert(newValue.hasNavigationDelegate != null);
     assert(newValue.debuggingEnabled != null);
-    assert(newValue.userAgent != null);
     assert(newValue.zoomEnabled != null);
 
     JavascriptMode? javascriptMode;
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
index f4f4c1e..566f23f 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.4.4
+
+* Removes obsolete null checks on non-nullable values.
+
 ## 3.4.3
 
 * Replace `describeEnum` with the `name` getter.
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/lib/legacy/web_view.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/lib/legacy/web_view.dart
index 8f4d391..afb5f20 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/example/lib/legacy/web_view.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/example/lib/legacy/web_view.dart
@@ -74,9 +74,7 @@
         AutoMediaPlaybackPolicy.require_user_action_for_all_media_types,
     this.allowsInlineMediaPlayback = false,
     this.backgroundColor,
-  })  : assert(javascriptMode != null),
-        assert(initialMediaPlaybackPolicy != null),
-        assert(allowsInlineMediaPlayback != null);
+  });
 
   /// The WebView platform that's used by this WebView.
   static final WebViewPlatform platform = CupertinoWebView();
@@ -308,7 +306,7 @@
     this._widget,
     this._webViewPlatformController,
     this._javascriptChannelRegistry,
-  ) : assert(_webViewPlatformController != null) {
+  ) {
     _settings = _webSettingsFromWidget(_widget);
   }
 
@@ -369,7 +367,6 @@
     String url, {
     Map<String, String>? headers,
   }) async {
-    assert(url != null);
     _validateUrlString(url);
     return _webViewPlatformController.loadUrl(url, headers);
   }
@@ -560,11 +557,9 @@
     assert(currentValue.hasNavigationDelegate != null);
     assert(currentValue.hasProgressTracking != null);
     assert(currentValue.debuggingEnabled != null);
-    assert(currentValue.userAgent != null);
     assert(newValue.javascriptMode != null);
     assert(newValue.hasNavigationDelegate != null);
     assert(newValue.debuggingEnabled != null);
-    assert(newValue.userAgent != null);
 
     JavascriptMode? javascriptMode;
     bool? hasNavigationDelegate;
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/lib/main.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/lib/main.dart
index 29c4296..8c3f753 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/example/lib/main.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/example/lib/main.dart
@@ -442,7 +442,7 @@
   }
 
   Widget _getCookieList(String cookies) {
-    if (cookies == null || cookies == '""') {
+    if (cookies == '""') {
       return Container();
     }
     final List<String> cookieList = cookies.split(';');
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
index 7675d58..c0e47c8 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control.
 repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 3.4.3
+version: 3.4.4
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/script/tool/lib/src/common/xcode.dart b/script/tool/lib/src/common/xcode.dart
index 83f681b..fc0fdbc 100644
--- a/script/tool/lib/src/common/xcode.dart
+++ b/script/tool/lib/src/common/xcode.dart
@@ -42,8 +42,8 @@
     final List<String> args = <String>[
       _xcodeBuildCommand,
       ...actions,
-      if (workspace != null) ...<String>['-workspace', workspace],
-      if (scheme != null) ...<String>['-scheme', scheme],
+      ...<String>['-workspace', workspace],
+      ...<String>['-scheme', scheme],
       if (configuration != null) ...<String>['-configuration', configuration],
       ...extraFlags,
     ];
diff --git a/script/tool/lib/src/federation_safety_check_command.dart b/script/tool/lib/src/federation_safety_check_command.dart
index 86767f1..30d4d17 100644
--- a/script/tool/lib/src/federation_safety_check_command.dart
+++ b/script/tool/lib/src/federation_safety_check_command.dart
@@ -200,9 +200,6 @@
 
   Future<bool> _changeIsCommentOnly(
       GitVersionFinder git, String repoPath) async {
-    if (git == null) {
-      return false;
-    }
     final List<String> diff = await git.getDiffContents(targetPath: repoPath);
     final RegExp changeLine = RegExp(r'^[+-] ');
     // This will not catch /**/-style comments, but false negatives are fine
diff --git a/script/tool/lib/src/publish_command.dart b/script/tool/lib/src/publish_command.dart
index eb042fb..fb197cc 100644
--- a/script/tool/lib/src/publish_command.dart
+++ b/script/tool/lib/src/publish_command.dart
@@ -388,7 +388,6 @@
     required String tag,
     required _RemoteInfo remote,
   }) async {
-    assert(remote != null && tag != null);
     if (!getBoolArg(_dryRunFlag)) {
       final io.ProcessResult result = await (await gitDir).runCommand(
         <String>['push', remote.name, tag],
