diff --git a/analysis_options.yaml b/analysis_options.yaml
index b12af6c..c4fe482 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -75,7 +75,7 @@
     - avoid_field_initializers_in_const_classes
     # - avoid_final_parameters # incompatible with prefer_final_parameters
     - avoid_function_literals_in_foreach_calls
-    # - avoid_implementing_value_types # LOCAL CHANGE - Needs to be enabled and violations fixed.
+    - avoid_implementing_value_types
     - avoid_init_to_null
     - avoid_js_rounded_ints
     # - avoid_multiple_declarations_per_line # seems to be a stylistic choice we don't subscribe to
@@ -87,7 +87,7 @@
     - avoid_relative_lib_imports
     - avoid_renaming_method_parameters
     - avoid_return_types_on_setters
-    # - avoid_returning_null # still violated by some pre-nnbd code that we haven't yet migrated
+    - avoid_returning_null
     - avoid_returning_null_for_future
     - avoid_returning_null_for_void
     # - avoid_returning_this # there are enough valid reasons to return `this` that this lint ends up with too many false positives
@@ -109,15 +109,17 @@
     # - cascade_invocations # doesn't match the typical style of this repo
     - cast_nullable_to_non_nullable
     # - close_sinks # not reliable enough
+    # - combinators_ordering # DIFFERENT FROM FLUTTER/FLUTTER: This isn't available on stable yet.
     # - comment_references # blocked on https://github.com/dart-lang/linter/issues/1142
-    # - conditional_uri_does_not_exist # not yet tested
+    - conditional_uri_does_not_exist
     # - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204
     - control_flow_in_finally
-    # - curly_braces_in_flow_control_structures # not required by flutter style
+    - curly_braces_in_flow_control_structures
     - depend_on_referenced_packages
     - deprecated_consistency
     # - diagnostic_describe_all_properties # enabled only at the framework level (packages/flutter/lib)
     - directives_ordering
+    # - discarded_futures # not yet tested
     # - do_not_use_environment # there are appropriate times to use the environment, especially in our tests and build logic
     - empty_catches
     - empty_constructor_bodies
@@ -128,7 +130,6 @@
     - flutter_style_todos
     - hash_and_equals
     - implementation_imports
-    # - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811
     - iterable_contains_unrelated_type
     # - join_return_with_assignment # not required by flutter style
     - leading_newlines_in_multiline_strings
@@ -203,12 +204,12 @@
     - recursive_getters
     # - require_trailing_commas # blocked on https://github.com/dart-lang/sdk/issues/47441
     - secure_pubspec_urls
-    # - sized_box_for_whitespace # LOCAL CHANGE - Needs to be enabled and violations fixed.
+     - sized_box_for_whitespace
     # - sized_box_shrink_expand # not yet tested
     - slash_for_doc_comments
     - sort_child_properties_last
     - sort_constructors_first
-    # - sort_pub_dependencies # prevents separating pinned transitive dependencies
+    - sort_pub_dependencies # DIFFERENT FROM FLUTTER/FLUTTER: Flutter's use case for not sorting does not apply to this repository.
     - sort_unnamed_constructors_first
     - test_types_in_equals
     - throw_in_finally
@@ -216,7 +217,7 @@
     # - type_annotate_public_apis # subset of always_specify_types
     - type_init_formals
     # - unawaited_futures # too many false positives, especially with the way AnimationController works
-    # - unnecessary_await_in_return # LOCAL CHANGE - Needs to be enabled and violations fixed.
+    - unnecessary_await_in_return
     - unnecessary_brace_in_string_interps
     - unnecessary_const
     - unnecessary_constructor_name
@@ -226,6 +227,7 @@
     - unnecessary_late
     - unnecessary_new
     - unnecessary_null_aware_assignments
+    - unnecessary_null_aware_operator_on_extension_on_nullable
     - unnecessary_null_checks
     - unnecessary_null_in_if_null_operators
     - unnecessary_nullable_for_final_variable_declarations
@@ -236,6 +238,7 @@
     - unnecessary_string_escapes
     - unnecessary_string_interpolations
     - unnecessary_this
+    - unnecessary_to_list_in_spreads
     - unrelated_type_equality_checks
     - unsafe_html
     # - use_build_context_synchronously # LOCAL CHANGE - Needs to be enabled and violations fixed.
@@ -263,6 +266,3 @@
     # separately when moving to a shared file.
     - no_runtimeType_toString # use objectRuntimeType from package:foundation
     - public_member_api_docs # see https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#documentation-dartdocs-javadocs-etc
