[various] Enable use_build_context_synchronously (#6585)

Enables the `use_build_context_synchronously` lint, and fixes violations.

Part of https://github.com/flutter/flutter/issues/76229
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 27f59e1..1eb0d23 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -241,7 +241,7 @@
     - unnecessary_to_list_in_spreads
     - unrelated_type_equality_checks
     - unsafe_html
-    # - use_build_context_synchronously # LOCAL CHANGE - Needs to be enabled and violations fixed.
+    - use_build_context_synchronously
     # - use_colored_box # not yet tested
     # - use_decorated_box # not yet tested
     # - use_enums # not yet tested
diff --git a/packages/file_selector/file_selector/CHANGELOG.md b/packages/file_selector/file_selector/CHANGELOG.md
index b8784e5..9fd2341 100644
--- a/packages/file_selector/file_selector/CHANGELOG.md
+++ b/packages/file_selector/file_selector/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## NEXT
 
+* Updates example code for `use_build_context_synchronously` lint.
 * Updates minimum Flutter version to 3.0.
 
 ## 0.9.2+2
diff --git a/packages/file_selector/file_selector/example/lib/get_directory_page.dart b/packages/file_selector/file_selector/example/lib/get_directory_page.dart
index de80aa5..dfe166d 100644
--- a/packages/file_selector/file_selector/example/lib/get_directory_page.dart
+++ b/packages/file_selector/file_selector/example/lib/get_directory_page.dart
@@ -22,10 +22,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(directoryPath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(directoryPath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector/example/lib/open_image_page.dart b/packages/file_selector/file_selector/example/lib/open_image_page.dart
index ba18e6e..7717f28 100644
--- a/packages/file_selector/file_selector/example/lib/open_image_page.dart
+++ b/packages/file_selector/file_selector/example/lib/open_image_page.dart
@@ -29,10 +29,12 @@
     final String fileName = file.name;
     final String filePath = file.path;
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => ImageDisplay(fileName, filePath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => ImageDisplay(fileName, filePath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector/example/lib/open_multiple_images_page.dart b/packages/file_selector/file_selector/example/lib/open_multiple_images_page.dart
index 8ae83c2..a09a6db 100644
--- a/packages/file_selector/file_selector/example/lib/open_multiple_images_page.dart
+++ b/packages/file_selector/file_selector/example/lib/open_multiple_images_page.dart
@@ -32,10 +32,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => MultipleImagesDisplay(files),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => MultipleImagesDisplay(files),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector/example/lib/open_text_page.dart b/packages/file_selector/file_selector/example/lib/open_text_page.dart
index f052db1..e28a67a 100644
--- a/packages/file_selector/file_selector/example/lib/open_text_page.dart
+++ b/packages/file_selector/file_selector/example/lib/open_text_page.dart
@@ -32,10 +32,12 @@
     final String fileName = file.name;
     final String fileContent = await file.readAsString();
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(fileName, fileContent),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(fileName, fileContent),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_ios/CHANGELOG.md b/packages/file_selector/file_selector_ios/CHANGELOG.md
index ccb51ef..40d232e 100644
--- a/packages/file_selector/file_selector_ios/CHANGELOG.md
+++ b/packages/file_selector/file_selector_ios/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## NEXT
 
+* Updates example code for `use_build_context_synchronously` lint.
 * Updates minimum Flutter version to 3.0.
 
 ## 0.5.0+2
diff --git a/packages/file_selector/file_selector_ios/example/lib/open_image_page.dart b/packages/file_selector/file_selector_ios/example/lib/open_image_page.dart
index 606a648..6fcbcbf 100644
--- a/packages/file_selector/file_selector_ios/example/lib/open_image_page.dart
+++ b/packages/file_selector/file_selector_ios/example/lib/open_image_page.dart
@@ -29,10 +29,12 @@
     final String fileName = file.name;
     final String filePath = file.path;
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => ImageDisplay(fileName, filePath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => ImageDisplay(fileName, filePath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_ios/example/lib/open_multiple_images_page.dart b/packages/file_selector/file_selector_ios/example/lib/open_multiple_images_page.dart
index adc4a65..30cc515 100644
--- a/packages/file_selector/file_selector_ios/example/lib/open_multiple_images_page.dart
+++ b/packages/file_selector/file_selector_ios/example/lib/open_multiple_images_page.dart
@@ -34,10 +34,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => MultipleImagesDisplay(files),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => MultipleImagesDisplay(files),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_ios/example/lib/open_text_page.dart b/packages/file_selector/file_selector_ios/example/lib/open_text_page.dart
index e7bbf8b..f21daf9 100644
--- a/packages/file_selector/file_selector_ios/example/lib/open_text_page.dart
+++ b/packages/file_selector/file_selector_ios/example/lib/open_text_page.dart
@@ -26,10 +26,12 @@
     final String fileName = file.name;
     final String fileContent = await file.readAsString();
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(fileName, fileContent),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(fileName, fileContent),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_linux/CHANGELOG.md b/packages/file_selector/file_selector_linux/CHANGELOG.md
index 00ccb06..6f7853c 100644
--- a/packages/file_selector/file_selector_linux/CHANGELOG.md
+++ b/packages/file_selector/file_selector_linux/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## NEXT
 
+* Updates example code for `use_build_context_synchronously` lint.
 * Updates minimum Flutter version to 3.0.
 
 ## 0.9.1
diff --git a/packages/file_selector/file_selector_linux/example/lib/get_directory_page.dart b/packages/file_selector/file_selector_linux/example/lib/get_directory_page.dart
index 0699dd1..f6390cc 100644
--- a/packages/file_selector/file_selector_linux/example/lib/get_directory_page.dart
+++ b/packages/file_selector/file_selector_linux/example/lib/get_directory_page.dart
@@ -21,10 +21,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(directoryPath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(directoryPath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_linux/example/lib/get_multiple_directories_page.dart b/packages/file_selector/file_selector_linux/example/lib/get_multiple_directories_page.dart
index 66ab29c..087240b 100644
--- a/packages/file_selector/file_selector_linux/example/lib/get_multiple_directories_page.dart
+++ b/packages/file_selector/file_selector_linux/example/lib/get_multiple_directories_page.dart
@@ -21,10 +21,13 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(directoryPaths.join('\n')),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) =>
+            TextDisplay(directoryPaths.join('\n')),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_linux/example/lib/open_image_page.dart b/packages/file_selector/file_selector_linux/example/lib/open_image_page.dart
index b6ada56..9252d25 100644
--- a/packages/file_selector/file_selector_linux/example/lib/open_image_page.dart
+++ b/packages/file_selector/file_selector_linux/example/lib/open_image_page.dart
@@ -28,10 +28,12 @@
     final String fileName = file.name;
     final String filePath = file.path;
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => ImageDisplay(fileName, filePath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => ImageDisplay(fileName, filePath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_linux/example/lib/open_multiple_images_page.dart b/packages/file_selector/file_selector_linux/example/lib/open_multiple_images_page.dart
index c8e352a..787717c 100644
--- a/packages/file_selector/file_selector_linux/example/lib/open_multiple_images_page.dart
+++ b/packages/file_selector/file_selector_linux/example/lib/open_multiple_images_page.dart
@@ -32,10 +32,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => MultipleImagesDisplay(files),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => MultipleImagesDisplay(files),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_linux/example/lib/open_text_page.dart b/packages/file_selector/file_selector_linux/example/lib/open_text_page.dart
index 4c88d74..97812f2 100644
--- a/packages/file_selector/file_selector_linux/example/lib/open_text_page.dart
+++ b/packages/file_selector/file_selector_linux/example/lib/open_text_page.dart
@@ -25,10 +25,12 @@
     final String fileName = file.name;
     final String fileContent = await file.readAsString();
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(fileName, fileContent),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(fileName, fileContent),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_macos/CHANGELOG.md b/packages/file_selector/file_selector_macos/CHANGELOG.md
index d9da2ec..4fdab0b 100644
--- a/packages/file_selector/file_selector_macos/CHANGELOG.md
+++ b/packages/file_selector/file_selector_macos/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## NEXT
 
+* Updates example code for `use_build_context_synchronously` lint.
 * Updates minimum Flutter version to 3.0.
 
 ## 0.9.0+4
diff --git a/packages/file_selector/file_selector_macos/example/lib/get_directory_page.dart b/packages/file_selector/file_selector_macos/example/lib/get_directory_page.dart
index a2a209d..a3f6f6a 100644
--- a/packages/file_selector/file_selector_macos/example/lib/get_directory_page.dart
+++ b/packages/file_selector/file_selector_macos/example/lib/get_directory_page.dart
@@ -21,10 +21,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(directoryPath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(directoryPath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_macos/example/lib/open_image_page.dart b/packages/file_selector/file_selector_macos/example/lib/open_image_page.dart
index b6ada56..9252d25 100644
--- a/packages/file_selector/file_selector_macos/example/lib/open_image_page.dart
+++ b/packages/file_selector/file_selector_macos/example/lib/open_image_page.dart
@@ -28,10 +28,12 @@
     final String fileName = file.name;
     final String filePath = file.path;
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => ImageDisplay(fileName, filePath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => ImageDisplay(fileName, filePath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_macos/example/lib/open_multiple_images_page.dart b/packages/file_selector/file_selector_macos/example/lib/open_multiple_images_page.dart
index c8e352a..787717c 100644
--- a/packages/file_selector/file_selector_macos/example/lib/open_multiple_images_page.dart
+++ b/packages/file_selector/file_selector_macos/example/lib/open_multiple_images_page.dart
@@ -32,10 +32,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => MultipleImagesDisplay(files),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => MultipleImagesDisplay(files),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_macos/example/lib/open_text_page.dart b/packages/file_selector/file_selector_macos/example/lib/open_text_page.dart
index 4c88d74..97812f2 100644
--- a/packages/file_selector/file_selector_macos/example/lib/open_text_page.dart
+++ b/packages/file_selector/file_selector_macos/example/lib/open_text_page.dart
@@ -25,10 +25,12 @@
     final String fileName = file.name;
     final String fileContent = await file.readAsString();
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(fileName, fileContent),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(fileName, fileContent),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_windows/CHANGELOG.md b/packages/file_selector/file_selector_windows/CHANGELOG.md
index ee007d4..1f9405d 100644
--- a/packages/file_selector/file_selector_windows/CHANGELOG.md
+++ b/packages/file_selector/file_selector_windows/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## NEXT
 
+* Updates example code for `use_build_context_synchronously` lint.
 * Updates minimum Flutter version to 3.0.
 
 ## 0.9.1+4
diff --git a/packages/file_selector/file_selector_windows/example/lib/get_directory_page.dart b/packages/file_selector/file_selector_windows/example/lib/get_directory_page.dart
index 0699dd1..f6390cc 100644
--- a/packages/file_selector/file_selector_windows/example/lib/get_directory_page.dart
+++ b/packages/file_selector/file_selector_windows/example/lib/get_directory_page.dart
@@ -21,10 +21,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(directoryPath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(directoryPath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_windows/example/lib/open_image_page.dart b/packages/file_selector/file_selector_windows/example/lib/open_image_page.dart
index b6ada56..9252d25 100644
--- a/packages/file_selector/file_selector_windows/example/lib/open_image_page.dart
+++ b/packages/file_selector/file_selector_windows/example/lib/open_image_page.dart
@@ -28,10 +28,12 @@
     final String fileName = file.name;
     final String filePath = file.path;
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => ImageDisplay(fileName, filePath),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => ImageDisplay(fileName, filePath),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_windows/example/lib/open_multiple_images_page.dart b/packages/file_selector/file_selector_windows/example/lib/open_multiple_images_page.dart
index c8e352a..787717c 100644
--- a/packages/file_selector/file_selector_windows/example/lib/open_multiple_images_page.dart
+++ b/packages/file_selector/file_selector_windows/example/lib/open_multiple_images_page.dart
@@ -32,10 +32,12 @@
       // Operation was canceled by the user.
       return;
     }
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => MultipleImagesDisplay(files),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => MultipleImagesDisplay(files),
+      );
+    }
   }
 
   @override
diff --git a/packages/file_selector/file_selector_windows/example/lib/open_text_page.dart b/packages/file_selector/file_selector_windows/example/lib/open_text_page.dart
index 4c88d74..97812f2 100644
--- a/packages/file_selector/file_selector_windows/example/lib/open_text_page.dart
+++ b/packages/file_selector/file_selector_windows/example/lib/open_text_page.dart
@@ -25,10 +25,12 @@
     final String fileName = file.name;
     final String fileContent = await file.readAsString();
 
-    await showDialog<void>(
-      context: context,
-      builder: (BuildContext context) => TextDisplay(fileName, fileContent),
-    );
+    if (context.mounted) {
+      await showDialog<void>(
+        context: context,
+        builder: (BuildContext context) => TextDisplay(fileName, fileContent),
+      );
+    }
   }
 
   @override
diff --git a/packages/image_picker/image_picker_windows/CHANGELOG.md b/packages/image_picker/image_picker_windows/CHANGELOG.md
index 5ea844d..e739db7 100644
--- a/packages/image_picker/image_picker_windows/CHANGELOG.md
+++ b/packages/image_picker/image_picker_windows/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.1.0+4
 
+* Updates example code for `use_build_context_synchronously` lint.
 * Updates minimum Flutter version to 3.0.
 
 ## 0.1.0+3
diff --git a/packages/image_picker/image_picker_windows/example/lib/main.dart b/packages/image_picker/image_picker_windows/example/lib/main.dart
index e340a18..dae45a5 100644
--- a/packages/image_picker/image_picker_windows/example/lib/main.dart
+++ b/packages/image_picker/image_picker_windows/example/lib/main.dart
@@ -70,8 +70,8 @@
     }
   }
 
-  Future<void> _handleMultiImagePicked(BuildContext? context) async {
-    await _displayPickImageDialog(context!,
+  Future<void> _handleMultiImagePicked(BuildContext context) async {
+    await _displayPickImageDialog(context,
         (double? maxWidth, double? maxHeight, int? quality) async {
       try {
         final List<PickedFile>? pickedFileList = await _picker.pickMultiImage(
@@ -91,8 +91,8 @@
   }
 
   Future<void> _handleSingleImagePicked(
-      BuildContext? context, ImageSource source) async {
-    await _displayPickImageDialog(context!,
+      BuildContext context, ImageSource source) async {
+    await _displayPickImageDialog(context,
         (double? maxWidth, double? maxHeight, int? quality) async {
       try {
         final PickedFile? pickedFile = await _picker.pickImage(
@@ -113,18 +113,20 @@
   }
 
   Future<void> _onImageButtonPressed(ImageSource source,
-      {BuildContext? context, bool isMultiImage = false}) async {
+      {required BuildContext context, bool isMultiImage = false}) async {
     if (_controller != null) {
       await _controller!.setVolume(0.0);
     }
-    if (_isVideo) {
-      final PickedFile? file = await _picker.pickVideo(
-          source: source, maxDuration: const Duration(seconds: 10));
-      await _playVideo(file);
-    } else if (isMultiImage) {
-      await _handleMultiImagePicked(context);
-    } else {
-      await _handleSingleImagePicked(context, source);
+    if (context.mounted) {
+      if (_isVideo) {
+        final PickedFile? file = await _picker.pickVideo(
+            source: source, maxDuration: const Duration(seconds: 10));
+        await _playVideo(file);
+      } else if (isMultiImage) {
+        await _handleMultiImagePicked(context);
+      } else {
+        await _handleSingleImagePicked(context, source);
+      }
     }
   }
 
@@ -269,7 +271,7 @@
               backgroundColor: Colors.red,
               onPressed: () {
                 _isVideo = true;
-                _onImageButtonPressed(ImageSource.gallery);
+                _onImageButtonPressed(ImageSource.gallery, context: context);
               },
               heroTag: 'video0',
               tooltip: 'Pick Video from gallery',
@@ -282,7 +284,7 @@
               backgroundColor: Colors.red,
               onPressed: () {
                 _isVideo = true;
-                _onImageButtonPressed(ImageSource.camera);
+                _onImageButtonPressed(ImageSource.camera, context: context);
               },
               heroTag: 'video1',
               tooltip: 'Take a Video',
diff --git a/packages/image_picker/image_picker_windows/pubspec.yaml b/packages/image_picker/image_picker_windows/pubspec.yaml
index e639bcb..07fa673 100644
--- a/packages/image_picker/image_picker_windows/pubspec.yaml
+++ b/packages/image_picker/image_picker_windows/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Windows platform implementation of image_picker
 repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker_windows
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22
-version: 0.1.0+3
+version: 0.1.0+4
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/in_app_purchase/in_app_purchase/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase/CHANGELOG.md
index 1d76f14..38355e3 100644
--- a/packages/in_app_purchase/in_app_purchase/CHANGELOG.md
+++ b/packages/in_app_purchase/in_app_purchase/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 3.1.2
 
+* Updates example code for `use_build_context_synchronously` lint.
 * Updates minimum Flutter version to 3.0.
 
 ## 3.1.1
diff --git a/packages/in_app_purchase/in_app_purchase/example/lib/main.dart b/packages/in_app_purchase/in_app_purchase/example/lib/main.dart
index 9e53b4b..aec19fe 100644
--- a/packages/in_app_purchase/in_app_purchase/example/lib/main.dart
+++ b/packages/in_app_purchase/in_app_purchase/example/lib/main.dart
@@ -468,17 +468,19 @@
           await androidAddition.launchPriceChangeConfirmationFlow(
         sku: 'purchaseId',
       );
-      if (priceChangeConfirmationResult.responseCode == BillingResponse.ok) {
-        ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
-          content: Text('Price change accepted'),
-        ));
-      } else {
-        ScaffoldMessenger.of(context).showSnackBar(SnackBar(
-          content: Text(
-            priceChangeConfirmationResult.debugMessage ??
-                'Price change failed with code ${priceChangeConfirmationResult.responseCode}',
-          ),
-        ));
+      if (context.mounted) {
+        if (priceChangeConfirmationResult.responseCode == BillingResponse.ok) {
+          ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+            content: Text('Price change accepted'),
+          ));
+        } else {
+          ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+            content: Text(
+              priceChangeConfirmationResult.debugMessage ??
+                  'Price change failed with code ${priceChangeConfirmationResult.responseCode}',
+            ),
+          ));
+        }
       }
     }
     if (Platform.isIOS) {
diff --git a/packages/in_app_purchase/in_app_purchase/pubspec.yaml b/packages/in_app_purchase/in_app_purchase/pubspec.yaml
index 71d415c..598ab90 100644
--- a/packages/in_app_purchase/in_app_purchase/pubspec.yaml
+++ b/packages/in_app_purchase/in_app_purchase/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin for in-app purchases. Exposes APIs for making in-app purchases through the App Store and Google Play.
 repository: https://github.com/flutter/plugins/tree/main/packages/in_app_purchase/in_app_purchase
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22
-version: 3.1.1
+version: 3.1.2
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md
index a01b9f4..6d2e860 100644
--- a/packages/webview_flutter/webview_flutter/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 4.0.3
+
+* Updates example code for `use_build_context_synchronously` lint.
+
 ## 4.0.2
 
 * Updates code for stricter lint checks.
diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart
index 239b417..ec1ce4e 100644
--- a/packages/webview_flutter/webview_flutter/example/lib/main.dart
+++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart
@@ -180,9 +180,11 @@
     return FloatingActionButton(
       onPressed: () async {
         final String? url = await _controller.currentUrl();
-        ScaffoldMessenger.of(context).showSnackBar(
-          SnackBar(content: Text('Favorited $url')),
-        );
+        if (context.mounted) {
+          ScaffoldMessenger.of(context).showSnackBar(
+            SnackBar(content: Text('Favorited $url')),
+          );
+        }
       },
       child: const Icon(Icons.favorite),
     );
@@ -330,25 +332,29 @@
   Future<void> _onListCookies(BuildContext context) async {
     final String cookies = await webViewController
         .runJavaScriptReturningResult('document.cookie') as String;
-    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
-      content: Column(
-        mainAxisAlignment: MainAxisAlignment.end,
-        mainAxisSize: MainAxisSize.min,
-        children: <Widget>[
-          const Text('Cookies:'),
-          _getCookieList(cookies),
-        ],
-      ),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+        content: Column(
+          mainAxisAlignment: MainAxisAlignment.end,
+          mainAxisSize: MainAxisSize.min,
+          children: <Widget>[
+            const Text('Cookies:'),
+            _getCookieList(cookies),
+          ],
+        ),
+      ));
+    }
   }
 
   Future<void> _onAddToCache(BuildContext context) async {
     await webViewController.runJavaScript(
       'caches.open("test_caches_entry"); localStorage["test_localStorage"] = "dummy_entry";',
     );
-    ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
-      content: Text('Added a test entry to cache.'),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+        content: Text('Added a test entry to cache.'),
+      ));
+    }
   }
 
   Future<void> _onListCache() {
@@ -361,9 +367,11 @@
   Future<void> _onClearCache(BuildContext context) async {
     await webViewController.clearCache();
     await webViewController.clearLocalStorage();
-    ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
-      content: Text('Cache cleared.'),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+        content: Text('Cache cleared.'),
+      ));
+    }
   }
 
   Future<void> _onClearCookies(BuildContext context) async {
@@ -372,9 +380,11 @@
     if (!hadCookies) {
       message = 'There are no cookies.';
     }
-    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
-      content: Text(message),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+        content: Text(message),
+      ));
+    }
   }
 
   Future<void> _onNavigationDelegateExample() {
@@ -467,10 +477,11 @@
             if (await webViewController.canGoBack()) {
               await webViewController.goBack();
             } else {
-              ScaffoldMessenger.of(context).showSnackBar(
-                const SnackBar(content: Text('No back history item')),
-              );
-              return;
+              if (context.mounted) {
+                ScaffoldMessenger.of(context).showSnackBar(
+                  const SnackBar(content: Text('No back history item')),
+                );
+              }
             }
           },
         ),
@@ -480,10 +491,11 @@
             if (await webViewController.canGoForward()) {
               await webViewController.goForward();
             } else {
-              ScaffoldMessenger.of(context).showSnackBar(
-                const SnackBar(content: Text('No forward history item')),
-              );
-              return;
+              if (context.mounted) {
+                ScaffoldMessenger.of(context).showSnackBar(
+                  const SnackBar(content: Text('No forward history item')),
+                );
+              }
             }
           },
         ),
diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml
index 99133dd..a494f9e 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/plugins/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.0.2
+version: 4.0.3
 
 environment:
   sdk: ">=2.17.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index 569244b..e1786d6 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.2.2
+
+* Updates example code for `use_build_context_synchronously` lint.
+
 ## 3.2.1
 
 * Updates code for stricter lint checks.
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 fe6d723..75f01b4 100644
--- a/packages/webview_flutter/webview_flutter_android/example/lib/main.dart
+++ b/packages/webview_flutter/webview_flutter_android/example/lib/main.dart
@@ -164,9 +164,11 @@
     return FloatingActionButton(
       onPressed: () async {
         final String? url = await _controller.currentUrl();
-        ScaffoldMessenger.of(context).showSnackBar(
-          SnackBar(content: Text('Favorited $url')),
-        );
+        if (context.mounted) {
+          ScaffoldMessenger.of(context).showSnackBar(
+            SnackBar(content: Text('Favorited $url')),
+          );
+        }
       },
       child: const Icon(Icons.favorite),
     );
@@ -319,25 +321,29 @@
   Future<void> _onListCookies(BuildContext context) async {
     final String cookies = await webViewController
         .runJavaScriptReturningResult('document.cookie') as String;
-    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
-      content: Column(
-        mainAxisAlignment: MainAxisAlignment.end,
-        mainAxisSize: MainAxisSize.min,
-        children: <Widget>[
-          const Text('Cookies:'),
-          _getCookieList(cookies),
-        ],
-      ),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+        content: Column(
+          mainAxisAlignment: MainAxisAlignment.end,
+          mainAxisSize: MainAxisSize.min,
+          children: <Widget>[
+            const Text('Cookies:'),
+            _getCookieList(cookies),
+          ],
+        ),
+      ));
+    }
   }
 
   Future<void> _onAddToCache(BuildContext context) async {
     await webViewController.runJavaScript(
       'caches.open("test_caches_entry"); localStorage["test_localStorage"] = "dummy_entry";',
     );
-    ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
-      content: Text('Added a test entry to cache.'),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+        content: Text('Added a test entry to cache.'),
+      ));
+    }
   }
 
   Future<void> _onListCache() {
@@ -350,9 +356,11 @@
   Future<void> _onClearCache(BuildContext context) async {
     await webViewController.clearCache();
     await webViewController.clearLocalStorage();
-    ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
-      content: Text('Cache cleared.'),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+        content: Text('Cache cleared.'),
+      ));
+    }
   }
 
   Future<void> _onClearCookies(BuildContext context) async {
@@ -361,9 +369,11 @@
     if (!hadCookies) {
       message = 'There are no cookies.';
     }
-    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
-      content: Text(message),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+        content: Text(message),
+      ));
+    }
   }
 
   Future<void> _onNavigationDelegateExample() {
@@ -462,10 +472,11 @@
             if (await webViewController.canGoBack()) {
               await webViewController.goBack();
             } else {
-              ScaffoldMessenger.of(context).showSnackBar(
-                const SnackBar(content: Text('No back history item')),
-              );
-              return;
+              if (context.mounted) {
+                ScaffoldMessenger.of(context).showSnackBar(
+                  const SnackBar(content: Text('No back history item')),
+                );
+              }
             }
           },
         ),