-    # Flutter has a specific use case for dependencies that are intentionally
-    # not sorted, which doesn't apply to this repo.
-    - sort_pub_dependencies
diff --git a/packages/camera/camera_web/example/integration_test/camera_web_test.dart b/packages/camera/camera_web/example/integration_test/camera_web_test.dart
index e3f1138..8aefea6 100644
--- a/packages/camera/camera_web/example/integration_test/camera_web_test.dart
+++ b/packages/camera/camera_web/example/integration_test/camera_web_test.dart
@@ -1664,7 +1664,7 @@
             'with notFound error '
             'if the camera does not exist', (WidgetTester tester) async {
           expect(
-            () async => await CameraPlatform.instance.getMaxZoomLevel(
+            () async => CameraPlatform.instance.getMaxZoomLevel(
               cameraId,
             ),
             throwsA(
@@ -1689,7 +1689,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.getMaxZoomLevel(
+            () async => CameraPlatform.instance.getMaxZoomLevel(
               cameraId,
             ),
             throwsA(
@@ -1717,7 +1717,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.getMaxZoomLevel(
+            () async => CameraPlatform.instance.getMaxZoomLevel(
               cameraId,
             ),
             throwsA(
@@ -1758,7 +1758,7 @@
             'with notFound error '
             'if the camera does not exist', (WidgetTester tester) async {
           expect(
-            () async => await CameraPlatform.instance.getMinZoomLevel(
+            () async => CameraPlatform.instance.getMinZoomLevel(
               cameraId,
             ),
             throwsA(
@@ -1783,7 +1783,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.getMinZoomLevel(
+            () async => CameraPlatform.instance.getMinZoomLevel(
               cameraId,
             ),
             throwsA(
@@ -1811,7 +1811,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.getMinZoomLevel(
+            () async => CameraPlatform.instance.getMinZoomLevel(
               cameraId,
             ),
             throwsA(
@@ -1846,7 +1846,7 @@
             'with notFound error '
             'if the camera does not exist', (WidgetTester tester) async {
           expect(
-            () async => await CameraPlatform.instance.setZoomLevel(
+            () async => CameraPlatform.instance.setZoomLevel(
               cameraId,
               100.0,
             ),
@@ -1872,7 +1872,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.setZoomLevel(
+            () async => CameraPlatform.instance.setZoomLevel(
               cameraId,
               100.0,
             ),
@@ -1900,7 +1900,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.setZoomLevel(
+            () async => CameraPlatform.instance.setZoomLevel(
               cameraId,
               100.0,
             ),
@@ -1929,7 +1929,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.setZoomLevel(
+            () async => CameraPlatform.instance.setZoomLevel(
               cameraId,
               100.0,
             ),
@@ -1962,7 +1962,7 @@
             'with notFound error '
             'if the camera does not exist', (WidgetTester tester) async {
           expect(
-            () async => await CameraPlatform.instance.pausePreview(cameraId),
+            () async => CameraPlatform.instance.pausePreview(cameraId),
             throwsA(
               isA<PlatformException>().having(
                 (PlatformException e) => e.code,
@@ -1985,7 +1985,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.pausePreview(cameraId),
+            () async => CameraPlatform.instance.pausePreview(cameraId),
             throwsA(
               isA<PlatformException>().having(
                 (PlatformException e) => e.code,
@@ -2017,7 +2017,7 @@
             'with notFound error '
             'if the camera does not exist', (WidgetTester tester) async {
           expect(
-            () async => await CameraPlatform.instance.resumePreview(cameraId),
+            () async => CameraPlatform.instance.resumePreview(cameraId),
             throwsA(
               isA<PlatformException>().having(
                 (PlatformException e) => e.code,
@@ -2040,7 +2040,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.resumePreview(cameraId),
+            () async => CameraPlatform.instance.resumePreview(cameraId),
             throwsA(
               isA<PlatformException>().having(
                 (PlatformException e) => e.code,
@@ -2066,7 +2066,7 @@
           (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
 
           expect(
-            () async => await CameraPlatform.instance.resumePreview(cameraId),
+            () async => CameraPlatform.instance.resumePreview(cameraId),
             throwsA(
               isA<PlatformException>().having(
                 (PlatformException e) => e.code,
@@ -2523,7 +2523,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async => await CameraPlatform.instance.takePicture(cameraId),
+            () async => CameraPlatform.instance.takePicture(cameraId),
             throwsA(
               isA<PlatformException>(),
             ),
@@ -2560,7 +2560,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async => await CameraPlatform.instance.setFlashMode(
+            () async => CameraPlatform.instance.setFlashMode(
               cameraId,
               FlashMode.always,
             ),
@@ -2600,7 +2600,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async => await CameraPlatform.instance.getMaxZoomLevel(
+            () async => CameraPlatform.instance.getMaxZoomLevel(
               cameraId,
             ),
             throwsA(
@@ -2639,7 +2639,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async => await CameraPlatform.instance.getMinZoomLevel(
+            () async => CameraPlatform.instance.getMinZoomLevel(
               cameraId,
             ),
             throwsA(
@@ -2678,7 +2678,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async => await CameraPlatform.instance.setZoomLevel(
+            () async => CameraPlatform.instance.setZoomLevel(
               cameraId,
               100.0,
             ),
@@ -2718,7 +2718,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async => await CameraPlatform.instance.resumePreview(cameraId),
+            () async => CameraPlatform.instance.resumePreview(cameraId),
             throwsA(
               isA<PlatformException>(),
             ),
@@ -2762,8 +2762,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async =>
-                await CameraPlatform.instance.startVideoRecording(cameraId),
+            () async => CameraPlatform.instance.startVideoRecording(cameraId),
             throwsA(
               isA<PlatformException>(),
             ),
@@ -2830,8 +2829,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async =>
-                await CameraPlatform.instance.stopVideoRecording(cameraId),
+            () async => CameraPlatform.instance.stopVideoRecording(cameraId),
             throwsA(
               isA<PlatformException>(),
             ),
@@ -2868,8 +2866,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async =>
-                await CameraPlatform.instance.pauseVideoRecording(cameraId),
+            () async => CameraPlatform.instance.pauseVideoRecording(cameraId),
             throwsA(
               isA<PlatformException>(),
             ),
@@ -2906,8 +2903,7 @@
               StreamQueue<CameraErrorEvent>(eventStream);
 
           expect(
-            () async =>
-                await CameraPlatform.instance.resumeVideoRecording(cameraId),
+            () async => CameraPlatform.instance.resumeVideoRecording(cameraId),
             throwsA(
               isA<PlatformException>(),
             ),
diff --git a/packages/camera/camera_web/example/integration_test/helpers/mocks.dart b/packages/camera/camera_web/example/integration_test/helpers/mocks.dart
index 521c4bf..855ef2b 100644
--- a/packages/camera/camera_web/example/integration_test/helpers/mocks.dart
+++ b/packages/camera/camera_web/example/integration_test/helpers/mocks.dart
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// ignore_for_file: avoid_implementing_value_types
+
 import 'dart:async';
 import 'dart:html';
 import 'dart:ui';
diff --git a/packages/camera/camera_windows/example/integration_test/camera_test.dart b/packages/camera/camera_windows/example/integration_test/camera_test.dart
index cda0f40..01db9e2 100644
--- a/packages/camera/camera_windows/example/integration_test/camera_test.dart
+++ b/packages/camera/camera_windows/example/integration_test/camera_test.dart
@@ -23,7 +23,7 @@
         (WidgetTester _) async {
       final CameraPlatform camera = CameraPlatform.instance;
 
-      expect(() async => await camera.initializeCamera(1234),
+      expect(() async => camera.initializeCamera(1234),
           throwsA(isA<CameraException>()));
     });
   });
@@ -33,7 +33,7 @@
         (WidgetTester _) async {
       final CameraPlatform camera = CameraPlatform.instance;
 
-      expect(() async => await camera.takePicture(1234),
+      expect(() async => camera.takePicture(1234),
           throwsA(isA<PlatformException>()));
     });
   });
@@ -43,7 +43,7 @@
         (WidgetTester _) async {
       final CameraPlatform camera = CameraPlatform.instance;
 
-      expect(() async => await camera.startVideoRecording(1234),
+      expect(() async => camera.startVideoRecording(1234),
           throwsA(isA<PlatformException>()));
     });
   });
@@ -53,7 +53,7 @@
         (WidgetTester _) async {
       final CameraPlatform camera = CameraPlatform.instance;
 
-      expect(() async => await camera.stopVideoRecording(1234),
+      expect(() async => camera.stopVideoRecording(1234),
           throwsA(isA<PlatformException>()));
     });
   });
@@ -63,7 +63,7 @@
         (WidgetTester _) async {
       final CameraPlatform camera = CameraPlatform.instance;
 
-      expect(() async => await camera.pausePreview(1234),
+      expect(() async => camera.pausePreview(1234),
           throwsA(isA<PlatformException>()));
     });
   });
@@ -73,7 +73,7 @@
         (WidgetTester _) async {
       final CameraPlatform camera = CameraPlatform.instance;
 
-      expect(() async => await camera.resumePreview(1234),
+      expect(() async => camera.resumePreview(1234),
           throwsA(isA<PlatformException>()));
     });
   });
diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
index 3707aa8..4d01646 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
 
+* Updates code for new analysis options.
 * Updates code for `no_leading_underscores_for_local_identifiers` lint.
 
 ## 2.2.1
diff --git a/packages/google_maps_flutter/google_maps_flutter/example/lib/map_ui.dart b/packages/google_maps_flutter/google_maps_flutter/example/lib/map_ui.dart
index 3f56f40..0a3146c 100644
--- a/packages/google_maps_flutter/google_maps_flutter/example/lib/map_ui.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/example/lib/map_ui.dart
@@ -240,7 +240,7 @@
   }
 
   Future<String> _getFileData(String path) async {
-    return await rootBundle.loadString(path);
+    return rootBundle.loadString(path);
   }
 
   void _setMapStyle(String mapStyle) {
diff --git a/packages/google_maps_flutter/google_maps_flutter/example/lib/place_marker.dart b/packages/google_maps_flutter/google_maps_flutter/example/lib/place_marker.dart
index fa49917..8fde950 100644
--- a/packages/google_maps_flutter/google_maps_flutter/example/lib/place_marker.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/example/lib/place_marker.dart
@@ -285,7 +285,7 @@
       bitmapIcon.complete(bitmap);
     }));
 
-    return await bitmapIcon.future;
+    return bitmapIcon.future;
   }
 
   @override
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 9bc8b19..012a508 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## NEXT
+
+* Updates code for new analysis options.
+
 ## 2.3.3
 
 * Update android gradle plugin to 7.3.1.
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/map_ui.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/map_ui.dart
index 009ee71..546cf1d 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/map_ui.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/map_ui.dart
@@ -241,7 +241,7 @@
   }
 
   Future<String> _getFileData(String path) async {
-    return await rootBundle.loadString(path);
+    return rootBundle.loadString(path);
   }
 
   void _setMapStyle(String mapStyle) {
diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/place_marker.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/place_marker.dart
index 7d12f4c..2c6c725 100644
--- a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/place_marker.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/place_marker.dart
@@ -286,7 +286,7 @@
       bitmapIcon.complete(bitmap);
     }));
 
-    return await bitmapIcon.future;
+    return bitmapIcon.future;
   }
 
   @override
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 7788e91..81b9c8f 100644
--- a/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md
@@ -1,3 +1,7 @@
+## NEXT
+
+* Updates code for new analysis options.
+
 ## 2.1.12
 
 * Updates imports for `prefer_relative_imports`.
diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/map_ui.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/map_ui.dart
index 009ee71..546cf1d 100644
--- a/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/map_ui.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/map_ui.dart
@@ -241,7 +241,7 @@
   }
 
   Future<String> _getFileData(String path) async {
-    return await rootBundle.loadString(path);
+    return rootBundle.loadString(path);
   }
 
   void _setMapStyle(String mapStyle) {
diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/place_marker.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/place_marker.dart
index 7d12f4c..2c6c725 100644
--- a/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/place_marker.dart
+++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/place_marker.dart
@@ -286,7 +286,7 @@
       bitmapIcon.complete(bitmap);
     }));
 
-    return await bitmapIcon.future;
+    return bitmapIcon.future;
   }
 
   @override
diff --git a/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart b/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart
index b8a596b..2296f2d 100644
--- a/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart
+++ b/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart
@@ -13,7 +13,7 @@
 import 'google_sign_in_test.mocks.dart';
 
 /// Verify that [GoogleSignInAccount] can be mocked even though it's unused
-// ignore: must_be_immutable
+// ignore: avoid_implementing_value_types, must_be_immutable
 class MockGoogleSignInAccount extends Mock implements GoogleSignInAccount {}
 
 @GenerateMocks(<Type>[GoogleSignInPlatform])
diff --git a/packages/image_picker/image_picker_windows/test/image_picker_windows_test.dart b/packages/image_picker/image_picker_windows/test/image_picker_windows_test.dart
index c3df2d8..3b27c08 100644
--- a/packages/image_picker/image_picker_windows/test/image_picker_windows_test.dart
+++ b/packages/image_picker/image_picker_windows/test/image_picker_windows_test.dart
@@ -53,7 +53,7 @@
 
       test('pickImage throws UnimplementedError when source is camera',
           () async {
-        expect(() async => await plugin.pickImage(source: ImageSource.camera),
+        expect(() async => plugin.pickImage(source: ImageSource.camera),
             throwsA(isA<UnimplementedError>()));
       });
 
@@ -71,7 +71,7 @@
 
       test('getImage throws UnimplementedError when source is camera',
           () async {
-        expect(() async => await plugin.getImage(source: ImageSource.camera),
+        expect(() async => plugin.getImage(source: ImageSource.camera),
             throwsA(isA<UnimplementedError>()));
       });
 
@@ -102,7 +102,7 @@
 
       test('pickVideo throws UnimplementedError when source is camera',
           () async {
-        expect(() async => await plugin.pickVideo(source: ImageSource.camera),
+        expect(() async => plugin.pickVideo(source: ImageSource.camera),
             throwsA(isA<UnimplementedError>()));
       });
 
@@ -120,7 +120,7 @@
 
       test('getVideo throws UnimplementedError when source is camera',
           () async {
-        expect(() async => await plugin.getVideo(source: ImageSource.camera),
+        expect(() async => plugin.getVideo(source: ImageSource.camera),
             throwsA(isA<UnimplementedError>()));
       });
     });
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 b595d7e..4aa14a8 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.2.3+7
+
+* Updates code for new analysis options.
+
 ## 0.2.3+6
 
 * Updates android gradle plugin to 7.3.1.
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 d73ca8e..c8046d6 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
@@ -171,7 +171,7 @@
           'completePurchase unsuccessful. The `purchase.verificationData` is not valid');
     }
 
-    return await billingClient
+    return billingClient
         .acknowledgePurchase(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 555773a..d70e5df 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/plugins/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.2.3+6
+version: 0.2.3+7
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart
index 92d9e8f..d9c9213 100644
--- a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart
+++ b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart
@@ -36,14 +36,14 @@
       channel.setMockMethodCallHandler((MethodCall methodCall) async {
         log.add(methodCall);
         if (methodCall.method == 'getAll') {
-          return await testData.getAll();
+          return testData.getAll();
         }
         if (methodCall.method == 'remove') {
           final String key = methodCall.arguments['key']! as String;
-          return await testData.remove(key);
+          return testData.remove(key);
         }
         if (methodCall.method == 'clear') {
-          return await testData.clear();
+          return testData.clear();
         }
         final RegExp setterRegExp = RegExp(r'set(.*)');
         final Match? match = setterRegExp.matchAsPrefix(methodCall.method);
@@ -51,7 +51,7 @@
           final String valueType = match!.group(1)!;
           final String key = methodCall.arguments['key'] as String;
           final Object value = methodCall.arguments['value'] as Object;
-          return await testData.setValue(valueType, key, value);
+          return testData.setValue(valueType, key, value);
         }
         fail('Unexpected method call: ${methodCall.method}');
       });
diff --git a/packages/shared_preferences/shared_preferences_macos/test/shared_preferences_macos_test.dart b/packages/shared_preferences/shared_preferences_macos/test/shared_preferences_macos_test.dart
index cd858f4..8e71e40 100644
--- a/packages/shared_preferences/shared_preferences_macos/test/shared_preferences_macos_test.dart
+++ b/packages/shared_preferences/shared_preferences_macos/test/shared_preferences_macos_test.dart
@@ -36,14 +36,14 @@
       channel.setMockMethodCallHandler((MethodCall methodCall) async {
         log.add(methodCall);
         if (methodCall.method == 'getAll') {
-          return await testData.getAll();
+          return testData.getAll();
         }
         if (methodCall.method == 'remove') {
           final String key = (methodCall.arguments['key'] as String?)!;
-          return await testData.remove(key);
+          return testData.remove(key);
         }
         if (methodCall.method == 'clear') {
-          return await testData.clear();
+          return testData.clear();
         }
         final RegExp setterRegExp = RegExp(r'set(.*)');
         final Match? match = setterRegExp.matchAsPrefix(methodCall.method);
@@ -51,7 +51,7 @@
           final String valueType = match!.group(1)!;
           final String key = (methodCall.arguments['key'] as String?)!;
           final Object value = (methodCall.arguments['value'] as Object?)!;
-          return await testData.setValue(valueType, key, value);
+          return testData.setValue(valueType, key, value);
         }
         fail('Unexpected method call: ${methodCall.method}');
       });
diff --git a/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart
index 31ee89e..ed4ecc7 100644
--- a/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart
+++ b/packages/shared_preferences/shared_preferences_platform_interface/test/method_channel_shared_preferences_test.dart
@@ -34,14 +34,14 @@
       channel.setMockMethodCallHandler((MethodCall methodCall) async {
         log.add(methodCall);
         if (methodCall.method == 'getAll') {
-          return await testData.getAll();
+          return testData.getAll();
         }
         if (methodCall.method == 'remove') {
           final String key = (methodCall.arguments['key'] as String?)!;
-          return await testData.remove(key);
+          return testData.remove(key);
         }
         if (methodCall.method == 'clear') {
-          return await testData.clear();
+          return testData.clear();
         }
         final RegExp setterRegExp = RegExp(r'set(.*)');
         final Match? match = setterRegExp.matchAsPrefix(methodCall.method);
@@ -49,7 +49,7 @@
           final String valueType = match!.group(1)!;
           final String key = (methodCall.arguments['key'] as String?)!;
           final Object value = (methodCall.arguments['value'] as Object?)!;
-          return await testData.setValue(valueType, key, value);
+          return testData.setValue(valueType, key, value);
         }
         fail('Unexpected method call: ${methodCall.method}');
       });
diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md
index 18a0289..4b365b8 100644
--- a/packages/url_launcher/url_launcher/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.1.7
+
+* Updates code for new analysis options.
+
 ## 6.1.6
 
 * Updates imports for `prefer_relative_imports`.
diff --git a/packages/url_launcher/url_launcher/lib/src/legacy_api.dart b/packages/url_launcher/url_launcher/lib/src/legacy_api.dart
index f6faf3f..5bd5ef6 100644
--- a/packages/url_launcher/url_launcher/lib/src/legacy_api.dart
+++ b/packages/url_launcher/url_launcher/lib/src/legacy_api.dart
@@ -130,7 +130,7 @@
 /// details.
 @Deprecated('Use canLaunchUrl instead')
 Future<bool> canLaunch(String urlString) async {
-  return await UrlLauncherPlatform.instance.canLaunch(urlString);
+  return UrlLauncherPlatform.instance.canLaunch(urlString);
 }
 
 /// Closes the current WebView, if one was previously opened via a call to [launch].
@@ -143,7 +143,7 @@
 /// WebView/SafariViewController available to be closed.
 @Deprecated('Use closeInAppWebView instead')
 Future<void> closeWebView() async {
-  return await UrlLauncherPlatform.instance.closeWebView();
+  return UrlLauncherPlatform.instance.closeWebView();
 }
 
 /// This allows a value of type T or T? to be treated as a value of type T?.
diff --git a/packages/url_launcher/url_launcher/lib/src/url_launcher_string.dart b/packages/url_launcher/url_launcher/lib/src/url_launcher_string.dart
index cf96ebc..45193ff 100644
--- a/packages/url_launcher/url_launcher/lib/src/url_launcher_string.dart
+++ b/packages/url_launcher/url_launcher/lib/src/url_launcher_string.dart
@@ -30,7 +30,7 @@
     throw ArgumentError.value(urlString, 'urlString',
         'To use an in-app web view, you must provide an http(s) URL.');
   }
-  return await UrlLauncherPlatform.instance.launchUrl(
+  return UrlLauncherPlatform.instance.launchUrl(
     urlString,
     LaunchOptions(
       mode: convertLaunchMode(mode),
@@ -53,5 +53,5 @@
 /// others will immediately fail if the URL can't be parsed according to the
 /// official standards that define URL formats.
 Future<bool> canLaunchUrlString(String urlString) async {
-  return await UrlLauncherPlatform.instance.canLaunch(urlString);
+  return UrlLauncherPlatform.instance.canLaunch(urlString);
 }
diff --git a/packages/url_launcher/url_launcher/lib/src/url_launcher_uri.dart b/packages/url_launcher/url_launcher/lib/src/url_launcher_uri.dart
index 3032102..b3ce6c2 100644
--- a/packages/url_launcher/url_launcher/lib/src/url_launcher_uri.dart
+++ b/packages/url_launcher/url_launcher/lib/src/url_launcher_uri.dart
@@ -50,7 +50,7 @@
     throw ArgumentError.value(url, 'url',
         'To use an in-app web view, you must provide an http(s) URL.');
   }
-  return await UrlLauncherPlatform.instance.launchUrl(
+  return UrlLauncherPlatform.instance.launchUrl(
     url.toString(),
     LaunchOptions(
       mode: convertLaunchMode(mode),
@@ -75,7 +75,7 @@
 ///   that are always assumed to be supported (such as http(s)), as web pages
 ///   are never allowed to query installed applications.
 Future<bool> canLaunchUrl(Uri url) async {
-  return await UrlLauncherPlatform.instance.canLaunch(url.toString());
+  return UrlLauncherPlatform.instance.canLaunch(url.toString());
 }
 
 /// Closes the current in-app web view, if one was previously opened by
@@ -84,5 +84,5 @@
 /// If [launchUrl] was never called with [LaunchMode.inAppWebView], then this
 /// call will have no effect.
 Future<void> closeInAppWebView() async {
-  return await UrlLauncherPlatform.instance.closeWebView();
+  return UrlLauncherPlatform.instance.closeWebView();
 }
diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml
index 8efda4a..642b4b5 100644
--- a/packages/url_launcher/url_launcher/pubspec.yaml
+++ b/packages/url_launcher/url_launcher/pubspec.yaml
@@ -3,7 +3,7 @@
   web, phone, SMS, and email schemes.
 repository: https://github.com/flutter/plugins/tree/main/packages/url_launcher/url_launcher
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 6.1.6
+version: 6.1.7
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/url_launcher/url_launcher/test/src/legacy_api_test.dart b/packages/url_launcher/url_launcher/test/src/legacy_api_test.dart
index 11d7d8f..40336a0 100644
--- a/packages/url_launcher/url_launcher/test/src/legacy_api_test.dart
+++ b/packages/url_launcher/url_launcher/test/src/legacy_api_test.dart
@@ -188,7 +188,7 @@
     });
 
     test('cannot launch a non-web in webview', () async {
-      expect(() async => await launch('tel:555-555-5555', forceWebView: true),
+      expect(() async => launch('tel:555-555-5555', forceWebView: true),
           throwsA(isA<PlatformException>()));
     });
 
@@ -211,16 +211,14 @@
 
     test('cannot send e-mail with forceSafariVC: true', () async {
       expect(
-          () async => await launch(
-              'mailto:gmail-noreply@google.com?subject=Hello',
+          () async => launch('mailto:gmail-noreply@google.com?subject=Hello',
               forceSafariVC: true),
           throwsA(isA<PlatformException>()));
     });
 
     test('cannot send e-mail with forceWebView: true', () async {
       expect(
-          () async => await launch(
-              'mailto:gmail-noreply@google.com?subject=Hello',
+          () async => launch('mailto:gmail-noreply@google.com?subject=Hello',
               forceWebView: true),
           throwsA(isA<PlatformException>()));
     });
@@ -305,7 +303,7 @@
 
     test('cannot open non-parseable url with forceSafariVC: true', () async {
       expect(
-          () async => await launch(
+          () async => launch(
               'rdp://full%20address=s:mypc:3389&audiomode=i:2&disable%20themes=i:1',
               forceSafariVC: true),
           throwsA(isA<PlatformException>()));
@@ -313,7 +311,7 @@
 
     test('cannot open non-parseable url with forceWebView: true', () async {
       expect(
-          () async => await launch(
+          () async => launch(
               'rdp://full%20address=s:mypc:3389&audiomode=i:2&disable%20themes=i:1',
               forceWebView: true),
           throwsA(isA<PlatformException>()));
diff --git a/packages/url_launcher/url_launcher/test/src/url_launcher_string_test.dart b/packages/url_launcher/url_launcher/test/src/url_launcher_string_test.dart
index 0dcbc34..64065ff 100644
--- a/packages/url_launcher/url_launcher/test/src/url_launcher_string_test.dart
+++ b/packages/url_launcher/url_launcher/test/src/url_launcher_string_test.dart
@@ -222,7 +222,7 @@
 
     test('cannot launch a non-web URL in a webview', () async {
       expect(
-          () async => await launchUrlString('tel:555-555-5555',
+          () async => launchUrlString('tel:555-555-5555',
               mode: LaunchMode.inAppWebView),
           throwsA(isA<ArgumentError>()));
     });
diff --git a/packages/url_launcher/url_launcher/test/src/url_launcher_uri_test.dart b/packages/url_launcher/url_launcher/test/src/url_launcher_uri_test.dart
index 7685aef..d71d07f 100644
--- a/packages/url_launcher/url_launcher/test/src/url_launcher_uri_test.dart
+++ b/packages/url_launcher/url_launcher/test/src/url_launcher_uri_test.dart
@@ -223,7 +223,7 @@
 
     test('cannot launch a non-web URL in a webview', () async {
       expect(
-          () async => await launchUrl(Uri(scheme: 'tel', path: '555-555-5555'),
+          () async => launchUrl(Uri(scheme: 'tel', path: '555-555-5555'),
               mode: LaunchMode.inAppWebView),
           throwsA(isA<ArgumentError>()));
     });
diff --git a/packages/url_launcher/url_launcher_android/CHANGELOG.md b/packages/url_launcher/url_launcher_android/CHANGELOG.md
index 934d8da..f2f6594 100644
--- a/packages/url_launcher/url_launcher_android/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.0.22
+
+* Updates code for new analysis options.
+
 ## 6.0.21
 
 * Updates androidx.annotation to 1.2.0.
diff --git a/packages/url_launcher/url_launcher_android/lib/url_launcher_android.dart b/packages/url_launcher/url_launcher_android/lib/url_launcher_android.dart
index 1aa093a..bd4c2a5 100644
--- a/packages/url_launcher/url_launcher_android/lib/url_launcher_android.dart
+++ b/packages/url_launcher/url_launcher_android/lib/url_launcher_android.dart
@@ -33,7 +33,7 @@
       // returns true, then there is a browser, which means that there is
       // at least one handler for the original URL.
       if (scheme == 'http' || scheme == 'https') {
-        return await _canLaunchUrl('$scheme://flutter.dev');
+        return _canLaunchUrl('$scheme://flutter.dev');
       }
     }
     return canLaunchSpecificUrl;
diff --git a/packages/url_launcher/url_launcher_android/pubspec.yaml b/packages/url_launcher/url_launcher_android/pubspec.yaml
index e97fde3..d096b0c 100644
--- a/packages/url_launcher/url_launcher_android/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the url_launcher plugin.
 repository: https://github.com/flutter/plugins/tree/main/packages/url_launcher/url_launcher_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22
-version: 6.0.21
+version: 6.0.22
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md
index 0885f28..1c7da48 100644
--- a/packages/video_player/video_player/CHANGELOG.md
+++ b/packages/video_player/video_player/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.4.8
 
+* Updates code for new analysis options.
 * Updates code for `no_leading_underscores_for_local_identifiers` lint.
 
 ## 2.4.7
diff --git a/packages/video_player/video_player/lib/video_player.dart b/packages/video_player/video_player/lib/video_player.dart
index c1f4886..2f84b82 100644
--- a/packages/video_player/video_player/lib/video_player.dart
+++ b/packages/video_player/video_player/lib/video_player.dart
@@ -542,7 +542,7 @@
     if (_isDisposed) {
       return null;
     }
-    return await _videoPlayerPlatform.getPosition(_textureId);
+    return _videoPlayerPlatform.getPosition(_textureId);
   }
 
   /// Sets the video's current timestamp to be at [moment]. The next
diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml
index 7e2df60..1f5fed2 100644
--- a/packages/video_player/video_player/pubspec.yaml
+++ b/packages/video_player/video_player/pubspec.yaml
@@ -3,7 +3,7 @@
   widgets on Android, iOS, and web.
 repository: https://github.com/flutter/plugins/tree/main/packages/video_player/video_player
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
-version: 2.4.7
+version: 2.4.8
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/video_player/video_player/test/video_player_test.dart b/packages/video_player/video_player/test/video_player_test.dart
index 8e5e98b..973fab4 100644
--- a/packages/video_player/video_player/test/video_player_test.dart
+++ b/packages/video_player/video_player/test/video_player_test.dart
@@ -389,7 +389,7 @@
       await controller.initialize();
       await controller.dispose();
 
-      expect(() async => await controller.dispose(), returnsNormally);
+      expect(() async => controller.dispose(), returnsNormally);
     });
 
     test('play', () async {
diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md
index 4d3f72d..7137e24 100644
--- a/packages/video_player/video_player_android/CHANGELOG.md
+++ b/packages/video_player/video_player_android/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## NEXT
 
+* Updates code for new analysis options.
 * Updates code for `no_leading_underscores_for_local_identifiers` lint.
 * Updates minimum Flutter version to 2.10.
 * Fixes violations of new analysis option use_named_constants.
diff --git a/packages/video_player/video_player_android/example/lib/mini_controller.dart b/packages/video_player/video_player_android/example/lib/mini_controller.dart
index 61959ef..26c60b7 100644
--- a/packages/video_player/video_player_android/example/lib/mini_controller.dart
+++ b/packages/video_player/video_player_android/example/lib/mini_controller.dart
@@ -318,7 +318,7 @@
 
   /// The position in the current video.
   Future<Duration?> get position async {
-    return await _platform.getPosition(_textureId);
+    return _platform.getPosition(_textureId);
   }
 
   /// Sets the video's current timestamp to be at [position].
diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md
index b1cc1ce..1198599 100644
--- a/packages/video_player/video_player_avfoundation/CHANGELOG.md
+++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## NEXT
 
+* Updates code for new analysis options.
 * Adds an integration test for a bug where the aspect ratios of some HLS videos are incorrectly inverted.
 * Removes an unnecessary override in example code.
 
diff --git a/packages/video_player/video_player_avfoundation/example/lib/mini_controller.dart b/packages/video_player/video_player_avfoundation/example/lib/mini_controller.dart
index 61959ef..26c60b7 100644
--- a/packages/video_player/video_player_avfoundation/example/lib/mini_controller.dart
+++ b/packages/video_player/video_player_avfoundation/example/lib/mini_controller.dart
@@ -318,7 +318,7 @@
 
   /// The position in the current video.
   Future<Duration?> get position async {
-    return await _platform.getPosition(_textureId);
+    return _platform.getPosition(_textureId);
   }
 
   /// Sets the video's current timestamp to be at [position].
diff --git a/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart
index 63f4384..8dd8321 100644
--- a/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart
@@ -1300,7 +1300,7 @@
 Future<String> _runJavascriptReturningResult(
     WebViewController controller, String js) async {
   if (defaultTargetPlatform == TargetPlatform.iOS) {
-    return await controller.runJavascriptReturningResult(js);
+    return controller.runJavascriptReturningResult(js);
   }
   return jsonDecode(await controller.runJavascriptReturningResult(js))
       as String;
diff --git a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
index 73076d9..b6d6239 100644
--- a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
@@ -445,7 +445,7 @@
           await buildWidget(tester);
 
           expect(
-              () async => await testController.loadRequest(
+              () async => testController.loadRequest(
                     WebViewRequest(
                       uri: Uri.parse('www.google.com'),
                       method: WebViewRequestMethod.get,
diff --git a/packages/webview_flutter/webview_flutter_web/test/webview_flutter_web_test.dart b/packages/webview_flutter/webview_flutter_web/test/webview_flutter_web_test.dart
index 08337e4..76dad6f 100644
--- a/packages/webview_flutter/webview_flutter_web/test/webview_flutter_web_test.dart
+++ b/packages/webview_flutter/webview_flutter_web/test/webview_flutter_web_test.dart
@@ -93,7 +93,7 @@
         );
         // Run & Verify
         expect(
-            () async => await controller.loadRequest(
+            () async => controller.loadRequest(
                   WebViewRequest(
                     uri: Uri.parse('flutter.dev'),
                     method: WebViewRequestMethod.get,
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
index 047d69f..7e5af0f 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart
@@ -1204,7 +1204,7 @@
 
 /// Returns the value used for the HTTP User-Agent: request header in subsequent HTTP requests.
 Future<String> _getUserAgent(WebViewController controller) async {
-  return await controller.runJavascriptReturningResult('navigator.userAgent;');
+  return controller.runJavascriptReturningResult('navigator.userAgent;');
 }
 
 class ResizableWebView extends StatefulWidget {
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit_webview_widget_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit_webview_widget_test.dart
index 5e6186c..9df910f 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit_webview_widget_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit_webview_widget_test.dart
@@ -490,7 +490,7 @@
           await buildWidget(tester);
 
           expect(
-              () async => await testController.loadRequest(
+              () async => testController.loadRequest(
                     WebViewRequest(
                       uri: Uri.parse('www.google.com'),
                       method: WebViewRequestMethod.get,
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/v4/webkit_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/v4/webkit_webview_controller_test.dart
index 87a90db..6672198 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/test/v4/webkit_webview_controller_test.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/test/v4/webkit_webview_controller_test.dart
@@ -147,7 +147,7 @@
         );
 
         expect(
-          () async => await controller.loadRequest(
+          () async => controller.loadRequest(
             LoadRequestParams(
               uri: Uri.parse('www.google.com'),
               method: LoadRequestMethod.get,
diff --git a/script/tool/lib/src/common/package_looping_command.dart b/script/tool/lib/src/common/package_looping_command.dart
index d8b1cf0..ccfeea0 100644
--- a/script/tool/lib/src/common/package_looping_command.dart
+++ b/script/tool/lib/src/common/package_looping_command.dart
@@ -369,7 +369,7 @@
       }
     }
 
-    return await runForPackage(package);
+    return runForPackage(package);
   }
 
   void _printSuccess(String message) {
diff --git a/script/tool/lib/src/common/package_state_utils.dart b/script/tool/lib/src/common/package_state_utils.dart
index 65f3119..5aabd75 100644
--- a/script/tool/lib/src/common/package_state_utils.dart
+++ b/script/tool/lib/src/common/package_state_utils.dart
@@ -107,6 +107,7 @@
 
 bool _isTestChange(List<String> pathComponents) {
   return pathComponents.contains('test') ||
+      pathComponents.contains('integration_test') ||
       pathComponents.contains('androidTest') ||
       pathComponents.contains('RunnerTests') ||
       pathComponents.contains('RunnerUITests');
diff --git a/script/tool/lib/src/update_release_info_command.dart b/script/tool/lib/src/update_release_info_command.dart
index 67aa994..8d7ceb8 100644
--- a/script/tool/lib/src/update_release_info_command.dart
+++ b/script/tool/lib/src/update_release_info_command.dart
@@ -140,6 +140,9 @@
       if (!state.hasChanges) {
         return PackageResult.skip('No changes to package');
       }
+      if (!state.needsVersionChange && !state.needsChangelogChange) {
+        return PackageResult.skip('No non-exempt changes to package');
+      }
       if (state.needsVersionChange) {
         versionChange = _VersionIncrementType.bugfix;
       }
diff --git a/script/tool/lib/src/version_check_command.dart b/script/tool/lib/src/version_check_command.dart
index b3be672..bb53620 100644
--- a/script/tool/lib/src/version_check_command.dart
+++ b/script/tool/lib/src/version_check_command.dart
@@ -285,8 +285,7 @@
     final String gitPath = path.style == p.Style.windows
         ? p.posix.joinAll(path.split(relativePath))
         : relativePath;
-    return await _gitVersionFinder.getPackageVersion(gitPath,
-        gitRef: _mergeBase);
+    return _gitVersionFinder.getPackageVersion(gitPath, gitRef: _mergeBase);
   }
 
   /// Returns the state of the verison of [package] relative to the comparison
diff --git a/script/tool/test/common/package_looping_command_test.dart b/script/tool/test/common/package_looping_command_test.dart
index c858df0..f90d58e 100644
--- a/script/tool/test/common/package_looping_command_test.dart
+++ b/script/tool/test/common/package_looping_command_test.dart
@@ -143,7 +143,7 @@
     runner = CommandRunner<void>('test_package_looping_command',
         'Test for base package looping functionality');
     runner.addCommand(command);
-    return await runCapturingPrint(
+    return runCapturingPrint(
       runner,
       <String>[command.name, ...arguments],
       errorHandler: errorHandler,
diff --git a/script/tool/test/update_release_info_command_test.dart b/script/tool/test/update_release_info_command_test.dart
index 8cd2e95..cfec938 100644
--- a/script/tool/test/update_release_info_command_test.dart
+++ b/script/tool/test/update_release_info_command_test.dart
@@ -388,7 +388,7 @@
           createFakePackage('a_package', packagesDir, version: '1.0.1');
       processRunner.mockProcessesForExecutable['git-diff'] = <io.Process>[
         MockProcess(stdout: '''
-packages/different_package/test/plugin_test.dart
+packages/different_package/lib/foo.dart
 '''),
       ];
       final String originalChangelog = package.changelogFile.readAsStringSync();
@@ -411,6 +411,35 @@
           ]));
     });
 
+    test('skips for "minimal" when there are only test changes', () async {
+      final RepositoryPackage package =
+          createFakePackage('a_package', packagesDir, version: '1.0.1');
+      processRunner.mockProcessesForExecutable['git-diff'] = <io.Process>[
+        MockProcess(stdout: '''
+packages/a_package/test/a_test.dart
+packages/a_package/example/integration_test/another_test.dart
+'''),
+      ];
+      final String originalChangelog = package.changelogFile.readAsStringSync();
+
+      final List<String> output = await runCapturingPrint(runner, <String>[
+        'update-release-info',
+        '--version=minimal',
+        '--changelog',
+        'A change.',
+      ]);
+
+      final String version = package.parsePubspec().version?.toString() ?? '';
+      expect(version, '1.0.1');
+      expect(package.changelogFile.readAsStringSync(), originalChangelog);
+      expect(
+          output,
+          containsAllInOrder(<Matcher>[
+            contains('No non-exempt changes to package'),
+            contains('Skipped 1 package')
+          ]));
+    });
+
     test('fails if CHANGELOG.md is missing', () async {
       createFakePackage('a_package', packagesDir, includeCommonFiles: false);
 