@@ -475,10 +486,11 @@
             if (await webViewController.canGoForward()) {
               await webViewController.goForward();
             } else {
-              ScaffoldMessenger.of(context).showSnackBar(
-                const SnackBar(content: Text('No forward history item')),
-              );
-              return;
+              if (context.mounted) {
+                ScaffoldMessenger.of(context).showSnackBar(
+                  const SnackBar(content: Text('No forward history item')),
+                );
+              }
             }
           },
         ),
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index eb761cc..81255df 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin that provides a WebView widget on Android.
 repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutter/webview_flutter_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
-version: 3.2.1
+version: 3.2.2
 
 environment:
   sdk: ">=2.17.0 <3.0.0"
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
index b4ad2a1..a9cb87f 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 3.0.3
+
+* Updates example code for `use_build_context_synchronously` lint.
+
 ## 3.0.2
 
 * Updates code for stricter lint checks.
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 84aced1..aef7ece 100644
--- a/packages/webview_flutter/webview_flutter_wkwebview/example/lib/main.dart
+++ b/packages/webview_flutter/webview_flutter_wkwebview/example/lib/main.dart
@@ -165,9 +165,11 @@
     return FloatingActionButton(
       onPressed: () async {
         final String? url = await _controller.currentUrl();
-        ScaffoldMessenger.of(context).showSnackBar(
-          SnackBar(content: Text('Favorited $url')),
-        );
+        if (context.mounted) {
+          ScaffoldMessenger.of(context).showSnackBar(
+            SnackBar(content: Text('Favorited $url')),
+          );
+        }
       },
       child: const Icon(Icons.favorite),
     );
@@ -320,25 +322,29 @@
   Future<void> _onListCookies(BuildContext context) async {
     final String cookies = await webViewController
         .runJavaScriptReturningResult('document.cookie') as String;
-    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
-      content: Column(
-        mainAxisAlignment: MainAxisAlignment.end,
-        mainAxisSize: MainAxisSize.min,
-        children: <Widget>[
-          const Text('Cookies:'),
-          _getCookieList(cookies),
-        ],
-      ),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+        content: Column(
+          mainAxisAlignment: MainAxisAlignment.end,
+          mainAxisSize: MainAxisSize.min,
+          children: <Widget>[
+            const Text('Cookies:'),
+            _getCookieList(cookies),
+          ],
+        ),
+      ));
+    }
   }
 
   Future<void> _onAddToCache(BuildContext context) async {
     await webViewController.runJavaScript(
       'caches.open("test_caches_entry"); localStorage["test_localStorage"] = "dummy_entry";',
     );
-    ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
-      content: Text('Added a test entry to cache.'),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+        content: Text('Added a test entry to cache.'),
+      ));
+    }
   }
 
   Future<void> _onListCache() {
@@ -351,9 +357,11 @@
   Future<void> _onClearCache(BuildContext context) async {
     await webViewController.clearCache();
     await webViewController.clearLocalStorage();
-    ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
-      content: Text('Cache cleared.'),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
+        content: Text('Cache cleared.'),
+      ));
+    }
   }
 
   Future<void> _onClearCookies(BuildContext context) async {
@@ -362,9 +370,11 @@
     if (!hadCookies) {
       message = 'There are no cookies.';
     }
-    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
-      content: Text(message),
-    ));
+    if (context.mounted) {
+      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+        content: Text(message),
+      ));
+    }
   }
 
   Future<void> _onNavigationDelegateExample() {
@@ -463,10 +473,11 @@
             if (await webViewController.canGoBack()) {
               await webViewController.goBack();
             } else {
-              ScaffoldMessenger.of(context).showSnackBar(
-                const SnackBar(content: Text('No back history item')),
-              );
-              return;
+              if (context.mounted) {
+                ScaffoldMessenger.of(context).showSnackBar(
+                  const SnackBar(content: Text('No back history item')),
+                );
+              }
             }
           },
         ),
@@ -476,10 +487,11 @@
             if (await webViewController.canGoForward()) {
               await webViewController.goForward();
             } else {
-              ScaffoldMessenger.of(context).showSnackBar(
-                const SnackBar(content: Text('No forward history item')),
-              );
-              return;
+              if (context.mounted) {
+                ScaffoldMessenger.of(context).showSnackBar(
+                  const SnackBar(content: Text('No forward history item')),
+                );
+              }
             }
           },
         ),
diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml
index 85440f6..c41bce1 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/plugins/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.0.2
+version: 3.0.3
 
 environment:
   sdk: ">=2.17.0 <3.0.0"