From 8a96431792e80054ce8c236538baa54fa147406c Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 20 Sep 2022 13:07:06 -0400 Subject: [PATCH 001/133] Roll Flutter from 99475b1b0bee to b55bbb7bffc7 (36 revisions) (#6456) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index a9baeda10e84..0371be11bf87 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -99475b1b0bee6ab09d0282b255c6b8c7e01ca4fe +b55bbb7bffc79adf9cce33ebda0582df41aae280 From 7992b0f720750cd48e5a7fa9277973ca73046ff9 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 21 Sep 2022 12:36:06 -0400 Subject: [PATCH 002/133] Roll Flutter from b55bbb7bffc7 to cf01ecd19e61 (29 revisions) (#6458) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 0371be11bf87..427e69ccf7d7 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -b55bbb7bffc79adf9cce33ebda0582df41aae280 +cf01ecd19e61b436c6d7f9c0f6d57ef84aeb0257 From 7d5ff597e35b540f662c0134fa4a243c5055a1bb Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Thu, 22 Sep 2022 12:11:56 -0400 Subject: [PATCH 003/133] [tools] Require implementation package README warning (#6459) --- .../camera_android_camerax/example/README.md | 10 +- packages/camera/camera_web/example/README.md | 14 +- .../camera/camera_windows/example/README.md | 10 +- .../file_selector_ios/example/README.md | 11 +- .../file_selector_linux/example/README.md | 11 +- .../file_selector_macos/example/README.md | 11 +- .../file_selector_web/example/README.md | 14 +- .../file_selector_windows/example/README.md | 11 +- .../example/README.md | 10 +- .../google_maps_flutter_ios/example/README.md | 10 +- .../google_maps_flutter_web/example/README.md | 15 +- .../google_sign_in_android/example/README.md | 10 +- .../google_sign_in_ios/example/README.md | 10 +- .../google_sign_in_web/example/README.md | 14 +- .../image_picker_android/example/README.md | 10 +- .../image_picker_for_web/example/README.md | 12 +- .../image_picker_ios/example/README.md | 10 +- .../image_picker_windows/example/README.md | 10 +- .../in_app_purchase_android/example/README.md | 63 +------- .../example/README.md | 80 +--------- .../local_auth_android/example/README.md | 10 +- .../local_auth_ios/example/README.md | 10 +- .../local_auth_windows/example/README.md | 10 +- .../path_provider_android/example/README.md | 10 +- .../path_provider_ios/example/README.md | 10 +- .../path_provider_linux/example/README.md | 10 +- .../path_provider_macos/example/README.md | 10 +- .../path_provider_windows/example/README.md | 10 +- .../quick_actions_android/example/README.md | 10 +- .../quick_actions_ios/example/README.md | 10 +- .../example/README.md | 10 +- .../shared_preferences_ios/example/README.md | 10 +- .../example/README.md | 10 +- .../example/README.md | 10 +- .../shared_preferences_web/example/README.md | 12 +- .../example/README.md | 10 +- .../url_launcher_android/example/README.md | 10 +- .../url_launcher_ios/example/README.md | 10 +- .../url_launcher_linux/example/README.md | 10 +- .../url_launcher_macos/example/README.md | 10 +- .../url_launcher_web/example/README.md | 15 +- .../url_launcher_windows/example/README.md | 10 +- .../video_player_android/example/README.md | 10 +- .../example/README.md | 10 +- .../video_player_web/example/README.md | 14 +- .../webview_flutter_android/example/README.md | 10 +- .../webview_flutter_web/example/README.md | 10 +- .../example/README.md | 10 +- script/tool/CHANGELOG.md | 6 + script/tool/lib/src/readme_check_command.dart | 66 +++++++- .../tool/test/readme_check_command_test.dart | 141 ++++++++++++++++++ 51 files changed, 615 insertions(+), 235 deletions(-) diff --git a/packages/camera/camera_android_camerax/example/README.md b/packages/camera/camera_android_camerax/example/README.md index 438e446d1921..96b8bb17dbff 100644 --- a/packages/camera/camera_android_camerax/example/README.md +++ b/packages/camera/camera_android_camerax/example/README.md @@ -1,3 +1,9 @@ -# camera_android_camerax_example +# Platform Implementation Test App -Demonstrates how to use the camera_android_camerax plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/camera/camera_web/example/README.md b/packages/camera/camera_web/example/README.md index 8a6e74b107ea..0e51ae5ecbd2 100644 --- a/packages/camera/camera_web/example/README.md +++ b/packages/camera/camera_web/example/README.md @@ -1,4 +1,14 @@ -# Testing +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. + +## Testing This package uses `package:integration_test` to run its tests in a web browser. @@ -6,4 +16,4 @@ See [Plugin Tests > Web Tests](https://github.com/flutter/flutter/wiki/Plugin-Te in the Flutter wiki for instructions to setup and run the tests in this package. Check [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests) -for more info. \ No newline at end of file +for more info. diff --git a/packages/camera/camera_windows/example/README.md b/packages/camera/camera_windows/example/README.md index ee7326472eaf..96b8bb17dbff 100644 --- a/packages/camera/camera_windows/example/README.md +++ b/packages/camera/camera_windows/example/README.md @@ -1,3 +1,9 @@ -# camera_windows_example +# Platform Implementation Test App -Demonstrates how to use the camera_windows plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/file_selector/file_selector_ios/example/README.md b/packages/file_selector/file_selector_ios/example/README.md index 9ed63fdb669f..96b8bb17dbff 100644 --- a/packages/file_selector/file_selector_ios/example/README.md +++ b/packages/file_selector/file_selector_ios/example/README.md @@ -1,4 +1,9 @@ -# `file_selector_ios` example +# Platform Implementation Test App -Demonstrates iOS implementation of the -[`file_selector` plugin](https://pub.dev/packages/file_selector). \ No newline at end of file +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/file_selector/file_selector_linux/example/README.md b/packages/file_selector/file_selector_linux/example/README.md index 2f9f8c0f824b..96b8bb17dbff 100644 --- a/packages/file_selector/file_selector_linux/example/README.md +++ b/packages/file_selector/file_selector_linux/example/README.md @@ -1,4 +1,9 @@ -# `file_selector_linux` example +# Platform Implementation Test App -Demonstrates Linux implementation of the -[`file_selector` plugin](https://pub.dev/packages/file_selector). +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/file_selector/file_selector_macos/example/README.md b/packages/file_selector/file_selector_macos/example/README.md index 782fe679fcb0..96b8bb17dbff 100644 --- a/packages/file_selector/file_selector_macos/example/README.md +++ b/packages/file_selector/file_selector_macos/example/README.md @@ -1,4 +1,9 @@ -# `file_selector_macos` example +# Platform Implementation Test App -Demonstrates macOS implementation of the -[`file_selector` plugin](https://pub.dev/packages/file_selector). +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/file_selector/file_selector_web/example/README.md b/packages/file_selector/file_selector_web/example/README.md index 8a6e74b107ea..0e51ae5ecbd2 100644 --- a/packages/file_selector/file_selector_web/example/README.md +++ b/packages/file_selector/file_selector_web/example/README.md @@ -1,4 +1,14 @@ -# Testing +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. + +## Testing This package uses `package:integration_test` to run its tests in a web browser. @@ -6,4 +16,4 @@ See [Plugin Tests > Web Tests](https://github.com/flutter/flutter/wiki/Plugin-Te in the Flutter wiki for instructions to setup and run the tests in this package. Check [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests) -for more info. \ No newline at end of file +for more info. diff --git a/packages/file_selector/file_selector_windows/example/README.md b/packages/file_selector/file_selector_windows/example/README.md index c8a3cce44a9a..96b8bb17dbff 100644 --- a/packages/file_selector/file_selector_windows/example/README.md +++ b/packages/file_selector/file_selector_windows/example/README.md @@ -1,4 +1,9 @@ -# `file_selector_windows` Example +# Platform Implementation Test App -Demonstrates Windows implementation of the -[`file_selector` plugin](https://pub.dev/packages/file_selector). +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/README.md b/packages/google_maps_flutter/google_maps_flutter_android/example/README.md index c8852649b065..96b8bb17dbff 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/README.md +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/README.md @@ -1,3 +1,9 @@ -# google_maps_flutter_example +# Platform Implementation Test App -Demonstrates how to use the google_maps_flutter plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/README.md b/packages/google_maps_flutter/google_maps_flutter_ios/example/README.md index c8852649b065..96b8bb17dbff 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/README.md +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/README.md @@ -1,3 +1,9 @@ -# google_maps_flutter_example +# Platform Implementation Test App -Demonstrates how to use the google_maps_flutter plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/README.md b/packages/google_maps_flutter/google_maps_flutter_web/example/README.md index 3cdecfab2ab9..0e51ae5ecbd2 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/README.md +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/README.md @@ -1,4 +1,14 @@ -# Testing +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. + +## Testing This package uses `package:integration_test` to run its tests in a web browser. @@ -7,6 +17,3 @@ in the Flutter wiki for instructions to setup and run the tests in this package. Check [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests) for more info. - -See [Plugin Tests > Web Tests > Mocks](https://github.com/flutter/flutter/wiki/Plugin-Tests#mocks) -in the Flutter wiki for more information about the `.mocks.dart` files in this package. \ No newline at end of file diff --git a/packages/google_sign_in/google_sign_in_android/example/README.md b/packages/google_sign_in/google_sign_in_android/example/README.md index 8eb153eb8efd..96b8bb17dbff 100644 --- a/packages/google_sign_in/google_sign_in_android/example/README.md +++ b/packages/google_sign_in/google_sign_in_android/example/README.md @@ -1,3 +1,9 @@ -# google_sign_in_android example +# Platform Implementation Test App -Exercises the Android implementation of `GoogleSignInPlatform`. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/google_sign_in/google_sign_in_ios/example/README.md b/packages/google_sign_in/google_sign_in_ios/example/README.md index 04c3372dc3b0..96b8bb17dbff 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/README.md +++ b/packages/google_sign_in/google_sign_in_ios/example/README.md @@ -1,3 +1,9 @@ -# google_sign_in_ios example +# Platform Implementation Test App -Exercises the iOS implementation of `GoogleSignInPlatform`. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/google_sign_in/google_sign_in_web/example/README.md b/packages/google_sign_in/google_sign_in_web/example/README.md index 8a6e74b107ea..0e51ae5ecbd2 100644 --- a/packages/google_sign_in/google_sign_in_web/example/README.md +++ b/packages/google_sign_in/google_sign_in_web/example/README.md @@ -1,4 +1,14 @@ -# Testing +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. + +## Testing This package uses `package:integration_test` to run its tests in a web browser. @@ -6,4 +16,4 @@ See [Plugin Tests > Web Tests](https://github.com/flutter/flutter/wiki/Plugin-Te in the Flutter wiki for instructions to setup and run the tests in this package. Check [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests) -for more info. \ No newline at end of file +for more info. diff --git a/packages/image_picker/image_picker_android/example/README.md b/packages/image_picker/image_picker_android/example/README.md index 16b5c51839f8..96b8bb17dbff 100755 --- a/packages/image_picker/image_picker_android/example/README.md +++ b/packages/image_picker/image_picker_android/example/README.md @@ -1,3 +1,9 @@ -# image_picker_example +# Platform Implementation Test App -Demonstrates how to use the `image_picker` plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/image_picker/image_picker_for_web/example/README.md b/packages/image_picker/image_picker_for_web/example/README.md index 4348451b14e2..0e51ae5ecbd2 100644 --- a/packages/image_picker/image_picker_for_web/example/README.md +++ b/packages/image_picker/image_picker_for_web/example/README.md @@ -1,4 +1,14 @@ -# Testing +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. + +## Testing This package uses `package:integration_test` to run its tests in a web browser. diff --git a/packages/image_picker/image_picker_ios/example/README.md b/packages/image_picker/image_picker_ios/example/README.md index 16b5c51839f8..96b8bb17dbff 100755 --- a/packages/image_picker/image_picker_ios/example/README.md +++ b/packages/image_picker/image_picker_ios/example/README.md @@ -1,3 +1,9 @@ -# image_picker_example +# Platform Implementation Test App -Demonstrates how to use the `image_picker` plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/image_picker/image_picker_windows/example/README.md b/packages/image_picker/image_picker_windows/example/README.md index 7f61053c6e30..96b8bb17dbff 100644 --- a/packages/image_picker/image_picker_windows/example/README.md +++ b/packages/image_picker/image_picker_windows/example/README.md @@ -1,3 +1,9 @@ -# image_picker_windows_example +# Platform Implementation Test App -Demonstrates how to use the image_picker_windows plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/in_app_purchase/in_app_purchase_android/example/README.md b/packages/in_app_purchase/in_app_purchase_android/example/README.md index 255e838e5b93..96b8bb17dbff 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/README.md +++ b/packages/in_app_purchase/in_app_purchase_android/example/README.md @@ -1,58 +1,9 @@ -# In App Purchase Example +# Platform Implementation Test App -Demonstrates how to use the In App Purchase Android (IAP) Plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. -## Getting Started - -### Preparation - -There's a significant amount of setup required for testing in-app purchases -successfully, including registering new app IDs and store entries to use for -testing in the Play Developer Console. Google Play requires developers to -configure an app with in-app items for purchase to call their in-app-purchase -APIs. The Google Play Store has extensive documentation on how to do this, and -we've also included a high level guide below. - -* [Google Play Billing Overview](https://developer.android.com/google/play/billing/billing_overview) - -### Android - -1. Create a new app in the [Play Developer - Console](https://play.google.com/apps/publish/) (PDC). - -2. Sign up for a merchant's account in the PDC. - -3. Create IAPs in the PDC available for purchase in the app. The example assumes - the following SKU IDs exist: - - - `consumable`: A managed product. - - `upgrade`: A managed product. - - `subscription_silver`: A lower level subscription. - - `subscription_gold`: A higher level subscription. - - Make sure that all of the products are set to `ACTIVE`. - -4. Update `APP_ID` in `example/android/app/build.gradle` to match your package - ID in the PDC. - -5. Create an `example/android/keystore.properties` file with all your signing - information. `keystore.example.properties` exists as an example to follow. - It's impossible to use any of the `BillingClient` APIs from an unsigned APK. - See - [here](https://developer.android.com/studio/publish/app-signing#secure-shared-keystore) - and [here](https://developer.android.com/studio/publish/app-signing#sign-apk) - for more information. - -6. Build a signed apk. `flutter build apk` will work for this, the gradle files - in this project have been configured to sign even debug builds. - -7. Upload the signed APK from step 6 to the PDC, and publish that to the alpha - test channel. Add your test account as an approved tester. The - `BillingClient` APIs won't work unless the app has been fully published to - the alpha channel and is being used by an authorized test account. See - [here](https://support.google.com/googleplay/android-developer/answer/3131213) - for more info. - -8. Sign in to the test device with the test account from step #7. Then use - `flutter run` to install the app to the device and test like normal. - \ No newline at end of file +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/README.md b/packages/in_app_purchase/in_app_purchase_storekit/example/README.md index 9cf98bf02e79..96b8bb17dbff 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/README.md +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/README.md @@ -1,75 +1,9 @@ -# In App Purchase iOS Example +# Platform Implementation Test App -Demonstrates how to use the In App Purchase iOS (IAP) Plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. -## Getting Started - -### Preparation - -There's a significant amount of setup required for testing in app purchases -successfully, including registering new app IDs and store entries to use for -testing in App Store Connect. The App Store requires developers to configure -an app with in-app items for purchase to call their in-app-purchase APIs. -The App Store has extensive documentation on how to do this, and we've also -included a high level guide below. - -* [In-App Purchase (App Store)](https://developer.apple.com/in-app-purchase/) - -### iOS - -When using Xcode 12 and iOS 14 or higher you can run the example in the simulator or on a device without -having to configure an App in App Store Connect. The example app is set up to use StoreKit Testing configured -in the `example/ios/Runner/Configuration.storekit` file (as documented in the article [Setting Up StoreKit Testing in Xcode](https://developer.apple.com/documentation/xcode/setting_up_storekit_testing_in_xcode?language=objc)). -To run the application take the following steps (note that it will only work when running from Xcode): - -1. Open the example app with Xcode, `File > Open File` `example/ios/Runner.xcworkspace`; - -2. Within Xcode edit the current scheme, `Product > Scheme > Edit Scheme...` (or press `Command + Shift + ,`); - -3. Enable StoreKit testing: - a. Select the `Run` action; - b. Click `Options` in the action settings; - c. Select the `Configuration.storekit` for the StoreKit Configuration option. - -4. Click the `Close` button to close the scheme editor; - -5. Select the device you want to run the example App on; - -6. Run the application using `Product > Run` (or hit the run button). - -When testing on pre-iOS 14 you can't run the example app on a simulator and you will need to configure an app in App Store Connect. You can do so by following the steps below: - -1. Follow ["Workflow for configuring in-app - purchases"](https://help.apple.com/app-store-connect/#/devb57be10e7), a - detailed guide on all the steps needed to enable IAPs for an app. Complete - steps 1 ("Sign a Paid Applications Agreement") and 2 ("Configure in-app - purchases"). - - For step #2, "Configure in-app purchases in App Store Connect," you'll want - to create the following products: - - - A consumable with product ID `consumable` - - An upgrade with product ID `upgrade` - - An auto-renewing subscription with product ID `subscription_silver` - - An non-renewing subscription with product ID `subscription_gold` - -2. In XCode, `File > Open File` `example/ios/Runner.xcworkspace`. Update the - Bundle ID to match the Bundle ID of the app created in step #1. - -3. [Create a Sandbox tester - account](https://help.apple.com/app-store-connect/#/dev8b997bee1) to test the - in-app purchases with. - -4. Use `flutter run` to install the app and test it. Note that you need to test - it on a real device instead of a simulator. Next click on one of the products - in the example App, this enables the "SANDBOX ACCOUNT" section in the iOS - settings. You will now be asked to sign in with your sandbox test account to - complete the purchase (no worries you won't be charged). If for some reason - you aren't asked to sign-in or the wrong user is listed, go into the iOS - settings ("Settings" -> "App Store" -> "SANDBOX ACCOUNT") and update your - sandbox account from there. This procedure is explained in great detail in - the [Testing In-App Purchases with Sandbox](https://developer.apple.com/documentation/storekit/in-app_purchase/testing_in-app_purchases_with_sandbox?language=objc) article. - - -**Important:** signing into any production service (including iTunes!) with the -sandbox test account will permanently invalidate it. +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/local_auth/local_auth_android/example/README.md b/packages/local_auth/local_auth_android/example/README.md index bd004a77d86b..96b8bb17dbff 100644 --- a/packages/local_auth/local_auth_android/example/README.md +++ b/packages/local_auth/local_auth_android/example/README.md @@ -1,3 +1,9 @@ -# local_auth_example +# Platform Implementation Test App -Demonstrates how to use the local_auth plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/local_auth/local_auth_ios/example/README.md b/packages/local_auth/local_auth_ios/example/README.md index bd004a77d86b..96b8bb17dbff 100644 --- a/packages/local_auth/local_auth_ios/example/README.md +++ b/packages/local_auth/local_auth_ios/example/README.md @@ -1,3 +1,9 @@ -# local_auth_example +# Platform Implementation Test App -Demonstrates how to use the local_auth plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/local_auth/local_auth_windows/example/README.md b/packages/local_auth/local_auth_windows/example/README.md index 8f48b8563cad..96b8bb17dbff 100644 --- a/packages/local_auth/local_auth_windows/example/README.md +++ b/packages/local_auth/local_auth_windows/example/README.md @@ -1,3 +1,9 @@ -# local_auth_example +# Platform Implementation Test App -Demonstrates how to use the local_auth plugin. \ No newline at end of file +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/path_provider/path_provider_android/example/README.md b/packages/path_provider/path_provider_android/example/README.md index 801f44409938..96b8bb17dbff 100644 --- a/packages/path_provider/path_provider_android/example/README.md +++ b/packages/path_provider/path_provider_android/example/README.md @@ -1,3 +1,9 @@ -# path_provider_example +# Platform Implementation Test App -Demonstrates how to use the path_provider plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/path_provider/path_provider_ios/example/README.md b/packages/path_provider/path_provider_ios/example/README.md index 801f44409938..96b8bb17dbff 100644 --- a/packages/path_provider/path_provider_ios/example/README.md +++ b/packages/path_provider/path_provider_ios/example/README.md @@ -1,3 +1,9 @@ -# path_provider_example +# Platform Implementation Test App -Demonstrates how to use the path_provider plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/path_provider/path_provider_linux/example/README.md b/packages/path_provider/path_provider_linux/example/README.md index 333d0f55cec7..96b8bb17dbff 100644 --- a/packages/path_provider/path_provider_linux/example/README.md +++ b/packages/path_provider/path_provider_linux/example/README.md @@ -1,3 +1,9 @@ -# path_provider_linux_example +# Platform Implementation Test App -Demonstrates how to use the path_provider_linux plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/path_provider/path_provider_macos/example/README.md b/packages/path_provider/path_provider_macos/example/README.md index 158869595c01..96b8bb17dbff 100644 --- a/packages/path_provider/path_provider_macos/example/README.md +++ b/packages/path_provider/path_provider_macos/example/README.md @@ -1,3 +1,9 @@ -# path_provider_macos_example +# Platform Implementation Test App -Demonstrates how to use the path_provider_macos plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/path_provider/path_provider_windows/example/README.md b/packages/path_provider/path_provider_windows/example/README.md index 63723991a2e9..96b8bb17dbff 100644 --- a/packages/path_provider/path_provider_windows/example/README.md +++ b/packages/path_provider/path_provider_windows/example/README.md @@ -1,3 +1,9 @@ -# path_provider_windows_example +# Platform Implementation Test App -Demonstrates how to use the path_provider_windows plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/quick_actions/quick_actions_android/example/README.md b/packages/quick_actions/quick_actions_android/example/README.md index c8a629019fc9..96b8bb17dbff 100644 --- a/packages/quick_actions/quick_actions_android/example/README.md +++ b/packages/quick_actions/quick_actions_android/example/README.md @@ -1,3 +1,9 @@ -# quick_actions_example +# Platform Implementation Test App -Demonstrates how to use the quick_actions plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/quick_actions/quick_actions_ios/example/README.md b/packages/quick_actions/quick_actions_ios/example/README.md index c8a629019fc9..96b8bb17dbff 100644 --- a/packages/quick_actions/quick_actions_ios/example/README.md +++ b/packages/quick_actions/quick_actions_ios/example/README.md @@ -1,3 +1,9 @@ -# quick_actions_example +# Platform Implementation Test App -Demonstrates how to use the quick_actions plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/shared_preferences/shared_preferences_android/example/README.md b/packages/shared_preferences/shared_preferences_android/example/README.md index c060637c7ec5..96b8bb17dbff 100644 --- a/packages/shared_preferences/shared_preferences_android/example/README.md +++ b/packages/shared_preferences/shared_preferences_android/example/README.md @@ -1,3 +1,9 @@ -# shared_preferences_example +# Platform Implementation Test App -Demonstrates how to use the shared_preferences plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/shared_preferences/shared_preferences_ios/example/README.md b/packages/shared_preferences/shared_preferences_ios/example/README.md index c060637c7ec5..96b8bb17dbff 100644 --- a/packages/shared_preferences/shared_preferences_ios/example/README.md +++ b/packages/shared_preferences/shared_preferences_ios/example/README.md @@ -1,3 +1,9 @@ -# shared_preferences_example +# Platform Implementation Test App -Demonstrates how to use the shared_preferences plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/shared_preferences/shared_preferences_linux/example/README.md b/packages/shared_preferences/shared_preferences_linux/example/README.md index c060637c7ec5..96b8bb17dbff 100644 --- a/packages/shared_preferences/shared_preferences_linux/example/README.md +++ b/packages/shared_preferences/shared_preferences_linux/example/README.md @@ -1,3 +1,9 @@ -# shared_preferences_example +# Platform Implementation Test App -Demonstrates how to use the shared_preferences plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/shared_preferences/shared_preferences_macos/example/README.md b/packages/shared_preferences/shared_preferences_macos/example/README.md index c060637c7ec5..96b8bb17dbff 100644 --- a/packages/shared_preferences/shared_preferences_macos/example/README.md +++ b/packages/shared_preferences/shared_preferences_macos/example/README.md @@ -1,3 +1,9 @@ -# shared_preferences_example +# Platform Implementation Test App -Demonstrates how to use the shared_preferences plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/shared_preferences/shared_preferences_web/example/README.md b/packages/shared_preferences/shared_preferences_web/example/README.md index 4348451b14e2..0e51ae5ecbd2 100644 --- a/packages/shared_preferences/shared_preferences_web/example/README.md +++ b/packages/shared_preferences/shared_preferences_web/example/README.md @@ -1,4 +1,14 @@ -# Testing +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. + +## Testing This package uses `package:integration_test` to run its tests in a web browser. diff --git a/packages/shared_preferences/shared_preferences_windows/example/README.md b/packages/shared_preferences/shared_preferences_windows/example/README.md index 30c7f7e50c3b..96b8bb17dbff 100644 --- a/packages/shared_preferences/shared_preferences_windows/example/README.md +++ b/packages/shared_preferences/shared_preferences_windows/example/README.md @@ -1,3 +1,9 @@ -# shared_preferences_windows_example +# Platform Implementation Test App -Demonstrates how to use the shared_preferences_windows plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/url_launcher/url_launcher_android/example/README.md b/packages/url_launcher/url_launcher_android/example/README.md index 35b4bdb7031e..96b8bb17dbff 100644 --- a/packages/url_launcher/url_launcher_android/example/README.md +++ b/packages/url_launcher/url_launcher_android/example/README.md @@ -1,3 +1,9 @@ -# url_launcher_example +# Platform Implementation Test App -Demonstrates how to use the url_launcher plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/url_launcher/url_launcher_ios/example/README.md b/packages/url_launcher/url_launcher_ios/example/README.md index 35b4bdb7031e..96b8bb17dbff 100644 --- a/packages/url_launcher/url_launcher_ios/example/README.md +++ b/packages/url_launcher/url_launcher_ios/example/README.md @@ -1,3 +1,9 @@ -# url_launcher_example +# Platform Implementation Test App -Demonstrates how to use the url_launcher plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/url_launcher/url_launcher_linux/example/README.md b/packages/url_launcher/url_launcher_linux/example/README.md index 35b4bdb7031e..96b8bb17dbff 100644 --- a/packages/url_launcher/url_launcher_linux/example/README.md +++ b/packages/url_launcher/url_launcher_linux/example/README.md @@ -1,3 +1,9 @@ -# url_launcher_example +# Platform Implementation Test App -Demonstrates how to use the url_launcher plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/url_launcher/url_launcher_macos/example/README.md b/packages/url_launcher/url_launcher_macos/example/README.md index 35b4bdb7031e..96b8bb17dbff 100644 --- a/packages/url_launcher/url_launcher_macos/example/README.md +++ b/packages/url_launcher/url_launcher_macos/example/README.md @@ -1,3 +1,9 @@ -# url_launcher_example +# Platform Implementation Test App -Demonstrates how to use the url_launcher plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/url_launcher/url_launcher_web/example/README.md b/packages/url_launcher/url_launcher_web/example/README.md index 3cdecfab2ab9..0e51ae5ecbd2 100644 --- a/packages/url_launcher/url_launcher_web/example/README.md +++ b/packages/url_launcher/url_launcher_web/example/README.md @@ -1,4 +1,14 @@ -# Testing +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. + +## Testing This package uses `package:integration_test` to run its tests in a web browser. @@ -7,6 +17,3 @@ in the Flutter wiki for instructions to setup and run the tests in this package. Check [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests) for more info. - -See [Plugin Tests > Web Tests > Mocks](https://github.com/flutter/flutter/wiki/Plugin-Tests#mocks) -in the Flutter wiki for more information about the `.mocks.dart` files in this package. \ No newline at end of file diff --git a/packages/url_launcher/url_launcher_windows/example/README.md b/packages/url_launcher/url_launcher_windows/example/README.md index e444852697b9..96b8bb17dbff 100644 --- a/packages/url_launcher/url_launcher_windows/example/README.md +++ b/packages/url_launcher/url_launcher_windows/example/README.md @@ -1,3 +1,9 @@ -# url_launcher_windows_example +# Platform Implementation Test App -Demonstrates the url_launcher_windows plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/video_player/video_player_android/example/README.md b/packages/video_player/video_player_android/example/README.md index f5974e947c00..96b8bb17dbff 100644 --- a/packages/video_player/video_player_android/example/README.md +++ b/packages/video_player/video_player_android/example/README.md @@ -1,3 +1,9 @@ -# video_player_example +# Platform Implementation Test App -Demonstrates how to use the video_player plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/video_player/video_player_avfoundation/example/README.md b/packages/video_player/video_player_avfoundation/example/README.md index f5974e947c00..96b8bb17dbff 100644 --- a/packages/video_player/video_player_avfoundation/example/README.md +++ b/packages/video_player/video_player_avfoundation/example/README.md @@ -1,3 +1,9 @@ -# video_player_example +# Platform Implementation Test App -Demonstrates how to use the video_player plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/video_player/video_player_web/example/README.md b/packages/video_player/video_player_web/example/README.md index 8a6e74b107ea..0e51ae5ecbd2 100644 --- a/packages/video_player/video_player_web/example/README.md +++ b/packages/video_player/video_player_web/example/README.md @@ -1,4 +1,14 @@ -# Testing +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. + +## Testing This package uses `package:integration_test` to run its tests in a web browser. @@ -6,4 +16,4 @@ See [Plugin Tests > Web Tests](https://github.com/flutter/flutter/wiki/Plugin-Te in the Flutter wiki for instructions to setup and run the tests in this package. Check [flutter.dev > Integration testing](https://flutter.dev/docs/testing/integration-tests) -for more info. \ No newline at end of file +for more info. diff --git a/packages/webview_flutter/webview_flutter_android/example/README.md b/packages/webview_flutter/webview_flutter_android/example/README.md index e5bd6e20db63..96b8bb17dbff 100644 --- a/packages/webview_flutter/webview_flutter_android/example/README.md +++ b/packages/webview_flutter/webview_flutter_android/example/README.md @@ -1,3 +1,9 @@ -# webview_flutter_example +# Platform Implementation Test App -Demonstrates how to use the webview_flutter plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/webview_flutter/webview_flutter_web/example/README.md b/packages/webview_flutter/webview_flutter_web/example/README.md index e5bd6e20db63..96b8bb17dbff 100644 --- a/packages/webview_flutter/webview_flutter_web/example/README.md +++ b/packages/webview_flutter/webview_flutter_web/example/README.md @@ -1,3 +1,9 @@ -# webview_flutter_example +# Platform Implementation Test App -Demonstrates how to use the webview_flutter plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/README.md b/packages/webview_flutter/webview_flutter_wkwebview/example/README.md index e5bd6e20db63..96b8bb17dbff 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/README.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/README.md @@ -1,3 +1,9 @@ -# webview_flutter_example +# Platform Implementation Test App -Demonstrates how to use the webview_flutter plugin. +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index 8dbb4840a672..f6dfb0e58266 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,3 +1,9 @@ +## NEXT + +* Adds `readme-check` validation that the example/README.md for a federated + plugin's implementation packages has a warning about the intended use of the + example instead of the template boilerplate. + ## 0.10.0 * Improves the logic in `version-check` to determine what changes don't require diff --git a/script/tool/lib/src/readme_check_command.dart b/script/tool/lib/src/readme_check_command.dart index 4acf997a0085..e3fbc7bc454d 100644 --- a/script/tool/lib/src/readme_check_command.dart +++ b/script/tool/lib/src/readme_check_command.dart @@ -104,11 +104,8 @@ class ReadmeCheckCommand extends PackageLoopingCommand { errors.add(blockValidationError); } - if (_containsTemplateBoilerplate(readmeLines)) { - printError('${indentation}The boilerplate section about getting started ' - 'with Flutter should not be left in.'); - errors.add('Contains template boilerplate'); - } + errors.addAll(_validateBoilerplate(readmeLines, + mainPackage: mainPackage, isExample: isExample)); // Check if this is the main readme for a plugin, and if so enforce extra // checks. @@ -284,10 +281,63 @@ ${indentation * 2}Please use standard capitalizations: ${sortedListString(expect return null; } - /// Returns true if the README still has the boilerplate from the - /// `flutter create` templates. - bool _containsTemplateBoilerplate(List readmeLines) { + /// Validates [readmeLines], outputing error messages for any issue and + /// returning an array of error summaries (if any). + /// + /// Returns an empty array if validation passes. + List _validateBoilerplate( + List readmeLines, { + required RepositoryPackage mainPackage, + required bool isExample, + }) { + final List errors = []; + + if (_containsTemplateFlutterBoilerplate(readmeLines)) { + printError('${indentation}The boilerplate section about getting started ' + 'with Flutter should not be left in.'); + errors.add('Contains template boilerplate'); + } + + // Enforce a repository-standard message in implementation plugin examples, + // since they aren't typical examples, which has been a source of + // confusion for plugin clients who find them. + if (isExample && mainPackage.isPlatformImplementation) { + if (_containsExampleBoilerplate(readmeLines)) { + printError('${indentation}The boilerplate should not be left in for a ' + "federated plugin implementation package's example."); + errors.add('Contains template boilerplate'); + } + if (!_containsImplementationExampleExplanation(readmeLines)) { + printError('${indentation}The example README for a platform ' + 'implementation package should warn readers about its intended ' + 'use. Please copy the example README from another implementation ' + 'package in this repository.'); + errors.add('Missing implementation package example warning'); + } + } + + return errors; + } + + /// Returns true if the README still has unwanted parts of the boilerplate + /// from the `flutter create` templates. + bool _containsTemplateFlutterBoilerplate(List readmeLines) { return readmeLines.any((String line) => line.contains('For help getting started with Flutter')); } + + /// Returns true if the README still has the generic description of an + /// example from the `flutter create` templates. + bool _containsExampleBoilerplate(List readmeLines) { + return readmeLines + .any((String line) => line.contains('Demonstrates how to use the')); + } + + /// Returns true if the README contains the repository-standard explanation of + /// the purpose of a federated plugin implementation's example. + bool _containsImplementationExampleExplanation(List readmeLines) { + return readmeLines.contains('# Platform Implementation Test App') && + readmeLines + .any((String line) => line.contains('This is a test app for')); + } } diff --git a/script/tool/test/readme_check_command_test.dart b/script/tool/test/readme_check_command_test.dart index 37224fddc56b..eb2b6c8e7512 100644 --- a/script/tool/test/readme_check_command_test.dart +++ b/script/tool/test/readme_check_command_test.dart @@ -176,6 +176,147 @@ samples, guidance on mobile development, and a full API reference. ); }); + test( + 'fails when a plugin implementation package example README has the ' + 'template boilerplate', () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin_ios', packagesDir.childDirectory('a_plugin')); + package.getExamples().first.readmeFile.writeAsStringSync(''' +# a_plugin_ios_example + +Demonstrates how to use the a_plugin_ios plugin. +'''); + + Error? commandError; + final List output = await runCapturingPrint( + runner, ['readme-check'], errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains('The boilerplate should not be left in for a federated plugin ' + "implementation package's example."), + contains('Contains template boilerplate'), + ]), + ); + }); + + test( + 'allows the template boilerplate in the example README for packages ' + 'other than plugin implementation packages', () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir.childDirectory('a_plugin'), + platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.inline), + }, + ); + // Write a README with an OS support table so that the main README check + // passes. + package.readmeFile.writeAsStringSync(''' +# a_plugin + +| | Android | +|----------------|---------| +| **Support** | SDK 19+ | + +A great plugin. +'''); + package.getExamples().first.readmeFile.writeAsStringSync(''' +# a_plugin_example + +Demonstrates how to use the a_plugin plugin. +'''); + + final List output = + await runCapturingPrint(runner, ['readme-check']); + + expect( + output, + containsAll([ + contains(' Checking README.md...'), + contains(' Checking example/README.md...'), + ]), + ); + }); + + test( + 'fails when a plugin implementation package example README does not have ' + 'the repo-standard message', () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin_ios', packagesDir.childDirectory('a_plugin')); + package.getExamples().first.readmeFile.writeAsStringSync(''' +# a_plugin_ios_example + +Some random description. +'''); + + Error? commandError; + final List output = await runCapturingPrint( + runner, ['readme-check'], errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains('The example README for a platform implementation package ' + 'should warn readers about its intended use. Please copy the ' + 'example README from another implementation package in this ' + 'repository.'), + contains('Missing implementation package example warning'), + ]), + ); + }); + + test('passes for a plugin implementation package with the expected content', + () async { + final RepositoryPackage package = createFakePlugin( + 'a_plugin', + packagesDir.childDirectory('a_plugin'), + platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.inline), + }, + ); + // Write a README with an OS support table so that the main README check + // passes. + package.readmeFile.writeAsStringSync(''' +# a_plugin + +| | Android | +|----------------|---------| +| **Support** | SDK 19+ | + +A great plugin. +'''); + package.getExamples().first.readmeFile.writeAsStringSync(''' +# Platform Implementation Test App + +This is a test app for manual testing and automated integration testing +of this platform implementation. It is not intended to demonstrate actual use of +this package, since the intent is that plugin clients use the app-facing +package. + +Unless you are making changes to this implementation package, this example is +very unlikely to be relevant. +'''); + + final List output = + await runCapturingPrint(runner, ['readme-check']); + + expect( + output, + containsAll([ + contains(' Checking README.md...'), + contains(' Checking example/README.md...'), + ]), + ); + }); + test( 'fails when multi-example top-level example directory README still has ' 'application template boilerplate', () async { From 7c6c784c2bf51e99af25ad7a7c3bc2f7370e964d Mon Sep 17 00:00:00 2001 From: Alex Li Date: Fri, 23 Sep 2022 04:09:33 +0800 Subject: [PATCH 004/133] [video_player] Fix invalid link in CHANGELOG on pub.dev (#6446) --- packages/video_player/video_player/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 7a47cce54a6e..53cfabf31e78 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -18,7 +18,7 @@ ## 2.4.3 -* Fixes Android to correctly display videos recorded in landscapeRight (https://github.com/flutter/flutter/issues/60327). +* Fixes Android to correctly display videos recorded in landscapeRight ([#60327](https://github.com/flutter/flutter/issues/60327)). * Fixes order-dependent unit tests. ## 2.4.2 From 0177355a8dd9962ca65ada80ad995557784bf285 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:50:45 -0400 Subject: [PATCH 005/133] [webview_flutter_android] Expose the Java InstanceManager (#6421) --- .../webview_flutter_android/CHANGELOG.md | 4 ++ .../webviewflutter/InstanceManager.java | 3 ++ .../webviewflutter/WebViewFlutterPlugin.java | 7 +++ .../webviewflutter/WebViewHostApiImpl.java | 5 +++ .../WebViewFlutterPluginTest.java | 45 +++++++++++++++++++ .../webview_flutter_android/pubspec.yaml | 2 +- 6 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewFlutterPluginTest.java diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 910d20dda6d1..b37ada2225f0 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.10.2 + +* Adds a getter to expose the Java InstanceManager. + ## 2.10.1 * Adds a method to the `WebView` wrapper to retrieve the X and Y positions simultaneously. diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/InstanceManager.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/InstanceManager.java index 306dc20be47d..fefd577ee9b5 100644 --- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/InstanceManager.java +++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/InstanceManager.java @@ -15,6 +15,9 @@ /** * Maintains instances used to communicate with the corresponding objects in Dart. * + *

Objects stored in this container are represented by an object in Dart that is also stored in + * an InstanceManager with the same identifier. + * *

When an instance is added with an identifier, either can be used to retrieve the other. * *

Added instances are added as a weak reference and a strong reference. When the strong diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java index 8db976a26937..fe7615c664a4 100644 --- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java +++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewFlutterPlugin.java @@ -8,6 +8,7 @@ import android.os.Handler; import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.embedding.engine.plugins.activity.ActivityAware; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; @@ -166,4 +167,10 @@ private void updateContext(Context context) { webViewHostApi.setContext(context); javaScriptChannelHostApi.setPlatformThreadHandler(new Handler(context.getMainLooper())); } + + /** Maintains instances used to communicate with the corresponding objects in Dart. */ + @Nullable + public InstanceManager getInstanceManager() { + return instanceManager; + } } diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java index f257ace71b0d..778ad611d05f 100644 --- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java +++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewHostApiImpl.java @@ -511,4 +511,9 @@ public void setBackgroundColor(Long instanceId, Long color) { final WebView webView = (WebView) instanceManager.getInstance(instanceId); webView.setBackgroundColor(color.intValue()); } + + /** Maintains instances used to communicate with the corresponding WebView Dart object. */ + public InstanceManager getInstanceManager() { + return instanceManager; + } } diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewFlutterPluginTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewFlutterPluginTest.java new file mode 100644 index 000000000000..16dc6cf5de2b --- /dev/null +++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewFlutterPluginTest.java @@ -0,0 +1,45 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.webviewflutter; + +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.when; + +import android.content.Context; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.platform.PlatformViewRegistry; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class WebViewFlutterPluginTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock Context mockContext; + + @Mock BinaryMessenger mockBinaryMessenger; + + @Mock PlatformViewRegistry mockViewRegistry; + + @Mock FlutterPlugin.FlutterPluginBinding mockPluginBinding; + + @Test + public void getInstanceManagerAfterOnAttachedToEngine() { + final WebViewFlutterPlugin webViewFlutterPlugin = new WebViewFlutterPlugin(); + + when(mockPluginBinding.getApplicationContext()).thenReturn(mockContext); + when(mockPluginBinding.getPlatformViewRegistry()).thenReturn(mockViewRegistry); + when(mockPluginBinding.getBinaryMessenger()).thenReturn(mockBinaryMessenger); + + webViewFlutterPlugin.onAttachedToEngine(mockPluginBinding); + + assertNotNull(webViewFlutterPlugin.getInstanceManager()); + + webViewFlutterPlugin.onDetachedFromEngine(mockPluginBinding); + } +} diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index 62f4cc97aa06..f5f2e3c34e69 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_android description: A Flutter plugin that provides a WebView widget on Android. repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutter/webview_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 2.10.1 +version: 2.10.2 environment: sdk: ">=2.14.0 <3.0.0" From ff5b28a8af065094ba6256df3fcd6325357c8883 Mon Sep 17 00:00:00 2001 From: hellohuanlin <41930132+hellohuanlin@users.noreply.github.com> Date: Thu, 22 Sep 2022 15:52:25 -0700 Subject: [PATCH 006/133] [quick_actions]Migrate the plugin class to Swift, and remove custom modulemap (#6369) --- .../quick_actions_ios/CHANGELOG.md | 5 + .../RunnerTests/FLTQuickActionsPluginTests.m | 80 ++++++++------- .../FLTShortcutStateManagerTests.m | 1 - .../ios/Classes/FLTQuickActionsPlugin.h | 14 --- .../ios/Classes/FLTQuickActionsPlugin.m | 99 ------------------- .../FLTShortcutStateManager.h | 0 .../FLTQuickActionsPlugin_Test.h | 23 ----- .../ios/Classes/QuickActionsPlugin.modulemap | 11 --- .../ios/Classes/QuickActionsPlugin.swift | 90 +++++++++++++++++ .../ios/Classes/quick_actions_ios-umbrella.h | 10 -- .../ios/quick_actions_ios.podspec | 11 ++- .../quick_actions_ios/pubspec.yaml | 4 +- 12 files changed, 146 insertions(+), 202 deletions(-) delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.h delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.m rename packages/quick_actions/quick_actions_ios/ios/Classes/{PrivateHeaders => }/FLTShortcutStateManager.h (100%) delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTQuickActionsPlugin_Test.h delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.modulemap create mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift delete mode 100644 packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index 7334bbd6a632..e002bd70ac09 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.1 + +* Removes custom modulemap file with "Test" submodule and private headers for Swift migration. +* Migrates `FLTQuickActionsPlugin` class to Swift. + ## 1.0.0 * Updates version to 1.0 to reflect current status. diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m index b47f89848bbc..89651b573822 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTQuickActionsPluginTests.m @@ -4,7 +4,6 @@ @import Flutter; @import quick_actions_ios; -@import quick_actions_ios.Test; @import XCTest; #import @@ -26,9 +25,9 @@ - (void)testHandleMethodCall_setShortcutItems { FLTShortcutStateManager *mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:mockShortcutStateManager]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + shortcutStateManager:mockShortcutStateManager]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; [plugin handleMethodCall:call @@ -45,9 +44,9 @@ - (void)testHandleMethodCall_clearShortcutItems { FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"clearShortcutItems" arguments:nil]; FLTShortcutStateManager *mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:mockShortcutStateManager]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + shortcutStateManager:mockShortcutStateManager]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; [plugin handleMethodCall:call @@ -63,9 +62,9 @@ - (void)testHandleMethodCall_getLaunchAction { FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getLaunchAction" arguments:nil]; - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result block must be called."]; [plugin handleMethodCall:call @@ -79,9 +78,9 @@ - (void)testHandleMethodCall_getLaunchAction { - (void)testHandleMethodCall_nonExistMethods { FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"nonExist" arguments:nil]; - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; XCTestExpectation *resultExpectation = [self expectationWithDescription:@"result must be called."]; [plugin @@ -97,9 +96,9 @@ - (void)testHandleMethodCall_nonExistMethods { - (void)testApplicationPerformActionForShortcutItem { id mockChannel = OCMClassMock([FlutterMethodChannel class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:mockChannel - shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:mockChannel + shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"SearchTheThing" @@ -118,9 +117,9 @@ - (void)testApplicationPerformActionForShortcutItem { - (void)testApplicationDidFinishLaunchingWithOptions_launchWithShortcut { id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:mockShortcutStateManager]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"SearchTheThing" @@ -138,9 +137,9 @@ - (void)testApplicationDidFinishLaunchingWithOptions_launchWithShortcut { } - (void)testApplicationDidFinishLaunchingWithOptions_launchWithoutShortcut { - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) - shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:OCMClassMock([FlutterMethodChannel class]) + shortcutStateManager:OCMClassMock([FLTShortcutStateManager class])]; BOOL launchResult = [plugin application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:@{}]; XCTAssertTrue(launchResult, @@ -150,11 +149,14 @@ - (void)testApplicationDidFinishLaunchingWithOptions_launchWithoutShortcut { - (void)testApplicationDidBecomeActive_launchWithoutShortcut { id mockChannel = OCMClassMock([FlutterMethodChannel class]); id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:mockChannel - shortcutStateManager:mockShortcutStateManager]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:mockChannel + shortcutStateManager:mockShortcutStateManager]; - [plugin application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:@{}]; + BOOL launchResult = [plugin application:[UIApplication sharedApplication] + didFinishLaunchingWithOptions:@{}]; + XCTAssertTrue(launchResult, + @"didFinishLaunchingWithOptions must return true if not launched from shortcut."); [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; OCMVerify(never(), [mockChannel invokeMethod:OCMOCK_ANY arguments:OCMOCK_ANY]); } @@ -162,9 +164,9 @@ - (void)testApplicationDidBecomeActive_launchWithoutShortcut { - (void)testApplicationDidBecomeActive_launchWithShortcut { id mockChannel = OCMClassMock([FlutterMethodChannel class]); id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:mockChannel - shortcutStateManager:mockShortcutStateManager]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:mockChannel + shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"SearchTheThing" @@ -173,9 +175,10 @@ - (void)testApplicationDidBecomeActive_launchWithShortcut { icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"search_the_thing.png"] userInfo:nil]; - [plugin application:[UIApplication sharedApplication] - didFinishLaunchingWithOptions:@{UIApplicationLaunchOptionsShortcutItemKey : item}]; - + BOOL launchResult = [plugin application:[UIApplication sharedApplication] + didFinishLaunchingWithOptions:@{UIApplicationLaunchOptionsShortcutItemKey : item}]; + XCTAssertFalse(launchResult, + @"didFinishLaunchingWithOptions must return false if launched from shortcut."); [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; OCMVerify([mockChannel invokeMethod:@"launch" arguments:item.type]); } @@ -183,9 +186,9 @@ - (void)testApplicationDidBecomeActive_launchWithShortcut { - (void)testApplicationDidBecomeActive_launchWithShortcut_becomeActiveTwice { id mockChannel = OCMClassMock([FlutterMethodChannel class]); id mockShortcutStateManager = OCMClassMock([FLTShortcutStateManager class]); - FLTQuickActionsPlugin *plugin = - [[FLTQuickActionsPlugin alloc] initWithChannel:mockChannel - shortcutStateManager:mockShortcutStateManager]; + QuickActionsPlugin *plugin = + [[QuickActionsPlugin alloc] initWithChannel:mockChannel + shortcutStateManager:mockShortcutStateManager]; UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"SearchTheThing" @@ -194,9 +197,10 @@ - (void)testApplicationDidBecomeActive_launchWithShortcut_becomeActiveTwice { icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"search_the_thing.png"] userInfo:nil]; - [plugin application:[UIApplication sharedApplication] - didFinishLaunchingWithOptions:@{UIApplicationLaunchOptionsShortcutItemKey : item}]; - + BOOL launchResult = [plugin application:[UIApplication sharedApplication] + didFinishLaunchingWithOptions:@{UIApplicationLaunchOptionsShortcutItemKey : item}]; + XCTAssertFalse(launchResult, + @"didFinishLaunchingWithOptions must return false if launched from shortcut."); [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; [plugin applicationDidBecomeActive:[UIApplication sharedApplication]]; // shortcut should only be handled once per launch. diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTShortcutStateManagerTests.m b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTShortcutStateManagerTests.m index f5b8b3405fc8..96fbf229e566 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTShortcutStateManagerTests.m +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerTests/FLTShortcutStateManagerTests.m @@ -3,7 +3,6 @@ // found in the LICENSE file. @import quick_actions_ios; -@import quick_actions_ios.Test; @import XCTest; #import diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.h b/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.h deleted file mode 100644 index 63f615440dea..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.h +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -@import Flutter; - -@interface FLTQuickActionsPlugin : NSObject - -/// Unavailable. -- (instancetype)init NS_UNAVAILABLE; - -/// Unavailable. -+ (instancetype)new NS_UNAVAILABLE; -@end diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.m b/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.m deleted file mode 100644 index fb8994322a9b..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/FLTQuickActionsPlugin.m +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "FLTQuickActionsPlugin.h" -#import "FLTQuickActionsPlugin_Test.h" -#import "FLTShortcutStateManager.h" - -static NSString *const kChannelName = @"plugins.flutter.io/quick_actions_ios"; - -@interface FLTQuickActionsPlugin () -@property(nonatomic, strong) FlutterMethodChannel *channel; -/// The type of the shortcut item selected when launching the app. -@property(nonatomic, strong, nullable) NSString *launchingShortcutType; -@property(nonatomic, strong) FLTShortcutStateManager *shortcutStateManager; -@end - -@implementation FLTQuickActionsPlugin - -+ (void)registerWithRegistrar:(NSObject *)registrar { - FlutterMethodChannel *channel = - [FlutterMethodChannel methodChannelWithName:kChannelName - binaryMessenger:[registrar messenger]]; - FLTQuickActionsPlugin *instance = - [[FLTQuickActionsPlugin alloc] initWithChannel:channel - shortcutStateManager:[[FLTShortcutStateManager alloc] init]]; - [registrar addMethodCallDelegate:instance channel:channel]; - [registrar addApplicationDelegate:instance]; -} - -- (instancetype)initWithChannel:(FlutterMethodChannel *)channel - shortcutStateManager:(FLTShortcutStateManager *)shortcutStateManager { - if ((self = [super init])) { - _channel = channel; - _shortcutStateManager = shortcutStateManager; - } - return self; -} - -- (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result { - if ([call.method isEqualToString:@"setShortcutItems"]) { - [self.shortcutStateManager setShortcutItems:call.arguments]; - result(nil); - } else if ([call.method isEqualToString:@"clearShortcutItems"]) { - [self.shortcutStateManager setShortcutItems:@[]]; - result(nil); - } else if ([call.method isEqualToString:@"getLaunchAction"]) { - result(nil); - } else { - result(FlutterMethodNotImplemented); - } -} - -- (void)dealloc { - [_channel setMethodCallHandler:nil]; - _channel = nil; -} - -- (BOOL)application:(UIApplication *)application - performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem - completionHandler:(void (^)(BOOL succeeded))completionHandler - API_AVAILABLE(ios(9.0)) { - [self handleShortcut:shortcutItem.type]; - return YES; -} - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - UIApplicationShortcutItem *shortcutItem = - launchOptions[UIApplicationLaunchOptionsShortcutItemKey]; - if (shortcutItem) { - // Keep hold of the shortcut type and handle it in the - // `applicationDidBecomeActure:` method once the Dart MethodChannel - // is initialized. - self.launchingShortcutType = shortcutItem.type; - - // Return NO to indicate we handled the quick action to ensure - // the `application:performActionFor:` method is not called (as - // per Apple's documentation: - // https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622935-application?language=objc). - return NO; - } - return YES; -} - -- (void)applicationDidBecomeActive:(UIApplication *)application { - if (self.launchingShortcutType) { - [self handleShortcut:self.launchingShortcutType]; - self.launchingShortcutType = nil; - } -} - -#pragma mark Private functions - -- (void)handleShortcut:(NSString *)shortcut { - [self.channel invokeMethod:@"launch" arguments:shortcut]; -} - -@end diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTShortcutStateManager.h b/packages/quick_actions/quick_actions_ios/ios/Classes/FLTShortcutStateManager.h similarity index 100% rename from packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTShortcutStateManager.h rename to packages/quick_actions/quick_actions_ios/ios/Classes/FLTShortcutStateManager.h diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTQuickActionsPlugin_Test.h b/packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTQuickActionsPlugin_Test.h deleted file mode 100644 index 514d0633f198..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/PrivateHeaders/FLTQuickActionsPlugin_Test.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -@import Flutter; -#import "FLTShortcutStateManager.h" - -NS_ASSUME_NONNULL_BEGIN - -/// APIs exposed for unit tests. -@interface FLTQuickActionsPlugin () - -/// Initializes a FLTQuickActionsPlugin with the given method channel. -/// API exposed for unit tests. -/// @param channel A method channel. -/// @param shortcutStateManager An FLTShortcutStateManager that manages shortcut related states. -/// @return The initialized FLTQuickActionsPlugin. -- (instancetype)initWithChannel:(FlutterMethodChannel *)channel - shortcutStateManager:(FLTShortcutStateManager *)shortcutStateManager; - -@end - -NS_ASSUME_NONNULL_END diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.modulemap b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.modulemap deleted file mode 100644 index 3f7d7ce08203..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.modulemap +++ /dev/null @@ -1,11 +0,0 @@ -framework module quick_actions_ios { - umbrella header "quick_actions_ios-umbrella.h" - - export * - module * { export * } - - explicit module Test { - header "FLTQuickActionsPlugin_Test.h" - header "FLTShortcutStateManager.h" - } -} diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift new file mode 100644 index 000000000000..26d6d20f8c02 --- /dev/null +++ b/packages/quick_actions/quick_actions_ios/ios/Classes/QuickActionsPlugin.swift @@ -0,0 +1,90 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Flutter + +public final class QuickActionsPlugin: NSObject, FlutterPlugin { + + public static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel( + name: "plugins.flutter.io/quick_actions_ios", + binaryMessenger: registrar.messenger()) + let instance = QuickActionsPlugin(channel: channel) + registrar.addMethodCallDelegate(instance, channel: channel) + registrar.addApplicationDelegate(instance) + } + + private let channel: FlutterMethodChannel + private let shortcutStateManager: FLTShortcutStateManager + /// The type of the shortcut item selected when launching the app. + private var launchingShortcutType: String? = nil + + // TODO: (hellohuanlin) remove `@objc` attribute and make it non-public after migrating tests to Swift. + @objc + public init( + channel: FlutterMethodChannel, + shortcutStateManager: FLTShortcutStateManager = FLTShortcutStateManager() + ) { + self.channel = channel + self.shortcutStateManager = shortcutStateManager + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + switch call.method { + case "setShortcutItems": + // `arguments` must be an array of dictionaries + let items = call.arguments as! [[String: Any]] + shortcutStateManager.setShortcutItems(items) + result(nil) + case "clearShortcutItems": + shortcutStateManager.setShortcutItems([]) + result(nil) + case "getLaunchAction": + result(nil) + case _: + result(FlutterMethodNotImplemented) + } + } + + public func application( + _ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, + completionHandler: @escaping (Bool) -> Void + ) -> Bool { + handleShortcut(shortcutItem.type) + return true + } + + public func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [AnyHashable: Any] = [:] + ) -> Bool { + if let shortcutItem = launchOptions[UIApplication.LaunchOptionsKey.shortcutItem] + as? UIApplicationShortcutItem + { + // Keep hold of the shortcut type and handle it in the + // `applicationDidBecomeActive:` method once the Dart MethodChannel + // is initialized. + launchingShortcutType = shortcutItem.type + + // Return false to indicate we handled the quick action to ensure + // the `application:performActionFor:` method is not called (as + // per Apple's documentation: + // https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622935-application). + return false + } + return true + } + + public func applicationDidBecomeActive(_ application: UIApplication) { + if let shortcutType = launchingShortcutType { + handleShortcut(shortcutType) + launchingShortcutType = nil + } + } + + private func handleShortcut(_ shortcut: String) { + channel.invokeMethod("launch", arguments: shortcut) + } + +} diff --git a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h b/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h deleted file mode 100644 index d099a0411cf0..000000000000 --- a/packages/quick_actions/quick_actions_ios/ios/Classes/quick_actions_ios-umbrella.h +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import - -FOUNDATION_EXPORT double quickActionsIOSVersionNumber; -FOUNDATION_EXPORT const unsigned char quickActionsIOSVersionString[]; - -#import diff --git a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec index 68eaa6ff7dc9..d8090caa8ef6 100644 --- a/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec +++ b/packages/quick_actions/quick_actions_ios/ios/quick_actions_ios.podspec @@ -14,11 +14,14 @@ Downloaded by pub (not CocoaPods). s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } s.source = { :http => 'https://github.com/flutter/plugins/tree/main/packages/quick_actions' } s.documentation_url = 'https://pub.dev/packages/quick_actions' - s.source_files = 'Classes/**/*.{h,m}' - s.public_header_files = 'Classes/*.h' - s.private_header_files = 'Classes/PrivateHeaders/*.h' + s.swift_version = '5.0' + s.source_files = 'Classes/**/*.{h,m,swift}' + s.xcconfig = { + 'LIBRARY_SEARCH_PATHS' => '$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)/ $(SDKROOT)/usr/lib/swift', + 'LD_RUNPATH_SEARCH_PATHS' => '/usr/lib/swift', + } + s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' s.platform = :ios, '9.0' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } - s.module_map = 'Classes/QuickActionsPlugin.modulemap' end diff --git a/packages/quick_actions/quick_actions_ios/pubspec.yaml b/packages/quick_actions/quick_actions_ios/pubspec.yaml index 82fd25f06b2c..f01ae4aed9c3 100644 --- a/packages/quick_actions/quick_actions_ios/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: quick_actions_ios description: An implementation for the iOS platform of the Flutter `quick_actions` plugin. repository: https://github.com/flutter/plugins/tree/main/packages/quick_actions/quick_actions_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 1.0.0 +version: 1.0.1 environment: sdk: ">=2.15.0 <3.0.0" @@ -13,7 +13,7 @@ flutter: implements: quick_actions platforms: ios: - pluginClass: FLTQuickActionsPlugin + pluginClass: QuickActionsPlugin dartPluginClass: QuickActionsIos dependencies: From 8a8e67a7ec86ddf7d917442fe7cc438797e101da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 00:01:10 +0000 Subject: [PATCH 007/133] [gh_actions]: Bump github/codeql-action from 2.1.22 to 2.1.24 (#6451) --- .github/workflows/scorecards-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 3bcfdad7fb6b..6650853754af 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -50,6 +50,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b398f525a5587552e573b247ac661067fafa920b + uses: github/codeql-action/upload-sarif@904260d7d935dff982205cbdb42025ce30b7a34f with: sarif_file: results.sarif From 88dc5e33a327787a89b0e014425e8f2c528cfe10 Mon Sep 17 00:00:00 2001 From: Jami Couch Date: Thu, 22 Sep 2022 19:02:31 -0500 Subject: [PATCH 008/133] [google_sign_in] Fix issue obtaining serverAuthCode on Android and add forceCodeForRefreshToken parameter (#3356) --- AUTHORS | 1 + packages/google_sign_in/google_sign_in/AUTHORS | 1 + packages/google_sign_in/google_sign_in/CHANGELOG.md | 4 +++- .../google_sign_in/lib/google_sign_in.dart | 8 ++++++++ packages/google_sign_in/google_sign_in/pubspec.yaml | 6 +++--- .../google_sign_in/test/google_sign_in_test.dart | 10 ++++++++++ 6 files changed, 26 insertions(+), 4 deletions(-) diff --git a/AUTHORS b/AUTHORS index 31402c79d54a..3112c3b3fd05 100644 --- a/AUTHORS +++ b/AUTHORS @@ -68,3 +68,4 @@ Daniel Roek TheOneWithTheBraid Rulong Chen(陈汝龙) Hwanseok Kang +Twin Sun, LLC diff --git a/packages/google_sign_in/google_sign_in/AUTHORS b/packages/google_sign_in/google_sign_in/AUTHORS index 493a0b4ef9c2..35d24a5ae0b5 100644 --- a/packages/google_sign_in/google_sign_in/AUTHORS +++ b/packages/google_sign_in/google_sign_in/AUTHORS @@ -64,3 +64,4 @@ Aleksandr Yurkovskiy Anton Borries Alex Li Rahul Raj <64.rahulraj@gmail.com> +Twin Sun, LLC diff --git a/packages/google_sign_in/google_sign_in/CHANGELOG.md b/packages/google_sign_in/google_sign_in/CHANGELOG.md index 286365ef9601..93497841fbd5 100644 --- a/packages/google_sign_in/google_sign_in/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in/CHANGELOG.md @@ -1,6 +1,8 @@ -## NEXT +## 5.4.2 * Updates minimum Flutter version to 2.10. +* Adds override for `GoogleSignInPlatform.initWithParams`. +* Fixes tests to recognize new default `forceCodeForRefreshToken` request attribute. ## 5.4.1 diff --git a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart index 135c422adfb5..3ae022306fe6 100644 --- a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart +++ b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart @@ -179,12 +179,16 @@ class GoogleSignIn { /// The [hostedDomain] argument specifies a hosted domain restriction. By /// setting this, sign in will be restricted to accounts of the user in the /// specified domain. By default, the list of accounts will not be restricted. + /// + /// The [forceCodeForRefreshToken] is used on Android to ensure the authentication + /// code can be exchanged for a refresh token after the first request. GoogleSignIn({ this.signInOption = SignInOption.standard, this.scopes = const [], this.hostedDomain, this.clientId, this.serverClientId, + this.forceCodeForRefreshToken = false, }); /// Factory for creating default sign in user experience. @@ -250,6 +254,9 @@ class GoogleSignIn { /// server. final String? serverClientId; + /// Force the authorization code to be valid for a refresh token every time. Only needed on Android. + final bool forceCodeForRefreshToken; + final StreamController _currentUserController = StreamController.broadcast(); @@ -286,6 +293,7 @@ class GoogleSignIn { hostedDomain: hostedDomain, clientId: clientId, serverClientId: serverClientId, + forceCodeForRefreshToken: forceCodeForRefreshToken, )) ..catchError((dynamic _) { // Invalidate initialization if it errors out. diff --git a/packages/google_sign_in/google_sign_in/pubspec.yaml b/packages/google_sign_in/google_sign_in/pubspec.yaml index 50339902fe75..c32dee78468b 100644 --- a/packages/google_sign_in/google_sign_in/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for Google Sign-In, a secure authentication system for signing in with a Google account on Android and iOS. repository: https://github.com/flutter/plugins/tree/main/packages/google_sign_in/google_sign_in issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22 -version: 5.4.1 +version: 5.4.2 environment: @@ -23,8 +23,8 @@ flutter: dependencies: flutter: sdk: flutter - google_sign_in_android: ^6.0.0 - google_sign_in_ios: ^5.4.0 + google_sign_in_android: ^6.1.0 + google_sign_in_ios: ^5.5.0 google_sign_in_platform_interface: ^2.2.0 google_sign_in_web: ^0.10.0 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 b8676bda298e..b8a596b02065 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 @@ -80,6 +80,16 @@ void main() { verify(mockPlatform.signIn()); }); + test('forceCodeForRefreshToken sent with init method call', () async { + final GoogleSignIn googleSignIn = + GoogleSignIn(forceCodeForRefreshToken: true); + + await googleSignIn.signIn(); + + _verifyInit(mockPlatform, forceCodeForRefreshToken: true); + verify(mockPlatform.signIn()); + }); + test('signOut', () async { final GoogleSignIn googleSignIn = GoogleSignIn(); From 446c6f7ff79c845c87b527a93264ca246eef3555 Mon Sep 17 00:00:00 2001 From: hellohuanlin <41930132+hellohuanlin@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:03:37 -0700 Subject: [PATCH 009/133] [video_player]fix ios 16 bug where encrypted video stream is not showing (#6442) --- .../video_player_avfoundation/CHANGELOG.md | 3 +- .../ios/RunnerTests/VideoPlayerTests.m | 43 +++++++++++++ .../ios/RunnerUITests/VideoPlayerUITests.m | 53 ++++++++++++++- .../example/lib/main.dart | 64 ++++++++++++++++++- .../ios/Classes/FLTVideoPlayerPlugin.m | 26 ++++++++ .../video_player_avfoundation/pubspec.yaml | 2 +- 6 files changed, 185 insertions(+), 6 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 3c9cc2d371fd..cc4411c8c651 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.3.6 +* Fixes a bug in iOS 16 where videos from protected live streams are not shown. * Updates minimum Flutter version to 2.10. * Fixes violations of new analysis option use_named_constants. * Fixes avoid_redundant_argument_values lint warnings and minor typos. diff --git a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m index 7decd04bd168..813fca2b8e7d 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m +++ b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m @@ -11,6 +11,10 @@ @interface FLTVideoPlayer : NSObject @property(readonly, nonatomic) AVPlayer *player; +// This is to fix a bug (https://github.com/flutter/flutter/issues/111457) in iOS 16 with blank +// video for encrypted video streams. An invisible AVPlayerLayer is used to overwrite the +// protection of pixel buffers in those streams. +@property(readonly, nonatomic) AVPlayerLayer *playerLayer; @end @interface FLTVideoPlayerPlugin (Test) @@ -61,6 +65,45 @@ @interface VideoPlayerTests : XCTestCase @implementation VideoPlayerTests +- (void)testIOS16BugWithEncryptedVideoStream { + // This is to fix a bug (https://github.com/flutter/flutter/issues/111457) in iOS 16 with blank + // video for encrypted video streams. An invisible AVPlayerLayer is used to overwrite the + // protection of pixel buffers in those streams. + // Note that a better unit test is to validate that `copyPixelBuffer` API returns the pixel + // buffers as expected, which requires setting up the video player properly with a protected video + // stream (.m3u8 file). + NSObject *registry = + (NSObject *)[[UIApplication sharedApplication] delegate]; + NSObject *registrar = + [registry registrarForPlugin:@"testPlayerLayerWorkaround"]; + FLTVideoPlayerPlugin *videoPlayerPlugin = + [[FLTVideoPlayerPlugin alloc] initWithRegistrar:registrar]; + + FlutterError *error; + [videoPlayerPlugin initialize:&error]; + XCTAssertNil(error); + + FLTCreateMessage *create = [FLTCreateMessage + makeWithAsset:nil + uri:@"https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4" + packageName:nil + formatHint:nil + httpHeaders:@{}]; + FLTTextureMessage *textureMessage = [videoPlayerPlugin create:create error:&error]; + XCTAssertNil(error); + XCTAssertNotNil(textureMessage); + FLTVideoPlayer *player = videoPlayerPlugin.playersByTextureId[textureMessage.textureId]; + XCTAssertNotNil(player); + + if (@available(iOS 16.0, *)) { + XCTAssertNotNil(player.playerLayer, @"AVPlayerLayer should be present for iOS 16."); + XCTAssertNotNil(player.playerLayer.superlayer, + @"AVPlayerLayer should be added on screen for iOS 16."); + } else { + XCTAssertNil(player.playerLayer, @"AVPlayerLayer should not be present before iOS 16."); + } +} + - (void)testSeekToInvokesTextureFrameAvailableOnTextureRegistry { NSObject *mockTextureRegistry = OCMProtocolMock(@protocol(FlutterTextureRegistry)); diff --git a/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/VideoPlayerUITests.m b/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/VideoPlayerUITests.m index b9f0f16bb27b..531d4fdf213c 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/VideoPlayerUITests.m +++ b/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/VideoPlayerUITests.m @@ -4,6 +4,7 @@ @import os.log; @import XCTest; +@import CoreGraphics; @interface VideoPlayerUITests : XCTestCase @property(nonatomic, strong) XCUIApplication *app; @@ -46,7 +47,7 @@ - (void)testPlayVideo { XCTAssertTrue(foundPlaybackSpeed5x); // Cycle through tabs. - for (NSString *tabName in @[ @"Asset", @"Remote" ]) { + for (NSString *tabName in @[ @"Asset mp4", @"Remote mp4" ]) { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"label BEGINSWITH %@", tabName]; XCUIElement *unselectedTab = [app.staticTexts elementMatchingPredicate:predicate]; XCTAssertTrue([unselectedTab waitForExistenceWithTimeout:30.0]); @@ -60,4 +61,54 @@ - (void)testPlayVideo { } } +- (void)testEncryptedVideoStream { + // This is to fix a bug (https://github.com/flutter/flutter/issues/111457) in iOS 16 with blank + // video for encrypted video streams. + + NSString *tabName = @"Remote enc m3u8"; + + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"label BEGINSWITH %@", tabName]; + XCUIElement *unselectedTab = [self.app.staticTexts elementMatchingPredicate:predicate]; + XCTAssertTrue([unselectedTab waitForExistenceWithTimeout:30.0]); + XCTAssertFalse(unselectedTab.isSelected); + [unselectedTab tap]; + + XCUIElement *selectedTab = [self.app.otherElements + elementMatchingPredicate:[NSPredicate predicateWithFormat:@"label BEGINSWITH %@", tabName]]; + XCTAssertTrue([selectedTab waitForExistenceWithTimeout:30.0]); + XCTAssertTrue(selectedTab.isSelected); + + // Wait until the video is loaded. + [NSThread sleepForTimeInterval:60]; + + NSMutableSet *frames = [NSMutableSet set]; + int numberOfFrames = 60; + for (int i = 0; i < numberOfFrames; i++) { + UIImage *image = self.app.screenshot.image; + + // Plugin CI does not support attaching screenshot. + // Convert the image to base64 encoded string, and print it out for debugging purpose. + // NSLog truncates long strings, so need to scale downn image. + CGSize smallerSize = CGSizeMake(100, 200); + UIGraphicsBeginImageContextWithOptions(smallerSize, NO, 0.0); + [image drawInRect:CGRectMake(0, 0, smallerSize.width, smallerSize.height)]; + UIImage *smallerImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + // 0.5 compression is good enough for debugging purpose. + NSData *imageData = UIImageJPEGRepresentation(smallerImage, 0.5); + NSString *imageString = [imageData base64EncodedStringWithOptions:0]; + NSLog(@"frame %d image data:\n%@", i, imageString); + + [frames addObject:imageString]; + + // The sample interval must NOT be the same as video length. + // Otherwise it would always result in the same frame. + [NSThread sleepForTimeInterval:1]; + } + + // At least 1 loading and 2 distinct frames (3 in total) to validate that the video is playing. + XCTAssert(frames.count >= 3, @"Must have at least 3 distinct frames."); +} + @end diff --git a/packages/video_player/video_player_avfoundation/example/lib/main.dart b/packages/video_player/video_player_avfoundation/example/lib/main.dart index bca4e291efff..d385fd0ee66a 100644 --- a/packages/video_player/video_player_avfoundation/example/lib/main.dart +++ b/packages/video_player/video_player_avfoundation/example/lib/main.dart @@ -20,7 +20,7 @@ class _App extends StatelessWidget { @override Widget build(BuildContext context) { return DefaultTabController( - length: 2, + length: 3, child: Scaffold( key: const ValueKey('home_page'), appBar: AppBar( @@ -30,15 +30,20 @@ class _App extends StatelessWidget { tabs: [ Tab( icon: Icon(Icons.cloud), - text: 'Remote', + text: 'Remote mp4', ), - Tab(icon: Icon(Icons.insert_drive_file), text: 'Asset'), + Tab( + icon: Icon(Icons.favorite), + text: 'Remote enc m3u8', + ), + Tab(icon: Icon(Icons.insert_drive_file), text: 'Asset mp4'), ], ), ), body: TabBarView( children: [ _BumbleBeeRemoteVideo(), + _BumbleBeeEncryptedLiveStream(), _ButterFlyAssetVideo(), ], ), @@ -156,6 +161,59 @@ class _BumbleBeeRemoteVideoState extends State<_BumbleBeeRemoteVideo> { } } +class _BumbleBeeEncryptedLiveStream extends StatefulWidget { + @override + _BumbleBeeEncryptedLiveStreamState createState() => + _BumbleBeeEncryptedLiveStreamState(); +} + +class _BumbleBeeEncryptedLiveStreamState + extends State<_BumbleBeeEncryptedLiveStream> { + late MiniController _controller; + + @override + void initState() { + super.initState(); + _controller = MiniController.network( + 'https://flutter.github.io/assets-for-api-docs/assets/videos/hls/encrypted_bee.m3u8', + ); + + _controller.addListener(() { + setState(() {}); + }); + _controller.initialize(); + + _controller.play(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Column( + children: [ + Container(padding: const EdgeInsets.only(top: 20.0)), + const Text('With remote encrypted m3u8'), + Container( + padding: const EdgeInsets.all(20), + child: _controller.value.isInitialized + ? AspectRatio( + aspectRatio: _controller.value.aspectRatio, + child: VideoPlayer(_controller), + ) + : const Text('loading...'), + ), + ], + ), + ); + } +} + class _ControlsOverlay extends StatelessWidget { const _ControlsOverlay({Key? key, required this.controller}) : super(key: key); diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m index a95779b1cbab..645c86d6eade 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -36,6 +36,8 @@ - (void)onDisplayLink:(CADisplayLink *)link { @interface FLTVideoPlayer : NSObject @property(readonly, nonatomic) AVPlayer *player; @property(readonly, nonatomic) AVPlayerItemVideoOutput *videoOutput; +/// An invisible player layer used to access the pixel buffers in protected video streams in iOS 16. +@property(readonly, nonatomic) AVPlayerLayer *playerLayer; @property(readonly, nonatomic) CADisplayLink *displayLink; @property(nonatomic) FlutterEventChannel *eventChannel; @property(nonatomic) FlutterEventSink eventSink; @@ -132,6 +134,19 @@ NS_INLINE CGFloat radiansToDegrees(CGFloat radians) { return degrees; }; +NS_INLINE UIViewController *rootViewController() API_AVAILABLE(ios(16.0)) { + for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) { + if ([scene isKindOfClass:UIWindowScene.class]) { + for (UIWindow *window in ((UIWindowScene *)scene).windows) { + if (window.isKeyWindow) { + return window.rootViewController; + } + } + } + } + return nil; +} + - (AVMutableVideoComposition *)getVideoCompositionWithTransform:(CGAffineTransform)transform withAsset:(AVAsset *)asset withVideoTrack:(AVAssetTrack *)videoTrack { @@ -227,6 +242,14 @@ - (instancetype)initWithPlayerItem:(AVPlayerItem *)item _player = [AVPlayer playerWithPlayerItem:item]; _player.actionAtItemEnd = AVPlayerActionAtItemEndNone; + // This is to fix a bug (https://github.com/flutter/flutter/issues/111457) in iOS 16 with blank + // video for encrypted video streams. An invisible AVPlayerLayer is used to overwrite the + // protection of pixel buffers in those streams. + if (@available(iOS 16.0, *)) { + _playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player]; + [rootViewController().view.layer addSublayer:_playerLayer]; + } + [self createVideoOutputAndDisplayLink:frameUpdater]; [self addObservers:item]; @@ -458,6 +481,9 @@ - (FlutterError *_Nullable)onListenWithArguments:(id _Nullable)arguments /// so the channel is going to die or is already dead. - (void)disposeSansEventChannel { _disposed = YES; + if (@available(iOS 16.0, *)) { + [_playerLayer removeFromSuperlayer]; + } [_displayLink invalidate]; AVPlayerItem *currentItem = self.player.currentItem; [currentItem removeObserver:self forKeyPath:@"status"]; diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index 06042c34bad6..bd88ddf94876 100644 --- a/packages/video_player/video_player_avfoundation/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_avfoundation description: iOS implementation of the video_player plugin. repository: https://github.com/flutter/plugins/tree/main/packages/video_player/video_player_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.3.5 +version: 2.3.6 environment: sdk: ">=2.14.0 <3.0.0" From 3ba81503e7f71c5896ee2c1645f225086c082704 Mon Sep 17 00:00:00 2001 From: hellohuanlin <41930132+hellohuanlin@users.noreply.github.com> Date: Thu, 22 Sep 2022 19:24:41 -0700 Subject: [PATCH 010/133] [video_player]remove integration tests (#6471) --- .../ios/RunnerUITests/VideoPlayerUITests.m | 50 ------------------- 1 file changed, 50 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/VideoPlayerUITests.m b/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/VideoPlayerUITests.m index 531d4fdf213c..54c97030c3ae 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/VideoPlayerUITests.m +++ b/packages/video_player/video_player_avfoundation/example/ios/RunnerUITests/VideoPlayerUITests.m @@ -61,54 +61,4 @@ - (void)testPlayVideo { } } -- (void)testEncryptedVideoStream { - // This is to fix a bug (https://github.com/flutter/flutter/issues/111457) in iOS 16 with blank - // video for encrypted video streams. - - NSString *tabName = @"Remote enc m3u8"; - - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"label BEGINSWITH %@", tabName]; - XCUIElement *unselectedTab = [self.app.staticTexts elementMatchingPredicate:predicate]; - XCTAssertTrue([unselectedTab waitForExistenceWithTimeout:30.0]); - XCTAssertFalse(unselectedTab.isSelected); - [unselectedTab tap]; - - XCUIElement *selectedTab = [self.app.otherElements - elementMatchingPredicate:[NSPredicate predicateWithFormat:@"label BEGINSWITH %@", tabName]]; - XCTAssertTrue([selectedTab waitForExistenceWithTimeout:30.0]); - XCTAssertTrue(selectedTab.isSelected); - - // Wait until the video is loaded. - [NSThread sleepForTimeInterval:60]; - - NSMutableSet *frames = [NSMutableSet set]; - int numberOfFrames = 60; - for (int i = 0; i < numberOfFrames; i++) { - UIImage *image = self.app.screenshot.image; - - // Plugin CI does not support attaching screenshot. - // Convert the image to base64 encoded string, and print it out for debugging purpose. - // NSLog truncates long strings, so need to scale downn image. - CGSize smallerSize = CGSizeMake(100, 200); - UIGraphicsBeginImageContextWithOptions(smallerSize, NO, 0.0); - [image drawInRect:CGRectMake(0, 0, smallerSize.width, smallerSize.height)]; - UIImage *smallerImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - // 0.5 compression is good enough for debugging purpose. - NSData *imageData = UIImageJPEGRepresentation(smallerImage, 0.5); - NSString *imageString = [imageData base64EncodedStringWithOptions:0]; - NSLog(@"frame %d image data:\n%@", i, imageString); - - [frames addObject:imageString]; - - // The sample interval must NOT be the same as video length. - // Otherwise it would always result in the same frame. - [NSThread sleepForTimeInterval:1]; - } - - // At least 1 loading and 2 distinct frames (3 in total) to validate that the video is playing. - XCTAssert(frames.count >= 3, @"Must have at least 3 distinct frames."); -} - @end From 97d48f4cb610b4f1346e38d5a9919de145be20e6 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 23 Sep 2022 11:50:05 -0400 Subject: [PATCH 011/133] Roll Flutter from cf01ecd19e61 to b31f41bd1aa6 (50 revisions) (#6475) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 427e69ccf7d7..6db47f1c12cd 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -cf01ecd19e61b436c6d7f9c0f6d57ef84aeb0257 +b31f41bd1aa68531d30854937ac004d2f4ab2361 From 376a64fe7d27c18d6cf9c9750f5a3c4067b0e558 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Fri, 23 Sep 2022 17:38:04 -0400 Subject: [PATCH 012/133] [tools] Add 'run_tests.sh' to the dev-only list (#6474) --- script/tool/CHANGELOG.md | 3 +- .../lib/src/common/package_state_utils.dart | 3 ++ script/tool/pubspec.yaml | 2 +- .../test/common/package_state_utils_test.dart | 1 + .../tool/test/version_check_command_test.dart | 32 +++++++++++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index f6dfb0e58266..2417d0fa833c 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.10.0+1 +* Recognizes `run_test.sh` as a developer-only file in `version-check`. * Adds `readme-check` validation that the example/README.md for a federated plugin's implementation packages has a warning about the intended use of the example instead of the template boilerplate. diff --git a/script/tool/lib/src/common/package_state_utils.dart b/script/tool/lib/src/common/package_state_utils.dart index 1cff65bb6b0c..c9465876f290 100644 --- a/script/tool/lib/src/common/package_state_utils.dart +++ b/script/tool/lib/src/common/package_state_utils.dart @@ -168,6 +168,9 @@ Future _isDevChange(List pathComponents, // The top-level "tool" directory is for non-client-facing utility // code, such as test scripts. pathComponents.first == 'tool' || + // Entry point for the 'custom-test' command, which is only for CI and + // local testing. + pathComponents.first == 'run_tests.sh' || // Ignoring lints doesn't affect clients. pathComponents.contains('lint-baseline.xml') || await _isGradleTestDependencyChange(pathComponents, diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml index e51c7433aa5c..9b9d73288552 100644 --- a/script/tool/pubspec.yaml +++ b/script/tool/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_plugin_tools description: Productivity utils for flutter/plugins and flutter/packages repository: https://github.com/flutter/plugins/tree/main/script/tool -version: 0.10.0 +version: 0.10.0+1 dependencies: args: ^2.1.0 diff --git a/script/tool/test/common/package_state_utils_test.dart b/script/tool/test/common/package_state_utils_test.dart index 63ac1802e70c..c20951876e39 100644 --- a/script/tool/test/common/package_state_utils_test.dart +++ b/script/tool/test/common/package_state_utils_test.dart @@ -66,6 +66,7 @@ void main() { 'packages/a_plugin/example/ios/RunnerTests/Foo.m', 'packages/a_plugin/example/ios/RunnerUITests/info.plist', 'packages/a_plugin/tool/a_development_tool.dart', + 'packages/a_plugin/run_tests.sh', 'packages/a_plugin/CHANGELOG.md', ]; diff --git a/script/tool/test/version_check_command_test.dart b/script/tool/test/version_check_command_test.dart index 2ff48d618258..0e94712e9ef0 100644 --- a/script/tool/test/version_check_command_test.dart +++ b/script/tool/test/version_check_command_test.dart @@ -1059,6 +1059,38 @@ packages/plugin/android/build.gradle ]), ); }); + + test('allows missing CHANGELOG and version change for dev-only changes', + () async { + final RepositoryPackage plugin = + createFakePlugin('plugin', packagesDir, version: '1.0.0'); + + const String changelog = ''' +## 1.0.0 +* Some changes. +'''; + plugin.changelogFile.writeAsStringSync(changelog); + processRunner.mockProcessesForExecutable['git-show'] = [ + MockProcess(stdout: 'version: 1.0.0'), + ]; + processRunner.mockProcessesForExecutable['git-diff'] = [ + // File list. + MockProcess(stdout: ''' +packages/plugin/tool/run_tests.dart +packages/plugin/run_tests.sh +'''), + ]; + + final List output = + await _runWithMissingChangeDetection([]); + + expect( + output, + containsAllInOrder([ + contains('Running for plugin'), + ]), + ); + }); }); test('allows valid against pub', () async { From b4e53b337c6dbfb1e606f77184a0f0ead79a2d5e Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 24 Sep 2022 11:50:35 -0400 Subject: [PATCH 013/133] Roll Flutter from b31f41bd1aa6 to 07665fba77bc (22 revisions) (#6479) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 6db47f1c12cd..f3d11c356984 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -b31f41bd1aa68531d30854937ac004d2f4ab2361 +07665fba77bc6add0c729ea3c89e6f71e18f7110 From 45d6e0df271064d270bdd3b69053d3f719b51509 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sun, 25 Sep 2022 11:50:39 -0400 Subject: [PATCH 014/133] Roll Flutter from 07665fba77bc to 64f84f6a47d2 (4 revisions) (#6480) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index f3d11c356984..886179e55e79 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -07665fba77bc6add0c729ea3c89e6f71e18f7110 +64f84f6a47d276e4d79cb10c203adbddeeeae336 From fe3b542e5528a7d9bc1d8014885b55277d30caee Mon Sep 17 00:00:00 2001 From: Camille Simon <43054281+camsim99@users.noreply.github.com> Date: Mon, 26 Sep 2022 05:36:03 -0700 Subject: [PATCH 015/133] [camera] Add CameraSelector class to CameraX plugin (#6348) --- .../camera_android_camerax/CHANGELOG.md | 1 + .../android/build.gradle | 2 +- .../camerax/CameraAndroidCameraxPlugin.java | 2 + .../camerax/CameraSelectorFlutterApiImpl.java | 23 +++ .../camerax/CameraSelectorHostApiImpl.java | 67 +++++++ .../flutter/plugins/camerax/CameraXProxy.java | 13 ++ .../camerax/GeneratedCameraXLibrary.java | 124 ++++++++++++ .../plugins/camerax/InstanceManager.java | 5 + .../plugins/camerax/CameraSelectorTest.java | 97 ++++++++++ ...roid_camera_camerax_flutter_api_impls.dart | 8 + .../lib/src/camera_info.dart | 25 +-- .../lib/src/camera_selector.dart | 177 ++++++++++++++++++ .../lib/src/camerax_library.pigeon.dart | 105 +++++++++++ .../pigeons/camerax_library.dart | 12 ++ .../test/camera_selector_test.dart | 121 ++++++++++++ .../test/camera_selector_test.mocks.dart | 38 ++++ .../test/test_camerax_library.pigeon.dart | 58 ++++++ 17 files changed, 861 insertions(+), 17 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraSelectorTest.java create mode 100644 packages/camera/camera_android_camerax/lib/src/camera_selector.dart create mode 100644 packages/camera/camera_android_camerax/test/camera_selector_test.dart create mode 100644 packages/camera/camera_android_camerax/test/camera_selector_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 0f305eb8b4fd..2bdfa594b3be 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -2,3 +2,4 @@ * Creates camera_android_camerax plugin for development. * Adds CameraInfo class and removes unnecessary code from plugin. +* Adds CameraSelector class. diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index 5e9a9a8ec106..1772afebe429 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' + classpath 'com.android.tools.build:gradle:7.3.0' } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index 029a6dc4c8b7..bb5756a7e3b9 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -37,6 +37,8 @@ void setUp(BinaryMessenger binaryMessenger, Context context) { binaryMessenger, new CameraInfoHostApiImpl(instanceManager)); GeneratedCameraXLibrary.JavaObjectHostApi.setup( binaryMessenger, new JavaObjectHostApiImpl(instanceManager)); + GeneratedCameraXLibrary.CameraSelectorHostApi.setup( + binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); } @Override diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorFlutterApiImpl.java new file mode 100644 index 000000000000..6ca3782d8b59 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorFlutterApiImpl.java @@ -0,0 +1,23 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import androidx.camera.core.CameraSelector; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraSelectorFlutterApi; + +public class CameraSelectorFlutterApiImpl extends CameraSelectorFlutterApi { + private final InstanceManager instanceManager; + + public CameraSelectorFlutterApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + super(binaryMessenger); + this.instanceManager = instanceManager; + } + + void create(CameraSelector cameraSelector, Long lensFacing, Reply reply) { + create(instanceManager.addHostCreatedInstance(cameraSelector), lensFacing, reply); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorHostApiImpl.java new file mode 100644 index 000000000000..9c559a72e63c --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraSelectorHostApiImpl.java @@ -0,0 +1,67 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; +import androidx.camera.core.CameraInfo; +import androidx.camera.core.CameraSelector; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraSelectorHostApi; +import java.util.ArrayList; +import java.util.List; + +public class CameraSelectorHostApiImpl implements CameraSelectorHostApi { + private final BinaryMessenger binaryMessenger; + private final InstanceManager instanceManager; + + @VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy(); + + public CameraSelectorHostApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + } + + @Override + public void create(@NonNull Long identifier, Long lensFacing) { + CameraSelector.Builder cameraSelectorBuilder = cameraXProxy.createCameraSelectorBuilder(); + CameraSelector cameraSelector; + + if (lensFacing != null) { + cameraSelector = cameraSelectorBuilder.requireLensFacing(Math.toIntExact(lensFacing)).build(); + } else { + cameraSelector = cameraSelectorBuilder.build(); + } + + instanceManager.addDartCreatedInstance(cameraSelector, identifier); + } + + @Override + public List filter(@NonNull Long identifier, @NonNull List cameraInfoIds) { + CameraSelector cameraSelector = (CameraSelector) instanceManager.getInstance(identifier); + List cameraInfosForFilter = new ArrayList(); + + for (Number cameraInfoAsNumber : cameraInfoIds) { + Long cameraInfoId = cameraInfoAsNumber.longValue(); + + CameraInfo cameraInfo = (CameraInfo) instanceManager.getInstance(cameraInfoId); + cameraInfosForFilter.add(cameraInfo); + } + + List filteredCameraInfos = cameraSelector.filter(cameraInfosForFilter); + final CameraInfoFlutterApiImpl cameraInfoFlutterApiImpl = + new CameraInfoFlutterApiImpl(binaryMessenger, instanceManager); + List filteredCameraInfosIds = new ArrayList(); + + for (CameraInfo cameraInfo : filteredCameraInfos) { + cameraInfoFlutterApiImpl.create(cameraInfo, result -> {}); + Long filteredCameraInfoId = instanceManager.getIdentifierForStrongReference(cameraInfo); + filteredCameraInfosIds.add(filteredCameraInfoId); + } + + return filteredCameraInfosIds; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java new file mode 100644 index 000000000000..8063866d2fc6 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -0,0 +1,13 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import androidx.camera.core.CameraSelector; + +public class CameraXProxy { + public CameraSelector.Builder createCameraSelectorBuilder() { + return new CameraSelector.Builder(); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index ec3b81a8e9d8..e87a80db030c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -8,6 +8,7 @@ import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import io.flutter.plugin.common.BasicMessageChannel; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MessageCodec; @@ -15,6 +16,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; /** Generated class from Pigeon. */ @@ -187,6 +189,128 @@ public void create(@NonNull Long identifierArg, Reply callback) { } } + private static class CameraSelectorHostApiCodec extends StandardMessageCodec { + public static final CameraSelectorHostApiCodec INSTANCE = new CameraSelectorHostApiCodec(); + + private CameraSelectorHostApiCodec() {} + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface CameraSelectorHostApi { + void create(@NonNull Long identifier, @Nullable Long lensFacing); + + @NonNull + List filter(@NonNull Long identifier, @NonNull List cameraInfoIds); + + /** The codec used by CameraSelectorHostApi. */ + static MessageCodec getCodec() { + return CameraSelectorHostApiCodec.INSTANCE; + } + + /** + * Sets up an instance of `CameraSelectorHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup(BinaryMessenger binaryMessenger, CameraSelectorHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.create", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + Number lensFacingArg = (Number) args.get(1); + api.create( + (identifierArg == null) ? null : identifierArg.longValue(), + (lensFacingArg == null) ? null : lensFacingArg.longValue()); + wrapped.put("result", null); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraSelectorHostApi.filter", getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List cameraInfoIdsArg = (List) args.get(1); + if (cameraInfoIdsArg == null) { + throw new NullPointerException("cameraInfoIdsArg unexpectedly null."); + } + List output = + api.filter( + (identifierArg == null) ? null : identifierArg.longValue(), + cameraInfoIdsArg); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + private static class CameraSelectorFlutterApiCodec extends StandardMessageCodec { + public static final CameraSelectorFlutterApiCodec INSTANCE = + new CameraSelectorFlutterApiCodec(); + + private CameraSelectorFlutterApiCodec() {} + } + + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class CameraSelectorFlutterApi { + private final BinaryMessenger binaryMessenger; + + public CameraSelectorFlutterApi(BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + public interface Reply { + void reply(T reply); + } + + static MessageCodec getCodec() { + return CameraSelectorFlutterApiCodec.INSTANCE; + } + + public void create( + @NonNull Long identifierArg, @Nullable Long lensFacingArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.CameraSelectorFlutterApi.create", getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg, lensFacingArg)), + channelReply -> { + callback.reply(null); + }); + } + } + private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/InstanceManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/InstanceManager.java index 8981227073b5..9b549d7bd1ea 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/InstanceManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/InstanceManager.java @@ -122,11 +122,16 @@ public void addDartCreatedInstance(Object instance, long identifier) { /** * Adds a new instance that was instantiated from the host platform. * + *

If an instance has already been added, the identifier of the instance will be returned. + * * @param instance the instance to be stored. * @return the unique identifier stored with instance. */ public long addHostCreatedInstance(Object instance) { assertManagerIsNotClosed(); + if (containsInstance(instance)) { + return getIdentifierForStrongReference(instance); + } final long identifier = nextIdentifier++; addInstance(instance, identifier); return identifier; diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraSelectorTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraSelectorTest.java new file mode 100644 index 000000000000..2b27e08b5790 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/CameraSelectorTest.java @@ -0,0 +1,97 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import androidx.camera.core.CameraInfo; +import androidx.camera.core.CameraSelector; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class CameraSelectorTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public CameraSelector mockCameraSelector; + @Mock public BinaryMessenger mockBinaryMessenger; + + InstanceManager testInstanceManager; + + @Before + public void setUp() { + testInstanceManager = InstanceManager.open(identifier -> {}); + } + + @After + public void tearDown() { + testInstanceManager.close(); + } + + @Test + public void createTest() { + final CameraSelectorHostApiImpl cameraSelectorHostApi = + new CameraSelectorHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraXProxy mockCameraXProxy = mock(CameraXProxy.class); + final CameraSelector.Builder mockCameraSelectorBuilder = mock(CameraSelector.Builder.class); + + cameraSelectorHostApi.cameraXProxy = mockCameraXProxy; + when(mockCameraXProxy.createCameraSelectorBuilder()).thenReturn(mockCameraSelectorBuilder); + + when(mockCameraSelectorBuilder.requireLensFacing(1)).thenReturn(mockCameraSelectorBuilder); + when(mockCameraSelectorBuilder.build()).thenReturn(mockCameraSelector); + + cameraSelectorHostApi.create(0L, 1L); + + verify(mockCameraSelectorBuilder).requireLensFacing(CameraSelector.LENS_FACING_BACK); + assertEquals(testInstanceManager.getInstance(0L), mockCameraSelector); + } + + @Test + public void filterTest() { + final CameraSelectorHostApiImpl cameraSelectorHostApi = + new CameraSelectorHostApiImpl(mockBinaryMessenger, testInstanceManager); + final CameraInfo cameraInfo = mock(CameraInfo.class); + final List cameraInfosForFilter = Arrays.asList(cameraInfo); + final List cameraInfosIds = Arrays.asList(1L); + + testInstanceManager.addDartCreatedInstance(mockCameraSelector, 0); + testInstanceManager.addDartCreatedInstance(cameraInfo, 1); + + when(mockCameraSelector.filter(cameraInfosForFilter)).thenReturn(cameraInfosForFilter); + + assertEquals( + cameraSelectorHostApi.filter(0L, cameraInfosIds), + Arrays.asList(testInstanceManager.getIdentifierForStrongReference(cameraInfo))); + verify(mockCameraSelector).filter(cameraInfosForFilter); + } + + @Test + public void flutterApiCreateTest() { + final CameraSelectorFlutterApiImpl spyFlutterApi = + spy(new CameraSelectorFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + + spyFlutterApi.create(mockCameraSelector, 0L, reply -> {}); + + final long identifier = + Objects.requireNonNull( + testInstanceManager.getIdentifierForStrongReference(mockCameraSelector)); + verify(spyFlutterApi).create(eq(identifier), eq(0L), any()); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart index 8190a1ce1161..576260c0b7b8 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'camera_info.dart'; +import 'camera_selector.dart'; import 'camerax_library.pigeon.dart'; import 'java_object.dart'; @@ -12,11 +13,14 @@ class AndroidCameraXCameraFlutterApis { AndroidCameraXCameraFlutterApis({ JavaObjectFlutterApiImpl? javaObjectFlutterApi, CameraInfoFlutterApiImpl? cameraInfoFlutterApi, + CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); this.cameraInfoFlutterApi = cameraInfoFlutterApi ?? CameraInfoFlutterApiImpl(); + this.cameraSelectorFlutterApi = + cameraSelectorFlutterApi ?? CameraSelectorFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -33,11 +37,15 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [CameraInfo]. late final CameraInfoFlutterApiImpl cameraInfoFlutterApi; + /// Flutter Api for [CameraSelector]. + late final CameraSelectorFlutterApiImpl cameraSelectorFlutterApi; + /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { JavaObjectFlutterApi.setup(javaObjectFlutterApi); CameraInfoFlutterApi.setup(cameraInfoFlutterApi); + CameraSelectorFlutterApi.setup(cameraSelectorFlutterApi); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camera_info.dart b/packages/camera/camera_android_camerax/lib/src/camera_info.dart index 3edc7b4afad2..d03426f40027 100644 --- a/packages/camera/camera_android_camerax/lib/src/camera_info.dart +++ b/packages/camera/camera_android_camerax/lib/src/camera_info.dart @@ -20,9 +20,7 @@ class CameraInfo extends JavaObject { binaryMessenger: binaryMessenger, instanceManager: instanceManager) { _api = CameraInfoHostApiImpl( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager, - ); + binaryMessenger: binaryMessenger, instanceManager: instanceManager); AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); } @@ -36,23 +34,18 @@ class CameraInfo extends JavaObject { /// Host API implementation of [CameraInfo]. class CameraInfoHostApiImpl extends CameraInfoHostApi { /// Constructs a [CameraInfoHostApiImpl]. - CameraInfoHostApiImpl({ - this.binaryMessenger, - InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager, - super(binaryMessenger: binaryMessenger); - - /// Sends binary data across the Flutter platform barrier. - /// - /// If it is null, the default BinaryMessenger will be used which routes to - /// the host platform. - final BinaryMessenger? binaryMessenger; + CameraInfoHostApiImpl( + {super.binaryMessenger, InstanceManager? instanceManager}) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; + late final InstanceManager instanceManager; /// Gets sensor orientation degrees of [CameraInfo]. - Future getSensorRotationDegreesFromInstance(CameraInfo instance) async { + Future getSensorRotationDegreesFromInstance( + CameraInfo instance, + ) async { final int sensorRotationDegrees = await getSensorRotationDegrees( instanceManager.getIdentifier(instance)!); return sensorRotationDegrees; diff --git a/packages/camera/camera_android_camerax/lib/src/camera_selector.dart b/packages/camera/camera_android_camerax/lib/src/camera_selector.dart new file mode 100644 index 000000000000..dd08b9bc571d --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/camera_selector.dart @@ -0,0 +1,177 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/services.dart'; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camera_info.dart'; +import 'camerax_library.pigeon.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; + +/// Selects a camera for use. +/// +/// See https://developer.android.com/reference/androidx/camera/core/CameraSelector. +class CameraSelector extends JavaObject { + /// Creates a [CameraSelector]. + CameraSelector( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + this.lensFacing}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = CameraSelectorHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + _api.createFromInstance(this, lensFacing); + } + + /// Creates a detached [CameraSelector]. + CameraSelector.detached( + {BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + this.lensFacing}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = CameraSelectorHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + late final CameraSelectorHostApiImpl _api; + + /// ID for front facing lens. + static const int LENS_FACING_FRONT = 0; + + /// ID for back facing lens. + static const int LENS_FACING_BACK = 1; + + /// Selector for default front facing camera. + static CameraSelector getDefaultFrontCamera({ + BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + }) { + return CameraSelector( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + lensFacing: LENS_FACING_FRONT, + ); + } + + /// Selector for default back facing camera. + static CameraSelector getDefaultBackCamera({ + BinaryMessenger? binaryMessenger, + InstanceManager? instanceManager, + }) { + return CameraSelector( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + lensFacing: LENS_FACING_BACK, + ); + } + + /// Lens direction of this selector. + final int? lensFacing; + + /// Filters available cameras based on provided [CameraInfo]s. + Future> filter(List cameraInfos) { + return _api.filterFromInstance(this, cameraInfos); + } +} + +/// Host API implementation of [CameraSelector]. +class CameraSelectorHostApiImpl extends CameraSelectorHostApi { + /// Constructs a [CameraSelectorHostApiImpl]. + CameraSelectorHostApiImpl( + {this.binaryMessenger, InstanceManager? instanceManager}) + : super(binaryMessenger: binaryMessenger) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + late final InstanceManager instanceManager; + + /// Creates a [CameraSelector] with the lens direction provided if specified. + void createFromInstance(CameraSelector instance, int? lensFacing) { + int? identifier = instanceManager.getIdentifier(instance); + identifier ??= instanceManager.addDartCreatedInstance(instance, + onCopy: (CameraSelector original) { + return CameraSelector.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + lensFacing: original.lensFacing); + }); + + create(identifier, lensFacing); + } + + /// Filters a list of [CameraInfo]s based on the [CameraSelector]. + Future> filterFromInstance( + CameraSelector instance, + List cameraInfos, + ) async { + int? identifier = instanceManager.getIdentifier(instance); + identifier ??= instanceManager.addDartCreatedInstance(instance, + onCopy: (CameraSelector original) { + return CameraSelector.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + lensFacing: original.lensFacing); + }); + + final List cameraInfoIds = (cameraInfos.map( + (CameraInfo info) => instanceManager.getIdentifier(info)!)).toList(); + final List filteredCameraInfoIds = + await filter(identifier, cameraInfoIds); + if (filteredCameraInfoIds.isEmpty) { + return []; + } + return (filteredCameraInfoIds.map((int? id) => + instanceManager.getInstanceWithWeakReference(id!)! as CameraInfo)) + .toList(); + } +} + +/// Flutter API implementation of [CameraSelector]. +class CameraSelectorFlutterApiImpl implements CameraSelectorFlutterApi { + /// Constructs a [CameraSelectorFlutterApiImpl]. + CameraSelectorFlutterApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + final InstanceManager instanceManager; + + @override + void create(int identifier, int? lensFacing) { + instanceManager.addHostCreatedInstance( + CameraSelector.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + lensFacing: lensFacing), + identifier, + onCopy: (CameraSelector original) { + return CameraSelector.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + lensFacing: original.lensFacing); + }, + ); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart index 8d421836a587..a399001d35b0 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart @@ -158,3 +158,108 @@ abstract class CameraInfoFlutterApi { } } } + +class _CameraSelectorHostApiCodec extends StandardMessageCodec { + const _CameraSelectorHostApiCodec(); +} + +class CameraSelectorHostApi { + /// Constructor for [CameraSelectorHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + CameraSelectorHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = _CameraSelectorHostApiCodec(); + + Future create(int arg_identifier, int? arg_lensFacing) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_lensFacing]) + as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return; + } + } + + Future> filter( + int arg_identifier, List arg_cameraInfoIds) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier, arg_cameraInfoIds]) + as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else if (replyMap['result'] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyMap['result'] as List?)!.cast(); + } + } +} + +class _CameraSelectorFlutterApiCodec extends StandardMessageCodec { + const _CameraSelectorFlutterApiCodec(); +} + +abstract class CameraSelectorFlutterApi { + static const MessageCodec codec = _CameraSelectorFlutterApiCodec(); + + void create(int identifier, int? lensFacing); + static void setup(CameraSelectorFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraSelectorFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraSelectorFlutterApi.create was null, expected non-null int.'); + final int? arg_lensFacing = (args[1] as int?); + api.create(arg_identifier!, arg_lensFacing); + return; + }); + } + } + } +} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index d36634a9cac3..aace7a06b1fd 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -45,3 +45,15 @@ abstract class CameraInfoHostApi { abstract class CameraInfoFlutterApi { void create(int identifier); } + +@HostApi(dartHostTestHandler: 'TestCameraSelectorHostApi') +abstract class CameraSelectorHostApi { + void create(int identifier, int? lensFacing); + + List filter(int identifier, List cameraInfoIds); +} + +@FlutterApi() +abstract class CameraSelectorFlutterApi { + void create(int identifier, int? lensFacing); +} diff --git a/packages/camera/camera_android_camerax/test/camera_selector_test.dart b/packages/camera/camera_android_camerax/test/camera_selector_test.dart new file mode 100644 index 000000000000..c4ccd6262376 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_selector_test.dart @@ -0,0 +1,121 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:camera_android_camerax/src/camera_info.dart'; +import 'package:camera_android_camerax/src/camera_selector.dart'; +import 'package:camera_android_camerax/src/camerax_library.pigeon.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'camera_selector_test.mocks.dart'; +import 'test_camerax_library.pigeon.dart'; + +@GenerateMocks([TestCameraSelectorHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('CameraSelector', () { + tearDown(() => TestCameraSelectorHostApi.setup(null)); + + test('detachedCreateTest', () async { + final MockTestCameraSelectorHostApi mockApi = + MockTestCameraSelectorHostApi(); + TestCameraSelectorHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + CameraSelector.detached( + instanceManager: instanceManager, + ); + + verifyNever(mockApi.create(argThat(isA()), null)); + }); + + test('createTestWithoutLensSpecified', () async { + final MockTestCameraSelectorHostApi mockApi = + MockTestCameraSelectorHostApi(); + TestCameraSelectorHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + CameraSelector( + instanceManager: instanceManager, + ); + + verify(mockApi.create(argThat(isA()), null)); + }); + + test('createTestWithLensSpecified', () async { + final MockTestCameraSelectorHostApi mockApi = + MockTestCameraSelectorHostApi(); + TestCameraSelectorHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + CameraSelector( + instanceManager: instanceManager, + lensFacing: CameraSelector.LENS_FACING_BACK); + + verify( + mockApi.create(argThat(isA()), CameraSelector.LENS_FACING_BACK)); + }); + + test('filterTest', () async { + final MockTestCameraSelectorHostApi mockApi = + MockTestCameraSelectorHostApi(); + TestCameraSelectorHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final CameraSelector cameraSelector = CameraSelector.detached( + instanceManager: instanceManager, + ); + const int cameraInfoId = 3; + final CameraInfo cameraInfo = + CameraInfo.detached(instanceManager: instanceManager); + + instanceManager.addHostCreatedInstance( + cameraSelector, + 0, + onCopy: (_) => CameraSelector.detached(), + ); + instanceManager.addHostCreatedInstance( + cameraInfo, + cameraInfoId, + onCopy: (_) => CameraInfo.detached(), + ); + + when(mockApi.filter(instanceManager.getIdentifier(cameraSelector), + [cameraInfoId])).thenReturn([cameraInfoId]); + expect(await cameraSelector.filter([cameraInfo]), + equals([cameraInfo])); + + verify(mockApi.filter(0, [cameraInfoId])); + }); + + test('flutterApiCreateTest', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final CameraSelectorFlutterApi flutterApi = CameraSelectorFlutterApiImpl( + instanceManager: instanceManager, + ); + + flutterApi.create(0, CameraSelector.LENS_FACING_BACK); + + expect(instanceManager.getInstanceWithWeakReference(0), + isA()); + expect( + (instanceManager.getInstanceWithWeakReference(0)! as CameraSelector) + .lensFacing, + equals(CameraSelector.LENS_FACING_BACK)); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/camera_selector_test.mocks.dart b/packages/camera/camera_android_camerax/test/camera_selector_test.mocks.dart new file mode 100644 index 000000000000..456db1eaf822 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/camera_selector_test.mocks.dart @@ -0,0 +1,38 @@ +// Mocks generated by Mockito 5.3.0 from annotations +// in camera_android_camerax/test/camera_selector_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.pigeon.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestCameraSelectorHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestCameraSelectorHostApi extends _i1.Mock + implements _i2.TestCameraSelectorHostApi { + MockTestCameraSelectorHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + void create(int? identifier, int? lensFacing) => + super.noSuchMethod(Invocation.method(#create, [identifier, lensFacing]), + returnValueForMissingStub: null); + @override + List filter(int? identifier, List? cameraInfoIds) => (super + .noSuchMethod(Invocation.method(#filter, [identifier, cameraInfoIds]), + returnValue: []) as List); +} diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart index 59e76190188e..b10e14e9d518 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart @@ -77,3 +77,61 @@ abstract class TestCameraInfoHostApi { } } } + +class _TestCameraSelectorHostApiCodec extends StandardMessageCodec { + const _TestCameraSelectorHostApiCodec(); +} + +abstract class TestCameraSelectorHostApi { + static const MessageCodec codec = _TestCameraSelectorHostApiCodec(); + + void create(int identifier, int? lensFacing); + List filter(int identifier, List cameraInfoIds); + static void setup(TestCameraSelectorHostApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraSelectorHostApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.create was null, expected non-null int.'); + final int? arg_lensFacing = (args[1] as int?); + api.create(arg_identifier!, arg_lensFacing); + return {}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CameraSelectorHostApi.filter', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null int.'); + final List? arg_cameraInfoIds = + (args[1] as List?)?.cast(); + assert(arg_cameraInfoIds != null, + 'Argument for dev.flutter.pigeon.CameraSelectorHostApi.filter was null, expected non-null List.'); + final List output = + api.filter(arg_identifier!, arg_cameraInfoIds!); + return {'result': output}; + }); + } + } + } +} From de55e76b9e5eabc756143b2bd7db99f2e1421f75 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 26 Sep 2022 12:02:23 -0400 Subject: [PATCH 016/133] Roll Flutter from 64f84f6a47d2 to 7b6074fbc542 (7 revisions) (#6496) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 886179e55e79..06ef561146db 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -64f84f6a47d276e4d79cb10c203adbddeeeae336 +7b6074fbc542efb41da5618bc97711fac6ab7dee From 4b2a636943eb58d36f4a5099253e8f3c1c280c8f Mon Sep 17 00:00:00 2001 From: eugerossetto <101729072+eugerossetto@users.noreply.github.com> Date: Mon, 26 Sep 2022 15:27:13 -0300 Subject: [PATCH 017/133] [file_selector] Annotate all creation of XTypeGroup with // ignore: prefer_const_contructor (#6463) --- .../example/lib/open_image_page.dart | 3 ++ .../lib/open_multiple_images_page.dart | 3 ++ .../example/lib/open_text_page.dart | 2 ++ .../test/file_selector_test.dart | 4 +++ .../example/lib/open_image_page.dart | 2 ++ .../lib/open_multiple_images_page.dart | 4 +++ .../example/lib/open_text_page.dart | 2 ++ .../test/file_selector_ios_test.dart | 16 ++++++++++ .../example/lib/open_image_page.dart | 2 ++ .../lib/open_multiple_images_page.dart | 4 +++ .../example/lib/open_text_page.dart | 2 ++ .../test/file_selector_linux_test.dart | 24 +++++++++++++++ .../example/lib/open_image_page.dart | 2 ++ .../lib/open_multiple_images_page.dart | 4 +++ .../example/lib/open_text_page.dart | 2 ++ .../test/file_selector_macos_test.dart | 30 +++++++++++++++++++ .../file_selector_web_test.dart | 4 +++ .../file_selector_web/test/utils_test.dart | 22 ++++++++++++++ .../example/lib/open_image_page.dart | 2 ++ .../lib/open_multiple_images_page.dart | 4 +++ .../example/lib/open_text_page.dart | 2 ++ .../test/file_selector_windows_test.dart | 24 +++++++++++++++ 22 files changed, 164 insertions(+) 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 28afca065121..6e3ae8940ce4 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 @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_constructors + import 'dart:io'; import 'package:file_selector/file_selector.dart'; 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 22703425b47b..0d70380cd906 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 @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_constructors + import 'dart:io'; import 'package:file_selector/file_selector.dart'; 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 27fb0b749c3b..8d5f7c863c53 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 @@ -12,6 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', extensions: ['txt', 'json'], diff --git a/packages/file_selector/file_selector/test/file_selector_test.dart b/packages/file_selector/file_selector/test/file_selector_test.dart index 887ab64c3c0c..cd7d540f954d 100644 --- a/packages/file_selector/file_selector/test/file_selector_test.dart +++ b/packages/file_selector/file_selector/test/file_selector_test.dart @@ -13,10 +13,14 @@ void main() { const String confirmButtonText = 'Use this profile picture'; const String suggestedName = 'suggested_name'; final List acceptedTypeGroups = [ + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'documents', mimeTypes: [ 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessing', ]), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'images', extensions: [ 'jpg', 'png', 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 fd0f4e711d7f..740dcc2c1658 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 @@ -15,6 +15,8 @@ class OpenImagePage extends StatelessWidget { const OpenImagePage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', extensions: ['jpg', 'png'], 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 29b27c1d637c..934a694d503c 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 @@ -15,11 +15,15 @@ class OpenMultipleImagesPage extends StatelessWidget { const OpenMultipleImagesPage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', extensions: ['jpg', 'jpeg'], macUTIs: ['public.jpeg'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', extensions: ['png'], 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 b747aa89611c..4b07d93a66bd 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 @@ -12,6 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', extensions: ['txt', 'json'], diff --git a/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart b/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart index f9ef40628991..70e5f83a6b0a 100644 --- a/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart +++ b/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart @@ -36,6 +36,8 @@ void main() { }); test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -43,6 +45,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -62,6 +66,8 @@ void main() { expect(config.allowMultiSelection, isFalse); }); test('throws for a type group that does not support iOS', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], @@ -73,6 +79,8 @@ void main() { }); test('allows a wildcard group', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', ); @@ -88,6 +96,8 @@ void main() { }); test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -95,6 +105,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -114,6 +126,8 @@ void main() { expect(config.allowMultiSelection, isTrue); }); test('throws for a type group that does not support iOS', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], @@ -125,6 +139,8 @@ void main() { }); test('allows a wildcard group', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', ); 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 9e1d2074d5f2..8f11d048189d 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 @@ -15,6 +15,8 @@ class OpenImagePage extends StatelessWidget { const OpenImagePage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', extensions: ['jpg', 'png'], 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 21da8c22fa4d..04c8310616eb 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 @@ -15,10 +15,14 @@ class OpenMultipleImagesPage extends StatelessWidget { const OpenMultipleImagesPage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', extensions: ['jpg', 'jpeg'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', extensions: ['png'], 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 05c6d166fb6f..89bc1c70c3ca 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 @@ -12,6 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', extensions: ['txt', 'json'], diff --git a/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart b/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart index 67b99298adc3..a85340875041 100644 --- a/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart +++ b/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart @@ -29,6 +29,8 @@ void main() { group('#openFile', () { test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -36,6 +38,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -101,6 +105,8 @@ void main() { }); test('throws for a type group that does not support Linux', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], @@ -112,6 +118,8 @@ void main() { }); test('passes a wildcard group correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'any', ); @@ -139,6 +147,8 @@ void main() { group('#openFiles', () { test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -146,6 +156,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -211,6 +223,8 @@ void main() { }); test('throws for a type group that does not support Linux', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], @@ -222,6 +236,8 @@ void main() { }); test('passes a wildcard group correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'any', ); @@ -249,6 +265,8 @@ void main() { group('#getSavePath', () { test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -256,6 +274,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -322,6 +342,8 @@ void main() { }); test('throws for a type group that does not support Linux', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], @@ -333,6 +355,8 @@ void main() { }); test('passes a wildcard group correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'any', ); 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 9e1d2074d5f2..8f11d048189d 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 @@ -15,6 +15,8 @@ class OpenImagePage extends StatelessWidget { const OpenImagePage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', extensions: ['jpg', 'png'], 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 21da8c22fa4d..04c8310616eb 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 @@ -15,10 +15,14 @@ class OpenMultipleImagesPage extends StatelessWidget { const OpenMultipleImagesPage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', extensions: ['jpg', 'jpeg'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', extensions: ['png'], 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 05c6d166fb6f..89bc1c70c3ca 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 @@ -12,6 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', extensions: ['txt', 'json'], diff --git a/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart b/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart index 40ab58534abd..2f98881d82f4 100644 --- a/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart +++ b/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart @@ -30,6 +30,8 @@ void main() { group('openFile', () { test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -37,6 +39,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -96,6 +100,8 @@ void main() { }); test('throws for a type group that does not support macOS', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], @@ -107,6 +113,8 @@ void main() { }); test('allows a wildcard group', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', ); @@ -118,6 +126,8 @@ void main() { group('openFiles', () { test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -125,6 +135,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -184,6 +196,8 @@ void main() { }); test('throws for a type group that does not support macOS', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], @@ -195,6 +209,8 @@ void main() { }); test('allows a wildcard group', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', ); @@ -206,6 +222,8 @@ void main() { group('getSavePath', () { test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -213,6 +231,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -273,6 +293,8 @@ void main() { }); test('throws for a type group that does not support macOS', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], @@ -284,6 +306,8 @@ void main() { }); test('allows a wildcard group', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', ); @@ -326,18 +350,24 @@ void main() { test('ignores all type groups if any of them is a wildcard', () async { await plugin.getSavePath(acceptedTypeGroups: [ + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], macUTIs: ['public.image'], ), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup( label: 'any', ), diff --git a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart index d3d058122aa6..206bc35d550b 100644 --- a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart +++ b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart @@ -26,6 +26,8 @@ void main() { final FileSelectorWeb plugin = FileSelectorWeb(domHelper: mockDomHelper); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', extensions: ['jpg', 'jpeg'], @@ -56,6 +58,8 @@ void main() { final FileSelectorWeb plugin = FileSelectorWeb(domHelper: mockDomHelper); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'files', extensions: ['.txt'], diff --git a/packages/file_selector/file_selector_web/test/utils_test.dart b/packages/file_selector/file_selector_web/test/utils_test.dart index 3281c4cdca8d..f335de057a12 100644 --- a/packages/file_selector/file_selector_web/test/utils_test.dart +++ b/packages/file_selector/file_selector_web/test/utils_test.dart @@ -11,8 +11,14 @@ void main() { group('acceptedTypesToString', () { test('works', () { final List acceptedTypes = [ + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'images', webWildCards: ['images/*']), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'jpgs', extensions: ['jpg', 'jpeg']), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'pngs', mimeTypes: ['image/png']), ]; final String accepts = acceptedTypesToString(acceptedTypes); @@ -27,7 +33,11 @@ void main() { test('works with extensions', () { final List acceptedTypes = [ + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'jpgs', extensions: ['jpeg', 'jpg']), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'pngs', extensions: ['png']), ]; final String accepts = acceptedTypesToString(acceptedTypes); @@ -36,8 +46,12 @@ void main() { test('works with mime types', () { final List acceptedTypes = [ + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup( label: 'jpgs', mimeTypes: ['image/jpeg', 'image/jpg']), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'pngs', mimeTypes: ['image/png']), ]; final String accepts = acceptedTypesToString(acceptedTypes); @@ -46,8 +60,14 @@ void main() { test('works with web wild cards', () { final List acceptedTypes = [ + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'images', webWildCards: ['image/*']), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'audios', webWildCards: ['audio/*']), + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'videos', webWildCards: ['video/*']), ]; final String accepts = acceptedTypesToString(acceptedTypes); @@ -56,6 +76,8 @@ void main() { test('throws for a type group that does not support web', () { final List acceptedTypes = [ + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'text', macUTIs: ['public.text']), ]; expect(() => acceptedTypesToString(acceptedTypes), throwsArgumentError); 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 9e1d2074d5f2..8f11d048189d 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 @@ -15,6 +15,8 @@ class OpenImagePage extends StatelessWidget { const OpenImagePage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', extensions: ['jpg', 'png'], 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 21da8c22fa4d..04c8310616eb 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 @@ -15,10 +15,14 @@ class OpenMultipleImagesPage extends StatelessWidget { const OpenMultipleImagesPage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', extensions: ['jpg', 'jpeg'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', extensions: ['png'], 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 05c6d166fb6f..89bc1c70c3ca 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 @@ -12,6 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', extensions: ['txt', 'json'], diff --git a/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart b/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart index 79277fae472b..5792099de768 100644 --- a/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart +++ b/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart @@ -47,6 +47,8 @@ void main() { }); test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -54,6 +56,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -86,6 +90,8 @@ void main() { }); test('throws for a type group that does not support Windows', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', mimeTypes: ['text/plain'], @@ -97,6 +103,8 @@ void main() { }); test('allows a wildcard group', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', ); @@ -125,6 +133,8 @@ void main() { }); test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -132,6 +142,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -164,6 +176,8 @@ void main() { }); test('throws for a type group that does not support Windows', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', mimeTypes: ['text/plain'], @@ -175,6 +189,8 @@ void main() { }); test('allows a wildcard group', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', ); @@ -231,6 +247,8 @@ void main() { }); test('passes the accepted type groups correctly', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], @@ -238,6 +256,8 @@ void main() { macUTIs: ['public.text'], ); + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], @@ -277,6 +297,8 @@ void main() { }); test('throws for a type group that does not support Windows', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', mimeTypes: ['text/plain'], @@ -288,6 +310,8 @@ void main() { }); test('allows a wildcard group', () async { + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors final XTypeGroup group = XTypeGroup( label: 'text', ); From 8ef30019eca7f43d54b426e22645f9953c7aa489 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Mon, 26 Sep 2022 17:55:07 -0400 Subject: [PATCH 018/133] Enable depend_on_referenced_packages lint (#6498) --- analysis_options.yaml | 2 +- packages/camera/camera_android/example/pubspec.yaml | 1 + .../camera/camera_android_camerax/example/pubspec.yaml | 2 +- packages/camera/camera_avfoundation/example/pubspec.yaml | 1 + packages/camera/camera_web/example/pubspec.yaml | 3 +++ packages/camera/camera_windows/example/pubspec.yaml | 1 + .../file_selector/file_selector_web/example/pubspec.yaml | 5 +++-- .../google_maps_flutter/example/pubspec.yaml | 2 ++ .../google_maps_flutter_android/example/pubspec.yaml | 2 ++ .../google_maps_flutter_ios/example/pubspec.yaml | 3 +++ .../google_maps_flutter_web/example/pubspec.yaml | 1 + .../google_sign_in/google_sign_in/example/pubspec.yaml | 2 ++ .../google_sign_in_android/example/pubspec.yaml | 2 ++ .../google_sign_in_ios/example/pubspec.yaml | 2 ++ .../google_sign_in_web/example/pubspec.yaml | 1 + packages/image_picker/image_picker/example/pubspec.yaml | 2 ++ .../image_picker_android/example/pubspec.yaml | 2 ++ .../image_picker_for_web/example/pubspec.yaml | 1 + .../image_picker/image_picker_ios/example/pubspec.yaml | 2 ++ .../image_picker_windows/example/pubspec.yaml | 1 + .../in_app_purchase/in_app_purchase/example/pubspec.yaml | 5 ++++- .../in_app_purchase_android/example/pubspec.yaml | 2 ++ .../in_app_purchase_storekit/example/pubspec.yaml | 2 ++ packages/ios_platform_images/example/pubspec.yaml | 8 ++++---- packages/local_auth/local_auth/example/pubspec.yaml | 4 ++++ .../local_auth/local_auth_android/example/pubspec.yaml | 2 ++ packages/local_auth/local_auth_ios/example/pubspec.yaml | 2 ++ .../local_auth/local_auth_windows/example/pubspec.yaml | 2 ++ packages/path_provider/path_provider/example/pubspec.yaml | 2 ++ .../path_provider_android/example/pubspec.yaml | 2 ++ .../path_provider/path_provider_ios/example/pubspec.yaml | 2 ++ .../path_provider_macos/example/pubspec.yaml | 2 ++ .../path_provider_windows/example/pubspec.yaml | 2 ++ packages/quick_actions/quick_actions/example/pubspec.yaml | 2 ++ .../quick_actions_android/example/pubspec.yaml | 2 ++ .../quick_actions/quick_actions_ios/example/pubspec.yaml | 2 ++ .../shared_preferences/example/pubspec.yaml | 2 ++ .../shared_preferences_android/example/pubspec.yaml | 2 ++ .../shared_preferences_ios/example/pubspec.yaml | 2 ++ .../shared_preferences_linux/example/pubspec.yaml | 2 ++ .../shared_preferences_macos/example/pubspec.yaml | 2 ++ .../shared_preferences_web/example/pubspec.yaml | 1 + .../shared_preferences_windows/example/pubspec.yaml | 2 ++ packages/url_launcher/url_launcher/example/pubspec.yaml | 2 ++ .../url_launcher_android/example/pubspec.yaml | 3 +++ .../url_launcher/url_launcher_ios/example/pubspec.yaml | 3 +++ .../url_launcher/url_launcher_linux/example/pubspec.yaml | 2 ++ .../url_launcher/url_launcher_macos/example/pubspec.yaml | 2 ++ .../url_launcher/url_launcher_web/example/pubspec.yaml | 3 +++ .../url_launcher_windows/example/pubspec.yaml | 2 ++ .../video_player/video_player_web/example/pubspec.yaml | 1 + .../webview_flutter_android/example/pubspec.yaml | 7 +++---- .../webview_flutter_web/example/pubspec.yaml | 1 + .../webview_flutter_wkwebview/example/pubspec.yaml | 3 +-- 54 files changed, 108 insertions(+), 15 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 891e2ef49180..5f10583a5c1a 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -114,7 +114,7 @@ linter: # - 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 - # - depend_on_referenced_packages # LOCAL CHANGE - Needs to be enabled and violations fixed. + - depend_on_referenced_packages - deprecated_consistency # - diagnostic_describe_all_properties # enabled only at the framework level (packages/flutter/lib) - directives_ordering diff --git a/packages/camera/camera_android/example/pubspec.yaml b/packages/camera/camera_android/example/pubspec.yaml index 5fcc8093d29e..2e530e02ca71 100644 --- a/packages/camera/camera_android/example/pubspec.yaml +++ b/packages/camera/camera_android/example/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + camera_platform_interface: ^2.2.0 flutter: sdk: flutter path_provider: ^2.0.0 diff --git a/packages/camera/camera_android_camerax/example/pubspec.yaml b/packages/camera/camera_android_camerax/example/pubspec.yaml index 2884e8685d8c..d9756f7ebd9b 100644 --- a/packages/camera/camera_android_camerax/example/pubspec.yaml +++ b/packages/camera/camera_android_camerax/example/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + camera_platform_interface: ^2.2.0 flutter: sdk: flutter @@ -25,4 +26,3 @@ dev_dependencies: flutter: uses-material-design: true - \ No newline at end of file diff --git a/packages/camera/camera_avfoundation/example/pubspec.yaml b/packages/camera/camera_avfoundation/example/pubspec.yaml index 55296a6bf4db..a9252cbd6d61 100644 --- a/packages/camera/camera_avfoundation/example/pubspec.yaml +++ b/packages/camera/camera_avfoundation/example/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + camera_platform_interface: ^2.2.0 flutter: sdk: flutter path_provider: ^2.0.0 diff --git a/packages/camera/camera_web/example/pubspec.yaml b/packages/camera/camera_web/example/pubspec.yaml index 78ff61a5f883..e82bbe392ceb 100644 --- a/packages/camera/camera_web/example/pubspec.yaml +++ b/packages/camera/camera_web/example/pubspec.yaml @@ -10,8 +10,11 @@ dependencies: sdk: flutter dev_dependencies: + async: ^2.5.0 + camera_platform_interface: ^2.1.0 camera_web: path: ../ + cross_file: ^0.3.1 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/camera/camera_windows/example/pubspec.yaml b/packages/camera/camera_windows/example/pubspec.yaml index e1d63a3f81e9..80ce958a0e84 100644 --- a/packages/camera/camera_windows/example/pubspec.yaml +++ b/packages/camera/camera_windows/example/pubspec.yaml @@ -19,6 +19,7 @@ dependencies: sdk: flutter dev_dependencies: + async: ^2.5.0 flutter_test: sdk: flutter integration_test: diff --git a/packages/file_selector/file_selector_web/example/pubspec.yaml b/packages/file_selector/file_selector_web/example/pubspec.yaml index 042f412b816b..3a36ce5c74f3 100644 --- a/packages/file_selector/file_selector_web/example/pubspec.yaml +++ b/packages/file_selector/file_selector_web/example/pubspec.yaml @@ -6,12 +6,13 @@ environment: flutter: ">=2.10.0" dependencies: + file_selector_platform_interface: ^2.1.0 + file_selector_web: + path: ../ flutter: sdk: flutter dev_dependencies: - file_selector_web: - path: ../ flutter_driver: sdk: flutter flutter_test: diff --git a/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml index 77e9b9497410..ad1ff2cad0a7 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml @@ -25,6 +25,8 @@ dev_dependencies: espresso: ^0.1.0+2 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml index cd7123050a38..bc9a4dd03657 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml @@ -25,6 +25,8 @@ dev_dependencies: espresso: ^0.1.0+2 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/example/pubspec.yaml index d9d8d5899bdd..ae61f5d92f3c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/pubspec.yaml @@ -18,10 +18,13 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + google_maps_flutter_platform_interface: ^2.2.1 dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml index 8ec25c6bee72..7e25b6e3b483 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml @@ -9,6 +9,7 @@ environment: dependencies: flutter: sdk: flutter + google_maps_flutter_platform_interface: ^2.2.1 google_maps_flutter_web: path: ../ diff --git a/packages/google_sign_in/google_sign_in/example/pubspec.yaml b/packages/google_sign_in/google_sign_in/example/pubspec.yaml index 2ade7d324201..b836ffea4664 100644 --- a/packages/google_sign_in/google_sign_in/example/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in/example/pubspec.yaml @@ -22,6 +22,8 @@ dev_dependencies: espresso: ^0.1.0+2 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml index b7b104c3307e..f81df99b7d28 100644 --- a/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml @@ -23,6 +23,8 @@ dev_dependencies: espresso: ^0.1.0+2 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/google_sign_in/google_sign_in_ios/example/pubspec.yaml b/packages/google_sign_in/google_sign_in_ios/example/pubspec.yaml index a6c97a5678cb..aedc4b01aade 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_ios/example/pubspec.yaml @@ -22,6 +22,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/google_sign_in/google_sign_in_web/example/pubspec.yaml b/packages/google_sign_in/google_sign_in_web/example/pubspec.yaml index ea4b1002d79f..e5abdacf944d 100644 --- a/packages/google_sign_in/google_sign_in_web/example/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_web/example/pubspec.yaml @@ -16,6 +16,7 @@ dev_dependencies: sdk: flutter flutter_test: sdk: flutter + google_sign_in_platform_interface: ^2.2.0 http: ^0.13.0 integration_test: sdk: flutter diff --git a/packages/image_picker/image_picker/example/pubspec.yaml b/packages/image_picker/image_picker/example/pubspec.yaml index b511cde0a554..e9511e27ab6d 100755 --- a/packages/image_picker/image_picker/example/pubspec.yaml +++ b/packages/image_picker/image_picker/example/pubspec.yaml @@ -23,6 +23,8 @@ dev_dependencies: espresso: ^0.2.0 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/image_picker/image_picker_android/example/pubspec.yaml b/packages/image_picker/image_picker_android/example/pubspec.yaml index ac4cb232f02d..02ef8a02af4c 100755 --- a/packages/image_picker/image_picker_android/example/pubspec.yaml +++ b/packages/image_picker/image_picker_android/example/pubspec.yaml @@ -24,6 +24,8 @@ dev_dependencies: espresso: ^0.2.0 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/image_picker/image_picker_for_web/example/pubspec.yaml b/packages/image_picker/image_picker_for_web/example/pubspec.yaml index bb226e0c9c10..c39bd81f9de0 100644 --- a/packages/image_picker/image_picker_for_web/example/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/example/pubspec.yaml @@ -10,6 +10,7 @@ dependencies: sdk: flutter image_picker_for_web: path: ../ + image_picker_platform_interface: ^2.2.0 dev_dependencies: flutter_driver: diff --git a/packages/image_picker/image_picker_ios/example/pubspec.yaml b/packages/image_picker/image_picker_ios/example/pubspec.yaml index bca58a553682..856f775cc641 100755 --- a/packages/image_picker/image_picker_ios/example/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/example/pubspec.yaml @@ -22,6 +22,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/image_picker/image_picker_windows/example/pubspec.yaml b/packages/image_picker/image_picker_windows/example/pubspec.yaml index 1a48e6ddc14b..b87000a6caff 100644 --- a/packages/image_picker/image_picker_windows/example/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/example/pubspec.yaml @@ -10,6 +10,7 @@ environment: dependencies: flutter: sdk: flutter + image_picker_platform_interface: ^2.4.3 image_picker_windows: # When depending on this package from a real application you should use: # image_picker_windows: ^x.y.z diff --git a/packages/in_app_purchase/in_app_purchase/example/pubspec.yaml b/packages/in_app_purchase/in_app_purchase/example/pubspec.yaml index 0b4ea28bc7f6..74ad9aafb768 100644 --- a/packages/in_app_purchase/in_app_purchase/example/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase/example/pubspec.yaml @@ -16,12 +16,15 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + in_app_purchase_android: ^0.2.1 + in_app_purchase_storekit: ^0.3.0+1 shared_preferences: ^2.0.0 dev_dependencies: flutter_driver: sdk: flutter - + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/in_app_purchase/in_app_purchase_android/example/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_android/example/pubspec.yaml index 69e3ca755993..af760a3ada46 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_android/example/pubspec.yaml @@ -22,6 +22,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_storekit/example/pubspec.yaml index 9e4f88b79bc5..e71b85d4b447 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/pubspec.yaml @@ -22,6 +22,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/ios_platform_images/example/pubspec.yaml b/packages/ios_platform_images/example/pubspec.yaml index 34bd431e97fc..6045b3f67cfc 100644 --- a/packages/ios_platform_images/example/pubspec.yaml +++ b/packages/ios_platform_images/example/pubspec.yaml @@ -10,10 +10,6 @@ dependencies: cupertino_icons: ^1.0.2 flutter: sdk: flutter - -dev_dependencies: - flutter_test: - sdk: flutter ios_platform_images: # When depending on this package from a real application you should use: # ios_platform_images: ^x.y.z @@ -22,5 +18,9 @@ dev_dependencies: # the parent directory to use the current plugin's version. path: ../ +dev_dependencies: + flutter_test: + sdk: flutter + flutter: uses-material-design: true diff --git a/packages/local_auth/local_auth/example/pubspec.yaml b/packages/local_auth/local_auth/example/pubspec.yaml index 14331dab78bf..f7dc2fc5b9e7 100644 --- a/packages/local_auth/local_auth/example/pubspec.yaml +++ b/packages/local_auth/local_auth/example/pubspec.yaml @@ -16,11 +16,15 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + local_auth_android: ^1.0.0 + local_auth_ios: ^1.0.1 dev_dependencies: build_runner: ^2.1.10 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/local_auth/local_auth_android/example/pubspec.yaml b/packages/local_auth/local_auth_android/example/pubspec.yaml index b1c68d49e555..c95b89ad0c2a 100644 --- a/packages/local_auth/local_auth_android/example/pubspec.yaml +++ b/packages/local_auth/local_auth_android/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/local_auth/local_auth_ios/example/pubspec.yaml b/packages/local_auth/local_auth_ios/example/pubspec.yaml index 52a95010d43b..720d5a732bd5 100644 --- a/packages/local_auth/local_auth_ios/example/pubspec.yaml +++ b/packages/local_auth/local_auth_ios/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/local_auth/local_auth_windows/example/pubspec.yaml b/packages/local_auth/local_auth_windows/example/pubspec.yaml index 664f8623abb7..4bb2671f6826 100644 --- a/packages/local_auth/local_auth_windows/example/pubspec.yaml +++ b/packages/local_auth/local_auth_windows/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/path_provider/path_provider/example/pubspec.yaml b/packages/path_provider/path_provider/example/pubspec.yaml index 13be15f0c1a1..5964a267f96d 100644 --- a/packages/path_provider/path_provider/example/pubspec.yaml +++ b/packages/path_provider/path_provider/example/pubspec.yaml @@ -20,6 +20,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/path_provider/path_provider_android/example/pubspec.yaml b/packages/path_provider/path_provider_android/example/pubspec.yaml index 4ab05835158d..b460d6ba49ce 100644 --- a/packages/path_provider/path_provider_android/example/pubspec.yaml +++ b/packages/path_provider/path_provider_android/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/path_provider/path_provider_ios/example/pubspec.yaml b/packages/path_provider/path_provider_ios/example/pubspec.yaml index 0df5e6141fdf..f1d885513948 100644 --- a/packages/path_provider/path_provider_ios/example/pubspec.yaml +++ b/packages/path_provider/path_provider_ios/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/path_provider/path_provider_macos/example/pubspec.yaml b/packages/path_provider/path_provider_macos/example/pubspec.yaml index f5bd2ba024b5..8c69e69ce122 100644 --- a/packages/path_provider/path_provider_macos/example/pubspec.yaml +++ b/packages/path_provider/path_provider_macos/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/path_provider/path_provider_windows/example/pubspec.yaml b/packages/path_provider/path_provider_windows/example/pubspec.yaml index c7a12cae4573..d70a4a84f504 100644 --- a/packages/path_provider/path_provider_windows/example/pubspec.yaml +++ b/packages/path_provider/path_provider_windows/example/pubspec.yaml @@ -20,6 +20,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/quick_actions/quick_actions/example/pubspec.yaml b/packages/quick_actions/quick_actions/example/pubspec.yaml index 3b197c219109..46be008390d8 100644 --- a/packages/quick_actions/quick_actions/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions/example/pubspec.yaml @@ -21,6 +21,8 @@ dev_dependencies: espresso: ^0.1.0+2 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/quick_actions/quick_actions_android/example/pubspec.yaml b/packages/quick_actions/quick_actions_android/example/pubspec.yaml index 6ff13f063c5f..17d50f5d0829 100644 --- a/packages/quick_actions/quick_actions_android/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/example/pubspec.yaml @@ -21,6 +21,8 @@ dev_dependencies: espresso: ^0.1.0+2 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml index f93e162e7fa9..ecac371720d6 100644 --- a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml @@ -20,6 +20,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/shared_preferences/shared_preferences/example/pubspec.yaml b/packages/shared_preferences/shared_preferences/example/pubspec.yaml index 35eb6f159bcd..6964656d16ef 100644 --- a/packages/shared_preferences/shared_preferences/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences/example/pubspec.yaml @@ -20,6 +20,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/shared_preferences/shared_preferences_android/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/example/pubspec.yaml index 2838b262885e..bd1272c71d80 100644 --- a/packages/shared_preferences/shared_preferences_android/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/shared_preferences/shared_preferences_ios/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_ios/example/pubspec.yaml index e3db3c348946..446cea1e0508 100644 --- a/packages/shared_preferences/shared_preferences_ios/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_ios/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml index 65a61112e588..9418c0581ed7 100644 --- a/packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml @@ -20,6 +20,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/shared_preferences/shared_preferences_macos/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_macos/example/pubspec.yaml index 96d8b5f0ba2e..f650fb7a6268 100644 --- a/packages/shared_preferences/shared_preferences_macos/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_macos/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml index 5e637144a257..050275489efa 100644 --- a/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml @@ -8,6 +8,7 @@ environment: dependencies: flutter: sdk: flutter + shared_preferences_platform_interface: ^2.0.0 shared_preferences_web: path: ../ diff --git a/packages/shared_preferences/shared_preferences_windows/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_windows/example/pubspec.yaml index b1f6db4f67c7..43c2145b32ae 100644 --- a/packages/shared_preferences/shared_preferences_windows/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_windows/example/pubspec.yaml @@ -20,6 +20,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/url_launcher/url_launcher/example/pubspec.yaml b/packages/url_launcher/url_launcher/example/pubspec.yaml index 77af2dc2b65a..573dc0d9ed01 100644 --- a/packages/url_launcher/url_launcher/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher/example/pubspec.yaml @@ -22,6 +22,8 @@ dev_dependencies: build_runner: ^2.1.10 flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter mockito: ^5.0.0 diff --git a/packages/url_launcher/url_launcher_android/example/pubspec.yaml b/packages/url_launcher/url_launcher_android/example/pubspec.yaml index 52d761baa120..6c922c7a0f7d 100644 --- a/packages/url_launcher/url_launcher_android/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_android/example/pubspec.yaml @@ -16,10 +16,13 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + url_launcher_platform_interface: ^2.0.3 dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter mockito: ^5.0.0 diff --git a/packages/url_launcher/url_launcher_ios/example/pubspec.yaml b/packages/url_launcher/url_launcher_ios/example/pubspec.yaml index 84748f17a781..9a134c747fa4 100644 --- a/packages/url_launcher/url_launcher_ios/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_ios/example/pubspec.yaml @@ -16,10 +16,13 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + url_launcher_platform_interface: ^2.0.3 dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter mockito: ^5.0.0 diff --git a/packages/url_launcher/url_launcher_linux/example/pubspec.yaml b/packages/url_launcher/url_launcher_linux/example/pubspec.yaml index 0d5357055e96..17effeb1ffcb 100644 --- a/packages/url_launcher/url_launcher_linux/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_linux/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/url_launcher/url_launcher_macos/example/pubspec.yaml b/packages/url_launcher/url_launcher_macos/example/pubspec.yaml index efa4f63bd48f..3b802ea229ba 100644 --- a/packages/url_launcher/url_launcher_macos/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_macos/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/url_launcher/url_launcher_web/example/pubspec.yaml b/packages/url_launcher/url_launcher_web/example/pubspec.yaml index 15bdc70517d8..881cb29c7599 100644 --- a/packages/url_launcher/url_launcher_web/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/example/pubspec.yaml @@ -15,8 +15,11 @@ dev_dependencies: sdk: flutter flutter_test: sdk: flutter + flutter_web_plugins: + sdk: flutter integration_test: sdk: flutter mockito: ^5.0.0 + url_launcher_platform_interface: ^2.0.3 url_launcher_web: path: ../ diff --git a/packages/url_launcher/url_launcher_windows/example/pubspec.yaml b/packages/url_launcher/url_launcher_windows/example/pubspec.yaml index 3bd8492709af..966d32c779e8 100644 --- a/packages/url_launcher/url_launcher_windows/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_windows/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: dev_dependencies: flutter_driver: sdk: flutter + flutter_test: + sdk: flutter integration_test: sdk: flutter diff --git a/packages/video_player/video_player_web/example/pubspec.yaml b/packages/video_player/video_player_web/example/pubspec.yaml index 9c0a9e188daf..57728f323d55 100644 --- a/packages/video_player/video_player_web/example/pubspec.yaml +++ b/packages/video_player/video_player_web/example/pubspec.yaml @@ -9,6 +9,7 @@ dependencies: flutter: sdk: flutter js: ^0.6.0 + video_player_platform_interface: ">=4.2.0 <6.0.0" video_player_web: path: ../ diff --git a/packages/webview_flutter/webview_flutter_android/example/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/example/pubspec.yaml index db72a146c110..de6980a736cc 100644 --- a/packages/webview_flutter/webview_flutter_android/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/example/pubspec.yaml @@ -8,9 +8,9 @@ environment: dependencies: flutter: sdk: flutter - + flutter_driver: + sdk: flutter path_provider: ^2.0.6 - webview_flutter_android: # When depending on this package from a real application you should use: # webview_flutter: ^x.y.z @@ -18,11 +18,10 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ + webview_flutter_platform_interface: ^1.8.0 dev_dependencies: espresso: ^0.2.0 - flutter_driver: - sdk: flutter flutter_test: sdk: flutter integration_test: diff --git a/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml b/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml index fbeb44923d83..7ceb586a9316 100644 --- a/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml @@ -10,6 +10,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter + webview_flutter_platform_interface: ^1.8.0 webview_flutter_web: # When depending on this package from a real application you should use: # webview_flutter_web: ^x.y.z diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/example/pubspec.yaml index 1daa96854f90..495f5aeb87e6 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/pubspec.yaml @@ -8,9 +8,8 @@ environment: dependencies: flutter: sdk: flutter - path_provider: ^2.0.6 - + webview_flutter_platform_interface: ^1.8.0 webview_flutter_wkwebview: # When depending on this package from a real application you should use: # webview_flutter: ^x.y.z From 0825da164282ac69559e702c9b284dde996adc97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 11:11:26 +0000 Subject: [PATCH 019/133] [gh_actions]: Bump github/codeql-action from 2.1.24 to 2.1.25 (#6491) --- .github/workflows/scorecards-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 6650853754af..e14935f4e455 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -50,6 +50,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@904260d7d935dff982205cbdb42025ce30b7a34f + uses: github/codeql-action/upload-sarif@86f3159a697a097a813ad9bfa0002412d97690a4 with: sarif_file: results.sarif From 9c9185c8919f4b984217be5212bc6fea4013bc92 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 27 Sep 2022 11:52:47 -0400 Subject: [PATCH 020/133] Roll Flutter from 7b6074fbc542 to f57c2fe8ff49 (23 revisions) (#6502) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 06ef561146db..aa1942ca8ea6 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -7b6074fbc542efb41da5618bc97711fac6ab7dee +f57c2fe8ff4993fbe017d1f5fb7c7a4145d66492 From d4c69135254b8aa3ad9b0649b441782b1413f1f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 16:43:39 +0000 Subject: [PATCH 021/133] [in_app_pur]: Bump json from 20180813 to 20220924 in /packages/in_app_purchase/in_app_purchase/example/android/app (#6481) --- .../in_app_purchase/example/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/in_app_purchase/in_app_purchase/example/android/app/build.gradle b/packages/in_app_purchase/in_app_purchase/example/android/app/build.gradle index d0c62753faa1..9bb39660cf05 100644 --- a/packages/in_app_purchase/in_app_purchase/example/android/app/build.gradle +++ b/packages/in_app_purchase/in_app_purchase/example/android/app/build.gradle @@ -109,7 +109,7 @@ dependencies { implementation 'com.android.billingclient:billing:3.0.2' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:4.7.0' - testImplementation 'org.json:json:20180813' + testImplementation 'org.json:json:20220924' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } From 6c84f5d52f21ae8955b1e4eadfec5b4644d689bb Mon Sep 17 00:00:00 2001 From: eugerossetto <101729072+eugerossetto@users.noreply.github.com> Date: Tue, 27 Sep 2022 14:31:51 -0300 Subject: [PATCH 022/133] [file_selector] Annotate all parameters of XTypeGroup with // ignore: prefer_const_literals_to_create_immutables (#6499) --- .../file_selector/example/lib/open_image_page.dart | 2 +- .../file_selector/example/lib/open_multiple_images_page.dart | 2 +- .../file_selector/example/lib/open_text_page.dart | 2 ++ .../file_selector/file_selector/test/file_selector_test.dart | 3 +++ .../file_selector_ios/example/lib/open_image_page.dart | 4 ++++ .../example/lib/open_multiple_images_page.dart | 3 +++ .../file_selector_ios/example/lib/open_text_page.dart | 4 ++++ .../file_selector_ios/test/file_selector_ios_test.dart | 3 +++ .../file_selector_linux/example/lib/open_image_page.dart | 2 ++ .../example/lib/open_multiple_images_page.dart | 4 ++++ .../file_selector_linux/example/lib/open_text_page.dart | 2 ++ .../file_selector_linux/test/file_selector_linux_test.dart | 3 +++ .../file_selector_macos/example/lib/open_image_page.dart | 2 ++ .../example/lib/open_multiple_images_page.dart | 4 ++++ .../file_selector_macos/example/lib/open_text_page.dart | 2 ++ .../file_selector_macos/test/file_selector_macos_test.dart | 3 +++ .../example/integration_test/file_selector_web_test.dart | 3 +++ packages/file_selector/file_selector_web/test/utils_test.dart | 3 +++ .../file_selector_windows/example/lib/open_image_page.dart | 2 ++ .../example/lib/open_multiple_images_page.dart | 4 ++++ .../file_selector_windows/example/lib/open_text_page.dart | 2 ++ .../test/file_selector_windows_test.dart | 3 +++ 22 files changed, 60 insertions(+), 2 deletions(-) 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 6e3ae8940ce4..b72d4e5f562f 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 @@ -3,7 +3,7 @@ // found in the LICENSE file. // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_constructors +// ignore_for_file: prefer_const_constructors, prefer_const_literals_to_create_immutables import 'dart:io'; 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 0d70380cd906..87549e046549 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 @@ -3,7 +3,7 @@ // found in the LICENSE file. // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_constructors +// ignore_for_file: prefer_const_constructors, prefer_const_literals_to_create_immutables import 'dart:io'; 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 8d5f7c863c53..04d48afc21e4 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 @@ -16,6 +16,8 @@ class OpenTextPage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], ); // This demonstrates using an initial directory for the prompt, which should diff --git a/packages/file_selector/file_selector/test/file_selector_test.dart b/packages/file_selector/file_selector/test/file_selector_test.dart index cd7d540f954d..0bef946142ee 100644 --- a/packages/file_selector/file_selector/test/file_selector_test.dart +++ b/packages/file_selector/file_selector/test/file_selector_test.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_literals_to_create_immutables + import 'package:file_selector/file_selector.dart'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:flutter_test/flutter_test.dart'; 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 740dcc2c1658..eff6c4f7c028 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 @@ -19,7 +19,11 @@ class OpenImagePage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'png'], + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables macUTIs: ['public.image'], ); final XFile? file = await FileSelectorPlatform.instance 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 934a694d503c..0035ebcba5eb 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 @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_literals_to_create_immutables + import 'dart:io'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; 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 4b07d93a66bd..b91195ef4a3d 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 @@ -16,7 +16,11 @@ class OpenTextPage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables macUTIs: ['public.text'], ); final XFile? file = await FileSelectorPlatform.instance diff --git a/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart b/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart index 70e5f83a6b0a..a388fe951a4c 100644 --- a/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart +++ b/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_literals_to_create_immutables + import 'package:file_selector_ios/file_selector_ios.dart'; import 'package:file_selector_ios/src/messages.g.dart'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; 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 8f11d048189d..1925b27002df 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 @@ -19,6 +19,8 @@ class OpenImagePage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'png'], ); final XFile? file = await FileSelectorPlatform.instance 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 04c8310616eb..ee7e7d1a967d 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 @@ -19,12 +19,16 @@ class OpenMultipleImagesPage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'jpeg'], ); // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 // ignore: prefer_const_constructors final XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['png'], ); final List files = await FileSelectorPlatform.instance 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 89bc1c70c3ca..d5e8d462de1d 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 @@ -16,6 +16,8 @@ class OpenTextPage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], ); final XFile? file = await FileSelectorPlatform.instance diff --git a/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart b/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart index a85340875041..54111c27140e 100644 --- a/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart +++ b/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_literals_to_create_immutables + import 'package:file_selector_linux/file_selector_linux.dart'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:flutter/services.dart'; 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 8f11d048189d..1925b27002df 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 @@ -19,6 +19,8 @@ class OpenImagePage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'png'], ); final XFile? file = await FileSelectorPlatform.instance 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 04c8310616eb..ee7e7d1a967d 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 @@ -19,12 +19,16 @@ class OpenMultipleImagesPage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'jpeg'], ); // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 // ignore: prefer_const_constructors final XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['png'], ); final List files = await FileSelectorPlatform.instance 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 89bc1c70c3ca..d5e8d462de1d 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 @@ -16,6 +16,8 @@ class OpenTextPage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], ); final XFile? file = await FileSelectorPlatform.instance diff --git a/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart b/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart index 2f98881d82f4..29702a5421b1 100644 --- a/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart +++ b/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_literals_to_create_immutables + import 'package:file_selector_macos/file_selector_macos.dart'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:flutter/services.dart'; diff --git a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart index 206bc35d550b..5f476d937977 100644 --- a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart +++ b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_literals_to_create_immutables + import 'dart:html'; import 'dart:typed_data'; diff --git a/packages/file_selector/file_selector_web/test/utils_test.dart b/packages/file_selector/file_selector_web/test/utils_test.dart index f335de057a12..dcb7c3d8c627 100644 --- a/packages/file_selector/file_selector_web/test/utils_test.dart +++ b/packages/file_selector/file_selector_web/test/utils_test.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_literals_to_create_immutables + import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:file_selector_web/src/utils.dart'; import 'package:flutter_test/flutter_test.dart'; 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 8f11d048189d..1925b27002df 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 @@ -19,6 +19,8 @@ class OpenImagePage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'images', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'png'], ); final XFile? file = await FileSelectorPlatform.instance 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 04c8310616eb..ee7e7d1a967d 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 @@ -19,12 +19,16 @@ class OpenMultipleImagesPage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'jpeg'], ); // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 // ignore: prefer_const_constructors final XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['png'], ); final List files = await FileSelectorPlatform.instance 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 89bc1c70c3ca..d5e8d462de1d 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 @@ -16,6 +16,8 @@ class OpenTextPage extends StatelessWidget { // ignore: prefer_const_constructors final XTypeGroup typeGroup = XTypeGroup( label: 'text', + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], ); final XFile? file = await FileSelectorPlatform.instance diff --git a/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart b/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart index 5792099de768..2d8dc4b78688 100644 --- a/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart +++ b/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 +// ignore_for_file: prefer_const_literals_to_create_immutables + import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:file_selector_windows/file_selector_windows.dart'; import 'package:file_selector_windows/src/messages.g.dart'; From 709e7d4f7eda40b0d6b54a18775e0e64e979c9b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 17:31:53 +0000 Subject: [PATCH 023/133] [sign_in]: Bump play-services-auth from 20.0.1 to 20.3.0 in /packages/google_sign_in/google_sign_in_android/android (#6361) --- packages/google_sign_in/google_sign_in_android/CHANGELOG.md | 1 + .../google_sign_in/google_sign_in_android/android/build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md index b10c578cd125..342166a8a6af 100644 --- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md @@ -2,6 +2,7 @@ * Corrects typos in plugin error logs and removes not actionable warnings. * Updates minimum Flutter version to 2.10. +* Updates play-services-auth version to 20.3.0. ## 6.1.0 diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle b/packages/google_sign_in/google_sign_in_android/android/build.gradle index 0c891918aa08..3384029d666a 100644 --- a/packages/google_sign_in/google_sign_in_android/android/build.gradle +++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle @@ -48,7 +48,7 @@ android { } dependencies { - implementation 'com.google.android.gms:play-services-auth:20.0.1' + implementation 'com.google.android.gms:play-services-auth:20.3.0' implementation 'com.google.guava:guava:28.1-android' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:4.7.0' From d5a4157ff4f23078df0698794a8f36ebee84619a Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Tue, 27 Sep 2022 14:39:06 -0400 Subject: [PATCH 024/133] [ci] Update Dockerfile (#6477) --- .ci/Dockerfile | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/.ci/Dockerfile b/.ci/Dockerfile index 59d4064f0a91..bec62f22cc89 100644 --- a/.ci/Dockerfile +++ b/.ci/Dockerfile @@ -1,47 +1,40 @@ # The Flutter version is not important here, since the CI scripts update Flutter # before running. What matters is that the base image is pinned to minimize # unintended changes when modifying this file. -FROM cirrusci/flutter@sha256:505fe8bce2896c75b4df9ccf500b1604155bf932af7465ffcc66fcae8612f82f +# This is the hash for the 3.0.0 image. +FROM cirrusci/flutter@sha256:0224587bba33241cf908184283ec2b544f1b672d87043ead1c00521c368cf844 RUN apt-get update -y +# Set up Firebase Test Lab requirements. RUN apt-get install -y --no-install-recommends gnupg - -# Add repo for gcloud sdk and install it RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | \ sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list - RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | \ sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - - RUN apt-get update && apt-get install -y google-cloud-sdk && \ gcloud config set core/disable_usage_reporting true && \ gcloud config set component_manager/disable_update_check true -RUN yes | sdkmanager \ - "platforms;android-27" \ - "build-tools;27.0.3" \ - "extras;google;m2repository" \ - "extras;android;m2repository" - -RUN yes | sdkmanager --licenses - -# Install formatter. +# Install formatter for C-based languages. RUN apt-get install -y clang-format -# Install xvfb to allow running headless -RUN apt-get install -y xvfb libegl1-mesa -# Install Linux desktop build tool requirements. +# Install Linux desktop requirements: +# - build tools. RUN apt-get install -y clang cmake ninja-build file pkg-config -# Install necessary libraries. +# - libraries. RUN apt-get install -y libgtk-3-dev libblkid-dev liblzma-dev libgcrypt20-dev +# - xvfb to allow running headless. +RUN apt-get install -y xvfb libegl1-mesa -# Add repo for Google Chrome and install it +# Install Chrome and make it the default browser, for url_launcher tests. +# IMPORTANT: Web tests should use a pinned version of Chromium, not this, since +# this isn't pinned, so any time the docker image is re-created the version of +# Chrome may change. RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - RUN echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list RUN apt-get update && apt-get install -y --no-install-recommends google-chrome-stable - -# Make Chrome the default so http: and file: has a handler for url_launcher tests. +# Make Chrome the default for http:, https: and file:. RUN apt-get install -y xdg-utils RUN xdg-settings set default-web-browser google-chrome.desktop RUN xdg-mime default google-chrome.desktop inode/directory From b3018c887653050bb711e39a52d68533c528c259 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Tue, 27 Sep 2022 15:41:16 -0400 Subject: [PATCH 025/133] Update deprecated analysis options (#6505) --- analysis_options.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 5f10583a5c1a..34f50180906d 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -23,8 +23,8 @@ analyzer: strong-mode: - implicit-casts: false - implicit-dynamic: false + strict-casts: true + strict-raw-types: true errors: # treat missing required parameters as a warning (not a hint) missing_required_param: warning From 2592df96f6ae2f1d2687de9fa4f9eae87e6e378d Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Tue, 27 Sep 2022 15:43:04 -0400 Subject: [PATCH 026/133] [tool] Clean up "plugin" references (#6503) --- .github/workflows/release.yml | 2 +- script/tool/CHANGELOG.md | 8 +++ script/tool/README.md | 26 ++++---- ...ugin_command.dart => package_command.dart} | 62 ++++++++++--------- .../src/common/package_looping_command.dart | 4 +- .../lib/src/common/package_state_utils.dart | 2 +- .../src/create_all_plugins_app_command.dart | 4 +- .../tool/lib/src/drive_examples_command.dart | 2 +- script/tool/lib/src/format_command.dart | 4 +- .../tool/lib/src/license_check_command.dart | 4 +- script/tool/lib/src/list_command.dart | 14 ++--- script/tool/lib/src/main.dart | 4 +- .../lib/src/make_deps_path_based_command.dart | 6 +- .../tool/lib/src/publish_check_command.dart | 2 +- ...ugin_command.dart => publish_command.dart} | 10 +-- .../tool/lib/src/version_check_command.dart | 4 +- script/tool/pubspec.yaml | 2 +- script/tool/test/analyze_command_test.dart | 8 +-- .../test/common/git_version_finder_test.dart | 2 +- ...nd_test.dart => package_command_test.dart} | 20 +++--- ...s.dart => package_command_test.mocks.dart} | 0 .../common/package_looping_command_test.dart | 21 +++---- .../tool/test/custom_test_command_test.dart | 24 +++---- .../test/dependabot_check_command_test.dart | 2 +- .../federation_safety_check_command_test.dart | 2 +- script/tool/test/format_command_test.dart | 10 +-- .../tool/test/license_check_command_test.dart | 2 +- script/tool/test/list_command_test.dart | 20 +++--- .../make_deps_path_based_command_test.dart | 2 +- ...nd_test.dart => publish_command_test.dart} | 62 +++++++++---------- .../test/update_excerpts_command_test.dart | 2 +- .../update_release_info_command_test.dart | 2 +- .../tool/test/version_check_command_test.dart | 2 +- 33 files changed, 174 insertions(+), 167 deletions(-) rename script/tool/lib/src/common/{plugin_command.dart => package_command.dart} (92%) rename script/tool/lib/src/{publish_plugin_command.dart => publish_command.dart} (98%) rename script/tool/test/common/{plugin_command_test.dart => package_command_test.dart} (98%) rename script/tool/test/common/{plugin_command_test.mocks.dart => package_command_test.mocks.dart} (100%) rename script/tool/test/{publish_plugin_command_test.dart => publish_command_test.dart} (94%) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 06154081619b..5ff15569f842 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,5 +50,5 @@ jobs: run: | git config --global user.name ${{ secrets.USER_NAME }} git config --global user.email ${{ secrets.USER_EMAIL }} - dart ./script/tool/lib/src/main.dart publish-plugin --all-changed --base-sha=HEAD~ --skip-confirmation --remote=origin + dart ./script/tool/lib/src/main.dart publish --all-changed --base-sha=HEAD~ --skip-confirmation --remote=origin env: {PUB_CREDENTIALS: "${{ secrets.PUB_CREDENTIALS }}"} diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index 2417d0fa833c..830d3ca931e6 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.11 + +* Renames `publish-plugin` to `publish`. +* Renames arguments to `list`: + * `--package` now lists top-level packages (previously `--plugin`). + * `--package-or-subpackage` now lists top-level packages (previously + `--package`). + ## 0.10.0+1 * Recognizes `run_test.sh` as a developer-only file in `version-check`. diff --git a/script/tool/README.md b/script/tool/README.md index 0e44bf16c263..9f0ac84145f2 100644 --- a/script/tool/README.md +++ b/script/tool/README.md @@ -54,7 +54,7 @@ dart pub global run flutter_plugin_tools ## Commands Run with `--help` for a full list of commands and arguments, but the -following shows a number of common commands being run for a specific plugin. +following shows a number of common commands being run for a specific package. All examples assume running from source; see above for running the published version instead. @@ -71,29 +71,29 @@ command is targetting. An package name can be any of: ```sh cd -dart run ./script/tool/bin/flutter_plugin_tools.dart format --packages plugin_name +dart run ./script/tool/bin/flutter_plugin_tools.dart format --packages package_name ``` ### Run the Dart Static Analyzer ```sh cd -dart run ./script/tool/bin/flutter_plugin_tools.dart analyze --packages plugin_name +dart run ./script/tool/bin/flutter_plugin_tools.dart analyze --packages package_name ``` ### Run Dart Unit Tests ```sh cd -dart run ./script/tool/bin/flutter_plugin_tools.dart test --packages plugin_name +dart run ./script/tool/bin/flutter_plugin_tools.dart test --packages package_name ``` ### Run Dart Integration Tests ```sh cd -dart run ./script/tool/bin/flutter_plugin_tools.dart build-examples --apk --packages plugin_name -dart run ./script/tool/bin/flutter_plugin_tools.dart drive-examples --android --packages plugin_name +dart run ./script/tool/bin/flutter_plugin_tools.dart build-examples --apk --packages package_name +dart run ./script/tool/bin/flutter_plugin_tools.dart drive-examples --android --packages package_name ``` Replace `--apk`/`--android` with the platform you want to test against @@ -110,11 +110,11 @@ Examples: ```sh cd # Run just unit tests for iOS and Android: -dart run ./script/tool/bin/flutter_plugin_tools.dart native-test --ios --android --no-integration --packages plugin_name +dart run ./script/tool/bin/flutter_plugin_tools.dart native-test --ios --android --no-integration --packages package_name # Run all tests for macOS: -dart run ./script/tool/bin/flutter_plugin_tools.dart native-test --macos --packages plugin_name +dart run ./script/tool/bin/flutter_plugin_tools.dart native-test --macos --packages package_name # Run all tests for Windows: -dart run ./script/tool/bin/flutter_plugin_tools.dart native-test --windows --packages plugin_name +dart run ./script/tool/bin/flutter_plugin_tools.dart native-test --windows --packages package_name ``` ### Update README.md from Example Sources @@ -125,7 +125,7 @@ before running this command. ```sh cd -dart run ./script/tool/bin/flutter_plugin_tools.dart update-excerpts --packages plugin_name +dart run ./script/tool/bin/flutter_plugin_tools.dart update-excerpts --packages package_name ``` ### Update CHANGELOG and Version @@ -165,18 +165,18 @@ on the Flutter Wiki first. ```sh cd git checkout -dart run ./script/tool/bin/flutter_plugin_tools.dart publish-plugin --packages +dart run ./script/tool/bin/flutter_plugin_tools.dart publish --packages ``` By default the tool tries to push tags to the `upstream` remote, but some additional settings can be configured. Run `dart run ./script/tool/bin/flutter_plugin_tools.dart -publish-plugin --help` for more usage information. +publish --help` for more usage information. The tool wraps `pub publish` for pushing the package to pub, and then will automatically use git to try to create and push tags. It has some additional safety checking around `pub publish` too. By default `pub publish` publishes _everything_, including untracked or uncommitted files in version control. -`publish-plugin` will first check the status of the local +`publish` will first check the status of the local directory and refuse to publish if there are any mismatched files with version control present. diff --git a/script/tool/lib/src/common/plugin_command.dart b/script/tool/lib/src/common/package_command.dart similarity index 92% rename from script/tool/lib/src/common/plugin_command.dart rename to script/tool/lib/src/common/package_command.dart index 843768fd4c61..60d7ecc80076 100644 --- a/script/tool/lib/src/common/plugin_command.dart +++ b/script/tool/lib/src/common/package_command.dart @@ -34,9 +34,9 @@ class PackageEnumerationEntry { /// Interface definition for all commands in this tool. // TODO(stuartmorgan): Move most of this logic to PackageLoopingCommand. -abstract class PluginCommand extends Command { +abstract class PackageCommand extends Command { /// Creates a command to operate on [packagesDir] with the given environment. - PluginCommand( + PackageCommand( this.packagesDir, { this.processRunner = const ProcessRunner(), this.platform = const LocalPlatform(), @@ -47,7 +47,7 @@ abstract class PluginCommand extends Command { help: 'Specifies which packages the command should run on (before sharding).\n', valueHelp: 'package1,package2,...', - aliases: [_pluginsArg], + aliases: [_pluginsLegacyAliasArg], ); argParser.addOption( _shardIndexArg, @@ -58,7 +58,7 @@ abstract class PluginCommand extends Command { ); argParser.addOption( _shardCountArg, - help: 'Specifies the number of shards into which plugins are divided.', + help: 'Specifies the number of shards into which packages are divided.', valueHelp: 'n', defaultsTo: '1', ); @@ -71,7 +71,7 @@ abstract class PluginCommand extends Command { defaultsTo: [], ); argParser.addFlag(_runOnChangedPackagesArg, - help: 'Run the command on changed packages/plugins.\n' + help: 'Run the command on changed packages.\n' 'If no packages have changed, or if there have been changes that may\n' 'affect all packages, the command runs on all packages.\n' 'Packages excluded with $_excludeArg are excluded even if changed.\n' @@ -106,13 +106,13 @@ abstract class PluginCommand extends Command { static const String _logTimingArg = 'log-timing'; static const String _packagesArg = 'packages'; static const String _packagesForBranchArg = 'packages-for-branch'; - static const String _pluginsArg = 'plugins'; + static const String _pluginsLegacyAliasArg = 'plugins'; static const String _runOnChangedPackagesArg = 'run-on-changed-packages'; static const String _runOnDirtyPackagesArg = 'run-on-dirty-packages'; static const String _shardCountArg = 'shardCount'; static const String _shardIndexArg = 'shardIndex'; - /// The directory containing the plugin packages. + /// The directory containing the packages. final Directory packagesDir; /// The process runner. @@ -221,7 +221,7 @@ abstract class PluginCommand extends Command { _shardCount = shardCount; } - /// Returns the set of plugins to exclude based on the `--exclude` argument. + /// Returns the set of packages to exclude based on the `--exclude` argument. Set getExcludedPackageNames() { final Set excludedPackages = _excludedPackages ?? getStringListArg(_excludeArg).expand((String item) { @@ -250,22 +250,22 @@ abstract class PluginCommand extends Command { Stream getTargetPackages( {bool filterExcluded = true}) async* { // To avoid assuming consistency of `Directory.list` across command - // invocations, we collect and sort the plugin folders before sharding. + // invocations, we collect and sort the package folders before sharding. // This is considered an implementation detail which is why the API still // uses streams. - final List allPlugins = + final List allPackages = await _getAllPackages().toList(); - allPlugins.sort((PackageEnumerationEntry p1, PackageEnumerationEntry p2) => + allPackages.sort((PackageEnumerationEntry p1, PackageEnumerationEntry p2) => p1.package.path.compareTo(p2.package.path)); - final int shardSize = allPlugins.length ~/ shardCount + - (allPlugins.length % shardCount == 0 ? 0 : 1); - final int start = min(shardIndex * shardSize, allPlugins.length); - final int end = min(start + shardSize, allPlugins.length); - - for (final PackageEnumerationEntry plugin - in allPlugins.sublist(start, end)) { - if (!(filterExcluded && plugin.excluded)) { - yield plugin; + final int shardSize = allPackages.length ~/ shardCount + + (allPackages.length % shardCount == 0 ? 0 : 1); + final int start = min(shardIndex * shardSize, allPackages.length); + final int end = min(start + shardSize, allPackages.length); + + for (final PackageEnumerationEntry package + in allPackages.sublist(start, end)) { + if (!(filterExcluded && package.excluded)) { + yield package; } } } @@ -330,7 +330,7 @@ abstract class PluginCommand extends Command { runOnChangedPackages = false; } - final Set excludedPluginNames = getExcludedPackageNames(); + final Set excludedPackageNames = getExcludedPackageNames(); if (runOnChangedPackages) { final GitVersionFinder gitVersionFinder = await retrieveVersionFinder(); @@ -368,15 +368,16 @@ abstract class PluginCommand extends Command { ]) { await for (final FileSystemEntity entity in dir.list(followLinks: false)) { - // A top-level Dart package is a plugin package. + // A top-level Dart package is a standard package. if (isPackage(entity)) { if (packages.isEmpty || packages.contains(p.basename(entity.path))) { yield PackageEnumerationEntry( RepositoryPackage(entity as Directory), - excluded: excludedPluginNames.contains(entity.basename)); + excluded: excludedPackageNames.contains(entity.basename)); } } else if (entity is Directory) { - // Look for Dart packages under this top-level directory. + // Look for Dart packages under this top-level directory; this is the + // standard structure for federated plugins. await for (final FileSystemEntity subdir in entity.list(followLinks: false)) { if (isPackage(subdir)) { @@ -394,7 +395,7 @@ abstract class PluginCommand extends Command { packages.intersection(possibleMatches).isNotEmpty) { yield PackageEnumerationEntry( RepositoryPackage(subdir as Directory), - excluded: excludedPluginNames + excluded: excludedPackageNames .intersection(possibleMatches) .isNotEmpty); } @@ -415,11 +416,12 @@ abstract class PluginCommand extends Command { /// stream. Stream getTargetPackagesAndSubpackages( {bool filterExcluded = true}) async* { - await for (final PackageEnumerationEntry plugin + await for (final PackageEnumerationEntry package in getTargetPackages(filterExcluded: filterExcluded)) { - yield plugin; - yield* getSubpackages(plugin.package).map((RepositoryPackage package) => - PackageEnumerationEntry(package, excluded: plugin.excluded)); + yield package; + yield* getSubpackages(package.package).map( + (RepositoryPackage subPackage) => + PackageEnumerationEntry(subPackage, excluded: package.excluded)); } } @@ -524,7 +526,7 @@ abstract class PluginCommand extends Command { } // Returns true if one or more files changed that have the potential to affect - // any plugin (e.g., CI script changes). + // any packages (e.g., CI script changes). bool _changesRequireFullTest(List changedFiles) { const List specialFiles = [ '.ci.yaml', // LUCI config. diff --git a/script/tool/lib/src/common/package_looping_command.dart b/script/tool/lib/src/common/package_looping_command.dart index 9e696e956192..a32ada2c35e8 100644 --- a/script/tool/lib/src/common/package_looping_command.dart +++ b/script/tool/lib/src/common/package_looping_command.dart @@ -12,7 +12,7 @@ import 'package:platform/platform.dart'; import 'package:pub_semver/pub_semver.dart'; import 'core.dart'; -import 'plugin_command.dart'; +import 'package_command.dart'; import 'process_runner.dart'; import 'repository_package.dart'; @@ -82,7 +82,7 @@ class PackageResult { /// An abstract base class for a command that iterates over a set of packages /// controlled by a standard set of flags, running some actions on each package, /// and collecting and reporting the success/failure of those actions. -abstract class PackageLoopingCommand extends PluginCommand { +abstract class PackageLoopingCommand extends PackageCommand { /// Creates a command to operate on [packagesDir] with the given environment. PackageLoopingCommand( Directory packagesDir, { diff --git a/script/tool/lib/src/common/package_state_utils.dart b/script/tool/lib/src/common/package_state_utils.dart index c9465876f290..870956a24b10 100644 --- a/script/tool/lib/src/common/package_state_utils.dart +++ b/script/tool/lib/src/common/package_state_utils.dart @@ -161,7 +161,7 @@ bool _isUnpublishedExampleChange( return exampleComponents.first.toLowerCase() != 'readme.md'; } -// True if the change is only relevant to people working on the plugin. +// True if the change is only relevant to people working on the package. Future _isDevChange(List pathComponents, {GitVersionFinder? git, String? repoPath}) async { return _isTestChange(pathComponents) || diff --git a/script/tool/lib/src/create_all_plugins_app_command.dart b/script/tool/lib/src/create_all_plugins_app_command.dart index 7bf007ac72a5..a23dc83d98f3 100644 --- a/script/tool/lib/src/create_all_plugins_app_command.dart +++ b/script/tool/lib/src/create_all_plugins_app_command.dart @@ -10,13 +10,13 @@ import 'package:pub_semver/pub_semver.dart'; import 'package:pubspec_parse/pubspec_parse.dart'; import 'common/core.dart'; -import 'common/plugin_command.dart'; +import 'common/package_command.dart'; import 'common/repository_package.dart'; const String _outputDirectoryFlag = 'output-dir'; /// A command to create an application that builds all in a single application. -class CreateAllPluginsAppCommand extends PluginCommand { +class CreateAllPluginsAppCommand extends PackageCommand { /// Creates an instance of the builder command. CreateAllPluginsAppCommand( Directory packagesDir, { diff --git a/script/tool/lib/src/drive_examples_command.dart b/script/tool/lib/src/drive_examples_command.dart index 45e20c0f13cf..e8fb11b5f289 100644 --- a/script/tool/lib/src/drive_examples_command.dart +++ b/script/tool/lib/src/drive_examples_command.dart @@ -49,7 +49,7 @@ class DriveExamplesCommand extends PackageLoopingCommand { final String name = 'drive-examples'; @override - final String description = 'Runs driver tests for plugin example apps.\n\n' + final String description = 'Runs driver tests for package example apps.\n\n' 'For each *_test.dart in test_driver/ it drives an application with ' 'either the corresponding test in test_driver (for example, ' 'test_driver/app_test.dart would match test_driver/app.dart), or the ' diff --git a/script/tool/lib/src/format_command.dart b/script/tool/lib/src/format_command.dart index f640cbaa5f6c..cc6936c566e1 100644 --- a/script/tool/lib/src/format_command.dart +++ b/script/tool/lib/src/format_command.dart @@ -11,7 +11,7 @@ import 'package:meta/meta.dart'; import 'package:platform/platform.dart'; import 'common/core.dart'; -import 'common/plugin_command.dart'; +import 'common/package_command.dart'; import 'common/process_runner.dart'; /// In theory this should be 8191, but in practice that was still resulting in @@ -37,7 +37,7 @@ final Uri _googleFormatterUrl = Uri.https('github.com', '/google/google-java-format/releases/download/google-java-format-1.3/google-java-format-1.3-all-deps.jar'); /// A command to format all package code. -class FormatCommand extends PluginCommand { +class FormatCommand extends PackageCommand { /// Creates an instance of the format command. FormatCommand( Directory packagesDir, { diff --git a/script/tool/lib/src/license_check_command.dart b/script/tool/lib/src/license_check_command.dart index 5e74d846c13f..0517bcf43298 100644 --- a/script/tool/lib/src/license_check_command.dart +++ b/script/tool/lib/src/license_check_command.dart @@ -8,7 +8,7 @@ import 'package:path/path.dart' as p; import 'package:platform/platform.dart'; import 'common/core.dart'; -import 'common/plugin_command.dart'; +import 'common/package_command.dart'; const Set _codeFileExtensions = { '.c', @@ -105,7 +105,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. '''; /// Validates that code files have copyright and license blocks. -class LicenseCheckCommand extends PluginCommand { +class LicenseCheckCommand extends PackageCommand { /// Creates a new license check command for [packagesDir]. LicenseCheckCommand(Directory packagesDir, {Platform platform = const LocalPlatform(), GitDir? gitDir}) diff --git a/script/tool/lib/src/list_command.dart b/script/tool/lib/src/list_command.dart index e45c09bfd2ef..b47657e47eff 100644 --- a/script/tool/lib/src/list_command.dart +++ b/script/tool/lib/src/list_command.dart @@ -5,11 +5,11 @@ import 'package:file/file.dart'; import 'package:platform/platform.dart'; -import 'common/plugin_command.dart'; +import 'common/package_command.dart'; import 'common/repository_package.dart'; /// A command to list different types of repository content. -class ListCommand extends PluginCommand { +class ListCommand extends PackageCommand { /// Creates an instance of the list command, whose behavior depends on the /// 'type' argument it provides. ListCommand( @@ -18,14 +18,14 @@ class ListCommand extends PluginCommand { }) : super(packagesDir, platform: platform) { argParser.addOption( _type, - defaultsTo: _plugin, - allowed: [_plugin, _example, _package, _file], + defaultsTo: _package, + allowed: [_package, _example, _allPackage, _file], help: 'What type of file system content to list.', ); } static const String _type = 'type'; - static const String _plugin = 'plugin'; + static const String _allPackage = 'package-or-subpackage'; static const String _example = 'example'; static const String _package = 'package'; static const String _file = 'file'; @@ -39,7 +39,7 @@ class ListCommand extends PluginCommand { @override Future run() async { switch (getStringArg(_type)) { - case _plugin: + case _package: await for (final PackageEnumerationEntry entry in getTargetPackages()) { print(entry.package.path); } @@ -52,7 +52,7 @@ class ListCommand extends PluginCommand { print(package.path); } break; - case _package: + case _allPackage: await for (final PackageEnumerationEntry entry in getTargetPackagesAndSubpackages()) { print(entry.package.path); diff --git a/script/tool/lib/src/main.dart b/script/tool/lib/src/main.dart index ea1ec067c82f..0f73c71e8437 100644 --- a/script/tool/lib/src/main.dart +++ b/script/tool/lib/src/main.dart @@ -25,7 +25,7 @@ import 'list_command.dart'; import 'make_deps_path_based_command.dart'; import 'native_test_command.dart'; import 'publish_check_command.dart'; -import 'publish_plugin_command.dart'; +import 'publish_command.dart'; import 'pubspec_check_command.dart'; import 'readme_check_command.dart'; import 'remove_dev_dependencies.dart'; @@ -69,7 +69,7 @@ void main(List args) { ..addCommand(NativeTestCommand(packagesDir)) ..addCommand(MakeDepsPathBasedCommand(packagesDir)) ..addCommand(PublishCheckCommand(packagesDir)) - ..addCommand(PublishPluginCommand(packagesDir)) + ..addCommand(PublishCommand(packagesDir)) ..addCommand(PubspecCheckCommand(packagesDir)) ..addCommand(ReadmeCheckCommand(packagesDir)) ..addCommand(RemoveDevDependenciesCommand(packagesDir)) diff --git a/script/tool/lib/src/make_deps_path_based_command.dart b/script/tool/lib/src/make_deps_path_based_command.dart index 805dd68a0afe..a09511ad7f42 100644 --- a/script/tool/lib/src/make_deps_path_based_command.dart +++ b/script/tool/lib/src/make_deps_path_based_command.dart @@ -9,7 +9,7 @@ import 'package:pub_semver/pub_semver.dart'; import 'common/core.dart'; import 'common/git_version_finder.dart'; -import 'common/plugin_command.dart'; +import 'common/package_command.dart'; import 'common/repository_package.dart'; const int _exitPackageNotFound = 3; @@ -24,7 +24,7 @@ enum _RewriteOutcome { changed, noChangesNeeded, alreadyChanged } /// where a non-breaking change to a platform interface package of a federated /// plugin would cause post-publish analyzer failures in another package of that /// plugin. -class MakeDepsPathBasedCommand extends PluginCommand { +class MakeDepsPathBasedCommand extends PackageCommand { /// Creates an instance of the command to convert selected dependencies to /// path-based. MakeDepsPathBasedCommand( @@ -150,7 +150,7 @@ class MakeDepsPathBasedCommand extends PluginCommand { return _RewriteOutcome.alreadyChanged; } printError( - 'Plugins with dependency overrides are not currently supported.'); + 'Packages with dependency overrides are not currently supported.'); throw ToolExit(_exitCannotUpdatePubspec); } diff --git a/script/tool/lib/src/publish_check_command.dart b/script/tool/lib/src/publish_check_command.dart index d98a286ff582..38e1b7bdebbb 100644 --- a/script/tool/lib/src/publish_check_command.dart +++ b/script/tool/lib/src/publish_check_command.dart @@ -55,7 +55,7 @@ class PublishCheckCommand extends PackageLoopingCommand { @override final String description = - 'Checks to make sure that a plugin *could* be published.'; + 'Checks to make sure that a package *could* be published.'; final PubVersionFinder _pubVersionFinder; diff --git a/script/tool/lib/src/publish_plugin_command.dart b/script/tool/lib/src/publish_command.dart similarity index 98% rename from script/tool/lib/src/publish_plugin_command.dart rename to script/tool/lib/src/publish_command.dart index cae8edac71ca..e7b3d110c5fa 100644 --- a/script/tool/lib/src/publish_plugin_command.dart +++ b/script/tool/lib/src/publish_command.dart @@ -18,8 +18,8 @@ import 'package:yaml/yaml.dart'; import 'common/core.dart'; import 'common/file_utils.dart'; import 'common/git_version_finder.dart'; +import 'common/package_command.dart'; import 'common/package_looping_command.dart'; -import 'common/plugin_command.dart'; import 'common/process_runner.dart'; import 'common/pub_version_finder.dart'; import 'common/repository_package.dart'; @@ -42,13 +42,13 @@ class _RemoteInfo { /// 2. Tags the release with the format -v. /// 3. Pushes the release to a remote. /// -/// Both 2 and 3 are optional, see `plugin_tools help publish-plugin` for full +/// Both 2 and 3 are optional, see `plugin_tools help publish` for full /// usage information. /// /// [processRunner], [print], and [stdin] can be overriden for easier testing. -class PublishPluginCommand extends PackageLoopingCommand { +class PublishCommand extends PackageLoopingCommand { /// Creates an instance of the publish command. - PublishPluginCommand( + PublishCommand( Directory packagesDir, { ProcessRunner processRunner = const ProcessRunner(), Platform platform = const LocalPlatform(), @@ -100,7 +100,7 @@ class PublishPluginCommand extends PackageLoopingCommand { static const String _tagFormat = '%PACKAGE%-v%VERSION%'; @override - final String name = 'publish-plugin'; + final String name = 'publish'; @override final String description = diff --git a/script/tool/lib/src/version_check_command.dart b/script/tool/lib/src/version_check_command.dart index 235611492b2d..b3be672066d9 100644 --- a/script/tool/lib/src/version_check_command.dart +++ b/script/tool/lib/src/version_check_command.dart @@ -170,7 +170,7 @@ class VersionCheckCommand extends PackageLoopingCommand { @override final String description = - 'Checks if the versions of the plugins have been incremented per pub specification.\n' + 'Checks if the versions of packages have been incremented per pub specification.\n' 'Also checks if the latest version in CHANGELOG matches the version in pubspec.\n\n' 'This command requires "pub" and "flutter" to be in your path.'; @@ -318,7 +318,7 @@ ${indentation}HTTP response: ${pubVersionFinderResponse.httpResponse.body} print('${indentation}Unable to find previous version ' '${getBoolArg(_againstPubFlag) ? 'on pub server' : 'at git base'}.'); logWarning( - '${indentation}If this plugin is not new, something has gone wrong.'); + '${indentation}If this package is not new, something has gone wrong.'); return _CurrentVersionState.validIncrease; // Assume new, thus valid. } diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml index 9b9d73288552..246c2ade2564 100644 --- a/script/tool/pubspec.yaml +++ b/script/tool/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_plugin_tools description: Productivity utils for flutter/plugins and flutter/packages repository: https://github.com/flutter/plugins/tree/main/script/tool -version: 0.10.0+1 +version: 0.11.0 dependencies: args: ^2.1.0 diff --git a/script/tool/test/analyze_command_test.dart b/script/tool/test/analyze_command_test.dart index e10780fa9ecb..e6b910960846 100644 --- a/script/tool/test/analyze_command_test.dart +++ b/script/tool/test/analyze_command_test.dart @@ -37,7 +37,7 @@ void main() { }); test('analyzes all packages', () async { - final RepositoryPackage plugin1 = createFakePlugin('a', packagesDir); + final RepositoryPackage package1 = createFakePackage('a', packagesDir); final RepositoryPackage plugin2 = createFakePlugin('b', packagesDir); await runCapturingPrint(runner, ['analyze']); @@ -45,9 +45,9 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - ProcessCall('flutter', const ['pub', 'get'], plugin1.path), - ProcessCall( - 'dart', const ['analyze', '--fatal-infos'], plugin1.path), + ProcessCall('flutter', const ['pub', 'get'], package1.path), + ProcessCall('dart', const ['analyze', '--fatal-infos'], + package1.path), ProcessCall('flutter', const ['pub', 'get'], plugin2.path), ProcessCall( 'dart', const ['analyze', '--fatal-infos'], plugin2.path), diff --git a/script/tool/test/common/git_version_finder_test.dart b/script/tool/test/common/git_version_finder_test.dart index ad1a26ffc165..d5a5dd4fe876 100644 --- a/script/tool/test/common/git_version_finder_test.dart +++ b/script/tool/test/common/git_version_finder_test.dart @@ -8,7 +8,7 @@ import 'package:flutter_plugin_tools/src/common/git_version_finder.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; -import 'plugin_command_test.mocks.dart'; +import 'package_command_test.mocks.dart'; void main() { late List?> gitDirCommands; diff --git a/script/tool/test/common/plugin_command_test.dart b/script/tool/test/common/package_command_test.dart similarity index 98% rename from script/tool/test/common/plugin_command_test.dart rename to script/tool/test/common/package_command_test.dart index 8c6b38682418..c3d1ee343ff4 100644 --- a/script/tool/test/common/plugin_command_test.dart +++ b/script/tool/test/common/package_command_test.dart @@ -8,7 +8,7 @@ import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_plugin_tools/src/common/core.dart'; -import 'package:flutter_plugin_tools/src/common/plugin_command.dart'; +import 'package:flutter_plugin_tools/src/common/package_command.dart'; import 'package:flutter_plugin_tools/src/common/process_runner.dart'; import 'package:git/git.dart'; import 'package:mockito/annotations.dart'; @@ -18,12 +18,12 @@ import 'package:test/test.dart'; import '../mocks.dart'; import '../util.dart'; -import 'plugin_command_test.mocks.dart'; +import 'package_command_test.mocks.dart'; @GenerateMocks([GitDir]) void main() { late RecordingProcessRunner processRunner; - late SamplePluginCommand command; + late SamplePackageCommand command; late CommandRunner runner; late FileSystem fileSystem; late MockPlatform mockPlatform; @@ -49,7 +49,7 @@ void main() { return processRunner.run('git-$gitCommand', arguments); }); processRunner = RecordingProcessRunner(); - command = SamplePluginCommand( + command = SamplePackageCommand( packagesDir, processRunner: processRunner, platform: mockPlatform, @@ -282,7 +282,7 @@ packages/plugin1/plugin1/plugin1.dart }); test('returns subpackages after the enclosing package', () async { - final SamplePluginCommand localCommand = SamplePluginCommand( + final SamplePackageCommand localCommand = SamplePackageCommand( packagesDir, processRunner: processRunner, platform: mockPlatform, @@ -848,7 +848,7 @@ packages/b_package/lib/src/foo.dart ]; for (int i = 0; i < expectedShards.length; ++i) { - final SamplePluginCommand localCommand = SamplePluginCommand( + final SamplePackageCommand localCommand = SamplePackageCommand( packagesDir, processRunner: processRunner, platform: mockPlatform, @@ -892,7 +892,7 @@ packages/b_package/lib/src/foo.dart ]; for (int i = 0; i < expectedShards.length; ++i) { - final SamplePluginCommand localCommand = SamplePluginCommand( + final SamplePackageCommand localCommand = SamplePackageCommand( packagesDir, processRunner: processRunner, platform: mockPlatform, @@ -945,7 +945,7 @@ packages/b_package/lib/src/foo.dart createFakePackage('package9', packagesDir); for (int i = 0; i < expectedShards.length; ++i) { - final SamplePluginCommand localCommand = SamplePluginCommand( + final SamplePackageCommand localCommand = SamplePackageCommand( packagesDir, processRunner: processRunner, platform: mockPlatform, @@ -971,8 +971,8 @@ packages/b_package/lib/src/foo.dart }); } -class SamplePluginCommand extends PluginCommand { - SamplePluginCommand( +class SamplePackageCommand extends PackageCommand { + SamplePackageCommand( Directory packagesDir, { ProcessRunner processRunner = const ProcessRunner(), Platform platform = const LocalPlatform(), diff --git a/script/tool/test/common/plugin_command_test.mocks.dart b/script/tool/test/common/package_command_test.mocks.dart similarity index 100% rename from script/tool/test/common/plugin_command_test.mocks.dart rename to script/tool/test/common/package_command_test.mocks.dart diff --git a/script/tool/test/common/package_looping_command_test.dart b/script/tool/test/common/package_looping_command_test.dart index 7e9f63cb0344..c858df0022cc 100644 --- a/script/tool/test/common/package_looping_command_test.dart +++ b/script/tool/test/common/package_looping_command_test.dart @@ -18,7 +18,7 @@ import 'package:test/test.dart'; import '../mocks.dart'; import '../util.dart'; -import 'plugin_command_test.mocks.dart'; +import 'package_command_test.mocks.dart'; // Constants for colorized output start and end. const String _startElapsedTimeColor = '\x1B[90m'; @@ -373,9 +373,10 @@ void main() { test('skips unsupported Dart versions when requested', () async { final RepositoryPackage excluded = createFakePackage( - 'excluded_package', packagesDir, dartConstraint: '>=2.17.0 <3.0.0'); - final RepositoryPackage included = createFakePackage( - 'a_package', packagesDir); + 'excluded_package', packagesDir, + dartConstraint: '>=2.17.0 <3.0.0'); + final RepositoryPackage included = + createFakePackage('a_package', packagesDir); final TestPackageLoopingCommand command = createTestCommand( packageLoopingType: PackageLoopingType.includeAllSubpackages, @@ -406,8 +407,7 @@ void main() { createFakePlugin('package_a', packagesDir); createFakePackage('package_b', packagesDir); - final TestPackageLoopingCommand command = - createTestCommand(); + final TestPackageLoopingCommand command = createTestCommand(); final List output = await runCommand(command); const String separator = @@ -440,8 +440,7 @@ void main() { createFakePlugin('package_a', packagesDir); createFakePackage('package_b', packagesDir); - final TestPackageLoopingCommand command = - createTestCommand(); + final TestPackageLoopingCommand command = createTestCommand(); final List output = await runCommand(command, arguments: ['--log-timing']); @@ -783,8 +782,7 @@ void main() { createFakePackage('package_f', packagesDir); - final TestPackageLoopingCommand command = - createTestCommand(); + final TestPackageLoopingCommand command = createTestCommand(); final List output = await runCommand(command); expect( @@ -809,8 +807,7 @@ void main() { test('prints exclusions as skips in long-form run summary', () async { createFakePackage('package_a', packagesDir); - final TestPackageLoopingCommand command = - createTestCommand(); + final TestPackageLoopingCommand command = createTestCommand(); final List output = await runCommand(command, arguments: ['--exclude=package_a']); diff --git a/script/tool/test/custom_test_command_test.dart b/script/tool/test/custom_test_command_test.dart index a28b47505e9d..8b0c021b1255 100644 --- a/script/tool/test/custom_test_command_test.dart +++ b/script/tool/test/custom_test_command_test.dart @@ -40,7 +40,7 @@ void main() { test('runs both new and legacy when both are present', () async { final RepositoryPackage package = - createFakePlugin('a_package', packagesDir, extraFiles: [ + createFakePackage('a_package', packagesDir, extraFiles: [ 'tool/run_tests.dart', 'run_tests.sh', ]); @@ -65,7 +65,7 @@ void main() { }); test('runs when only new is present', () async { - final RepositoryPackage package = createFakePlugin( + final RepositoryPackage package = createFakePackage( 'a_package', packagesDir, extraFiles: ['tool/run_tests.dart']); @@ -87,7 +87,7 @@ void main() { }); test('runs pub get before running Dart test script', () async { - final RepositoryPackage package = createFakePlugin( + final RepositoryPackage package = createFakePackage( 'a_package', packagesDir, extraFiles: ['tool/run_tests.dart']); @@ -103,7 +103,7 @@ void main() { }); test('runs when only legacy is present', () async { - final RepositoryPackage package = createFakePlugin( + final RepositoryPackage package = createFakePackage( 'a_package', packagesDir, extraFiles: ['run_tests.sh']); @@ -125,7 +125,7 @@ void main() { }); test('skips when neither is present', () async { - createFakePlugin('a_package', packagesDir); + createFakePackage('a_package', packagesDir); final List output = await runCapturingPrint(runner, ['custom-test']); @@ -140,7 +140,7 @@ void main() { }); test('fails if new fails', () async { - createFakePlugin('a_package', packagesDir, extraFiles: [ + createFakePackage('a_package', packagesDir, extraFiles: [ 'tool/run_tests.dart', 'run_tests.sh', ]); @@ -166,7 +166,7 @@ void main() { }); test('fails if pub get fails', () async { - createFakePlugin('a_package', packagesDir, extraFiles: [ + createFakePackage('a_package', packagesDir, extraFiles: [ 'tool/run_tests.dart', 'run_tests.sh', ]); @@ -193,7 +193,7 @@ void main() { test('fails if legacy fails', () async { final RepositoryPackage package = - createFakePlugin('a_package', packagesDir, extraFiles: [ + createFakePackage('a_package', packagesDir, extraFiles: [ 'tool/run_tests.dart', 'run_tests.sh', ]); @@ -238,7 +238,7 @@ void main() { test('runs new and skips old when both are present', () async { final RepositoryPackage package = - createFakePlugin('a_package', packagesDir, extraFiles: [ + createFakePackage('a_package', packagesDir, extraFiles: [ 'tool/run_tests.dart', 'run_tests.sh', ]); @@ -261,7 +261,7 @@ void main() { }); test('runs when only new is present', () async { - final RepositoryPackage package = createFakePlugin( + final RepositoryPackage package = createFakePackage( 'a_package', packagesDir, extraFiles: ['tool/run_tests.dart']); @@ -283,7 +283,7 @@ void main() { }); test('skips package when only legacy is present', () async { - createFakePlugin('a_package', packagesDir, + createFakePackage('a_package', packagesDir, extraFiles: ['run_tests.sh']); final List output = @@ -300,7 +300,7 @@ void main() { }); test('fails if new fails', () async { - createFakePlugin('a_package', packagesDir, extraFiles: [ + createFakePackage('a_package', packagesDir, extraFiles: [ 'tool/run_tests.dart', 'run_tests.sh', ]); diff --git a/script/tool/test/dependabot_check_command_test.dart b/script/tool/test/dependabot_check_command_test.dart index a4c8693b2c21..b0558c3d22ac 100644 --- a/script/tool/test/dependabot_check_command_test.dart +++ b/script/tool/test/dependabot_check_command_test.dart @@ -10,7 +10,7 @@ import 'package:flutter_plugin_tools/src/dependabot_check_command.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; -import 'common/plugin_command_test.mocks.dart'; +import 'common/package_command_test.mocks.dart'; import 'util.dart'; void main() { diff --git a/script/tool/test/federation_safety_check_command_test.dart b/script/tool/test/federation_safety_check_command_test.dart index 015a0eb634d9..6b6b1a514531 100644 --- a/script/tool/test/federation_safety_check_command_test.dart +++ b/script/tool/test/federation_safety_check_command_test.dart @@ -12,7 +12,7 @@ import 'package:flutter_plugin_tools/src/federation_safety_check_command.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; -import 'common/plugin_command_test.mocks.dart'; +import 'common/package_command_test.mocks.dart'; import 'mocks.dart'; import 'util.dart'; diff --git a/script/tool/test/format_command_test.dart b/script/tool/test/format_command_test.dart index 5bd6f97832f7..c1c4a212a019 100644 --- a/script/tool/test/format_command_test.dart +++ b/script/tool/test/format_command_test.dart @@ -60,15 +60,15 @@ void main() { } /// Returns a list of [count] relative paths to pass to [createFakePlugin] - /// with name [pluginName] such that each path will be 99 characters long - /// relative to [packagesDir]. + /// or [createFakePackage] with name [packageName] such that each path will + /// be 99 characters long relative to [packagesDir]. /// /// This is for each of testing batching, since it means each file will /// consume 100 characters of the batch length. - List _get99CharacterPathExtraFiles(String pluginName, int count) { + List _get99CharacterPathExtraFiles(String packageName, int count) { final int padding = 99 - - pluginName.length - - 1 - // the path separator after the plugin name + packageName.length - + 1 - // the path separator after the package name 1 - // the path separator after the padding 10; // the file name const int filenameBase = 10000; diff --git a/script/tool/test/license_check_command_test.dart b/script/tool/test/license_check_command_test.dart index 43fbd6b5eca8..005b77d99a13 100644 --- a/script/tool/test/license_check_command_test.dart +++ b/script/tool/test/license_check_command_test.dart @@ -11,7 +11,7 @@ import 'package:mockito/mockito.dart'; import 'package:platform/platform.dart'; import 'package:test/test.dart'; -import 'common/plugin_command_test.mocks.dart'; +import 'common/package_command_test.mocks.dart'; import 'mocks.dart'; import 'util.dart'; diff --git a/script/tool/test/list_command_test.dart b/script/tool/test/list_command_test.dart index f74431c5cee7..f19215c89b9e 100644 --- a/script/tool/test/list_command_test.dart +++ b/script/tool/test/list_command_test.dart @@ -29,17 +29,17 @@ void main() { runner.addCommand(command); }); - test('lists plugins', () async { - createFakePlugin('plugin1', packagesDir); + test('lists top-level packages', () async { + createFakePackage('package1', packagesDir); createFakePlugin('plugin2', packagesDir); final List plugins = - await runCapturingPrint(runner, ['list', '--type=plugin']); + await runCapturingPrint(runner, ['list', '--type=package']); expect( plugins, orderedEquals([ - '/packages/plugin1', + '/packages/package1', '/packages/plugin2', ]), ); @@ -64,20 +64,20 @@ void main() { ); }); - test('lists packages', () async { - createFakePlugin('plugin1', packagesDir); + test('lists packages and subpackages', () async { + createFakePackage('package1', packagesDir); createFakePlugin('plugin2', packagesDir, examples: ['example1', 'example2']); createFakePlugin('plugin3', packagesDir, examples: []); - final List packages = - await runCapturingPrint(runner, ['list', '--type=package']); + final List packages = await runCapturingPrint( + runner, ['list', '--type=package-or-subpackage']); expect( packages, unorderedEquals([ - '/packages/plugin1', - '/packages/plugin1/example', + '/packages/package1', + '/packages/package1/example', '/packages/plugin2', '/packages/plugin2/example/example1', '/packages/plugin2/example/example2', diff --git a/script/tool/test/make_deps_path_based_command_test.dart b/script/tool/test/make_deps_path_based_command_test.dart index 33d6be261e87..7e52dd6bbbc4 100644 --- a/script/tool/test/make_deps_path_based_command_test.dart +++ b/script/tool/test/make_deps_path_based_command_test.dart @@ -11,7 +11,7 @@ import 'package:flutter_plugin_tools/src/make_deps_path_based_command.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; -import 'common/plugin_command_test.mocks.dart'; +import 'common/package_command_test.mocks.dart'; import 'mocks.dart'; import 'util.dart'; diff --git a/script/tool/test/publish_plugin_command_test.dart b/script/tool/test/publish_command_test.dart similarity index 94% rename from script/tool/test/publish_plugin_command_test.dart rename to script/tool/test/publish_command_test.dart index f3be3b48b1f1..19e8bdd233ec 100644 --- a/script/tool/test/publish_plugin_command_test.dart +++ b/script/tool/test/publish_command_test.dart @@ -10,14 +10,14 @@ import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_plugin_tools/src/common/core.dart'; -import 'package:flutter_plugin_tools/src/publish_plugin_command.dart'; +import 'package:flutter_plugin_tools/src/publish_command.dart'; import 'package:http/http.dart' as http; import 'package:http/testing.dart'; import 'package:mockito/mockito.dart'; import 'package:platform/platform.dart'; import 'package:test/test.dart'; -import 'common/plugin_command_test.mocks.dart'; +import 'common/package_command_test.mocks.dart'; import 'mocks.dart'; import 'util.dart'; @@ -34,7 +34,7 @@ void main() { late Map> mockHttpResponses; void _createMockCredentialFile() { - final String credentialPath = PublishPluginCommand.getCredentialPath(); + final String credentialPath = PublishCommand.getCredentialPath(); fileSystem.file(credentialPath) ..createSync(recursive: true) ..writeAsStringSync('some credential'); @@ -72,7 +72,7 @@ void main() { mockStdin = MockStdin(); commandRunner = CommandRunner('tester', '') - ..addCommand(PublishPluginCommand( + ..addCommand(PublishCommand( packagesDir, processRunner: processRunner, stdinput: mockStdin, @@ -93,7 +93,7 @@ void main() { Error? commandError; final List output = await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', ], errorHandler: (Error e) { commandError = e; @@ -122,7 +122,7 @@ void main() { Error? commandError; final List output = await runCapturingPrint( - commandRunner, ['publish-plugin', '--packages=foo'], + commandRunner, ['publish', '--packages=foo'], errorHandler: (Error e) { commandError = e; }); @@ -154,8 +154,8 @@ void main() { stderrEncoding: utf8), // pub publish for plugin1 ]; - final List output = await runCapturingPrint(commandRunner, - ['publish-plugin', '--packages=plugin1,plugin2']); + final List output = await runCapturingPrint( + commandRunner, ['publish', '--packages=plugin1,plugin2']); expect( output, @@ -176,7 +176,7 @@ void main() { mockStdin.mockUserInputs.add(utf8.encode('user input')); await runCapturingPrint( - commandRunner, ['publish-plugin', '--packages=foo']); + commandRunner, ['publish', '--packages=foo']); expect(processRunner.mockPublishProcess.stdinMock.lines, contains('user input')); @@ -187,7 +187,7 @@ void main() { createFakePlugin('foo', packagesDir, examples: []); await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', '--pub-publish-flags', '--dry-run,--server=bar' @@ -209,7 +209,7 @@ void main() { createFakePlugin('foo', packagesDir, examples: []); await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', '--skip-confirmation', '--pub-publish-flags', @@ -232,7 +232,7 @@ void main() { createFakePlugin('plugin_b', packagesDir, examples: []); await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=plugin_a,plugin_b', '--skip-confirmation', '--pub-publish-flags', @@ -263,7 +263,7 @@ void main() { Error? commandError; final List output = await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', ], errorHandler: (Error e) { commandError = e; @@ -283,7 +283,7 @@ void main() { final List output = await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', '--dry-run', ]); @@ -310,7 +310,7 @@ void main() { final List output = await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=$packageName', ]); @@ -330,7 +330,7 @@ void main() { test('with the version and name from the pubspec.yaml', () async { createFakePlugin('foo', packagesDir, examples: []); await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', ]); @@ -348,7 +348,7 @@ void main() { Error? commandError; final List output = await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', ], errorHandler: (Error e) { commandError = e; @@ -375,7 +375,7 @@ void main() { final List output = await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', ]); @@ -398,7 +398,7 @@ void main() { final List output = await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--skip-confirmation', '--packages=foo', ]); @@ -420,8 +420,8 @@ void main() { mockStdin.readLineOutput = 'y'; - final List output = await runCapturingPrint(commandRunner, - ['publish-plugin', '--packages=foo', '--dry-run']); + final List output = await runCapturingPrint( + commandRunner, ['publish', '--packages=foo', '--dry-run']); expect( processRunner.recordedCalls @@ -445,7 +445,7 @@ void main() { final List output = await runCapturingPrint(commandRunner, [ - 'publish-plugin', + 'publish', '--packages=foo', '--remote', 'origin', @@ -491,7 +491,7 @@ void main() { mockStdin.readLineOutput = 'y'; final List output = await runCapturingPrint(commandRunner, - ['publish-plugin', '--all-changed', '--base-sha=HEAD~']); + ['publish', '--all-changed', '--base-sha=HEAD~']); expect( output, @@ -553,7 +553,7 @@ void main() { mockStdin.readLineOutput = 'y'; final List output = await runCapturingPrint(commandRunner, - ['publish-plugin', '--all-changed', '--base-sha=HEAD~']); + ['publish', '--all-changed', '--base-sha=HEAD~']); expect( output, @@ -598,7 +598,7 @@ void main() { final List output = await runCapturingPrint( commandRunner, [ - 'publish-plugin', + 'publish', '--all-changed', '--base-sha=HEAD~', '--dry-run' @@ -651,7 +651,7 @@ void main() { mockStdin.readLineOutput = 'y'; final List output2 = await runCapturingPrint(commandRunner, - ['publish-plugin', '--all-changed', '--base-sha=HEAD~']); + ['publish', '--all-changed', '--base-sha=HEAD~']); expect( output2, containsAllInOrder([ @@ -700,7 +700,7 @@ void main() { mockStdin.readLineOutput = 'y'; final List output2 = await runCapturingPrint(commandRunner, - ['publish-plugin', '--all-changed', '--base-sha=HEAD~']); + ['publish', '--all-changed', '--base-sha=HEAD~']); expect( output2, containsAllInOrder([ @@ -749,7 +749,7 @@ void main() { ]; final List output = await runCapturingPrint(commandRunner, - ['publish-plugin', '--all-changed', '--base-sha=HEAD~']); + ['publish', '--all-changed', '--base-sha=HEAD~']); expect( output, @@ -795,7 +795,7 @@ void main() { Error? commandError; final List output = await runCapturingPrint(commandRunner, - ['publish-plugin', '--all-changed', '--base-sha=HEAD~'], + ['publish', '--all-changed', '--base-sha=HEAD~'], errorHandler: (Error e) { commandError = e; }); @@ -830,7 +830,7 @@ void main() { ]; final List output = await runCapturingPrint(commandRunner, - ['publish-plugin', '--all-changed', '--base-sha=HEAD~']); + ['publish', '--all-changed', '--base-sha=HEAD~']); expect(output, containsAllInOrder(['Ran for 0 package(s)'])); expect( @@ -852,7 +852,7 @@ void main() { ]; final List output = await runCapturingPrint(commandRunner, - ['publish-plugin', '--all-changed', '--base-sha=HEAD~']); + ['publish', '--all-changed', '--base-sha=HEAD~']); expect( output, diff --git a/script/tool/test/update_excerpts_command_test.dart b/script/tool/test/update_excerpts_command_test.dart index 34c85cc172fe..79f53d8779bb 100644 --- a/script/tool/test/update_excerpts_command_test.dart +++ b/script/tool/test/update_excerpts_command_test.dart @@ -12,7 +12,7 @@ import 'package:flutter_plugin_tools/src/update_excerpts_command.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; -import 'common/plugin_command_test.mocks.dart'; +import 'common/package_command_test.mocks.dart'; import 'mocks.dart'; import 'util.dart'; diff --git a/script/tool/test/update_release_info_command_test.dart b/script/tool/test/update_release_info_command_test.dart index 7e7ff54d5947..8cd2e9591e70 100644 --- a/script/tool/test/update_release_info_command_test.dart +++ b/script/tool/test/update_release_info_command_test.dart @@ -12,7 +12,7 @@ import 'package:flutter_plugin_tools/src/update_release_info_command.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; -import 'common/plugin_command_test.mocks.dart'; +import 'common/package_command_test.mocks.dart'; import 'mocks.dart'; import 'util.dart'; diff --git a/script/tool/test/version_check_command_test.dart b/script/tool/test/version_check_command_test.dart index 0e94712e9ef0..598176bbe209 100644 --- a/script/tool/test/version_check_command_test.dart +++ b/script/tool/test/version_check_command_test.dart @@ -16,7 +16,7 @@ import 'package:mockito/mockito.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:test/test.dart'; -import 'common/plugin_command_test.mocks.dart'; +import 'common/package_command_test.mocks.dart'; import 'mocks.dart'; import 'util.dart'; From 1c47c3b9d2788104985ebfc4660cafb390968b6e Mon Sep 17 00:00:00 2001 From: Camille Simon <43054281+camsim99@users.noreply.github.com> Date: Tue, 27 Sep 2022 13:34:08 -0700 Subject: [PATCH 027/133] [camera] Add ProcessCameraProvider class to CameraX plugin (#6469) --- .../camera_android_camerax/CHANGELOG.md | 1 + .../android/build.gradle | 4 +- .../camerax/CameraAndroidCameraxPlugin.java | 31 +++- .../camerax/CameraInfoFlutterApiImpl.java | 3 +- .../camerax/GeneratedCameraXLibrary.java | 134 ++++++++++++++++++ .../ProcessCameraProviderFlutterApiImpl.java | 23 +++ .../ProcessCameraProviderHostApiImpl.java | 87 ++++++++++++ .../camerax/ProcessCameraProviderTest.java | 106 ++++++++++++++ ...roid_camera_camerax_flutter_api_impls.dart | 9 ++ .../lib/src/camerax_library.pigeon.dart | 109 ++++++++++++++ .../lib/src/process_camera_provider.dart | 119 ++++++++++++++++ .../pigeons/camerax_library.dart | 13 ++ .../test/process_camera_provider_test.dart | 96 +++++++++++++ .../process_camera_provider_test.mocks.dart | 40 ++++++ .../test/test_camerax_library.pigeon.dart | 50 +++++++ 15 files changed, 818 insertions(+), 7 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java create mode 100644 packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart create mode 100644 packages/camera/camera_android_camerax/test/process_camera_provider_test.dart create mode 100644 packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 2bdfa594b3be..ce2fb9046c69 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -3,3 +3,4 @@ * Creates camera_android_camerax plugin for development. * Adds CameraInfo class and removes unnecessary code from plugin. * Adds CameraSelector class. +* Adds ProcessCameraProvider class. diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index 1772afebe429..a193a298c640 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -38,13 +38,15 @@ android { dependencies { // CameraX core library using the camera2 implementation must use same version number. - def camerax_version = "1.2.0-beta01" + def camerax_version = "1.2.0-beta02" implementation "androidx.camera:camera-core:${camerax_version}" implementation "androidx.camera:camera-camera2:${camerax_version}" implementation "androidx.camera:camera-lifecycle:${camerax_version}" + implementation 'com.google.guava:guava:28.1-android' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:4.7.0' testImplementation 'androidx.test:core:1.4.0' + testImplementation 'org.robolectric:robolectric:4.3' } testOptions { unitTests.includeAndroidResources = true diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index bb5756a7e3b9..b8fbaf539c32 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -15,6 +15,7 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, ActivityAware { private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; + private ProcessCameraProviderHostApiImpl processCameraProviderHostApi; /** * Initialize this within the {@code #configureFlutterEngine} of a Flutter activity or fragment. @@ -39,6 +40,10 @@ void setUp(BinaryMessenger binaryMessenger, Context context) { binaryMessenger, new JavaObjectHostApiImpl(instanceManager)); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); + processCameraProviderHostApi = + new ProcessCameraProviderHostApiImpl(binaryMessenger, instanceManager, context); + GeneratedCameraXLibrary.ProcessCameraProviderHostApi.setup( + binaryMessenger, processCameraProviderHostApi); } @Override @@ -60,15 +65,33 @@ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { // Activity Lifecycle methods: @Override - public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) {} + public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) { + updateContext(activityPluginBinding.getActivity()); + } @Override - public void onDetachedFromActivityForConfigChanges() {} + public void onDetachedFromActivityForConfigChanges() { + updateContext(pluginBinding.getApplicationContext()); + } @Override public void onReattachedToActivityForConfigChanges( - @NonNull ActivityPluginBinding activityPluginBinding) {} + @NonNull ActivityPluginBinding activityPluginBinding) { + updateContext(activityPluginBinding.getActivity()); + } @Override - public void onDetachedFromActivity() {} + public void onDetachedFromActivity() { + updateContext(pluginBinding.getApplicationContext()); + } + + /** + * Updates context that is used to fetch the corresponding instance of a {@code + * ProcessCameraProvider}. + */ + private void updateContext(Context context) { + if (processCameraProviderHostApi != null) { + processCameraProviderHostApi.setContext(context); + } + } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java index b5ba9fc1ff3b..c538e420cc7e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java @@ -18,7 +18,6 @@ public CameraInfoFlutterApiImpl( } void create(CameraInfo cameraInfo, Reply reply) { - instanceManager.addHostCreatedInstance(cameraInfo); - create(instanceManager.getIdentifierForStrongReference(cameraInfo), reply); + create(instanceManager.addHostCreatedInstance(cameraInfo), reply); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index e87a80db030c..041564c3bfcb 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -22,6 +22,13 @@ /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) public class GeneratedCameraXLibrary { + + public interface Result { + void success(T result); + + void error(Throwable error); + } + private static class JavaObjectHostApiCodec extends StandardMessageCodec { public static final JavaObjectHostApiCodec INSTANCE = new JavaObjectHostApiCodec(); @@ -311,6 +318,133 @@ public void create( } } + private static class ProcessCameraProviderHostApiCodec extends StandardMessageCodec { + public static final ProcessCameraProviderHostApiCodec INSTANCE = + new ProcessCameraProviderHostApiCodec(); + + private ProcessCameraProviderHostApiCodec() {} + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ProcessCameraProviderHostApi { + void getInstance(Result result); + + @NonNull + List getAvailableCameraInfos(@NonNull Long identifier); + + /** The codec used by ProcessCameraProviderHostApi. */ + static MessageCodec getCodec() { + return ProcessCameraProviderHostApiCodec.INSTANCE; + } + + /** + * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + Result resultCallback = + new Result() { + public void success(Long result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.getInstance(resultCallback); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List output = + api.getAvailableCameraInfos( + (identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + private static class ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { + public static final ProcessCameraProviderFlutterApiCodec INSTANCE = + new ProcessCameraProviderFlutterApiCodec(); + + private ProcessCameraProviderFlutterApiCodec() {} + } + + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ProcessCameraProviderFlutterApi { + private final BinaryMessenger binaryMessenger; + + public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + public interface Reply { + void reply(T reply); + } + + static MessageCodec getCodec() { + return ProcessCameraProviderFlutterApiCodec.INSTANCE; + } + + public void create(@NonNull Long identifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", + getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); + } + } + private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java new file mode 100644 index 000000000000..90c94d0c26cb --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java @@ -0,0 +1,23 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import androidx.camera.lifecycle.ProcessCameraProvider; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ProcessCameraProviderFlutterApi; + +public class ProcessCameraProviderFlutterApiImpl extends ProcessCameraProviderFlutterApi { + public ProcessCameraProviderFlutterApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + super(binaryMessenger); + this.instanceManager = instanceManager; + } + + private final InstanceManager instanceManager; + + void create(ProcessCameraProvider processCameraProvider, Reply reply) { + create(instanceManager.addHostCreatedInstance(processCameraProvider), reply); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java new file mode 100644 index 000000000000..19c5eb5b3f70 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java @@ -0,0 +1,87 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import android.content.Context; +import androidx.annotation.NonNull; +import androidx.camera.core.CameraInfo; +import androidx.camera.lifecycle.ProcessCameraProvider; +import androidx.core.content.ContextCompat; +import com.google.common.util.concurrent.ListenableFuture; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ProcessCameraProviderHostApi; +import java.util.ArrayList; +import java.util.List; + +public class ProcessCameraProviderHostApiImpl implements ProcessCameraProviderHostApi { + private final BinaryMessenger binaryMessenger; + private final InstanceManager instanceManager; + + private Context context; + + public ProcessCameraProviderHostApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager, Context context) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + this.context = context; + } + + /** + * Sets the context that the {@code ProcessCameraProvider} will use to attach the lifecycle of the + * camera to. + * + *

If using the camera plugin in an add-to-app context, ensure that a new instance of the + * {@code ProcessCameraProvider} is fetched via {@code #getInstance} anytime the context changes. + */ + public void setContext(Context context) { + this.context = context; + } + + /** + * Returns the instance of the ProcessCameraProvider to manage the lifecycle of the camera for the + * current {@code Context}. + */ + @Override + public void getInstance(GeneratedCameraXLibrary.Result result) { + ListenableFuture processCameraProviderFuture = + ProcessCameraProvider.getInstance(context); + + processCameraProviderFuture.addListener( + () -> { + try { + // Camera provider is now guaranteed to be available. + ProcessCameraProvider processCameraProvider = processCameraProviderFuture.get(); + + if (!instanceManager.containsInstance(processCameraProvider)) { + final ProcessCameraProviderFlutterApiImpl flutterApi = + new ProcessCameraProviderFlutterApiImpl(binaryMessenger, instanceManager); + flutterApi.create(processCameraProvider, reply -> {}); + } + result.success(instanceManager.getIdentifierForStrongReference(processCameraProvider)); + } catch (Exception e) { + result.error(e); + } + }, + ContextCompat.getMainExecutor(context)); + } + + /** Returns cameras available to the ProcessCameraProvider. */ + @Override + public List getAvailableCameraInfos(@NonNull Long identifier) { + ProcessCameraProvider processCameraProvider = + (ProcessCameraProvider) instanceManager.getInstance(identifier); + + List availableCameras = processCameraProvider.getAvailableCameraInfos(); + List availableCamerasIds = new ArrayList(); + final CameraInfoFlutterApiImpl cameraInfoFlutterApi = + new CameraInfoFlutterApiImpl(binaryMessenger, instanceManager); + + for (CameraInfo cameraInfo : availableCameras) { + cameraInfoFlutterApi.create(cameraInfo, result -> {}); + availableCamerasIds.add(instanceManager.getIdentifierForStrongReference(cameraInfo)); + } + return availableCamerasIds; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java new file mode 100644 index 000000000000..ec321f8dbfea --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java @@ -0,0 +1,106 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import androidx.camera.core.CameraInfo; +import androidx.camera.lifecycle.ProcessCameraProvider; +import androidx.test.core.app.ApplicationProvider; +import com.google.common.util.concurrent.SettableFuture; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Arrays; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +@RunWith(RobolectricTestRunner.class) +public class ProcessCameraProviderTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ProcessCameraProvider processCameraProvider; + @Mock public BinaryMessenger mockBinaryMessenger; + + InstanceManager testInstanceManager; + private Context context; + + @Before + public void setUp() { + testInstanceManager = InstanceManager.open(identifier -> {}); + context = ApplicationProvider.getApplicationContext(); + } + + @After + public void tearDown() { + testInstanceManager.close(); + } + + @Test + public void getInstanceTest() { + final ProcessCameraProviderHostApiImpl processCameraProviderHostApi = + new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + SettableFuture processCameraProviderFuture = SettableFuture.create(); + processCameraProviderFuture.set(processCameraProvider); + final GeneratedCameraXLibrary.Result mockResult = + mock(GeneratedCameraXLibrary.Result.class); + + testInstanceManager.addDartCreatedInstance(processCameraProvider, 0); + + try (MockedStatic mockedProcessCameraProvider = + Mockito.mockStatic(ProcessCameraProvider.class)) { + mockedProcessCameraProvider + .when(() -> ProcessCameraProvider.getInstance(context)) + .thenAnswer((Answer) invocation -> processCameraProviderFuture); + + processCameraProviderHostApi.getInstance(mockResult); + verify(mockResult).success(0L); + } + } + + @Test + public void getAvailableCameraInfosTest() { + final ProcessCameraProviderHostApiImpl processCameraProviderHostApi = + new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + final CameraInfo mockCameraInfo = mock(CameraInfo.class); + + testInstanceManager.addDartCreatedInstance(processCameraProvider, 0); + testInstanceManager.addDartCreatedInstance(mockCameraInfo, 1); + + when(processCameraProvider.getAvailableCameraInfos()).thenReturn(Arrays.asList(mockCameraInfo)); + + assertEquals(processCameraProviderHostApi.getAvailableCameraInfos(0L), Arrays.asList(1L)); + verify(processCameraProvider).getAvailableCameraInfos(); + } + + @Test + public void flutterApiCreateTest() { + final ProcessCameraProviderFlutterApiImpl spyFlutterApi = + spy(new ProcessCameraProviderFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + + spyFlutterApi.create(processCameraProvider, reply -> {}); + + final long identifier = + Objects.requireNonNull( + testInstanceManager.getIdentifierForStrongReference(processCameraProvider)); + verify(spyFlutterApi).create(eq(identifier), any()); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart index 576260c0b7b8..9c6564a06c08 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart @@ -6,6 +6,7 @@ import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.pigeon.dart'; import 'java_object.dart'; +import 'process_camera_provider.dart'; /// Handles initialization of Flutter APIs for the Android CameraX library. class AndroidCameraXCameraFlutterApis { @@ -14,6 +15,7 @@ class AndroidCameraXCameraFlutterApis { JavaObjectFlutterApiImpl? javaObjectFlutterApi, CameraInfoFlutterApiImpl? cameraInfoFlutterApi, CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, + ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -21,6 +23,8 @@ class AndroidCameraXCameraFlutterApis { cameraInfoFlutterApi ?? CameraInfoFlutterApiImpl(); this.cameraSelectorFlutterApi = cameraSelectorFlutterApi ?? CameraSelectorFlutterApiImpl(); + this.processCameraProviderFlutterApi = processCameraProviderFlutterApi ?? + ProcessCameraProviderFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -40,12 +44,17 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [CameraSelector]. late final CameraSelectorFlutterApiImpl cameraSelectorFlutterApi; + /// Flutter Api for [ProcessCameraProvider]. + late final ProcessCameraProviderFlutterApiImpl + processCameraProviderFlutterApi; + /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { JavaObjectFlutterApi.setup(javaObjectFlutterApi); CameraInfoFlutterApi.setup(cameraInfoFlutterApi); CameraSelectorFlutterApi.setup(cameraSelectorFlutterApi); + ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart index a399001d35b0..c0b052378def 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart @@ -263,3 +263,112 @@ abstract class CameraSelectorFlutterApi { } } } + +class _ProcessCameraProviderHostApiCodec extends StandardMessageCodec { + const _ProcessCameraProviderHostApiCodec(); +} + +class ProcessCameraProviderHostApi { + /// Constructor for [ProcessCameraProviderHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = + _ProcessCameraProviderHostApiCodec(); + + Future getInstance() async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send(null) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else if (replyMap['result'] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyMap['result'] as int?)!; + } + } + + Future> getAvailableCameraInfos(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else if (replyMap['result'] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyMap['result'] as List?)!.cast(); + } + } +} + +class _ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { + const _ProcessCameraProviderFlutterApiCodec(); +} + +abstract class ProcessCameraProviderFlutterApi { + static const MessageCodec codec = + _ProcessCameraProviderFlutterApiCodec(); + + void create(int identifier); + static void setup(ProcessCameraProviderFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return; + }); + } + } + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart new file mode 100644 index 000000000000..e2b588d15faa --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart @@ -0,0 +1,119 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/services.dart'; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camera_info.dart'; +import 'camerax_library.pigeon.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; + +/// Provides an object to manage the camera. +/// +/// See https://developer.android.com/reference/androidx/camera/lifecycle/ProcessCameraProvider. +class ProcessCameraProvider extends JavaObject { + /// Creates a detached [ProcessCameraProvider]. + ProcessCameraProvider.detached( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = ProcessCameraProviderHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + late final ProcessCameraProviderHostApiImpl _api; + + /// Gets an instance of [ProcessCameraProvider]. + static Future getInstance( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) { + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + final ProcessCameraProviderHostApiImpl api = + ProcessCameraProviderHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + + return api.getInstancefromInstances(); + } + + /// Retrieves the cameras available to the device. + Future> getAvailableCameraInfos() { + return _api.getAvailableCameraInfosFromInstances(this); + } +} + +/// Host API implementation of [ProcessCameraProvider]. +class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { + /// Creates a [ProcessCameraProviderHostApiImpl]. + ProcessCameraProviderHostApiImpl( + {this.binaryMessenger, InstanceManager? instanceManager}) + : super(binaryMessenger: binaryMessenger) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + late final InstanceManager instanceManager; + + /// Retrieves an instance of a ProcessCameraProvider from the context of + /// the FlutterActivity. + Future getInstancefromInstances() async { + return instanceManager.getInstanceWithWeakReference(await getInstance())! + as ProcessCameraProvider; + } + + /// Retrives the list of CameraInfos corresponding to the available cameras. + Future> getAvailableCameraInfosFromInstances( + ProcessCameraProvider instance) async { + int? identifier = instanceManager.getIdentifier(instance); + identifier ??= instanceManager.addDartCreatedInstance(instance, + onCopy: (ProcessCameraProvider original) { + return ProcessCameraProvider.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + }); + + final List cameraInfos = await getAvailableCameraInfos(identifier); + return (cameraInfos.map((int? id) => + instanceManager.getInstanceWithWeakReference(id!)! as CameraInfo)) + .toList(); + } +} + +/// Flutter API Implementation of [ProcessCameraProvider]. +class ProcessCameraProviderFlutterApiImpl + implements ProcessCameraProviderFlutterApi { + /// Constructs a [ProcessCameraProviderFlutterApiImpl]. + ProcessCameraProviderFlutterApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + final InstanceManager instanceManager; + + @override + void create(int identifier) { + instanceManager.addHostCreatedInstance( + ProcessCameraProvider.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager), + identifier, + onCopy: (ProcessCameraProvider original) { + return ProcessCameraProvider.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + }, + ); + } +} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index aace7a06b1fd..4d7d96910246 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -57,3 +57,16 @@ abstract class CameraSelectorHostApi { abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); } + +@HostApi(dartHostTestHandler: 'TestProcessCameraProviderHostApi') +abstract class ProcessCameraProviderHostApi { + @async + int getInstance(); + + List getAvailableCameraInfos(int identifier); +} + +@FlutterApi() +abstract class ProcessCameraProviderFlutterApi { + void create(int identifier); +} diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart new file mode 100644 index 000000000000..65e7d00ddaea --- /dev/null +++ b/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart @@ -0,0 +1,96 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:camera_android_camerax/src/camera_info.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/process_camera_provider.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'process_camera_provider_test.mocks.dart'; +import 'test_camerax_library.pigeon.dart'; + +@GenerateMocks([TestProcessCameraProviderHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ProcessCameraProvider', () { + tearDown(() => TestProcessCameraProviderHostApi.setup(null)); + + test('getInstanceTest', () async { + final MockTestProcessCameraProviderHostApi mockApi = + MockTestProcessCameraProviderHostApi(); + TestProcessCameraProviderHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ProcessCameraProvider processCameraProvider = + ProcessCameraProvider.detached( + instanceManager: instanceManager, + ); + + instanceManager.addHostCreatedInstance( + processCameraProvider, + 0, + onCopy: (_) => ProcessCameraProvider.detached(), + ); + + when(mockApi.getInstance()).thenAnswer((_) async => 0); + expect( + await ProcessCameraProvider.getInstance( + instanceManager: instanceManager), + equals(processCameraProvider)); + verify(mockApi.getInstance()); + }); + + test('getAvailableCameraInfosTest', () async { + final MockTestProcessCameraProviderHostApi mockApi = + MockTestProcessCameraProviderHostApi(); + TestProcessCameraProviderHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ProcessCameraProvider processCameraProvider = + ProcessCameraProvider.detached( + instanceManager: instanceManager, + ); + + instanceManager.addHostCreatedInstance( + processCameraProvider, + 0, + onCopy: (_) => ProcessCameraProvider.detached(), + ); + final CameraInfo fakeAvailableCameraInfo = + CameraInfo.detached(instanceManager: instanceManager); + instanceManager.addHostCreatedInstance( + fakeAvailableCameraInfo, + 1, + onCopy: (_) => CameraInfo.detached(), + ); + + when(mockApi.getAvailableCameraInfos(0)).thenReturn([1]); + expect(await processCameraProvider.getAvailableCameraInfos(), + equals([fakeAvailableCameraInfo])); + verify(mockApi.getAvailableCameraInfos(0)); + }); + + test('flutterApiCreateTest', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ProcessCameraProviderFlutterApiImpl flutterApi = + ProcessCameraProviderFlutterApiImpl( + instanceManager: instanceManager, + ); + + flutterApi.create(0); + + expect(instanceManager.getInstanceWithWeakReference(0), + isA()); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart new file mode 100644 index 000000000000..9fcfe690c062 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart @@ -0,0 +1,40 @@ +// Mocks generated by Mockito 5.3.0 from annotations +// in camera_android_camerax/test/process_camera_provider_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.pigeon.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestProcessCameraProviderHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestProcessCameraProviderHostApi extends _i1.Mock + implements _i2.TestProcessCameraProviderHostApi { + MockTestProcessCameraProviderHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + _i3.Future getInstance() => + (super.noSuchMethod(Invocation.method(#getInstance, []), + returnValue: _i3.Future.value(0)) as _i3.Future); + @override + List getAvailableCameraInfos(int? identifier) => (super.noSuchMethod( + Invocation.method(#getAvailableCameraInfos, [identifier]), + returnValue: []) as List); +} diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart index b10e14e9d518..2196b73d7fdb 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart @@ -135,3 +135,53 @@ abstract class TestCameraSelectorHostApi { } } } + +class _TestProcessCameraProviderHostApiCodec extends StandardMessageCodec { + const _TestProcessCameraProviderHostApiCodec(); +} + +abstract class TestProcessCameraProviderHostApi { + static const MessageCodec codec = + _TestProcessCameraProviderHostApiCodec(); + + Future getInstance(); + List getAvailableCameraInfos(int identifier); + static void setup(TestProcessCameraProviderHostApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + // ignore message + final int output = await api.getInstance(); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); + final List output = + api.getAvailableCameraInfos(arg_identifier!); + return {'result': output}; + }); + } + } + } +} From f75cfb45e1ae7d9a37f5335a346faad80c929ddf Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 28 Sep 2022 08:23:08 -0400 Subject: [PATCH 028/133] Revert "[camera] Add ProcessCameraProvider class to CameraX plugin (#6469)" (#6506) This reverts commit 1c47c3b9d2788104985ebfc4660cafb390968b6e. --- .../camera_android_camerax/CHANGELOG.md | 1 - .../android/build.gradle | 4 +- .../camerax/CameraAndroidCameraxPlugin.java | 31 +--- .../camerax/CameraInfoFlutterApiImpl.java | 3 +- .../camerax/GeneratedCameraXLibrary.java | 134 ------------------ .../ProcessCameraProviderFlutterApiImpl.java | 23 --- .../ProcessCameraProviderHostApiImpl.java | 87 ------------ .../camerax/ProcessCameraProviderTest.java | 106 -------------- ...roid_camera_camerax_flutter_api_impls.dart | 9 -- .../lib/src/camerax_library.pigeon.dart | 109 -------------- .../lib/src/process_camera_provider.dart | 119 ---------------- .../pigeons/camerax_library.dart | 13 -- .../test/process_camera_provider_test.dart | 96 ------------- .../process_camera_provider_test.mocks.dart | 40 ------ .../test/test_camerax_library.pigeon.dart | 50 ------- 15 files changed, 7 insertions(+), 818 deletions(-) delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java delete mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java delete mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java delete mode 100644 packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart delete mode 100644 packages/camera/camera_android_camerax/test/process_camera_provider_test.dart delete mode 100644 packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index ce2fb9046c69..2bdfa594b3be 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -3,4 +3,3 @@ * Creates camera_android_camerax plugin for development. * Adds CameraInfo class and removes unnecessary code from plugin. * Adds CameraSelector class. -* Adds ProcessCameraProvider class. diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index a193a298c640..1772afebe429 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -38,15 +38,13 @@ android { dependencies { // CameraX core library using the camera2 implementation must use same version number. - def camerax_version = "1.2.0-beta02" + def camerax_version = "1.2.0-beta01" implementation "androidx.camera:camera-core:${camerax_version}" implementation "androidx.camera:camera-camera2:${camerax_version}" implementation "androidx.camera:camera-lifecycle:${camerax_version}" - implementation 'com.google.guava:guava:28.1-android' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:4.7.0' testImplementation 'androidx.test:core:1.4.0' - testImplementation 'org.robolectric:robolectric:4.3' } testOptions { unitTests.includeAndroidResources = true diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index b8fbaf539c32..bb5756a7e3b9 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -15,7 +15,6 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, ActivityAware { private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; - private ProcessCameraProviderHostApiImpl processCameraProviderHostApi; /** * Initialize this within the {@code #configureFlutterEngine} of a Flutter activity or fragment. @@ -40,10 +39,6 @@ void setUp(BinaryMessenger binaryMessenger, Context context) { binaryMessenger, new JavaObjectHostApiImpl(instanceManager)); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); - processCameraProviderHostApi = - new ProcessCameraProviderHostApiImpl(binaryMessenger, instanceManager, context); - GeneratedCameraXLibrary.ProcessCameraProviderHostApi.setup( - binaryMessenger, processCameraProviderHostApi); } @Override @@ -65,33 +60,15 @@ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { // Activity Lifecycle methods: @Override - public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) { - updateContext(activityPluginBinding.getActivity()); - } + public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) {} @Override - public void onDetachedFromActivityForConfigChanges() { - updateContext(pluginBinding.getApplicationContext()); - } + public void onDetachedFromActivityForConfigChanges() {} @Override public void onReattachedToActivityForConfigChanges( - @NonNull ActivityPluginBinding activityPluginBinding) { - updateContext(activityPluginBinding.getActivity()); - } + @NonNull ActivityPluginBinding activityPluginBinding) {} @Override - public void onDetachedFromActivity() { - updateContext(pluginBinding.getApplicationContext()); - } - - /** - * Updates context that is used to fetch the corresponding instance of a {@code - * ProcessCameraProvider}. - */ - private void updateContext(Context context) { - if (processCameraProviderHostApi != null) { - processCameraProviderHostApi.setContext(context); - } - } + public void onDetachedFromActivity() {} } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java index c538e420cc7e..b5ba9fc1ff3b 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java @@ -18,6 +18,7 @@ public CameraInfoFlutterApiImpl( } void create(CameraInfo cameraInfo, Reply reply) { - create(instanceManager.addHostCreatedInstance(cameraInfo), reply); + instanceManager.addHostCreatedInstance(cameraInfo); + create(instanceManager.getIdentifierForStrongReference(cameraInfo), reply); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index 041564c3bfcb..e87a80db030c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -22,13 +22,6 @@ /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) public class GeneratedCameraXLibrary { - - public interface Result { - void success(T result); - - void error(Throwable error); - } - private static class JavaObjectHostApiCodec extends StandardMessageCodec { public static final JavaObjectHostApiCodec INSTANCE = new JavaObjectHostApiCodec(); @@ -318,133 +311,6 @@ public void create( } } - private static class ProcessCameraProviderHostApiCodec extends StandardMessageCodec { - public static final ProcessCameraProviderHostApiCodec INSTANCE = - new ProcessCameraProviderHostApiCodec(); - - private ProcessCameraProviderHostApiCodec() {} - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface ProcessCameraProviderHostApi { - void getInstance(Result result); - - @NonNull - List getAvailableCameraInfos(@NonNull Long identifier); - - /** The codec used by ProcessCameraProviderHostApi. */ - static MessageCodec getCodec() { - return ProcessCameraProviderHostApiCodec.INSTANCE; - } - - /** - * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the - * `binaryMessenger`. - */ - static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - Result resultCallback = - new Result() { - public void success(Long result) { - wrapped.put("result", result); - reply.reply(wrapped); - } - - public void error(Throwable error) { - wrapped.put("error", wrapError(error)); - reply.reply(wrapped); - } - }; - - api.getInstance(resultCallback); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - reply.reply(wrapped); - } - }); - } else { - channel.setMessageHandler(null); - } - } - { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", - getCodec()); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList) message; - Number identifierArg = (Number) args.get(0); - if (identifierArg == null) { - throw new NullPointerException("identifierArg unexpectedly null."); - } - List output = - api.getAvailableCameraInfos( - (identifierArg == null) ? null : identifierArg.longValue()); - wrapped.put("result", output); - } catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - } - } - - private static class ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { - public static final ProcessCameraProviderFlutterApiCodec INSTANCE = - new ProcessCameraProviderFlutterApiCodec(); - - private ProcessCameraProviderFlutterApiCodec() {} - } - - /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ - public static class ProcessCameraProviderFlutterApi { - private final BinaryMessenger binaryMessenger; - - public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { - this.binaryMessenger = argBinaryMessenger; - } - - public interface Reply { - void reply(T reply); - } - - static MessageCodec getCodec() { - return ProcessCameraProviderFlutterApiCodec.INSTANCE; - } - - public void create(@NonNull Long identifierArg, Reply callback) { - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", - getCodec()); - channel.send( - new ArrayList(Arrays.asList(identifierArg)), - channelReply -> { - callback.reply(null); - }); - } - } - private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java deleted file mode 100644 index 90c94d0c26cb..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.camerax; - -import androidx.camera.lifecycle.ProcessCameraProvider; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ProcessCameraProviderFlutterApi; - -public class ProcessCameraProviderFlutterApiImpl extends ProcessCameraProviderFlutterApi { - public ProcessCameraProviderFlutterApiImpl( - BinaryMessenger binaryMessenger, InstanceManager instanceManager) { - super(binaryMessenger); - this.instanceManager = instanceManager; - } - - private final InstanceManager instanceManager; - - void create(ProcessCameraProvider processCameraProvider, Reply reply) { - create(instanceManager.addHostCreatedInstance(processCameraProvider), reply); - } -} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java deleted file mode 100644 index 19c5eb5b3f70..000000000000 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.camerax; - -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.camera.core.CameraInfo; -import androidx.camera.lifecycle.ProcessCameraProvider; -import androidx.core.content.ContextCompat; -import com.google.common.util.concurrent.ListenableFuture; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ProcessCameraProviderHostApi; -import java.util.ArrayList; -import java.util.List; - -public class ProcessCameraProviderHostApiImpl implements ProcessCameraProviderHostApi { - private final BinaryMessenger binaryMessenger; - private final InstanceManager instanceManager; - - private Context context; - - public ProcessCameraProviderHostApiImpl( - BinaryMessenger binaryMessenger, InstanceManager instanceManager, Context context) { - this.binaryMessenger = binaryMessenger; - this.instanceManager = instanceManager; - this.context = context; - } - - /** - * Sets the context that the {@code ProcessCameraProvider} will use to attach the lifecycle of the - * camera to. - * - *

If using the camera plugin in an add-to-app context, ensure that a new instance of the - * {@code ProcessCameraProvider} is fetched via {@code #getInstance} anytime the context changes. - */ - public void setContext(Context context) { - this.context = context; - } - - /** - * Returns the instance of the ProcessCameraProvider to manage the lifecycle of the camera for the - * current {@code Context}. - */ - @Override - public void getInstance(GeneratedCameraXLibrary.Result result) { - ListenableFuture processCameraProviderFuture = - ProcessCameraProvider.getInstance(context); - - processCameraProviderFuture.addListener( - () -> { - try { - // Camera provider is now guaranteed to be available. - ProcessCameraProvider processCameraProvider = processCameraProviderFuture.get(); - - if (!instanceManager.containsInstance(processCameraProvider)) { - final ProcessCameraProviderFlutterApiImpl flutterApi = - new ProcessCameraProviderFlutterApiImpl(binaryMessenger, instanceManager); - flutterApi.create(processCameraProvider, reply -> {}); - } - result.success(instanceManager.getIdentifierForStrongReference(processCameraProvider)); - } catch (Exception e) { - result.error(e); - } - }, - ContextCompat.getMainExecutor(context)); - } - - /** Returns cameras available to the ProcessCameraProvider. */ - @Override - public List getAvailableCameraInfos(@NonNull Long identifier) { - ProcessCameraProvider processCameraProvider = - (ProcessCameraProvider) instanceManager.getInstance(identifier); - - List availableCameras = processCameraProvider.getAvailableCameraInfos(); - List availableCamerasIds = new ArrayList(); - final CameraInfoFlutterApiImpl cameraInfoFlutterApi = - new CameraInfoFlutterApiImpl(binaryMessenger, instanceManager); - - for (CameraInfo cameraInfo : availableCameras) { - cameraInfoFlutterApi.create(cameraInfo, result -> {}); - availableCamerasIds.add(instanceManager.getIdentifierForStrongReference(cameraInfo)); - } - return availableCamerasIds; - } -} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java deleted file mode 100644 index ec321f8dbfea..000000000000 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.camerax; - -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import androidx.camera.core.CameraInfo; -import androidx.camera.lifecycle.ProcessCameraProvider; -import androidx.test.core.app.ApplicationProvider; -import com.google.common.util.concurrent.SettableFuture; -import io.flutter.plugin.common.BinaryMessenger; -import java.util.Arrays; -import java.util.Objects; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; -import org.mockito.stubbing.Answer; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class ProcessCameraProviderTest { - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - - @Mock public ProcessCameraProvider processCameraProvider; - @Mock public BinaryMessenger mockBinaryMessenger; - - InstanceManager testInstanceManager; - private Context context; - - @Before - public void setUp() { - testInstanceManager = InstanceManager.open(identifier -> {}); - context = ApplicationProvider.getApplicationContext(); - } - - @After - public void tearDown() { - testInstanceManager.close(); - } - - @Test - public void getInstanceTest() { - final ProcessCameraProviderHostApiImpl processCameraProviderHostApi = - new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context); - SettableFuture processCameraProviderFuture = SettableFuture.create(); - processCameraProviderFuture.set(processCameraProvider); - final GeneratedCameraXLibrary.Result mockResult = - mock(GeneratedCameraXLibrary.Result.class); - - testInstanceManager.addDartCreatedInstance(processCameraProvider, 0); - - try (MockedStatic mockedProcessCameraProvider = - Mockito.mockStatic(ProcessCameraProvider.class)) { - mockedProcessCameraProvider - .when(() -> ProcessCameraProvider.getInstance(context)) - .thenAnswer((Answer) invocation -> processCameraProviderFuture); - - processCameraProviderHostApi.getInstance(mockResult); - verify(mockResult).success(0L); - } - } - - @Test - public void getAvailableCameraInfosTest() { - final ProcessCameraProviderHostApiImpl processCameraProviderHostApi = - new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context); - final CameraInfo mockCameraInfo = mock(CameraInfo.class); - - testInstanceManager.addDartCreatedInstance(processCameraProvider, 0); - testInstanceManager.addDartCreatedInstance(mockCameraInfo, 1); - - when(processCameraProvider.getAvailableCameraInfos()).thenReturn(Arrays.asList(mockCameraInfo)); - - assertEquals(processCameraProviderHostApi.getAvailableCameraInfos(0L), Arrays.asList(1L)); - verify(processCameraProvider).getAvailableCameraInfos(); - } - - @Test - public void flutterApiCreateTest() { - final ProcessCameraProviderFlutterApiImpl spyFlutterApi = - spy(new ProcessCameraProviderFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); - - spyFlutterApi.create(processCameraProvider, reply -> {}); - - final long identifier = - Objects.requireNonNull( - testInstanceManager.getIdentifierForStrongReference(processCameraProvider)); - verify(spyFlutterApi).create(eq(identifier), any()); - } -} diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart index 9c6564a06c08..576260c0b7b8 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart @@ -6,7 +6,6 @@ import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.pigeon.dart'; import 'java_object.dart'; -import 'process_camera_provider.dart'; /// Handles initialization of Flutter APIs for the Android CameraX library. class AndroidCameraXCameraFlutterApis { @@ -15,7 +14,6 @@ class AndroidCameraXCameraFlutterApis { JavaObjectFlutterApiImpl? javaObjectFlutterApi, CameraInfoFlutterApiImpl? cameraInfoFlutterApi, CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, - ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -23,8 +21,6 @@ class AndroidCameraXCameraFlutterApis { cameraInfoFlutterApi ?? CameraInfoFlutterApiImpl(); this.cameraSelectorFlutterApi = cameraSelectorFlutterApi ?? CameraSelectorFlutterApiImpl(); - this.processCameraProviderFlutterApi = processCameraProviderFlutterApi ?? - ProcessCameraProviderFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -44,17 +40,12 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [CameraSelector]. late final CameraSelectorFlutterApiImpl cameraSelectorFlutterApi; - /// Flutter Api for [ProcessCameraProvider]. - late final ProcessCameraProviderFlutterApiImpl - processCameraProviderFlutterApi; - /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { JavaObjectFlutterApi.setup(javaObjectFlutterApi); CameraInfoFlutterApi.setup(cameraInfoFlutterApi); CameraSelectorFlutterApi.setup(cameraSelectorFlutterApi); - ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart index c0b052378def..a399001d35b0 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart @@ -263,112 +263,3 @@ abstract class CameraSelectorFlutterApi { } } } - -class _ProcessCameraProviderHostApiCodec extends StandardMessageCodec { - const _ProcessCameraProviderHostApiCodec(); -} - -class ProcessCameraProviderHostApi { - /// Constructor for [ProcessCameraProviderHostApi]. The [binaryMessenger] named argument is - /// available for dependency injection. If it is left null, the default - /// BinaryMessenger will be used which routes to the host platform. - ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = - _ProcessCameraProviderHostApiCodec(); - - Future getInstance() async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send(null) as Map?; - if (replyMap == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; - throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], - ); - } else if (replyMap['result'] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyMap['result'] as int?)!; - } - } - - Future> getAvailableCameraInfos(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, - binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_identifier]) as Map?; - if (replyMap == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; - throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], - ); - } else if (replyMap['result'] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (replyMap['result'] as List?)!.cast(); - } - } -} - -class _ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { - const _ProcessCameraProviderFlutterApiCodec(); -} - -abstract class ProcessCameraProviderFlutterApi { - static const MessageCodec codec = - _ProcessCameraProviderFlutterApiCodec(); - - void create(int identifier); - static void setup(ProcessCameraProviderFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMessageHandler(null); - } else { - channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); - api.create(arg_identifier!); - return; - }); - } - } - } -} diff --git a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart deleted file mode 100644 index e2b588d15faa..000000000000 --- a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/services.dart'; - -import 'android_camera_camerax_flutter_api_impls.dart'; -import 'camera_info.dart'; -import 'camerax_library.pigeon.dart'; -import 'instance_manager.dart'; -import 'java_object.dart'; - -/// Provides an object to manage the camera. -/// -/// See https://developer.android.com/reference/androidx/camera/lifecycle/ProcessCameraProvider. -class ProcessCameraProvider extends JavaObject { - /// Creates a detached [ProcessCameraProvider]. - ProcessCameraProvider.detached( - {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) - : super.detached( - binaryMessenger: binaryMessenger, - instanceManager: instanceManager) { - _api = ProcessCameraProviderHostApiImpl( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); - AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); - } - - late final ProcessCameraProviderHostApiImpl _api; - - /// Gets an instance of [ProcessCameraProvider]. - static Future getInstance( - {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) { - AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); - final ProcessCameraProviderHostApiImpl api = - ProcessCameraProviderHostApiImpl( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); - - return api.getInstancefromInstances(); - } - - /// Retrieves the cameras available to the device. - Future> getAvailableCameraInfos() { - return _api.getAvailableCameraInfosFromInstances(this); - } -} - -/// Host API implementation of [ProcessCameraProvider]. -class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { - /// Creates a [ProcessCameraProviderHostApiImpl]. - ProcessCameraProviderHostApiImpl( - {this.binaryMessenger, InstanceManager? instanceManager}) - : super(binaryMessenger: binaryMessenger) { - this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; - } - - /// Receives binary data across the Flutter platform barrier. - /// - /// If it is null, the default BinaryMessenger will be used which routes to - /// the host platform. - final BinaryMessenger? binaryMessenger; - - /// Maintains instances stored to communicate with native language objects. - late final InstanceManager instanceManager; - - /// Retrieves an instance of a ProcessCameraProvider from the context of - /// the FlutterActivity. - Future getInstancefromInstances() async { - return instanceManager.getInstanceWithWeakReference(await getInstance())! - as ProcessCameraProvider; - } - - /// Retrives the list of CameraInfos corresponding to the available cameras. - Future> getAvailableCameraInfosFromInstances( - ProcessCameraProvider instance) async { - int? identifier = instanceManager.getIdentifier(instance); - identifier ??= instanceManager.addDartCreatedInstance(instance, - onCopy: (ProcessCameraProvider original) { - return ProcessCameraProvider.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); - }); - - final List cameraInfos = await getAvailableCameraInfos(identifier); - return (cameraInfos.map((int? id) => - instanceManager.getInstanceWithWeakReference(id!)! as CameraInfo)) - .toList(); - } -} - -/// Flutter API Implementation of [ProcessCameraProvider]. -class ProcessCameraProviderFlutterApiImpl - implements ProcessCameraProviderFlutterApi { - /// Constructs a [ProcessCameraProviderFlutterApiImpl]. - ProcessCameraProviderFlutterApiImpl({ - this.binaryMessenger, - InstanceManager? instanceManager, - }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; - - /// Receives binary data across the Flutter platform barrier. - /// - /// If it is null, the default BinaryMessenger will be used which routes to - /// the host platform. - final BinaryMessenger? binaryMessenger; - - /// Maintains instances stored to communicate with native language objects. - final InstanceManager instanceManager; - - @override - void create(int identifier) { - instanceManager.addHostCreatedInstance( - ProcessCameraProvider.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager), - identifier, - onCopy: (ProcessCameraProvider original) { - return ProcessCameraProvider.detached( - binaryMessenger: binaryMessenger, instanceManager: instanceManager); - }, - ); - } -} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index 4d7d96910246..aace7a06b1fd 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -57,16 +57,3 @@ abstract class CameraSelectorHostApi { abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); } - -@HostApi(dartHostTestHandler: 'TestProcessCameraProviderHostApi') -abstract class ProcessCameraProviderHostApi { - @async - int getInstance(); - - List getAvailableCameraInfos(int identifier); -} - -@FlutterApi() -abstract class ProcessCameraProviderFlutterApi { - void create(int identifier); -} diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart deleted file mode 100644 index 65e7d00ddaea..000000000000 --- a/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:camera_android_camerax/src/camera_info.dart'; -import 'package:camera_android_camerax/src/instance_manager.dart'; -import 'package:camera_android_camerax/src/process_camera_provider.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import 'process_camera_provider_test.mocks.dart'; -import 'test_camerax_library.pigeon.dart'; - -@GenerateMocks([TestProcessCameraProviderHostApi]) -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - - group('ProcessCameraProvider', () { - tearDown(() => TestProcessCameraProviderHostApi.setup(null)); - - test('getInstanceTest', () async { - final MockTestProcessCameraProviderHostApi mockApi = - MockTestProcessCameraProviderHostApi(); - TestProcessCameraProviderHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - final ProcessCameraProvider processCameraProvider = - ProcessCameraProvider.detached( - instanceManager: instanceManager, - ); - - instanceManager.addHostCreatedInstance( - processCameraProvider, - 0, - onCopy: (_) => ProcessCameraProvider.detached(), - ); - - when(mockApi.getInstance()).thenAnswer((_) async => 0); - expect( - await ProcessCameraProvider.getInstance( - instanceManager: instanceManager), - equals(processCameraProvider)); - verify(mockApi.getInstance()); - }); - - test('getAvailableCameraInfosTest', () async { - final MockTestProcessCameraProviderHostApi mockApi = - MockTestProcessCameraProviderHostApi(); - TestProcessCameraProviderHostApi.setup(mockApi); - - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - final ProcessCameraProvider processCameraProvider = - ProcessCameraProvider.detached( - instanceManager: instanceManager, - ); - - instanceManager.addHostCreatedInstance( - processCameraProvider, - 0, - onCopy: (_) => ProcessCameraProvider.detached(), - ); - final CameraInfo fakeAvailableCameraInfo = - CameraInfo.detached(instanceManager: instanceManager); - instanceManager.addHostCreatedInstance( - fakeAvailableCameraInfo, - 1, - onCopy: (_) => CameraInfo.detached(), - ); - - when(mockApi.getAvailableCameraInfos(0)).thenReturn([1]); - expect(await processCameraProvider.getAvailableCameraInfos(), - equals([fakeAvailableCameraInfo])); - verify(mockApi.getAvailableCameraInfos(0)); - }); - - test('flutterApiCreateTest', () { - final InstanceManager instanceManager = InstanceManager( - onWeakReferenceRemoved: (_) {}, - ); - final ProcessCameraProviderFlutterApiImpl flutterApi = - ProcessCameraProviderFlutterApiImpl( - instanceManager: instanceManager, - ); - - flutterApi.create(0); - - expect(instanceManager.getInstanceWithWeakReference(0), - isA()); - }); - }); -} diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart deleted file mode 100644 index 9fcfe690c062..000000000000 --- a/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart +++ /dev/null @@ -1,40 +0,0 @@ -// Mocks generated by Mockito 5.3.0 from annotations -// in camera_android_camerax/test/process_camera_provider_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i3; - -import 'package:mockito/mockito.dart' as _i1; - -import 'test_camerax_library.pigeon.dart' as _i2; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -/// A class which mocks [TestProcessCameraProviderHostApi]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockTestProcessCameraProviderHostApi extends _i1.Mock - implements _i2.TestProcessCameraProviderHostApi { - MockTestProcessCameraProviderHostApi() { - _i1.throwOnMissingStub(this); - } - - @override - _i3.Future getInstance() => - (super.noSuchMethod(Invocation.method(#getInstance, []), - returnValue: _i3.Future.value(0)) as _i3.Future); - @override - List getAvailableCameraInfos(int? identifier) => (super.noSuchMethod( - Invocation.method(#getAvailableCameraInfos, [identifier]), - returnValue: []) as List); -} diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart index 2196b73d7fdb..b10e14e9d518 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart @@ -135,53 +135,3 @@ abstract class TestCameraSelectorHostApi { } } } - -class _TestProcessCameraProviderHostApiCodec extends StandardMessageCodec { - const _TestProcessCameraProviderHostApiCodec(); -} - -abstract class TestProcessCameraProviderHostApi { - static const MessageCodec codec = - _TestProcessCameraProviderHostApiCodec(); - - Future getInstance(); - List getAvailableCameraInfos(int identifier); - static void setup(TestProcessCameraProviderHostApi? api, - {BinaryMessenger? binaryMessenger}) { - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - // ignore message - final int output = await api.getInstance(); - return {'result': output}; - }); - } - } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', - codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMockMessageHandler(null); - } else { - channel.setMockMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); - final List args = (message as List?)!; - final int? arg_identifier = (args[0] as int?); - assert(arg_identifier != null, - 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); - final List output = - api.getAvailableCameraInfos(arg_identifier!); - return {'result': output}; - }); - } - } - } -} From ded5528fa0224f943f9bd92f25e9ff1260f59490 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 28 Sep 2022 10:25:24 -0400 Subject: [PATCH 029/133] Enable `prefer_relative_imports` (#6501) --- analysis_options.yaml | 2 +- packages/camera/camera/CHANGELOG.md | 3 +- .../camera/lib/src/camera_controller.dart | 3 +- .../camera/camera/lib/src/camera_preview.dart | 3 +- packages/camera/camera/pubspec.yaml | 2 +- .../camera_platform_interface/CHANGELOG.md | 3 +- .../lib/src/events/device_event.dart | 3 +- .../method_channel/method_channel_camera.dart | 4 +-- .../platform_interface/camera_platform.dart | 5 +-- .../lib/src/utils/utils.dart | 3 +- .../camera_platform_interface/pubspec.yaml | 2 +- packages/camera/camera_web/CHANGELOG.md | 3 +- .../camera/camera_web/lib/src/camera.dart | 4 +-- .../camera_web/lib/src/camera_service.dart | 7 ++-- .../camera/camera_web/lib/src/camera_web.dart | 7 ++-- .../lib/src/types/camera_web_exception.dart | 2 +- packages/camera/camera_web/pubspec.yaml | 2 +- .../file_selector_macos/CHANGELOG.md | 3 +- .../file_selector_macos/example/lib/main.dart | 13 +++---- .../file_selector_macos/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../method_channel_file_selector.dart | 3 +- .../file_selector_interface.dart | 2 +- .../pubspec.yaml | 2 +- .../file_selector_web/CHANGELOG.md | 3 +- .../lib/file_selector_web.dart | 5 +-- .../file_selector_web/pubspec.yaml | 2 +- .../file_selector_windows/CHANGELOG.md | 3 +- .../example/lib/main.dart | 13 +++---- .../file_selector_windows/pubspec.yaml | 2 +- .../google_maps_flutter/CHANGELOG.md | 4 +++ .../google_maps_flutter/example/lib/main.dart | 4 +-- .../google_maps_flutter/pubspec.yaml | 2 +- .../google_maps_flutter_android/CHANGELOG.md | 4 +++ .../example/lib/main.dart | 2 +- .../google_maps_flutter_android/pubspec.yaml | 2 +- .../google_maps_flutter_ios/CHANGELOG.md | 3 +- .../example/lib/main.dart | 2 +- .../google_maps_flutter_ios/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../lib/src/events/map_event.dart | 2 +- .../method_channel_google_maps_flutter.dart | 2 +- .../google_maps_flutter_platform.dart | 5 +-- .../google_maps_inspector_platform.dart | 3 +- .../pubspec.yaml | 2 +- .../google_maps_flutter_web/CHANGELOG.md | 3 +- .../lib/src/types.dart | 3 +- .../google_maps_flutter_web/pubspec.yaml | 2 +- .../image_picker_for_web/CHANGELOG.md | 3 +- .../lib/image_picker_for_web.dart | 3 +- .../lib/src/image_resizer.dart | 3 +- .../image_picker_for_web/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../method_channel_image_picker.dart | 2 +- .../image_picker_platform.dart | 5 +-- .../lib/src/types/image_picker_options.dart | 2 +- .../lib/src/types/lost_data_response.dart | 3 +- .../src/types/multi_image_picker_options.dart | 2 +- .../lib/src/types/picked_file/lost_data.dart | 3 +- .../pubspec.yaml | 2 +- .../in_app_purchase_android/CHANGELOG.md | 4 +++ .../src/in_app_purchase_android_platform.dart | 2 +- ...pp_purchase_android_platform_addition.dart | 2 +- .../types/google_play_product_details.dart | 3 +- .../in_app_purchase_android/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../in_app_purchase_platform_addition.dart | 2 +- ...p_purchase_platform_addition_provider.dart | 2 +- .../pubspec.yaml | 2 +- .../in_app_purchase_storekit/CHANGELOG.md | 4 +++ .../example/lib/main.dart | 2 +- ...p_purchase_storekit_platform_addition.dart | 2 +- .../sk_payment_queue_delegate_wrapper.dart | 2 +- .../sk_payment_queue_wrapper.dart | 2 +- .../in_app_purchase_storekit/pubspec.yaml | 2 +- .../local_auth_android/CHANGELOG.md | 4 +++ .../lib/local_auth_android.dart | 3 +- .../local_auth_android/pubspec.yaml | 2 +- .../local_auth/local_auth_ios/CHANGELOG.md | 3 +- .../local_auth_ios/lib/local_auth_ios.dart | 3 +- .../local_auth/local_auth_ios/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../lib/default_method_channel_platform.dart | 2 +- .../lib/local_auth_platform_interface.dart | 5 +-- .../pubspec.yaml | 2 +- .../local_auth_windows/CHANGELOG.md | 3 +- .../lib/local_auth_windows.dart | 2 +- .../local_auth_windows/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../lib/src/method_channel_path_provider.dart | 3 +- .../pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../method_channel_quick_actions.dart | 2 +- .../quick_actions_platform.dart | 2 +- .../pubspec.yaml | 2 +- .../url_launcher/url_launcher/CHANGELOG.md | 3 +- .../lib/src/url_launcher_uri.dart | 2 +- .../url_launcher/url_launcher/pubspec.yaml | 2 +- .../CHANGELOG.md | 3 +- .../lib/src/url_launcher_platform.dart | 4 +-- .../pubspec.yaml | 2 +- .../webview_flutter_android/CHANGELOG.md | 4 +++ .../lib/webview_android_cookie_manager.dart | 4 +-- .../lib/webview_android_widget.dart | 2 +- .../webview_flutter_android/pubspec.yaml | 2 +- .../CHANGELOG.md | 4 +++ .../webview_cookie_manager.dart | 3 +- .../platform_interface/webview_platform.dart | 2 +- .../lib/src/types/creation_params.dart | 3 +- .../pubspec.yaml | 2 +- .../webview_flutter_wkwebview/CHANGELOG.md | 4 +++ .../lib/src/foundation/foundation.dart | 2 +- .../lib/src/ui_kit/ui_kit_api_impls.dart | 3 +- .../lib/src/webview_cupertino.dart | 2 +- .../lib/src/wkwebview_cookie_manager.dart | 5 +-- .../webview_flutter_wkwebview/pubspec.yaml | 2 +- script/tool/lib/src/common/cmake.dart | 2 +- .../lib/src/common/package_state_utils.dart | 2 +- script/tool/lib/src/common/plugin_utils.dart | 2 +- .../src/federation_safety_check_command.dart | 2 +- script/tool/lib/src/lint_android_command.dart | 2 +- script/tool/lib/src/main.dart | 2 +- .../lib/src/make_deps_path_based_command.dart | 4 ++- .../tool/lib/src/update_excerpts_command.dart | 2 +- .../lib/src/update_release_info_command.dart | 2 +- .../make_deps_path_based_command_test.dart | 36 +++++++++++++++++++ 126 files changed, 259 insertions(+), 143 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 34f50180906d..a8cff3ca7d01 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -193,7 +193,7 @@ linter: # - prefer_mixin # Has false positives, see https://github.com/dart-lang/linter/issues/3018 # - prefer_null_aware_method_calls # "call()" is confusing to people new to the language since it's not documented anywhere - prefer_null_aware_operators - # - prefer_relative_imports # LOCAL CHANGE - Needs to be enabled and violations fixed. + - prefer_relative_imports - prefer_single_quotes - prefer_spread_collections - prefer_typing_uninitialized_variables diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 67b8b7970bbe..6f4a9f491542 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.10.0+2 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 0.10.0+1 diff --git a/packages/camera/camera/lib/src/camera_controller.dart b/packages/camera/camera/lib/src/camera_controller.dart index 6566e2abc883..13bb63700ad3 100644 --- a/packages/camera/camera/lib/src/camera_controller.dart +++ b/packages/camera/camera/lib/src/camera_controller.dart @@ -5,13 +5,14 @@ import 'dart:async'; import 'dart:math'; -import 'package:camera/camera.dart'; import 'package:camera_platform_interface/camera_platform_interface.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:quiver/core.dart'; +import '../camera.dart'; + /// Signature for a callback receiving the a camera image. /// /// This is used by [CameraController.startImageStream]. diff --git a/packages/camera/camera/lib/src/camera_preview.dart b/packages/camera/camera/lib/src/camera_preview.dart index 94ffca649fa6..d8eadd8c93ae 100644 --- a/packages/camera/camera/lib/src/camera_preview.dart +++ b/packages/camera/camera/lib/src/camera_preview.dart @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:camera/camera.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import '../camera.dart'; + /// A widget showing a live camera preview. class CameraPreview extends StatelessWidget { /// Creates a preview widget for the given camera controller. diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 5a68f6da8036..2770e977bcc9 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.0+1 +version: 0.10.0+2 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index 7411db738483..bdfbd44a229a 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.2.1 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. * Fixes avoid_redundant_argument_values lint warnings and minor typos. * Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/104231). diff --git a/packages/camera/camera_platform_interface/lib/src/events/device_event.dart b/packages/camera/camera_platform_interface/lib/src/events/device_event.dart index d6bb5df05980..65a378f16f12 100644 --- a/packages/camera/camera_platform_interface/lib/src/events/device_event.dart +++ b/packages/camera/camera_platform_interface/lib/src/events/device_event.dart @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:camera_platform_interface/src/utils/utils.dart'; import 'package:flutter/foundation.dart' show immutable; import 'package:flutter/services.dart'; +import '../utils/utils.dart'; + /// Generic Event coming from the native side of Camera, /// not related to a specific camera module. /// diff --git a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart index eb6e59d9b4a1..68e1315f8bbe 100644 --- a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart +++ b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart @@ -5,13 +5,13 @@ import 'dart:async'; import 'dart:math'; -import 'package:camera_platform_interface/camera_platform_interface.dart'; -import 'package:camera_platform_interface/src/utils/utils.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:stream_transform/stream_transform.dart'; +import '../../camera_platform_interface.dart'; +import '../utils/utils.dart'; import 'type_conversion.dart'; const MethodChannel _channel = MethodChannel('plugins.flutter.io/camera'); diff --git a/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart b/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart index eaa779a943db..b086dc87851f 100644 --- a/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart +++ b/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart @@ -5,12 +5,13 @@ import 'dart:async'; import 'dart:math'; -import 'package:camera_platform_interface/camera_platform_interface.dart'; -import 'package:camera_platform_interface/src/method_channel/method_channel_camera.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; +import '../../camera_platform_interface.dart'; +import '../method_channel/method_channel_camera.dart'; + /// The interface that implementations of camera must implement. /// /// Platform implementations should extend this class rather than implement it as `camera` diff --git a/packages/camera/camera_platform_interface/lib/src/utils/utils.dart b/packages/camera/camera_platform_interface/lib/src/utils/utils.dart index 663ec6da7a97..d86880afd216 100644 --- a/packages/camera/camera_platform_interface/lib/src/utils/utils.dart +++ b/packages/camera/camera_platform_interface/lib/src/utils/utils.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:camera_platform_interface/camera_platform_interface.dart'; import 'package:flutter/services.dart'; +import '../../camera_platform_interface.dart'; + /// Parses a string into a corresponding CameraLensDirection. CameraLensDirection parseCameraLensDirection(String string) { switch (string) { diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index 1c874725e9ce..9cbd51b1bd2d 100644 --- a/packages/camera/camera_platform_interface/pubspec.yaml +++ b/packages/camera/camera_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.0 +version: 2.2.1 environment: sdk: '>=2.12.0 <3.0.0' diff --git a/packages/camera/camera_web/CHANGELOG.md b/packages/camera/camera_web/CHANGELOG.md index c6254ac11d38..f4989cfd5bff 100644 --- a/packages/camera/camera_web/CHANGELOG.md +++ b/packages/camera/camera_web/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.3.0+1 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. * Fixes avoid_redundant_argument_values lint warnings and minor typos. * Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/106316). diff --git a/packages/camera/camera_web/lib/src/camera.dart b/packages/camera/camera_web/lib/src/camera.dart index 210a0df59eec..13ef21b1ea46 100644 --- a/packages/camera/camera_web/lib/src/camera.dart +++ b/packages/camera/camera_web/lib/src/camera.dart @@ -7,11 +7,11 @@ import 'dart:html' as html; import 'dart:ui'; import 'package:camera_platform_interface/camera_platform_interface.dart'; -import 'package:camera_web/src/camera_service.dart'; -import 'package:camera_web/src/types/types.dart'; import 'package:flutter/foundation.dart'; +import 'camera_service.dart'; import 'shims/dart_ui.dart' as ui; +import 'types/types.dart'; String _getViewType(int cameraId) => 'plugins.flutter.io/camera_$cameraId'; diff --git a/packages/camera/camera_web/lib/src/camera_service.dart b/packages/camera/camera_web/lib/src/camera_service.dart index 5f4a5fdde9a4..6e20c7d74f78 100644 --- a/packages/camera/camera_web/lib/src/camera_service.dart +++ b/packages/camera/camera_web/lib/src/camera_service.dart @@ -8,12 +8,13 @@ import 'dart:html' as html; import 'dart:ui'; import 'package:camera_platform_interface/camera_platform_interface.dart'; -import 'package:camera_web/src/camera.dart'; -import 'package:camera_web/src/shims/dart_js_util.dart'; -import 'package:camera_web/src/types/types.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; +import 'camera.dart'; +import 'shims/dart_js_util.dart'; +import 'types/types.dart'; + /// A service to fetch, map camera settings and /// obtain the camera stream. class CameraService { diff --git a/packages/camera/camera_web/lib/src/camera_web.dart b/packages/camera/camera_web/lib/src/camera_web.dart index 26f965d49e16..d440653cd424 100644 --- a/packages/camera/camera_web/lib/src/camera_web.dart +++ b/packages/camera/camera_web/lib/src/camera_web.dart @@ -7,14 +7,15 @@ import 'dart:html' as html; import 'dart:math'; import 'package:camera_platform_interface/camera_platform_interface.dart'; -import 'package:camera_web/src/camera.dart'; -import 'package:camera_web/src/camera_service.dart'; -import 'package:camera_web/src/types/types.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; import 'package:stream_transform/stream_transform.dart'; +import 'camera.dart'; +import 'camera_service.dart'; +import 'types/types.dart'; + // The default error message, when the error is an empty string. // See: https://developer.mozilla.org/en-US/docs/Web/API/MediaError/message const String _kDefaultErrorMessage = diff --git a/packages/camera/camera_web/lib/src/types/camera_web_exception.dart b/packages/camera/camera_web/lib/src/types/camera_web_exception.dart index c21106cc462e..e6c6d7a0fed0 100644 --- a/packages/camera/camera_web/lib/src/types/camera_web_exception.dart +++ b/packages/camera/camera_web/lib/src/types/camera_web_exception.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:camera_web/src/types/types.dart'; +import 'types.dart'; /// An exception thrown when the camera with id [cameraId] reports /// an initialization, configuration or video streaming error, diff --git a/packages/camera/camera_web/pubspec.yaml b/packages/camera/camera_web/pubspec.yaml index 527b28367eaf..ef9c45c71796 100644 --- a/packages/camera/camera_web/pubspec.yaml +++ b/packages/camera/camera_web/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_web description: A Flutter plugin for getting information about and controlling the camera on Web. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.3.0 +version: 0.3.0+1 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/file_selector/file_selector_macos/CHANGELOG.md b/packages/file_selector/file_selector_macos/CHANGELOG.md index ec09997a52d2..f9241da91476 100644 --- a/packages/file_selector/file_selector_macos/CHANGELOG.md +++ b/packages/file_selector/file_selector_macos/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.9.0+2 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 0.9.0+1 diff --git a/packages/file_selector/file_selector_macos/example/lib/main.dart b/packages/file_selector/file_selector_macos/example/lib/main.dart index cbe268e1c7ab..3e447104ef9f 100644 --- a/packages/file_selector/file_selector_macos/example/lib/main.dart +++ b/packages/file_selector/file_selector_macos/example/lib/main.dart @@ -2,14 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:example/get_directory_page.dart'; -import 'package:example/home_page.dart'; -import 'package:example/open_image_page.dart'; -import 'package:example/open_multiple_images_page.dart'; -import 'package:example/open_text_page.dart'; -import 'package:example/save_text_page.dart'; import 'package:flutter/material.dart'; +import 'get_directory_page.dart'; +import 'home_page.dart'; +import 'open_image_page.dart'; +import 'open_multiple_images_page.dart'; +import 'open_text_page.dart'; +import 'save_text_page.dart'; + void main() { runApp(const MyApp()); } diff --git a/packages/file_selector/file_selector_macos/pubspec.yaml b/packages/file_selector/file_selector_macos/pubspec.yaml index 34d418490a14..b921cc8e8070 100644 --- a/packages/file_selector/file_selector_macos/pubspec.yaml +++ b/packages/file_selector/file_selector_macos/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_macos description: macOS implementation of the file_selector plugin. repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector_macos issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.0+1 +version: 0.9.0+2 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md index e6949b09fa3b..c4ee86a4ce19 100644 --- a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md +++ b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.1.1 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 2.1.0 diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/method_channel/method_channel_file_selector.dart b/packages/file_selector/file_selector_platform_interface/lib/src/method_channel/method_channel_file_selector.dart index c6d0f4a56155..d6aebd01730f 100644 --- a/packages/file_selector/file_selector_platform_interface/lib/src/method_channel/method_channel_file_selector.dart +++ b/packages/file_selector/file_selector_platform_interface/lib/src/method_channel/method_channel_file_selector.dart @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:flutter/foundation.dart' show visibleForTesting; import 'package:flutter/services.dart'; +import '../../file_selector_platform_interface.dart'; + const MethodChannel _channel = MethodChannel('plugins.flutter.io/file_selector'); diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart b/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart index a23957af9110..eb4563c47917 100644 --- a/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart +++ b/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart @@ -4,9 +4,9 @@ import 'dart:async'; -import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; +import '../../file_selector_platform_interface.dart'; import '../method_channel/method_channel_file_selector.dart'; /// The interface that implementations of file_selector must implement. diff --git a/packages/file_selector/file_selector_platform_interface/pubspec.yaml b/packages/file_selector/file_selector_platform_interface/pubspec.yaml index ae24a4b93b5d..b01af3501cc7 100644 --- a/packages/file_selector/file_selector_platform_interface/pubspec.yaml +++ b/packages/file_selector/file_selector_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.1.0 +version: 2.1.1 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/file_selector/file_selector_web/CHANGELOG.md b/packages/file_selector/file_selector_web/CHANGELOG.md index 873a76e60a25..69ca20363866 100644 --- a/packages/file_selector/file_selector_web/CHANGELOG.md +++ b/packages/file_selector/file_selector_web/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.9.0+1 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. * Fixes avoid_redundant_argument_values lint warnings and minor typos. diff --git a/packages/file_selector/file_selector_web/lib/file_selector_web.dart b/packages/file_selector/file_selector_web/lib/file_selector_web.dart index 915a2a806496..748bb3aa0df0 100644 --- a/packages/file_selector/file_selector_web/lib/file_selector_web.dart +++ b/packages/file_selector/file_selector_web/lib/file_selector_web.dart @@ -5,11 +5,12 @@ import 'dart:async'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; -import 'package:file_selector_web/src/dom_helper.dart'; -import 'package:file_selector_web/src/utils.dart'; import 'package:flutter/foundation.dart' show visibleForTesting; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; +import 'src/dom_helper.dart'; +import 'src/utils.dart'; + /// The web implementation of [FileSelectorPlatform]. /// /// This class implements the `package:file_selector` functionality for the web. diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index c1854aea4a88..38229588fd27 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_web description: Web platform implementation of file_selector repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.0 +version: 0.9.0+1 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/file_selector/file_selector_windows/CHANGELOG.md b/packages/file_selector/file_selector_windows/CHANGELOG.md index e0e6152e9b2f..1221bbd4d508 100644 --- a/packages/file_selector/file_selector_windows/CHANGELOG.md +++ b/packages/file_selector/file_selector_windows/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.9.1+3 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 0.9.1+2 diff --git a/packages/file_selector/file_selector_windows/example/lib/main.dart b/packages/file_selector/file_selector_windows/example/lib/main.dart index cbe268e1c7ab..3e447104ef9f 100644 --- a/packages/file_selector/file_selector_windows/example/lib/main.dart +++ b/packages/file_selector/file_selector_windows/example/lib/main.dart @@ -2,14 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:example/get_directory_page.dart'; -import 'package:example/home_page.dart'; -import 'package:example/open_image_page.dart'; -import 'package:example/open_multiple_images_page.dart'; -import 'package:example/open_text_page.dart'; -import 'package:example/save_text_page.dart'; import 'package:flutter/material.dart'; +import 'get_directory_page.dart'; +import 'home_page.dart'; +import 'open_image_page.dart'; +import 'open_multiple_images_page.dart'; +import 'open_text_page.dart'; +import 'save_text_page.dart'; + void main() { runApp(const MyApp()); } diff --git a/packages/file_selector/file_selector_windows/pubspec.yaml b/packages/file_selector/file_selector_windows/pubspec.yaml index 52b9f97174b4..7859822701e1 100644 --- a/packages/file_selector/file_selector_windows/pubspec.yaml +++ b/packages/file_selector/file_selector_windows/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_windows description: Windows implementation of the file_selector plugin. repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector_windows issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.1+2 +version: 0.9.1+3 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md index 291ba6230a60..70298bc667b0 100644 --- a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.1 + +* Updates imports for `prefer_relative_imports`. + ## 2.2.0 * Deprecates `AndroidGoogleMapsFlutter.useAndroidViewSurface` in favor of diff --git a/packages/google_maps_flutter/google_maps_flutter/example/lib/main.dart b/packages/google_maps_flutter/google_maps_flutter/example/lib/main.dart index b11f29977f23..60d4fdd95dcf 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/lib/main.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/lib/main.dart @@ -3,11 +3,11 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; - import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; -import 'package:google_maps_flutter_example/lite_mode.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; + import 'animate_camera.dart'; +import 'lite_mode.dart'; import 'map_click.dart'; import 'map_coordinates.dart'; import 'map_ui.dart'; diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index dd8c82d4d4e5..540f5d810966 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter description: A Flutter plugin for integrating Google Maps in iOS and Android applications. repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.2.0 +version: 2.2.1 environment: sdk: ">=2.14.0 <3.0.0" 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 01c98f388e61..2ea420daec8a 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 @@ +## 2.3.1 + +* Updates imports for `prefer_relative_imports`. + ## 2.3.0 * Switches the default for `useAndroidViewSurface` to true, and adds diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/main.dart b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/main.dart index 6b96e6f0dff8..4adec524f87b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/lib/main.dart +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/lib/main.dart @@ -4,10 +4,10 @@ import 'package:flutter/material.dart'; import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; -import 'package:google_maps_flutter_example/lite_mode.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'animate_camera.dart'; +import 'lite_mode.dart'; import 'map_click.dart'; import 'map_coordinates.dart'; import 'map_ui.dart'; diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index c820f31d1c46..1ae73ca97cda 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.3.0 +version: 2.3.1 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md index e3a033f3df07..7788e9146809 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.1.12 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. * Fixes violations of new analysis option use_named_constants. * Fixes avoid_redundant_argument_values lint warnings and minor typos. diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/main.dart b/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/main.dart index c02e4afe428d..de75162b09dd 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/main.dart +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/lib/main.dart @@ -3,9 +3,9 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; -import 'package:google_maps_flutter_example/lite_mode.dart'; import 'animate_camera.dart'; +import 'lite_mode.dart'; import 'map_click.dart'; import 'map_coordinates.dart'; import 'map_ui.dart'; diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml index f1e613806eb9..7ca13a9273f2 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_ios description: iOS implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.1.11 +version: 2.1.12 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md index 5ef9142beea8..26e70d3b4c35 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.2.3 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 2.2.2 diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/events/map_event.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/events/map_event.dart index 8759126d4b67..5961406c155c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/events/map_event.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/events/map_event.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; +import '../../google_maps_flutter_platform_interface.dart'; /// Generic Event coming from the native side of Maps. /// diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart index a34ee48ac79a..e17510f90624 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart @@ -12,9 +12,9 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; -import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:stream_transform/stream_transform.dart'; +import '../../google_maps_flutter_platform_interface.dart'; import '../types/tile_overlay_updates.dart'; import '../types/utils/map_configuration_serialization.dart'; diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart index d4621a70c249..147d64f715b7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart @@ -12,10 +12,11 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; -import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; -import 'package:google_maps_flutter_platform_interface/src/types/utils/map_configuration_serialization.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; +import '../../google_maps_flutter_platform_interface.dart'; +import '../types/utils/map_configuration_serialization.dart'; + /// The interface that platform-specific implementations of `google_maps_flutter` must extend. /// /// Avoid `implements` of this interface. Using `implements` makes adding any new diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_inspector_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_inspector_platform.dart index 70e332907939..1e07b97c300d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_inspector_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_inspector_platform.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; +import '../../google_maps_flutter_platform_interface.dart'; + /// The interface that platform-specific implementations of /// `google_maps_flutter` can extend to support state inpsection in tests. /// diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml index 160819912a0a..853a23d5cdc3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_fl issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.2 +version: 2.2.3 environment: sdk: '>=2.12.0 <3.0.0' diff --git a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md index 541ac49f0a16..b1ddd412a3dc 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.4.0+3 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 0.4.0+2 diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/types.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/types.dart index 84c66264db7b..d4e87799f4b3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/types.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/types.dart @@ -3,7 +3,8 @@ // found in the LICENSE file. import 'package:google_maps/google_maps.dart' as gmaps; -import 'package:google_maps_flutter_web/google_maps_flutter_web.dart'; + +import '../../google_maps_flutter_web.dart'; /// A void function that handles a [gmaps.LatLng] as a parameter. /// diff --git a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml index cb4063e315bc..572d9110be8e 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_web description: Web platform implementation of google_maps_flutter repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 0.4.0+2 +version: 0.4.0+3 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/image_picker/image_picker_for_web/CHANGELOG.md b/packages/image_picker/image_picker_for_web/CHANGELOG.md index 99d3dbc11121..23bfe17ce9e1 100644 --- a/packages/image_picker/image_picker_for_web/CHANGELOG.md +++ b/packages/image_picker/image_picker_for_web/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.1.9 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. * Fixes violations of new analysis option use_named_constants. diff --git a/packages/image_picker/image_picker_for_web/lib/image_picker_for_web.dart b/packages/image_picker/image_picker_for_web/lib/image_picker_for_web.dart index 88d439c5487f..5e0f18aaebcc 100644 --- a/packages/image_picker/image_picker_for_web/lib/image_picker_for_web.dart +++ b/packages/image_picker/image_picker_for_web/lib/image_picker_for_web.dart @@ -7,9 +7,10 @@ import 'dart:html' as html; import 'package:flutter/foundation.dart' show visibleForTesting; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; -import 'package:image_picker_for_web/src/image_resizer.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; +import 'src/image_resizer.dart'; + const String _kImagePickerInputsDomId = '__image_picker_web-file-input'; const String _kAcceptImageMimeType = 'image/*'; const String _kAcceptVideoMimeType = 'video/3gpp,video/x-m4v,video/mp4,video/*'; diff --git a/packages/image_picker/image_picker_for_web/lib/src/image_resizer.dart b/packages/image_picker/image_picker_for_web/lib/src/image_resizer.dart index ba794acae3be..7cca935c6c91 100644 --- a/packages/image_picker/image_picker_for_web/lib/src/image_resizer.dart +++ b/packages/image_picker/image_picker_for_web/lib/src/image_resizer.dart @@ -7,9 +7,10 @@ import 'dart:html' as html; import 'dart:math'; import 'dart:ui'; -import 'package:image_picker_for_web/src/image_resizer_utils.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; +import 'image_resizer_utils.dart'; + /// Helper class that resizes images. class ImageResizer { /// Resizes the image if needed. diff --git a/packages/image_picker/image_picker_for_web/pubspec.yaml b/packages/image_picker/image_picker_for_web/pubspec.yaml index e19147b6306e..14d9197e821c 100644 --- a/packages/image_picker/image_picker_for_web/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker_for_web description: Web platform implementation of image_picker repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker_for_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 2.1.8 +version: 2.1.9 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/image_picker/image_picker_platform_interface/CHANGELOG.md b/packages/image_picker/image_picker_platform_interface/CHANGELOG.md index 8defffe95a7a..05b03a37cb98 100644 --- a/packages/image_picker/image_picker_platform_interface/CHANGELOG.md +++ b/packages/image_picker/image_picker_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.6.2 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. * Fixes avoid_redundant_argument_values lint warnings and minor typos. diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart b/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart index 80d33807b70d..c2c39f93fe18 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart @@ -7,7 +7,7 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; -import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; +import '../../image_picker_platform_interface.dart'; const MethodChannel _channel = MethodChannel('plugins.flutter.io/image_picker'); diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/platform_interface/image_picker_platform.dart b/packages/image_picker/image_picker_platform_interface/lib/src/platform_interface/image_picker_platform.dart index f704025f581b..9572742e62e0 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/platform_interface/image_picker_platform.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/platform_interface/image_picker_platform.dart @@ -5,10 +5,11 @@ import 'dart:async'; import 'package:cross_file/cross_file.dart'; -import 'package:image_picker_platform_interface/src/method_channel/method_channel_image_picker.dart'; -import 'package:image_picker_platform_interface/src/types/types.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; +import '../method_channel/method_channel_image_picker.dart'; +import '../types/types.dart'; + /// The interface that implementations of image_picker must implement. /// /// Platform implementations should extend this class rather than implement it as `image_picker` diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/image_picker_options.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/image_picker_options.dart index cdc89a920178..0d85c918f649 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/image_picker_options.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/image_picker_options.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:image_picker_platform_interface/src/types/types.dart'; +import 'types.dart'; /// Specifies options for picking a single image from the device's camera or gallery. class ImagePickerOptions { diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/lost_data_response.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/lost_data_response.dart index 65f5d7e15c90..10af812a3109 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/lost_data_response.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/lost_data_response.dart @@ -4,7 +4,8 @@ import 'package:cross_file/cross_file.dart'; import 'package:flutter/services.dart'; -import 'package:image_picker_platform_interface/src/types/types.dart'; + +import 'types.dart'; /// The response object of [ImagePicker.getLostData]. /// diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/multi_image_picker_options.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/multi_image_picker_options.dart index 4d7971c59a81..c860297ce33f 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/multi_image_picker_options.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/multi_image_picker_options.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:image_picker_platform_interface/src/types/image_options.dart'; +import 'image_options.dart'; /// Specifies options for picking multiple images from the device's gallery. class MultiImagePickerOptions { diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/lost_data.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/lost_data.dart index 64f6a1f27538..ddd36b62c023 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/lost_data.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/lost_data.dart @@ -3,7 +3,8 @@ // found in the LICENSE file. import 'package:flutter/services.dart'; -import 'package:image_picker_platform_interface/src/types/types.dart'; + +import '../types.dart'; /// The response object of [ImagePicker.retrieveLostData]. /// diff --git a/packages/image_picker/image_picker_platform_interface/pubspec.yaml b/packages/image_picker/image_picker_platform_interface/pubspec.yaml index f4b745f2c1bf..eb4d2b649eac 100644 --- a/packages/image_picker/image_picker_platform_interface/pubspec.yaml +++ b/packages/image_picker/image_picker_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/i issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.6.1 +version: 2.6.2 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md index 8733a1c4133c..6540fdfedafe 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+5 + +* Updates imports for `prefer_relative_imports`. + ## 0.2.3+4 * Updates minimum Flutter version to 2.10. 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 14dd69364497..d73ca8ef2e00 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 @@ -6,10 +6,10 @@ import 'dart:async'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; -import 'package:in_app_purchase_android/in_app_purchase_android.dart'; import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart'; import '../billing_client_wrappers.dart'; +import '../in_app_purchase_android.dart'; /// [IAPError.code] code for failed purchases. const String kPurchaseErrorCode = 'purchase_error'; diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform_addition.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform_addition.dart index db53ff4077d2..d5657d1a38d8 100644 --- a/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform_addition.dart +++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/in_app_purchase_android_platform_addition.dart @@ -3,10 +3,10 @@ // found in the LICENSE file. import 'package:flutter/services.dart'; -import 'package:in_app_purchase_android/in_app_purchase_android.dart'; import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart'; import '../billing_client_wrappers.dart'; +import '../in_app_purchase_android.dart'; /// Contains InApp Purchase features that are only available on PlayStore. class InAppPurchaseAndroidPlatformAddition diff --git a/packages/in_app_purchase/in_app_purchase_android/lib/src/types/google_play_product_details.dart b/packages/in_app_purchase/in_app_purchase_android/lib/src/types/google_play_product_details.dart index 15ed16c7e2ec..7affa242055b 100644 --- a/packages/in_app_purchase/in_app_purchase_android/lib/src/types/google_play_product_details.dart +++ b/packages/in_app_purchase/in_app_purchase_android/lib/src/types/google_play_product_details.dart @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:in_app_purchase_android/billing_client_wrappers.dart'; import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart'; +import '../../billing_client_wrappers.dart'; + /// The class represents the information of a product as registered in at /// Google Play store front. class GooglePlayProductDetails extends ProductDetails { 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 a0563f1434b8..8c57a982937b 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 @@ name: in_app_purchase_android 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+4 +version: 0.2.3+5 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/in_app_purchase/in_app_purchase_platform_interface/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_platform_interface/CHANGELOG.md index f2a76ae55db2..17ba02986088 100644 --- a/packages/in_app_purchase/in_app_purchase_platform_interface/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.3.2 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. * Removes unnecessary imports. diff --git a/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/in_app_purchase_platform_addition.dart b/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/in_app_purchase_platform_addition.dart index 746675549295..e93787e95d43 100644 --- a/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/in_app_purchase_platform_addition.dart +++ b/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/in_app_purchase_platform_addition.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart'; +import '../in_app_purchase_platform_interface.dart'; // ignore: avoid_classes_with_only_static_members /// The interface that platform implementations must implement when they want to diff --git a/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/in_app_purchase_platform_addition_provider.dart b/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/in_app_purchase_platform_addition_provider.dart index 642bbb419c6e..adeaa3e53397 100644 --- a/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/in_app_purchase_platform_addition_provider.dart +++ b/packages/in_app_purchase/in_app_purchase_platform_interface/lib/src/in_app_purchase_platform_addition_provider.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:in_app_purchase_platform_interface/src/in_app_purchase_platform_addition.dart'; +import 'in_app_purchase_platform_addition.dart'; /// The [InAppPurchasePlatformAdditionProvider] is responsible for providing /// a platform-specific [InAppPurchasePlatformAddition]. diff --git a/packages/in_app_purchase/in_app_purchase_platform_interface/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_platform_interface/pubspec.yaml index e181c8a5ab49..46e38b0a03fa 100644 --- a/packages/in_app_purchase/in_app_purchase_platform_interface/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/in_app_purchas issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.3.1 +version: 1.3.2 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md index 2952c4b31abf..52f59efacd6a 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.2+2 + +* Updates imports for `prefer_relative_imports`. + ## 0.3.2+1 * Updates minimum Flutter version to 2.10. diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart b/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart index aa03190b0454..09058ea2e89a 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/lib/main.dart @@ -7,9 +7,9 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart'; import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart'; -import 'package:in_app_purchase_storekit_example/example_payment_queue_delegate.dart'; import 'consumable_store.dart'; +import 'example_payment_queue_delegate.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart index 87655df53d34..070c138b32e6 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform_addition.dart @@ -3,7 +3,7 @@ // found in the LICENSE file. import 'package:in_app_purchase_platform_interface/in_app_purchase_platform_interface.dart'; -import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart'; +import '../in_app_purchase_storekit.dart'; import '../store_kit_wrappers.dart'; diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_delegate_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_delegate_wrapper.dart index eb88953096e6..1d98dd3f4250 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_delegate_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_delegate_wrapper.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:in_app_purchase_storekit/store_kit_wrappers.dart'; +import '../../store_kit_wrappers.dart'; /// A wrapper around /// [`SKPaymentQueueDelegate`](https://developer.apple.com/documentation/storekit/skpaymentqueuedelegate?language=objc). diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart index 70db7da2e275..78e16e22416c 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart @@ -7,9 +7,9 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:in_app_purchase_storekit/store_kit_wrappers.dart'; import 'package:json_annotation/json_annotation.dart'; +import '../../store_kit_wrappers.dart'; import '../channel.dart'; import '../in_app_purchase_storekit_platform.dart'; diff --git a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml index 076837198c76..f2193e53b591 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml @@ -2,7 +2,7 @@ name: in_app_purchase_storekit description: An implementation for the iOS platform of the Flutter `in_app_purchase` plugin. This uses the StoreKit Framework. repository: https://github.com/flutter/plugins/tree/main/packages/in_app_purchase/in_app_purchase_storekit issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 0.3.2+1 +version: 0.3.2+2 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/local_auth/local_auth_android/CHANGELOG.md b/packages/local_auth/local_auth_android/CHANGELOG.md index 5a94fac16fe8..a26846d5ed01 100644 --- a/packages/local_auth/local_auth_android/CHANGELOG.md +++ b/packages/local_auth/local_auth_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +* Updates imports for `prefer_relative_imports`. + ## 1.0.12 * Updates androidx.fragment version to 1.5.2. diff --git a/packages/local_auth/local_auth_android/lib/local_auth_android.dart b/packages/local_auth/local_auth_android/lib/local_auth_android.dart index dfe785cc176f..e2134173691e 100644 --- a/packages/local_auth/local_auth_android/lib/local_auth_android.dart +++ b/packages/local_auth/local_auth_android/lib/local_auth_android.dart @@ -3,9 +3,10 @@ // found in the LICENSE file. import 'package:flutter/services.dart'; -import 'package:local_auth_android/types/auth_messages_android.dart'; import 'package:local_auth_platform_interface/local_auth_platform_interface.dart'; +import 'types/auth_messages_android.dart'; + export 'package:local_auth_android/types/auth_messages_android.dart'; export 'package:local_auth_platform_interface/types/auth_messages.dart'; export 'package:local_auth_platform_interface/types/auth_options.dart'; diff --git a/packages/local_auth/local_auth_android/pubspec.yaml b/packages/local_auth/local_auth_android/pubspec.yaml index d621874106b3..35c2d3af983c 100644 --- a/packages/local_auth/local_auth_android/pubspec.yaml +++ b/packages/local_auth/local_auth_android/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_android description: Android implementation of the local_auth plugin. repository: https://github.com/flutter/plugins/tree/main/packages/local_auth/local_auth_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 1.0.12 +version: 1.0.13 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/local_auth/local_auth_ios/CHANGELOG.md b/packages/local_auth/local_auth_ios/CHANGELOG.md index 748db7a7e695..e67f2a4e2ef1 100644 --- a/packages/local_auth/local_auth_ios/CHANGELOG.md +++ b/packages/local_auth/local_auth_ios/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.0.10 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 1.0.9 diff --git a/packages/local_auth/local_auth_ios/lib/local_auth_ios.dart b/packages/local_auth/local_auth_ios/lib/local_auth_ios.dart index d9df89a656a8..217fd39d9901 100644 --- a/packages/local_auth/local_auth_ios/lib/local_auth_ios.dart +++ b/packages/local_auth/local_auth_ios/lib/local_auth_ios.dart @@ -3,9 +3,10 @@ // found in the LICENSE file. import 'package:flutter/services.dart'; -import 'package:local_auth_ios/types/auth_messages_ios.dart'; import 'package:local_auth_platform_interface/local_auth_platform_interface.dart'; +import 'types/auth_messages_ios.dart'; + export 'package:local_auth_ios/types/auth_messages_ios.dart'; export 'package:local_auth_platform_interface/types/auth_messages.dart'; export 'package:local_auth_platform_interface/types/auth_options.dart'; diff --git a/packages/local_auth/local_auth_ios/pubspec.yaml b/packages/local_auth/local_auth_ios/pubspec.yaml index 18c39187b411..9cdeef963c34 100644 --- a/packages/local_auth/local_auth_ios/pubspec.yaml +++ b/packages/local_auth/local_auth_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_ios description: iOS implementation of the local_auth plugin. repository: https://github.com/flutter/plugins/tree/main/packages/local_auth/local_auth_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 1.0.9 +version: 1.0.10 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/local_auth/local_auth_platform_interface/CHANGELOG.md b/packages/local_auth/local_auth_platform_interface/CHANGELOG.md index ade26dd62e47..f0313ce99be6 100644 --- a/packages/local_auth/local_auth_platform_interface/CHANGELOG.md +++ b/packages/local_auth/local_auth_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.0.5 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 1.0.4 diff --git a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart index 9ded078c3a90..b3b0a653b514 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart @@ -3,7 +3,7 @@ // found in the LICENSE file. import 'package:flutter/services.dart'; -import 'package:local_auth_platform_interface/local_auth_platform_interface.dart'; +import 'local_auth_platform_interface.dart'; const MethodChannel _channel = MethodChannel('plugins.flutter.io/local_auth'); diff --git a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart index de652b20f462..4c6d58238edd 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:local_auth_platform_interface/default_method_channel_platform.dart'; -import 'package:local_auth_platform_interface/types/types.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; +import 'default_method_channel_platform.dart'; +import 'types/types.dart'; + export 'package:local_auth_platform_interface/types/types.dart'; /// The interface that implementations of local_auth must implement. diff --git a/packages/local_auth/local_auth_platform_interface/pubspec.yaml b/packages/local_auth/local_auth_platform_interface/pubspec.yaml index 27b5cb33c0f5..92da218d8be5 100644 --- a/packages/local_auth/local_auth_platform_interface/pubspec.yaml +++ b/packages/local_auth/local_auth_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/local_auth/loc issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.0.4 +version: 1.0.5 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/local_auth/local_auth_windows/CHANGELOG.md b/packages/local_auth/local_auth_windows/CHANGELOG.md index 4e36f75aea1d..b4f2061f2c27 100644 --- a/packages/local_auth/local_auth_windows/CHANGELOG.md +++ b/packages/local_auth/local_auth_windows/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.0.4 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 1.0.3 diff --git a/packages/local_auth/local_auth_windows/lib/local_auth_windows.dart b/packages/local_auth/local_auth_windows/lib/local_auth_windows.dart index 1d65e81050f1..b373782c2187 100644 --- a/packages/local_auth/local_auth_windows/lib/local_auth_windows.dart +++ b/packages/local_auth/local_auth_windows/lib/local_auth_windows.dart @@ -4,7 +4,7 @@ import 'package:flutter/services.dart'; import 'package:local_auth_platform_interface/local_auth_platform_interface.dart'; -import 'package:local_auth_windows/types/auth_messages_windows.dart'; +import 'types/auth_messages_windows.dart'; export 'package:local_auth_platform_interface/types/auth_messages.dart'; export 'package:local_auth_platform_interface/types/auth_options.dart'; diff --git a/packages/local_auth/local_auth_windows/pubspec.yaml b/packages/local_auth/local_auth_windows/pubspec.yaml index 7f8d7f631211..9a2effed92ee 100644 --- a/packages/local_auth/local_auth_windows/pubspec.yaml +++ b/packages/local_auth/local_auth_windows/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_windows description: Windows implementation of the local_auth plugin. repository: https://github.com/flutter/plugins/tree/main/packages/local_auth/local_auth_windows issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 1.0.3 +version: 1.0.4 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/path_provider/path_provider_platform_interface/CHANGELOG.md b/packages/path_provider/path_provider_platform_interface/CHANGELOG.md index 6baf950a397a..f12e1ec53ade 100644 --- a/packages/path_provider/path_provider_platform_interface/CHANGELOG.md +++ b/packages/path_provider/path_provider_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.0.5 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 2.0.4 diff --git a/packages/path_provider/path_provider_platform_interface/lib/src/method_channel_path_provider.dart b/packages/path_provider/path_provider_platform_interface/lib/src/method_channel_path_provider.dart index fe632743b098..991be55bce8c 100644 --- a/packages/path_provider/path_provider_platform_interface/lib/src/method_channel_path_provider.dart +++ b/packages/path_provider/path_provider_platform_interface/lib/src/method_channel_path_provider.dart @@ -4,9 +4,10 @@ import 'package:flutter/foundation.dart' show visibleForTesting; import 'package:flutter/services.dart'; -import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; import 'package:platform/platform.dart'; +import '../path_provider_platform_interface.dart'; + /// An implementation of [PathProviderPlatform] that uses method channels. class MethodChannelPathProvider extends PathProviderPlatform { /// The method channel used to interact with the native platform. diff --git a/packages/path_provider/path_provider_platform_interface/pubspec.yaml b/packages/path_provider/path_provider_platform_interface/pubspec.yaml index ef16037de71f..6ce7ec662b33 100644 --- a/packages/path_provider/path_provider_platform_interface/pubspec.yaml +++ b/packages/path_provider/path_provider_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/path_provider/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+path_provider%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.0.4 +version: 2.0.5 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md b/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md index 26c57ca3be27..950864f96653 100644 --- a/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.0.3 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 1.0.2 diff --git a/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart b/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart index 560c199ee77a..0f936db870c7 100644 --- a/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart +++ b/packages/quick_actions/quick_actions_platform_interface/lib/method_channel/method_channel_quick_actions.dart @@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; -import 'package:quick_actions_platform_interface/types/types.dart'; import '../platform_interface/quick_actions_platform.dart'; +import '../types/types.dart'; const MethodChannel _channel = MethodChannel('plugins.flutter.io/quick_actions'); diff --git a/packages/quick_actions/quick_actions_platform_interface/lib/platform_interface/quick_actions_platform.dart b/packages/quick_actions/quick_actions_platform_interface/lib/platform_interface/quick_actions_platform.dart index 7a70bba5c81d..057cb5642293 100644 --- a/packages/quick_actions/quick_actions_platform_interface/lib/platform_interface/quick_actions_platform.dart +++ b/packages/quick_actions/quick_actions_platform_interface/lib/platform_interface/quick_actions_platform.dart @@ -3,9 +3,9 @@ // found in the LICENSE file. import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'package:quick_actions_platform_interface/types/types.dart'; import '../method_channel/method_channel_quick_actions.dart'; +import '../types/types.dart'; /// The interface that implementations of quick_actions must implement. /// diff --git a/packages/quick_actions/quick_actions_platform_interface/pubspec.yaml b/packages/quick_actions/quick_actions_platform_interface/pubspec.yaml index aa331dc54544..2990da603c14 100644 --- a/packages/quick_actions/quick_actions_platform_interface/pubspec.yaml +++ b/packages/quick_actions/quick_actions_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/quick_actions/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+quick_actions%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.0.2 +version: 1.0.3 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md index 0b590d5deaad..18a0289eb43f 100644 --- a/packages/url_launcher/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/url_launcher/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 6.1.6 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. * Fixes avoid_redundant_argument_values lint warnings and minor typos. 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 9061b517e0d5..30321026ceb9 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 @@ -4,9 +4,9 @@ import 'dart:async'; -import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; +import '../url_launcher_string.dart'; import 'type_conversion.dart'; /// Passes [url] to the underlying platform for handling. diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index ff21c6360e10..8efda4afb580 100644 --- a/packages/url_launcher/url_launcher/pubspec.yaml +++ b/packages/url_launcher/url_launcher/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for launching a URL. Supports 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.5 +version: 6.1.6 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md b/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md index fcf362ceb7d9..d45ca36e3906 100644 --- a/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.1.1 +* Updates imports for `prefer_relative_imports`. * Updates minimum Flutter version to 2.10. ## 2.1.0 diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/src/url_launcher_platform.dart b/packages/url_launcher/url_launcher_platform_interface/lib/src/url_launcher_platform.dart index aa499db4ce6f..8928d4249e90 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/src/url_launcher_platform.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/src/url_launcher_platform.dart @@ -5,10 +5,10 @@ import 'dart:async'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'package:url_launcher_platform_interface/link.dart'; -import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; +import '../link.dart'; import '../method_channel_url_launcher.dart'; +import '../url_launcher_platform_interface.dart'; /// The interface that implementations of url_launcher must implement. /// diff --git a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml index 94ee1ecb29a4..4364e116c508 100644 --- a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml +++ b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/url_launcher/u issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.1.0 +version: 2.1.1 environment: sdk: ">=2.12.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 b37ada2225f0..4853aec23f9a 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.10.3 + +* Updates imports for `prefer_relative_imports`. + ## 2.10.2 * Adds a getter to expose the Java InstanceManager. diff --git a/packages/webview_flutter/webview_flutter_android/lib/webview_android_cookie_manager.dart b/packages/webview_flutter/webview_flutter_android/lib/webview_android_cookie_manager.dart index bba75ff4f613..6e3f6f28d8ef 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/webview_android_cookie_manager.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/webview_android_cookie_manager.dart @@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:webview_flutter_android/src/android_webview.dart' - as android_webview; import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; +import 'src/android_webview.dart' as android_webview; + /// Handles all cookie operations for the current platform. class WebViewAndroidCookieManager extends WebViewCookieManagerPlatform { @override diff --git a/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart b/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart index ff6265dbad00..140d0da7e7f7 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart @@ -6,10 +6,10 @@ import 'dart:async'; import 'dart:typed_data'; import 'package:flutter/widgets.dart'; -import 'package:webview_flutter_android/webview_android_cookie_manager.dart'; import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; import 'src/android_webview.dart' as android_webview; +import 'webview_android_cookie_manager.dart'; /// Creates a [Widget] with a [android_webview.WebView]. class WebViewAndroidWidget extends StatefulWidget { diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index f5f2e3c34e69..c2a326f7d4ac 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_android description: A Flutter plugin that provides a WebView widget on Android. repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutter/webview_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 2.10.2 +version: 2.10.3 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md index 17b86523f29a..e8eb01e6590e 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.9.4 + +* Updates imports for `prefer_relative_imports`. + ## 1.9.3 * Updates minimum Flutter version to 2.10. diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_cookie_manager.dart index 1f87e6a26ba6..90dfc2a548b5 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_cookie_manager.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_cookie_manager.dart @@ -3,7 +3,8 @@ // found in the LICENSE file. import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -import 'package:webview_flutter_platform_interface/src/types/webview_cookie.dart'; + +import '../types/webview_cookie.dart'; /// Interface for a platform implementation of a cookie manager. /// diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform.dart index e35635d73a9e..8d1df6ae1040 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_interface/webview_platform.dart @@ -5,8 +5,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/widgets.dart'; -import 'package:webview_flutter_platform_interface/src/platform_interface/javascript_channel_registry.dart'; +import '../platform_interface/javascript_channel_registry.dart'; import '../types/types.dart'; import 'webview_platform_callbacks_handler.dart'; import 'webview_platform_controller.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart index c1763cdae501..7c3edf3cf8b0 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/creation_params.dart @@ -3,7 +3,8 @@ // found in the LICENSE file. import 'package:flutter/widgets.dart'; -import 'package:webview_flutter_platform_interface/src/types/types.dart'; + +import 'types.dart'; /// Configuration to use when creating a new [WebViewPlatformController]. /// diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml index 5b98154998a8..4b148725ff8f 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutte issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.9.3 +version: 1.9.4 environment: sdk: ">=2.12.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 056d1cb1c26a..318ffe65593a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.9.5 + +* Updates imports for `prefer_relative_imports`. + ## 2.9.4 * Fixes avoid_redundant_argument_values lint warnings and minor typos. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart index 2059aa544207..9f121e66d5cb 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart @@ -8,9 +8,9 @@ import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; -import 'package:webview_flutter_wkwebview/src/common/weak_reference_utils.dart'; import '../common/instance_manager.dart'; +import '../common/weak_reference_utils.dart'; import 'foundation_api_impls.dart'; /// The values that can be returned in a change map. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/ui_kit/ui_kit_api_impls.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/ui_kit/ui_kit_api_impls.dart index b6e4cadec879..ae12a11820d8 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/ui_kit/ui_kit_api_impls.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/ui_kit/ui_kit_api_impls.dart @@ -10,10 +10,9 @@ import 'dart:math'; import 'package:flutter/painting.dart' show Color; import 'package:flutter/services.dart'; -import 'package:webview_flutter_wkwebview/src/foundation/foundation.dart'; - import '../common/instance_manager.dart'; import '../common/web_kit.pigeon.dart'; +import '../foundation/foundation.dart'; import '../web_kit/web_kit.dart'; import 'ui_kit.dart'; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webview_cupertino.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webview_cupertino.dart index f046ea4378b8..616f00c59fa3 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webview_cupertino.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webview_cupertino.dart @@ -9,9 +9,9 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; -import 'package:webview_flutter_wkwebview/src/web_kit_webview_widget.dart'; import 'foundation/foundation.dart'; +import 'web_kit_webview_widget.dart'; /// Builds an iOS webview. /// diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/wkwebview_cookie_manager.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/wkwebview_cookie_manager.dart index 59c9f580db74..cdbf2620f968 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/wkwebview_cookie_manager.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/wkwebview_cookie_manager.dart @@ -3,8 +3,9 @@ // found in the LICENSE file. import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; -import 'package:webview_flutter_wkwebview/src/foundation/foundation.dart'; -import 'package:webview_flutter_wkwebview/src/web_kit/web_kit.dart'; + +import 'foundation/foundation.dart'; +import 'web_kit/web_kit.dart'; /// Handles all cookie operations for the WebView platform. class WKWebViewCookieManager extends WebViewCookieManagerPlatform { diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 40b7bf89601d..3de385fec06c 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_wkwebview 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: 2.9.4 +version: 2.9.5 environment: sdk: ">=2.17.0 <3.0.0" diff --git a/script/tool/lib/src/common/cmake.dart b/script/tool/lib/src/common/cmake.dart index 04ad880292b9..3f5d8452bd44 100644 --- a/script/tool/lib/src/common/cmake.dart +++ b/script/tool/lib/src/common/cmake.dart @@ -3,9 +3,9 @@ // found in the LICENSE file. import 'package:file/file.dart'; -import 'package:flutter_plugin_tools/src/common/core.dart'; import 'package:platform/platform.dart'; +import 'core.dart'; import 'process_runner.dart'; const String _cacheCommandKey = 'CMAKE_COMMAND:INTERNAL'; diff --git a/script/tool/lib/src/common/package_state_utils.dart b/script/tool/lib/src/common/package_state_utils.dart index 870956a24b10..a0c82400e1db 100644 --- a/script/tool/lib/src/common/package_state_utils.dart +++ b/script/tool/lib/src/common/package_state_utils.dart @@ -3,10 +3,10 @@ // found in the LICENSE file. import 'package:file/file.dart'; -import 'package:flutter_plugin_tools/src/common/git_version_finder.dart'; import 'package:meta/meta.dart'; import 'package:path/path.dart' as p; +import 'git_version_finder.dart'; import 'repository_package.dart'; /// The state of a package on disk relative to git state. diff --git a/script/tool/lib/src/common/plugin_utils.dart b/script/tool/lib/src/common/plugin_utils.dart index f33d3d73bb75..94677fe7e5a3 100644 --- a/script/tool/lib/src/common/plugin_utils.dart +++ b/script/tool/lib/src/common/plugin_utils.dart @@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:flutter_plugin_tools/src/common/repository_package.dart'; import 'package:yaml/yaml.dart'; import 'core.dart'; +import 'repository_package.dart'; /// Possible plugin support options for a platform. enum PlatformSupport { diff --git a/script/tool/lib/src/federation_safety_check_command.dart b/script/tool/lib/src/federation_safety_check_command.dart index 383637a9e896..93a832eb0e29 100644 --- a/script/tool/lib/src/federation_safety_check_command.dart +++ b/script/tool/lib/src/federation_safety_check_command.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'package:file/file.dart'; -import 'package:flutter_plugin_tools/src/common/plugin_utils.dart'; import 'package:git/git.dart'; import 'package:path/path.dart' as p; import 'package:platform/platform.dart'; @@ -13,6 +12,7 @@ import 'common/core.dart'; import 'common/file_utils.dart'; import 'common/git_version_finder.dart'; import 'common/package_looping_command.dart'; +import 'common/plugin_utils.dart'; import 'common/process_runner.dart'; import 'common/repository_package.dart'; diff --git a/script/tool/lib/src/lint_android_command.dart b/script/tool/lib/src/lint_android_command.dart index 607674c80d38..eb78ce891685 100644 --- a/script/tool/lib/src/lint_android_command.dart +++ b/script/tool/lib/src/lint_android_command.dart @@ -3,12 +3,12 @@ // found in the LICENSE file. import 'package:file/file.dart'; -import 'package:flutter_plugin_tools/src/common/plugin_utils.dart'; import 'package:platform/platform.dart'; import 'common/core.dart'; import 'common/gradle.dart'; import 'common/package_looping_command.dart'; +import 'common/plugin_utils.dart'; import 'common/process_runner.dart'; import 'common/repository_package.dart'; diff --git a/script/tool/lib/src/main.dart b/script/tool/lib/src/main.dart index 0f73c71e8437..078976d97376 100644 --- a/script/tool/lib/src/main.dart +++ b/script/tool/lib/src/main.dart @@ -7,13 +7,13 @@ import 'dart:io' as io; import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:file/local.dart'; -import 'package:flutter_plugin_tools/src/dependabot_check_command.dart'; import 'analyze_command.dart'; import 'build_examples_command.dart'; import 'common/core.dart'; import 'create_all_plugins_app_command.dart'; import 'custom_test_command.dart'; +import 'dependabot_check_command.dart'; import 'drive_examples_command.dart'; import 'federation_safety_check_command.dart'; import 'firebase_test_lab_command.dart'; diff --git a/script/tool/lib/src/make_deps_path_based_command.dart b/script/tool/lib/src/make_deps_path_based_command.dart index a09511ad7f42..10abcd44ae6e 100644 --- a/script/tool/lib/src/make_deps_path_based_command.dart +++ b/script/tool/lib/src/make_deps_path_based_command.dart @@ -158,10 +158,12 @@ class MakeDepsPathBasedCommand extends PackageCommand { ...pubspec.dependencies.keys, ...pubspec.devDependencies.keys, ]; - final Iterable packagesToOverride = combinedDependencies + final List packagesToOverride = combinedDependencies .where( (String packageName) => localDependencies.containsKey(packageName)) .toList(); + // Sort the combined list to avoid sort_pub_dependencies lint violations. + packagesToOverride.sort(); if (packagesToOverride.isNotEmpty) { final String commonBasePath = packagesDir.path; // Find the relative path to the common base. diff --git a/script/tool/lib/src/update_excerpts_command.dart b/script/tool/lib/src/update_excerpts_command.dart index 320a3c596323..5a59104d4e7f 100644 --- a/script/tool/lib/src/update_excerpts_command.dart +++ b/script/tool/lib/src/update_excerpts_command.dart @@ -5,12 +5,12 @@ import 'dart:io' as io; import 'package:file/file.dart'; -import 'package:flutter_plugin_tools/src/common/core.dart'; import 'package:git/git.dart'; import 'package:platform/platform.dart'; import 'package:yaml/yaml.dart'; import 'package:yaml_edit/yaml_edit.dart'; +import 'common/core.dart'; import 'common/package_looping_command.dart'; import 'common/process_runner.dart'; import 'common/repository_package.dart'; diff --git a/script/tool/lib/src/update_release_info_command.dart b/script/tool/lib/src/update_release_info_command.dart index 465b475eb9b5..67aa994d963c 100644 --- a/script/tool/lib/src/update_release_info_command.dart +++ b/script/tool/lib/src/update_release_info_command.dart @@ -4,11 +4,11 @@ import 'package:args/command_runner.dart'; import 'package:file/file.dart'; -import 'package:flutter_plugin_tools/src/common/core.dart'; import 'package:git/git.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:yaml_edit/yaml_edit.dart'; +import 'common/core.dart'; import 'common/git_version_finder.dart'; import 'common/package_looping_command.dart'; import 'common/package_state_utils.dart'; diff --git a/script/tool/test/make_deps_path_based_command_test.dart b/script/tool/test/make_deps_path_based_command_test.dart index 7e52dd6bbbc4..36753e8001f8 100644 --- a/script/tool/test/make_deps_path_based_command_test.dart +++ b/script/tool/test/make_deps_path_based_command_test.dart @@ -184,6 +184,42 @@ ${devDependencies.map((String dep) => ' $dep: ^1.0.0').join('\n')} ])); }); + test( + 'alphabetizes overrides from different sectinos to avoid lint warnings in analysis', + () async { + createFakePackage('a', packagesDir); + createFakePackage('b', packagesDir); + createFakePackage('c', packagesDir); + final RepositoryPackage targetPackage = + createFakePackage('target', packagesDir); + + _addDependencies(targetPackage, ['a', 'c']); + _addDevDependenciesSection(targetPackage, ['b']); + + final List output = await runCapturingPrint(runner, + ['make-deps-path-based', '--target-dependencies=c,a,b']); + + expect( + output, + containsAllInOrder([ + 'Rewriting references to: c, a, b...', + ' Modified packages/target/pubspec.yaml', + ])); + + expect( + targetPackage.pubspecFile.readAsLinesSync(), + containsAllInOrder([ + '# FOR TESTING ONLY. DO NOT MERGE.', + 'dependency_overrides:', + ' a:', + ' path: ../a', + ' b:', + ' path: ../b', + ' c:', + ' path: ../c', + ])); + }); + // This test case ensures that running CI using this command on an interim // PR that itself used this command won't fail on the rewrite step. test('running a second time no-ops without failing', () async { From 7aa678eaf4b7e79d9eb46dd17ae284a636a1ef35 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 28 Sep 2022 11:54:24 -0400 Subject: [PATCH 030/133] Roll Flutter from f57c2fe8ff49 to 9bf849184d6c (29 revisions) (#6510) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index aa1942ca8ea6..e9a6ba9a1691 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -f57c2fe8ff4993fbe017d1f5fb7c7a4145d66492 +9bf849184d6ca75b8d9fa5ac8cdaa10e9bc6521e From 9428081da056daba2ff07e18977768bdbce37187 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 28 Sep 2022 14:22:46 -0400 Subject: [PATCH 031/133] Enable `no_leading_underscores_for_local_identifiers` (#6509) --- analysis_options.yaml | 2 +- packages/camera/camera/CHANGELOG.md | 4 + .../example/integration_test/camera_test.dart | 40 ++-- .../camera/lib/src/camera_controller.dart | 14 +- packages/camera/camera/pubspec.yaml | 2 +- packages/camera/camera_android/CHANGELOG.md | 4 + .../example/integration_test/camera_test.dart | 8 +- .../example/lib/camera_controller.dart | 14 +- .../lib/src/android_camera.dart | 8 +- packages/camera/camera_android/pubspec.yaml | 2 +- .../camera/camera_avfoundation/CHANGELOG.md | 3 +- .../example/integration_test/camera_test.dart | 32 ++-- .../example/lib/camera_controller.dart | 14 +- .../lib/src/avfoundation_camera.dart | 8 +- .../camera/camera_avfoundation/pubspec.yaml | 2 +- .../camera_platform_interface/CHANGELOG.md | 4 + .../method_channel/method_channel_camera.dart | 8 +- .../camera_platform_interface/pubspec.yaml | 2 +- packages/camera/camera_windows/CHANGELOG.md | 3 +- .../camera_windows/example/lib/main.dart | 8 +- packages/camera/camera_windows/pubspec.yaml | 2 +- .../google_maps_flutter/CHANGELOG.md | 4 + .../test/polygon_updates_test.dart | 4 +- .../test/polyline_updates_test.dart | 4 +- .../CHANGELOG.md | 4 + .../lib/src/types/maps_object_updates.dart | 6 +- .../pubspec.yaml | 2 +- .../google_maps_flutter_web/CHANGELOG.md | 4 + .../google_maps_controller_test.dart | 28 +-- .../google_maps_plugin_test.dart | 28 +-- .../example/integration_test/marker_test.dart | 16 +- .../example/integration_test/shape_test.dart | 10 +- .../google_sign_in_web/CHANGELOG.md | 1 + .../auth2_legacy_init_test.dart | 10 +- .../example/integration_test/auth2_test.dart | 10 +- .../image_picker_for_web/CHANGELOG.md | 4 + .../lib/image_picker_for_web.dart | 24 +-- .../image_picker_for_web/pubspec.yaml | 2 +- .../path_provider/path_provider/CHANGELOG.md | 1 + .../integration_test/path_provider_test.dart | 4 +- .../path_provider_android/CHANGELOG.md | 1 + .../integration_test/path_provider_test.dart | 4 +- .../shared_preferences/CHANGELOG.md | 1 + .../test/shared_preferences_test.dart | 12 +- .../shared_preferences_android/CHANGELOG.md | 4 + .../shared_preferences_test.dart | 40 ++-- .../shared_preferences_ios/CHANGELOG.md | 1 + .../shared_preferences_test.dart | 34 ++-- .../shared_preferences_linux/CHANGELOG.md | 1 + .../test/shared_preferences_linux_test.dart | 34 ++-- .../shared_preferences_macos/CHANGELOG.md | 1 + .../shared_preferences_test.dart | 34 ++-- .../shared_preferences_windows/CHANGELOG.md | 1 + .../test/shared_preferences_windows_test.dart | 34 ++-- .../video_player/video_player/CHANGELOG.md | 4 + .../integration_test/video_player_test.dart | 172 +++++++++--------- .../video_player/test/video_player_test.dart | 8 +- .../video_player_android/CHANGELOG.md | 1 + .../integration_test/video_player_test.dart | 62 +++---- .../video_player_avfoundation/CHANGELOG.md | 4 + .../integration_test/video_player_test.dart | 64 +++---- .../webview_flutter/CHANGELOG.md | 1 + .../webview_flutter_test.dart | 14 +- .../webview_flutter_android/CHANGELOG.md | 4 + .../webview_flutter_test.dart | 14 +- .../CHANGELOG.md | 4 + .../webview_method_channel.dart | 21 +-- .../pubspec.yaml | 2 +- .../javascript_channel_registry_test.dart | 30 +-- .../src/types/javascript_channel_test.dart | 16 +- .../webview_flutter_wkwebview/CHANGELOG.md | 4 + .../webview_flutter_test.dart | 14 +- .../src/common/package_looping_command.dart | 4 +- script/tool/lib/src/native_test_command.dart | 4 +- .../test/dependabot_check_command_test.dart | 10 +- .../test/firebase_test_lab_command_test.dart | 32 ++-- script/tool/test/format_command_test.dart | 31 ++-- .../tool/test/license_check_command_test.dart | 38 ++-- .../make_deps_path_based_command_test.dart | 24 +-- .../tool/test/native_test_command_test.dart | 116 ++++++------ script/tool/test/publish_command_test.dart | 8 +- .../test/remove_dev_dependencies_test.dart | 6 +- .../tool/test/version_check_command_test.dart | 27 ++- 83 files changed, 675 insertions(+), 616 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index a8cff3ca7d01..98352af415de 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -143,7 +143,7 @@ linter: # - no_default_cases # LOCAL CHANGE - Needs to be enabled and violations fixed. - no_duplicate_case_values - no_leading_underscores_for_library_prefixes - # - no_leading_underscores_for_local_identifiers # LOCAL CHANGE - Needs to be enabled and violations fixed. + - no_leading_underscores_for_local_identifiers - no_logic_in_create_state # - no_runtimeType_toString # ok in tests; we enable this only in packages/ - non_constant_identifier_names diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 6f4a9f491542..30bb098f8fd4 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.0+3 + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 0.10.0+2 * Updates imports for `prefer_relative_imports`. diff --git a/packages/camera/camera/example/integration_test/camera_test.dart b/packages/camera/camera/example/integration_test/camera_test.dart index 557f4858acab..b233d4958c8a 100644 --- a/packages/camera/camera/example/integration_test/camera_test.dart +++ b/packages/camera/camera/example/integration_test/camera_test.dart @@ -221,16 +221,16 @@ void main() { ); await controller.initialize(); - bool _isDetecting = false; + bool isDetecting = false; await controller.startImageStream((CameraImage image) { - if (_isDetecting) { + if (isDetecting) { return; } - _isDetecting = true; + isDetecting = true; - expectLater(image, isNotNull).whenComplete(() => _isDetecting = false); + expectLater(image, isNotNull).whenComplete(() => isDetecting = false); }); expect(controller.value.isStreamingImages, true); @@ -254,19 +254,19 @@ void main() { ); await controller.initialize(); - final Completer _completer = Completer(); + final Completer completer = Completer(); await controller.startImageStream((CameraImage image) { - if (!_completer.isCompleted) { + if (!completer.isCompleted) { Future(() async { await controller.stopImageStream(); await controller.dispose(); }).then((Object? value) { - _completer.complete(image); + completer.complete(image); }); } }); - return _completer.future; + return completer.future; } testWidgets( @@ -277,20 +277,20 @@ void main() { return; } - CameraImage _image = await startStreaming(cameras, null); - expect(_image, isNotNull); - expect(_image.format.group, ImageFormatGroup.bgra8888); - expect(_image.planes.length, 1); + CameraImage image = await startStreaming(cameras, null); + expect(image, isNotNull); + expect(image.format.group, ImageFormatGroup.bgra8888); + expect(image.planes.length, 1); - _image = await startStreaming(cameras, ImageFormatGroup.yuv420); - expect(_image, isNotNull); - expect(_image.format.group, ImageFormatGroup.yuv420); - expect(_image.planes.length, 2); + image = await startStreaming(cameras, ImageFormatGroup.yuv420); + expect(image, isNotNull); + expect(image.format.group, ImageFormatGroup.yuv420); + expect(image.planes.length, 2); - _image = await startStreaming(cameras, ImageFormatGroup.bgra8888); - expect(_image, isNotNull); - expect(_image.format.group, ImageFormatGroup.bgra8888); - expect(_image.planes.length, 1); + image = await startStreaming(cameras, ImageFormatGroup.bgra8888); + expect(image, isNotNull); + expect(image.format.group, ImageFormatGroup.bgra8888); + expect(image.planes.length, 1); }, skip: !Platform.isIOS, ); diff --git a/packages/camera/camera/lib/src/camera_controller.dart b/packages/camera/camera/lib/src/camera_controller.dart index 13bb63700ad3..ed1c951925d8 100644 --- a/packages/camera/camera/lib/src/camera_controller.dart +++ b/packages/camera/camera/lib/src/camera_controller.dart @@ -282,7 +282,7 @@ class CameraController extends ValueNotifier { ); } try { - final Completer _initializeCompleter = + final Completer initializeCompleter = Completer(); _deviceOrientationSubscription = CameraPlatform.instance @@ -303,7 +303,7 @@ class CameraController extends ValueNotifier { .onCameraInitialized(_cameraId) .first .then((CameraInitializedEvent event) { - _initializeCompleter.complete(event); + initializeCompleter.complete(event); })); await CameraPlatform.instance.initializeCamera( @@ -313,18 +313,18 @@ class CameraController extends ValueNotifier { value = value.copyWith( isInitialized: true, - previewSize: await _initializeCompleter.future + previewSize: await initializeCompleter.future .then((CameraInitializedEvent event) => Size( event.previewWidth, event.previewHeight, )), - exposureMode: await _initializeCompleter.future + exposureMode: await initializeCompleter.future .then((CameraInitializedEvent event) => event.exposureMode), - focusMode: await _initializeCompleter.future + focusMode: await initializeCompleter.future .then((CameraInitializedEvent event) => event.focusMode), - exposurePointSupported: await _initializeCompleter.future.then( + exposurePointSupported: await initializeCompleter.future.then( (CameraInitializedEvent event) => event.exposurePointSupported), - focusPointSupported: await _initializeCompleter.future + focusPointSupported: await initializeCompleter.future .then((CameraInitializedEvent event) => event.focusPointSupported), ); } on PlatformException catch (e) { diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 2770e977bcc9..1190989a63b7 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,7 +4,7 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.0+2 +version: 0.10.0+3 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index f2417fb20645..af871474f68b 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.0+3 + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 0.10.0+2 * Removes call to `join` on the camera's background `HandlerThread`. diff --git a/packages/camera/camera_android/example/integration_test/camera_test.dart b/packages/camera/camera_android/example/integration_test/camera_test.dart index 99029fcac605..3b1aae6aec51 100644 --- a/packages/camera/camera_android/example/integration_test/camera_test.dart +++ b/packages/camera/camera_android/example/integration_test/camera_test.dart @@ -225,16 +225,16 @@ void main() { ); await controller.initialize(); - bool _isDetecting = false; + bool isDetecting = false; await controller.startImageStream((CameraImageData image) { - if (_isDetecting) { + if (isDetecting) { return; } - _isDetecting = true; + isDetecting = true; - expectLater(image, isNotNull).whenComplete(() => _isDetecting = false); + expectLater(image, isNotNull).whenComplete(() => isDetecting = false); }); expect(controller.value.isStreamingImages, true); diff --git a/packages/camera/camera_android/example/lib/camera_controller.dart b/packages/camera/camera_android/example/lib/camera_controller.dart index 5a7a79c8d96c..09441cc5449c 100644 --- a/packages/camera/camera_android/example/lib/camera_controller.dart +++ b/packages/camera/camera_android/example/lib/camera_controller.dart @@ -203,7 +203,7 @@ class CameraController extends ValueNotifier { /// Initializes the camera on the device. Future initialize() async { - final Completer _initializeCompleter = + final Completer initializeCompleter = Completer(); _deviceOrientationSubscription = CameraPlatform.instance @@ -224,7 +224,7 @@ class CameraController extends ValueNotifier { .onCameraInitialized(_cameraId) .first .then((CameraInitializedEvent event) { - _initializeCompleter.complete(event); + initializeCompleter.complete(event); }); await CameraPlatform.instance.initializeCamera( @@ -234,18 +234,18 @@ class CameraController extends ValueNotifier { value = value.copyWith( isInitialized: true, - previewSize: await _initializeCompleter.future + previewSize: await initializeCompleter.future .then((CameraInitializedEvent event) => Size( event.previewWidth, event.previewHeight, )), - exposureMode: await _initializeCompleter.future + exposureMode: await initializeCompleter.future .then((CameraInitializedEvent event) => event.exposureMode), - focusMode: await _initializeCompleter.future + focusMode: await initializeCompleter.future .then((CameraInitializedEvent event) => event.focusMode), - exposurePointSupported: await _initializeCompleter.future + exposurePointSupported: await initializeCompleter.future .then((CameraInitializedEvent event) => event.exposurePointSupported), - focusPointSupported: await _initializeCompleter.future + focusPointSupported: await initializeCompleter.future .then((CameraInitializedEvent event) => event.focusPointSupported), ); diff --git a/packages/camera/camera_android/lib/src/android_camera.dart b/packages/camera/camera_android/lib/src/android_camera.dart index 3e9e52af04a7..36077eac8eed 100644 --- a/packages/camera/camera_android/lib/src/android_camera.dart +++ b/packages/camera/camera_android/lib/src/android_camera.dart @@ -126,10 +126,10 @@ class AndroidCamera extends CameraPlatform { return channel; }); - final Completer _completer = Completer(); + final Completer completer = Completer(); onCameraInitialized(cameraId).first.then((CameraInitializedEvent value) { - _completer.complete(); + completer.complete(); }); _channel.invokeMapMethod( @@ -147,14 +147,14 @@ class AndroidCamera extends CameraPlatform { if (error is! PlatformException) { throw error; } - _completer.completeError( + completer.completeError( CameraException(error.code, error.message), stackTrace, ); }, ); - return _completer.future; + return completer.future; } @override diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index 9f5a2f2b9c16..a464759c3c46 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android description: Android implementation of the camera plugin. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.0+2 +version: 0.10.0+3 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md index ab33c35dd8da..12d9a53ea248 100644 --- a/packages/camera/camera_avfoundation/CHANGELOG.md +++ b/packages/camera/camera_avfoundation/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.9.8+6 +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 0.9.8+5 diff --git a/packages/camera/camera_avfoundation/example/integration_test/camera_test.dart b/packages/camera/camera_avfoundation/example/integration_test/camera_test.dart index 51eab634c84b..3e62edc2c495 100644 --- a/packages/camera/camera_avfoundation/example/integration_test/camera_test.dart +++ b/packages/camera/camera_avfoundation/example/integration_test/camera_test.dart @@ -213,19 +213,19 @@ void main() { ); await controller.initialize(); - final Completer _completer = Completer(); + final Completer completer = Completer(); await controller.startImageStream((CameraImageData image) { - if (!_completer.isCompleted) { + if (!completer.isCompleted) { Future(() async { await controller.stopImageStream(); await controller.dispose(); }).then((Object? value) { - _completer.complete(image); + completer.complete(image); }); } }); - return _completer.future; + return completer.future; } testWidgets( @@ -237,20 +237,20 @@ void main() { return; } - CameraImageData _image = await startStreaming(cameras, null); - expect(_image, isNotNull); - expect(_image.format.group, ImageFormatGroup.bgra8888); - expect(_image.planes.length, 1); + CameraImageData image = await startStreaming(cameras, null); + expect(image, isNotNull); + expect(image.format.group, ImageFormatGroup.bgra8888); + expect(image.planes.length, 1); - _image = await startStreaming(cameras, ImageFormatGroup.yuv420); - expect(_image, isNotNull); - expect(_image.format.group, ImageFormatGroup.yuv420); - expect(_image.planes.length, 2); + image = await startStreaming(cameras, ImageFormatGroup.yuv420); + expect(image, isNotNull); + expect(image.format.group, ImageFormatGroup.yuv420); + expect(image.planes.length, 2); - _image = await startStreaming(cameras, ImageFormatGroup.bgra8888); - expect(_image, isNotNull); - expect(_image.format.group, ImageFormatGroup.bgra8888); - expect(_image.planes.length, 1); + image = await startStreaming(cameras, ImageFormatGroup.bgra8888); + expect(image, isNotNull); + expect(image.format.group, ImageFormatGroup.bgra8888); + expect(image.planes.length, 1); }, ); } diff --git a/packages/camera/camera_avfoundation/example/lib/camera_controller.dart b/packages/camera/camera_avfoundation/example/lib/camera_controller.dart index 5a7a79c8d96c..09441cc5449c 100644 --- a/packages/camera/camera_avfoundation/example/lib/camera_controller.dart +++ b/packages/camera/camera_avfoundation/example/lib/camera_controller.dart @@ -203,7 +203,7 @@ class CameraController extends ValueNotifier { /// Initializes the camera on the device. Future initialize() async { - final Completer _initializeCompleter = + final Completer initializeCompleter = Completer(); _deviceOrientationSubscription = CameraPlatform.instance @@ -224,7 +224,7 @@ class CameraController extends ValueNotifier { .onCameraInitialized(_cameraId) .first .then((CameraInitializedEvent event) { - _initializeCompleter.complete(event); + initializeCompleter.complete(event); }); await CameraPlatform.instance.initializeCamera( @@ -234,18 +234,18 @@ class CameraController extends ValueNotifier { value = value.copyWith( isInitialized: true, - previewSize: await _initializeCompleter.future + previewSize: await initializeCompleter.future .then((CameraInitializedEvent event) => Size( event.previewWidth, event.previewHeight, )), - exposureMode: await _initializeCompleter.future + exposureMode: await initializeCompleter.future .then((CameraInitializedEvent event) => event.exposureMode), - focusMode: await _initializeCompleter.future + focusMode: await initializeCompleter.future .then((CameraInitializedEvent event) => event.focusMode), - exposurePointSupported: await _initializeCompleter.future + exposurePointSupported: await initializeCompleter.future .then((CameraInitializedEvent event) => event.exposurePointSupported), - focusPointSupported: await _initializeCompleter.future + focusPointSupported: await initializeCompleter.future .then((CameraInitializedEvent event) => event.focusPointSupported), ); diff --git a/packages/camera/camera_avfoundation/lib/src/avfoundation_camera.dart b/packages/camera/camera_avfoundation/lib/src/avfoundation_camera.dart index 19054fe5c561..9bdadfb4536f 100644 --- a/packages/camera/camera_avfoundation/lib/src/avfoundation_camera.dart +++ b/packages/camera/camera_avfoundation/lib/src/avfoundation_camera.dart @@ -126,10 +126,10 @@ class AVFoundationCamera extends CameraPlatform { return channel; }); - final Completer _completer = Completer(); + final Completer completer = Completer(); onCameraInitialized(cameraId).first.then((CameraInitializedEvent value) { - _completer.complete(); + completer.complete(); }); _channel.invokeMapMethod( @@ -147,14 +147,14 @@ class AVFoundationCamera extends CameraPlatform { if (error is! PlatformException) { throw error; } - _completer.completeError( + completer.completeError( CameraException(error.code, error.message), stackTrace, ); }, ); - return _completer.future; + return completer.future; } @override diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml index 4b5b67dd8943..f394d59e81d5 100644 --- a/packages/camera/camera_avfoundation/pubspec.yaml +++ b/packages/camera/camera_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_avfoundation description: iOS implementation of the camera plugin. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.8+5 +version: 0.9.8+6 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index bdfbd44a229a..d410304970cf 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.2 + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.2.1 * Updates imports for `prefer_relative_imports`. diff --git a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart index 68e1315f8bbe..37c00d64ede2 100644 --- a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart +++ b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart @@ -118,10 +118,10 @@ class MethodChannelCamera extends CameraPlatform { return channel; }); - final Completer _completer = Completer(); + final Completer completer = Completer(); onCameraInitialized(cameraId).first.then((CameraInitializedEvent value) { - _completer.complete(); + completer.complete(); }); _channel.invokeMapMethod( @@ -139,14 +139,14 @@ class MethodChannelCamera extends CameraPlatform { if (error is! PlatformException) { throw error; } - _completer.completeError( + completer.completeError( CameraException(error.code, error.message), stackTrace, ); }, ); - return _completer.future; + return completer.future; } @override diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index 9cbd51b1bd2d..e87679261c5a 100644 --- a/packages/camera/camera_platform_interface/pubspec.yaml +++ b/packages/camera/camera_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.1 +version: 2.2.2 environment: sdk: '>=2.12.0 <3.0.0' diff --git a/packages/camera/camera_windows/CHANGELOG.md b/packages/camera/camera_windows/CHANGELOG.md index 10b08874092a..71c5d56524a6 100644 --- a/packages/camera/camera_windows/CHANGELOG.md +++ b/packages/camera/camera_windows/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.2.1+2 +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 0.2.1+1 diff --git a/packages/camera/camera_windows/example/lib/main.dart b/packages/camera/camera_windows/example/lib/main.dart index 310630493111..d27edb860975 100644 --- a/packages/camera/camera_windows/example/lib/main.dart +++ b/packages/camera/camera_windows/example/lib/main.dart @@ -187,8 +187,8 @@ class _MyAppState extends State { } Future _takePicture() async { - final XFile _file = await CameraPlatform.instance.takePicture(_cameraId); - _showInSnackBar('Picture captured to: ${_file.path}'); + final XFile file = await CameraPlatform.instance.takePicture(_cameraId); + _showInSnackBar('Picture captured to: ${file.path}'); } Future _recordTimed(int seconds) async { @@ -228,10 +228,10 @@ class _MyAppState extends State { if (!_recording) { await CameraPlatform.instance.startVideoRecording(_cameraId); } else { - final XFile _file = + final XFile file = await CameraPlatform.instance.stopVideoRecording(_cameraId); - _showInSnackBar('Video captured to: ${_file.path}'); + _showInSnackBar('Video captured to: ${file.path}'); } if (mounted) { diff --git a/packages/camera/camera_windows/pubspec.yaml b/packages/camera/camera_windows/pubspec.yaml index 403cb459a6f7..1eab9fa108ef 100644 --- a/packages/camera/camera_windows/pubspec.yaml +++ b/packages/camera/camera_windows/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_windows description: A Flutter plugin for getting information about and controlling the camera on Windows. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_windows issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.2.1+1 +version: 0.2.1+2 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md index 70298bc667b0..3707aa86e95a 100644 --- a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.2.1 * Updates imports for `prefer_relative_imports`. diff --git a/packages/google_maps_flutter/google_maps_flutter/test/polygon_updates_test.dart b/packages/google_maps_flutter/google_maps_flutter/test/polygon_updates_test.dart index cb7263c02e05..34959832b36b 100644 --- a/packages/google_maps_flutter/google_maps_flutter/test/polygon_updates_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter/test/polygon_updates_test.dart @@ -123,10 +123,10 @@ void main() { }); testWidgets('Mutate a polygon', (WidgetTester tester) async { - final List _points = [const LatLng(0.0, 0.0)]; + final List points = [const LatLng(0.0, 0.0)]; final Polygon p1 = Polygon( polygonId: const PolygonId('polygon_1'), - points: _points, + points: points, ); await tester.pumpWidget(_mapWithPolygons({p1})); diff --git a/packages/google_maps_flutter/google_maps_flutter/test/polyline_updates_test.dart b/packages/google_maps_flutter/google_maps_flutter/test/polyline_updates_test.dart index a2dad92f8eb4..f9d091695383 100644 --- a/packages/google_maps_flutter/google_maps_flutter/test/polyline_updates_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter/test/polyline_updates_test.dart @@ -117,10 +117,10 @@ void main() { }); testWidgets('Mutate a polyline', (WidgetTester tester) async { - final List _points = [const LatLng(0.0, 0.0)]; + final List points = [const LatLng(0.0, 0.0)]; final Polyline p1 = Polyline( polylineId: const PolylineId('polyline_1'), - points: _points, + points: points, ); await tester.pumpWidget(_mapWithPolylines({p1})); diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md index 26e70d3b4c35..a41d1fe487f3 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.4 + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.2.3 * Updates imports for `prefer_relative_imports`. diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/maps_object_updates.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/maps_object_updates.dart index 0051afcefbab..efc319b60ced 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/maps_object_updates.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/maps_object_updates.dart @@ -31,7 +31,7 @@ class MapsObjectUpdates> { /// /// It is a programming error to call this with an ID that is not guaranteed /// to be in [currentObjects]. - T _idToCurrentObject(MapsObjectId id) { + T idToCurrentObject(MapsObjectId id) { return currentObjects[id]!; } @@ -39,7 +39,7 @@ class MapsObjectUpdates> { _objectsToAdd = currentObjectIds .difference(previousObjectIds) - .map(_idToCurrentObject) + .map(idToCurrentObject) .toSet(); // Returns `true` if [current] is not equals to previous one with the @@ -51,7 +51,7 @@ class MapsObjectUpdates> { _objectsToChange = currentObjectIds .intersection(previousObjectIds) - .map(_idToCurrentObject) + .map(idToCurrentObject) .where(hasChanged) .toSet(); } diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml index 853a23d5cdc3..5639ee8c6ad7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_fl issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.3 +version: 2.2.4 environment: sdk: '>=2.12.0 <3.0.0' diff --git a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md index b1ddd412a3dc..2333f7d16028 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 0.4.0+3 * Updates imports for `prefer_relative_imports`. diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.dart index 4294f8715524..0226234ea97a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.dart @@ -37,7 +37,7 @@ void main() { late StreamController> stream; // Creates a controller with the default mapId and stream controller, and any `options` needed. - GoogleMapController _createController({ + GoogleMapController createController({ CameraPosition initialCameraPosition = const CameraPosition(target: LatLng(0, 0)), MapObjects mapObjects = const MapObjects(), @@ -60,7 +60,7 @@ void main() { group('construct/dispose', () { setUp(() { - controller = _createController(); + controller = createController(); }); testWidgets('constructor creates widget', (WidgetTester tester) async { @@ -223,7 +223,7 @@ void main() { }); testWidgets('listens to map events', (WidgetTester tester) async { - controller = _createController(); + controller = createController(); controller.debugSetOverrides( createMap: (_, __) => map, circles: circles, @@ -262,7 +262,7 @@ void main() { testWidgets("binds geometry controllers to map's", (WidgetTester tester) async { - controller = _createController(); + controller = createController(); controller.debugSetOverrides( createMap: (_, __) => map, circles: circles, @@ -280,7 +280,7 @@ void main() { }); testWidgets('renders initial geometry', (WidgetTester tester) async { - controller = _createController( + controller = createController( mapObjects: MapObjects(circles: { const Circle( circleId: CircleId('circle-1'), @@ -360,7 +360,7 @@ void main() { testWidgets('empty infoWindow does not create InfoWindow instance.', (WidgetTester tester) async { - controller = _createController( + controller = createController( mapObjects: MapObjects(markers: { const Marker(markerId: MarkerId('marker-1')), })); @@ -383,7 +383,7 @@ void main() { capturedOptions = null; }); testWidgets('translates initial options', (WidgetTester tester) async { - controller = _createController( + controller = createController( mapConfiguration: const MapConfiguration( mapType: MapType.satellite, zoomControlsEnabled: true, @@ -406,7 +406,7 @@ void main() { testWidgets('disables gestureHandling with scrollGesturesEnabled false', (WidgetTester tester) async { - controller = _createController( + controller = createController( mapConfiguration: const MapConfiguration( scrollGesturesEnabled: false, )); @@ -426,7 +426,7 @@ void main() { testWidgets('disables gestureHandling with zoomGesturesEnabled false', (WidgetTester tester) async { - controller = _createController( + controller = createController( mapConfiguration: const MapConfiguration( zoomGesturesEnabled: false, )); @@ -446,7 +446,7 @@ void main() { testWidgets('sets initial position when passed', (WidgetTester tester) async { - controller = _createController( + controller = createController( initialCameraPosition: const CameraPosition( target: LatLng(43.308, -5.6910), zoom: 12, @@ -469,14 +469,14 @@ void main() { group('Traffic Layer', () { testWidgets('by default is disabled', (WidgetTester tester) async { - controller = _createController(); + controller = createController(); controller.init(); expect(controller.trafficLayer, isNull); }); testWidgets('initializes with traffic layer', (WidgetTester tester) async { - controller = _createController( + controller = createController( mapConfiguration: const MapConfiguration( trafficEnabled: true, )); @@ -498,7 +498,7 @@ void main() { ..zoom = 10 ..center = gmaps.LatLng(0, 0), ); - controller = _createController(); + controller = createController(); controller.debugSetOverrides(createMap: (_, __) => map); controller.init(); }); @@ -572,7 +572,7 @@ void main() { // These are the methods that get forwarded to other controllers, so we just verify calls. group('Pass-through methods', () { setUp(() { - controller = _createController(); + controller = createController(); }); testWidgets('updateCircles', (WidgetTester tester) async { diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.dart index b4786c73b711..9bd1a68c6207 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.dart @@ -381,7 +381,7 @@ void main() { }); // Dispatches a few events in the global streamController, and expects *only* the passed event to be there. - Future _testStreamFiltering( + Future testStreamFiltering( Stream> stream, MapEvent event) async { Timer.run(() { streamController.add(_OtherMapEvent(mapId)); @@ -403,7 +403,7 @@ void main() { final Stream stream = plugin.onCameraMoveStarted(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onCameraMoveStarted', (WidgetTester tester) async { final CameraMoveEvent event = CameraMoveEvent( @@ -416,7 +416,7 @@ void main() { final Stream stream = plugin.onCameraMove(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onCameraIdle', (WidgetTester tester) async { final CameraIdleEvent event = CameraIdleEvent(mapId); @@ -424,7 +424,7 @@ void main() { final Stream stream = plugin.onCameraIdle(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); // Marker events testWidgets('onMarkerTap', (WidgetTester tester) async { @@ -435,7 +435,7 @@ void main() { final Stream stream = plugin.onMarkerTap(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onInfoWindowTap', (WidgetTester tester) async { final InfoWindowTapEvent event = InfoWindowTapEvent( @@ -446,7 +446,7 @@ void main() { final Stream stream = plugin.onInfoWindowTap(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onMarkerDragStart', (WidgetTester tester) async { final MarkerDragStartEvent event = MarkerDragStartEvent( @@ -458,7 +458,7 @@ void main() { final Stream stream = plugin.onMarkerDragStart(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onMarkerDrag', (WidgetTester tester) async { final MarkerDragEvent event = MarkerDragEvent( @@ -470,7 +470,7 @@ void main() { final Stream stream = plugin.onMarkerDrag(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onMarkerDragEnd', (WidgetTester tester) async { final MarkerDragEndEvent event = MarkerDragEndEvent( @@ -482,7 +482,7 @@ void main() { final Stream stream = plugin.onMarkerDragEnd(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); // Geometry testWidgets('onPolygonTap', (WidgetTester tester) async { @@ -494,7 +494,7 @@ void main() { final Stream stream = plugin.onPolygonTap(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onPolylineTap', (WidgetTester tester) async { final PolylineTapEvent event = PolylineTapEvent( @@ -505,7 +505,7 @@ void main() { final Stream stream = plugin.onPolylineTap(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onCircleTap', (WidgetTester tester) async { final CircleTapEvent event = CircleTapEvent( @@ -515,7 +515,7 @@ void main() { final Stream stream = plugin.onCircleTap(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); // Map taps testWidgets('onTap', (WidgetTester tester) async { @@ -526,7 +526,7 @@ void main() { final Stream stream = plugin.onTap(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); testWidgets('onLongPress', (WidgetTester tester) async { final MapLongPressEvent event = MapLongPressEvent( @@ -537,7 +537,7 @@ void main() { final Stream stream = plugin.onLongPress(mapId: mapId); - await _testStreamFiltering(stream, event); + await testStreamFiltering(stream, event); }); }); }); diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart index e07ade03bba3..6591b0ca08d7 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart @@ -16,32 +16,32 @@ void main() { // Since onTap/DragEnd events happen asynchronously, we need to store when the event // is fired. We use a completer so the test can wait for the future to be completed. - late Completer _methodCalledCompleter; + late Completer methodCalledCompleter; - /// This is the future value of the [_methodCalledCompleter]. Reinitialized + /// This is the future value of the [methodCalledCompleter]. Reinitialized /// in the [setUp] method, and completed (as `true`) by [onTap] and [onDragEnd] /// when those methods are called from the MarkerController. late Future methodCalled; void onTap() { - _methodCalledCompleter.complete(true); + methodCalledCompleter.complete(true); } void onDragStart(gmaps.LatLng _) { - _methodCalledCompleter.complete(true); + methodCalledCompleter.complete(true); } void onDrag(gmaps.LatLng _) { - _methodCalledCompleter.complete(true); + methodCalledCompleter.complete(true); } void onDragEnd(gmaps.LatLng _) { - _methodCalledCompleter.complete(true); + methodCalledCompleter.complete(true); } setUp(() { - _methodCalledCompleter = Completer(); - methodCalled = _methodCalledCompleter.future; + methodCalledCompleter = Completer(); + methodCalled = methodCalledCompleter.future; }); group('MarkerController', () { diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/shape_test.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/shape_test.dart index d1426760ceae..11af181cffc2 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/shape_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/shape_test.dart @@ -15,20 +15,20 @@ void main() { // Since onTap events happen asynchronously, we need to store when the event // is fired. We use a completer so the test can wait for the future to be completed. - late Completer _methodCalledCompleter; + late Completer methodCalledCompleter; - /// This is the future value of the [_methodCalledCompleter]. Reinitialized + /// This is the future value of the [methodCalledCompleter]. Reinitialized /// in the [setUp] method, and completed (as `true`) by [onTap], when it gets /// called by the corresponding Shape Controller. late Future methodCalled; void onTap() { - _methodCalledCompleter.complete(true); + methodCalledCompleter.complete(true); } setUp(() { - _methodCalledCompleter = Completer(); - methodCalled = _methodCalledCompleter.future; + methodCalledCompleter = Completer(); + methodCalled = methodCalledCompleter.future; }); group('CircleController', () { diff --git a/packages/google_sign_in/google_sign_in_web/CHANGELOG.md b/packages/google_sign_in/google_sign_in_web/CHANGELOG.md index 51842e4319a0..2816e7284b30 100644 --- a/packages/google_sign_in/google_sign_in_web/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_web/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 0.10.2 diff --git a/packages/google_sign_in/google_sign_in_web/example/integration_test/auth2_legacy_init_test.dart b/packages/google_sign_in/google_sign_in_web/example/integration_test/auth2_legacy_init_test.dart index 12f8f2f3f167..5dada90397fa 100644 --- a/packages/google_sign_in/google_sign_in_web/example/integration_test/auth2_legacy_init_test.dart +++ b/packages/google_sign_in/google_sign_in_web/example/integration_test/auth2_legacy_init_test.dart @@ -71,7 +71,7 @@ void main() { group('other methods also throw catchable exceptions on initialize fail', () { // This function ensures that initialize gets called, but for some reason, // we ignored that it has thrown stuff... - Future _discardInit() async { + Future discardInit() async { try { await plugin.init( hostedDomain: 'foo', @@ -89,23 +89,23 @@ void main() { }); testWidgets('signInSilently throws', (WidgetTester tester) async { - await _discardInit(); + await discardInit(); await expectLater( plugin.signInSilently(), throwsA(isA())); }); testWidgets('signIn throws', (WidgetTester tester) async { - await _discardInit(); + await discardInit(); await expectLater(plugin.signIn(), throwsA(isA())); }); testWidgets('getTokens throws', (WidgetTester tester) async { - await _discardInit(); + await discardInit(); await expectLater(plugin.getTokens(email: 'test@example.com'), throwsA(isA())); }); testWidgets('requestScopes', (WidgetTester tester) async { - await _discardInit(); + await discardInit(); await expectLater(plugin.requestScopes(['newScope']), throwsA(isA())); }); diff --git a/packages/google_sign_in/google_sign_in_web/example/integration_test/auth2_test.dart b/packages/google_sign_in/google_sign_in_web/example/integration_test/auth2_test.dart index 81d9f1489a23..3e803b83fa0c 100644 --- a/packages/google_sign_in/google_sign_in_web/example/integration_test/auth2_test.dart +++ b/packages/google_sign_in/google_sign_in_web/example/integration_test/auth2_test.dart @@ -66,7 +66,7 @@ void main() { () { // This function ensures that initWithParams gets called, but for some // reason, we ignored that it has thrown stuff... - Future _discardInit() async { + Future discardInit() async { try { await plugin.initWithParams(const SignInInitParameters( hostedDomain: 'foo', @@ -84,23 +84,23 @@ void main() { }); testWidgets('signInSilently throws', (WidgetTester tester) async { - await _discardInit(); + await discardInit(); await expectLater( plugin.signInSilently(), throwsA(isA())); }); testWidgets('signIn throws', (WidgetTester tester) async { - await _discardInit(); + await discardInit(); await expectLater(plugin.signIn(), throwsA(isA())); }); testWidgets('getTokens throws', (WidgetTester tester) async { - await _discardInit(); + await discardInit(); await expectLater(plugin.getTokens(email: 'test@example.com'), throwsA(isA())); }); testWidgets('requestScopes', (WidgetTester tester) async { - await _discardInit(); + await discardInit(); await expectLater(plugin.requestScopes(['newScope']), throwsA(isA())); }); diff --git a/packages/image_picker/image_picker_for_web/CHANGELOG.md b/packages/image_picker/image_picker_for_web/CHANGELOG.md index 23bfe17ce9e1..8a5c089ef807 100644 --- a/packages/image_picker/image_picker_for_web/CHANGELOG.md +++ b/packages/image_picker/image_picker_for_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.1.10 + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.1.9 * Updates imports for `prefer_relative_imports`. diff --git a/packages/image_picker/image_picker_for_web/lib/image_picker_for_web.dart b/packages/image_picker/image_picker_for_web/lib/image_picker_for_web.dart index 5e0f18aaebcc..bb261f76f320 100644 --- a/packages/image_picker/image_picker_for_web/lib/image_picker_for_web.dart +++ b/packages/image_picker/image_picker_for_web/lib/image_picker_for_web.dart @@ -244,35 +244,35 @@ class ImagePickerPlugin extends ImagePickerPlatform { /// Monitors an and returns the selected file. Future _getSelectedFile(html.FileUploadInputElement input) { - final Completer _completer = Completer(); + final Completer completer = Completer(); // Observe the input until we can return something input.onChange.first.then((html.Event event) { final List? files = _handleOnChangeEvent(event); - if (!_completer.isCompleted && files != null) { - _completer.complete(PickedFile( + if (!completer.isCompleted && files != null) { + completer.complete(PickedFile( html.Url.createObjectUrl(files.first), )); } }); input.onError.first.then((html.Event event) { - if (!_completer.isCompleted) { - _completer.completeError(event); + if (!completer.isCompleted) { + completer.completeError(event); } }); // Note that we don't bother detaching from these streams, since the // "input" gets re-created in the DOM every time the user needs to // pick a file. - return _completer.future; + return completer.future; } /// Monitors an and returns the selected file(s). Future> _getSelectedXFiles(html.FileUploadInputElement input) { - final Completer> _completer = Completer>(); + final Completer> completer = Completer>(); // Observe the input until we can return something input.onChange.first.then((html.Event event) { final List? files = _handleOnChangeEvent(event); - if (!_completer.isCompleted && files != null) { - _completer.complete(files.map((html.File file) { + if (!completer.isCompleted && files != null) { + completer.complete(files.map((html.File file) { return XFile( html.Url.createObjectUrl(file), name: file.name, @@ -286,14 +286,14 @@ class ImagePickerPlugin extends ImagePickerPlatform { } }); input.onError.first.then((html.Event event) { - if (!_completer.isCompleted) { - _completer.completeError(event); + if (!completer.isCompleted) { + completer.completeError(event); } }); // Note that we don't bother detaching from these streams, since the // "input" gets re-created in the DOM every time the user needs to // pick a file. - return _completer.future; + return completer.future; } /// Initializes a DOM container where we can host input elements. diff --git a/packages/image_picker/image_picker_for_web/pubspec.yaml b/packages/image_picker/image_picker_for_web/pubspec.yaml index 14d9197e821c..c2e0975dda57 100644 --- a/packages/image_picker/image_picker_for_web/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker_for_web description: Web platform implementation of image_picker repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker_for_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 2.1.9 +version: 2.1.10 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/path_provider/path_provider/CHANGELOG.md b/packages/path_provider/path_provider/CHANGELOG.md index e19415ff68ac..436523551924 100644 --- a/packages/path_provider/path_provider/CHANGELOG.md +++ b/packages/path_provider/path_provider/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. * Fixes avoid_redundant_argument_values lint warnings and minor typos. diff --git a/packages/path_provider/path_provider/example/integration_test/path_provider_test.dart b/packages/path_provider/path_provider/example/integration_test/path_provider_test.dart index 1fe31df1fe31..bf150f66f49b 100644 --- a/packages/path_provider/path_provider/example/integration_test/path_provider_test.dart +++ b/packages/path_provider/path_provider/example/integration_test/path_provider_test.dart @@ -58,7 +58,7 @@ void main() { } }); - final List _allDirs = [ + final List allDirs = [ null, StorageDirectory.music, StorageDirectory.podcasts, @@ -69,7 +69,7 @@ void main() { StorageDirectory.movies, ]; - for (final StorageDirectory? type in _allDirs) { + for (final StorageDirectory? type in allDirs) { testWidgets('getExternalStorageDirectories (type: $type)', (WidgetTester tester) async { if (Platform.isIOS) { diff --git a/packages/path_provider/path_provider_android/CHANGELOG.md b/packages/path_provider/path_provider_android/CHANGELOG.md index 93f074795649..c36a771d3340 100644 --- a/packages/path_provider/path_provider_android/CHANGELOG.md +++ b/packages/path_provider/path_provider_android/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 2.0.20 diff --git a/packages/path_provider/path_provider_android/example/integration_test/path_provider_test.dart b/packages/path_provider/path_provider_android/example/integration_test/path_provider_test.dart index 2be88130b4e7..ecd0b973343b 100644 --- a/packages/path_provider/path_provider_android/example/integration_test/path_provider_test.dart +++ b/packages/path_provider/path_provider_android/example/integration_test/path_provider_test.dart @@ -49,7 +49,7 @@ void main() { } }); - final List _allDirs = [ + final List allDirs = [ null, StorageDirectory.music, StorageDirectory.podcasts, @@ -60,7 +60,7 @@ void main() { StorageDirectory.movies, ]; - for (final StorageDirectory? type in _allDirs) { + for (final StorageDirectory? type in allDirs) { testWidgets('getExternalStorageDirectories (type: $type)', (WidgetTester tester) async { final PathProviderPlatform provider = PathProviderPlatform.instance; diff --git a/packages/shared_preferences/shared_preferences/CHANGELOG.md b/packages/shared_preferences/shared_preferences/CHANGELOG.md index d7c3aa49e22e..b719ff158ff4 100644 --- a/packages/shared_preferences/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 2.0.15 diff --git a/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart index 0a02c46404fc..30f7829f670a 100755 --- a/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart @@ -171,22 +171,22 @@ void main() { }); group('mocking', () { - const String _key = 'dummy'; - const String _prefixedKey = 'flutter.$_key'; + const String key = 'dummy'; + const String prefixedKey = 'flutter.$key'; test('test 1', () async { SharedPreferences.setMockInitialValues( - {_prefixedKey: 'my string'}); + {prefixedKey: 'my string'}); final SharedPreferences prefs = await SharedPreferences.getInstance(); - final String? value = prefs.getString(_key); + final String? value = prefs.getString(key); expect(value, 'my string'); }); test('test 2', () async { SharedPreferences.setMockInitialValues( - {_prefixedKey: 'my other string'}); + {prefixedKey: 'my other string'}); final SharedPreferences prefs = await SharedPreferences.getInstance(); - final String? value = prefs.getString(_key); + final String? value = prefs.getString(key); expect(value, 'my other string'); }); }); diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index 91a922d9de64..f21af6aff7aa 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.0.13 * Updates gradle to 7.2.2. diff --git a/packages/shared_preferences/shared_preferences_android/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_android/example/integration_test/shared_preferences_test.dart index 275067d98770..4d4a85a5fcbc 100644 --- a/packages/shared_preferences/shared_preferences_android/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_android/example/integration_test/shared_preferences_test.dart @@ -39,42 +39,42 @@ void main() { // Normally the app-facing package adds the prefix, but since this test // bypasses the app-facing package it needs to be manually added. - String _prefixedKey(String key) { + String prefixedKey(String key) { return 'flutter.$key'; } testWidgets('reading', (WidgetTester _) async { final Map values = await preferences.getAll(); - expect(values[_prefixedKey('String')], isNull); - expect(values[_prefixedKey('bool')], isNull); - expect(values[_prefixedKey('int')], isNull); - expect(values[_prefixedKey('double')], isNull); - expect(values[_prefixedKey('List')], isNull); + expect(values[prefixedKey('String')], isNull); + expect(values[prefixedKey('bool')], isNull); + expect(values[prefixedKey('int')], isNull); + expect(values[prefixedKey('double')], isNull); + expect(values[prefixedKey('List')], isNull); }); testWidgets('writing', (WidgetTester _) async { await Future.wait(>[ preferences.setValue( - 'String', _prefixedKey('String'), kTestValues2['flutter.String']!), + 'String', prefixedKey('String'), kTestValues2['flutter.String']!), preferences.setValue( - 'Bool', _prefixedKey('bool'), kTestValues2['flutter.bool']!), + 'Bool', prefixedKey('bool'), kTestValues2['flutter.bool']!), preferences.setValue( - 'Int', _prefixedKey('int'), kTestValues2['flutter.int']!), + 'Int', prefixedKey('int'), kTestValues2['flutter.int']!), preferences.setValue( - 'Double', _prefixedKey('double'), kTestValues2['flutter.double']!), + 'Double', prefixedKey('double'), kTestValues2['flutter.double']!), preferences.setValue( - 'StringList', _prefixedKey('List'), kTestValues2['flutter.List']!) + 'StringList', prefixedKey('List'), kTestValues2['flutter.List']!) ]); final Map values = await preferences.getAll(); - expect(values[_prefixedKey('String')], kTestValues2['flutter.String']); - expect(values[_prefixedKey('bool')], kTestValues2['flutter.bool']); - expect(values[_prefixedKey('int')], kTestValues2['flutter.int']); - expect(values[_prefixedKey('double')], kTestValues2['flutter.double']); - expect(values[_prefixedKey('List')], kTestValues2['flutter.List']); + expect(values[prefixedKey('String')], kTestValues2['flutter.String']); + expect(values[prefixedKey('bool')], kTestValues2['flutter.bool']); + expect(values[prefixedKey('int')], kTestValues2['flutter.int']); + expect(values[prefixedKey('double')], kTestValues2['flutter.double']); + expect(values[prefixedKey('List')], kTestValues2['flutter.List']); }); testWidgets('removing', (WidgetTester _) async { - final String key = _prefixedKey('testKey'); + final String key = prefixedKey('testKey'); await preferences.setValue('String', key, kTestValues['flutter.String']!); await preferences.setValue('Bool', key, kTestValues['flutter.bool']!); await preferences.setValue('Int', key, kTestValues['flutter.int']!); @@ -108,19 +108,19 @@ void main() { final List> writes = >[]; const int writeCount = 100; for (int i = 1; i <= writeCount; i++) { - writes.add(preferences.setValue('Int', _prefixedKey('int'), i)); + writes.add(preferences.setValue('Int', prefixedKey('int'), i)); } final List result = await Future.wait(writes, eagerError: true); // All writes should succeed. expect(result.where((bool element) => !element), isEmpty); // The last write should win. final Map values = await preferences.getAll(); - expect(values[_prefixedKey('int')], writeCount); + expect(values[prefixedKey('int')], writeCount); }); testWidgets('string clash with lists, big integers and doubles', (WidgetTester _) async { - final String key = _prefixedKey('akey'); + final String key = prefixedKey('akey'); const String value = 'a string value'; await preferences.clear(); diff --git a/packages/shared_preferences/shared_preferences_ios/CHANGELOG.md b/packages/shared_preferences/shared_preferences_ios/CHANGELOG.md index 99dde9c462b7..d2101e0784cf 100644 --- a/packages/shared_preferences/shared_preferences_ios/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_ios/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 2.1.1 diff --git a/packages/shared_preferences/shared_preferences_ios/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_ios/example/integration_test/shared_preferences_test.dart index 3a6bab55eced..b4b21871701c 100644 --- a/packages/shared_preferences/shared_preferences_ios/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_ios/example/integration_test/shared_preferences_test.dart @@ -38,42 +38,42 @@ void main() { // Normally the app-facing package adds the prefix, but since this test // bypasses the app-facing package it needs to be manually added. - String _prefixedKey(String key) { + String prefixedKey(String key) { return 'flutter.$key'; } testWidgets('reading', (WidgetTester _) async { final Map values = await preferences.getAll(); - expect(values[_prefixedKey('String')], isNull); - expect(values[_prefixedKey('bool')], isNull); - expect(values[_prefixedKey('int')], isNull); - expect(values[_prefixedKey('double')], isNull); - expect(values[_prefixedKey('List')], isNull); + expect(values[prefixedKey('String')], isNull); + expect(values[prefixedKey('bool')], isNull); + expect(values[prefixedKey('int')], isNull); + expect(values[prefixedKey('double')], isNull); + expect(values[prefixedKey('List')], isNull); }); testWidgets('writing', (WidgetTester _) async { await Future.wait(>[ preferences.setValue( - 'String', _prefixedKey('String'), kTestValues2['flutter.String']!), + 'String', prefixedKey('String'), kTestValues2['flutter.String']!), preferences.setValue( - 'Bool', _prefixedKey('bool'), kTestValues2['flutter.bool']!), + 'Bool', prefixedKey('bool'), kTestValues2['flutter.bool']!), preferences.setValue( - 'Int', _prefixedKey('int'), kTestValues2['flutter.int']!), + 'Int', prefixedKey('int'), kTestValues2['flutter.int']!), preferences.setValue( - 'Double', _prefixedKey('double'), kTestValues2['flutter.double']!), + 'Double', prefixedKey('double'), kTestValues2['flutter.double']!), preferences.setValue( - 'StringList', _prefixedKey('List'), kTestValues2['flutter.List']!) + 'StringList', prefixedKey('List'), kTestValues2['flutter.List']!) ]); final Map values = await preferences.getAll(); - expect(values[_prefixedKey('String')], kTestValues2['flutter.String']); - expect(values[_prefixedKey('bool')], kTestValues2['flutter.bool']); - expect(values[_prefixedKey('int')], kTestValues2['flutter.int']); - expect(values[_prefixedKey('double')], kTestValues2['flutter.double']); - expect(values[_prefixedKey('List')], kTestValues2['flutter.List']); + expect(values[prefixedKey('String')], kTestValues2['flutter.String']); + expect(values[prefixedKey('bool')], kTestValues2['flutter.bool']); + expect(values[prefixedKey('int')], kTestValues2['flutter.int']); + expect(values[prefixedKey('double')], kTestValues2['flutter.double']); + expect(values[prefixedKey('List')], kTestValues2['flutter.List']); }); testWidgets('removing', (WidgetTester _) async { - final String key = _prefixedKey('testKey'); + final String key = prefixedKey('testKey'); await preferences.setValue('String', key, kTestValues['flutter.String']!); await preferences.setValue('Bool', key, kTestValues['flutter.bool']!); await preferences.setValue('Int', key, kTestValues['flutter.int']!); diff --git a/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md b/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md index 60f93f31be3c..5d59660b4d6b 100644 --- a/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 2.1.1 diff --git a/packages/shared_preferences/shared_preferences_linux/test/shared_preferences_linux_test.dart b/packages/shared_preferences/shared_preferences_linux/test/shared_preferences_linux_test.dart index 57acd17f5094..176d1d9f9ead 100644 --- a/packages/shared_preferences/shared_preferences_linux/test/shared_preferences_linux_test.dart +++ b/packages/shared_preferences/shared_preferences_linux/test/shared_preferences_linux_test.dart @@ -20,22 +20,22 @@ void main() { pathProvider = FakePathProviderLinux(); }); - Future _getFilePath() async { + Future getFilePath() async { final String? directory = await pathProvider.getApplicationSupportPath(); return path.join(directory!, 'shared_preferences.json'); } - Future _writeTestFile(String value) async { - fs.file(await _getFilePath()) + Future writeTestFile(String value) async { + fs.file(await getFilePath()) ..createSync(recursive: true) ..writeAsStringSync(value); } - Future _readTestFile() async { - return fs.file(await _getFilePath()).readAsStringSync(); + Future readTestFile() async { + return fs.file(await getFilePath()).readAsStringSync(); } - SharedPreferencesLinux _getPreferences() { + SharedPreferencesLinux getPreferences() { final SharedPreferencesLinux prefs = SharedPreferencesLinux(); prefs.fs = fs; prefs.pathProvider = pathProvider; @@ -49,8 +49,8 @@ void main() { }); test('getAll', () async { - await _writeTestFile('{"key1": "one", "key2": 2}'); - final SharedPreferencesLinux prefs = _getPreferences(); + await writeTestFile('{"key1": "one", "key2": 2}'); + final SharedPreferencesLinux prefs = getPreferences(); final Map values = await prefs.getAll(); expect(values, hasLength(2)); @@ -59,30 +59,30 @@ void main() { }); test('remove', () async { - await _writeTestFile('{"key1":"one","key2":2}'); - final SharedPreferencesLinux prefs = _getPreferences(); + await writeTestFile('{"key1":"one","key2":2}'); + final SharedPreferencesLinux prefs = getPreferences(); await prefs.remove('key2'); - expect(await _readTestFile(), '{"key1":"one"}'); + expect(await readTestFile(), '{"key1":"one"}'); }); test('setValue', () async { - await _writeTestFile('{}'); - final SharedPreferencesLinux prefs = _getPreferences(); + await writeTestFile('{}'); + final SharedPreferencesLinux prefs = getPreferences(); await prefs.setValue('', 'key1', 'one'); await prefs.setValue('', 'key2', 2); - expect(await _readTestFile(), '{"key1":"one","key2":2}'); + expect(await readTestFile(), '{"key1":"one","key2":2}'); }); test('clear', () async { - await _writeTestFile('{"key1":"one","key2":2}'); - final SharedPreferencesLinux prefs = _getPreferences(); + await writeTestFile('{"key1":"one","key2":2}'); + final SharedPreferencesLinux prefs = getPreferences(); await prefs.clear(); - expect(await _readTestFile(), '{}'); + expect(await readTestFile(), '{}'); }); } diff --git a/packages/shared_preferences/shared_preferences_macos/CHANGELOG.md b/packages/shared_preferences/shared_preferences_macos/CHANGELOG.md index bc4e1504be1c..fc8a78af95b9 100644 --- a/packages/shared_preferences/shared_preferences_macos/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_macos/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 2.0.4 diff --git a/packages/shared_preferences/shared_preferences_macos/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_macos/example/integration_test/shared_preferences_test.dart index 874ceb4c51a7..a980eab26679 100644 --- a/packages/shared_preferences/shared_preferences_macos/example/integration_test/shared_preferences_test.dart +++ b/packages/shared_preferences/shared_preferences_macos/example/integration_test/shared_preferences_test.dart @@ -38,42 +38,42 @@ void main() { // Normally the app-facing package adds the prefix, but since this test // bypasses the app-facing package it needs to be manually added. - String _prefixedKey(String key) { + String prefixedKey(String key) { return 'flutter.$key'; } testWidgets('reading', (WidgetTester _) async { final Map values = await preferences.getAll(); - expect(values[_prefixedKey('String')], isNull); - expect(values[_prefixedKey('bool')], isNull); - expect(values[_prefixedKey('int')], isNull); - expect(values[_prefixedKey('double')], isNull); - expect(values[_prefixedKey('List')], isNull); + expect(values[prefixedKey('String')], isNull); + expect(values[prefixedKey('bool')], isNull); + expect(values[prefixedKey('int')], isNull); + expect(values[prefixedKey('double')], isNull); + expect(values[prefixedKey('List')], isNull); }); testWidgets('writing', (WidgetTester _) async { await Future.wait(>[ preferences.setValue( - 'String', _prefixedKey('String'), kTestValues2['flutter.String']!), + 'String', prefixedKey('String'), kTestValues2['flutter.String']!), preferences.setValue( - 'Bool', _prefixedKey('bool'), kTestValues2['flutter.bool']!), + 'Bool', prefixedKey('bool'), kTestValues2['flutter.bool']!), preferences.setValue( - 'Int', _prefixedKey('int'), kTestValues2['flutter.int']!), + 'Int', prefixedKey('int'), kTestValues2['flutter.int']!), preferences.setValue( - 'Double', _prefixedKey('double'), kTestValues2['flutter.double']!), + 'Double', prefixedKey('double'), kTestValues2['flutter.double']!), preferences.setValue( - 'StringList', _prefixedKey('List'), kTestValues2['flutter.List']!) + 'StringList', prefixedKey('List'), kTestValues2['flutter.List']!) ]); final Map values = await preferences.getAll(); - expect(values[_prefixedKey('String')], kTestValues2['flutter.String']); - expect(values[_prefixedKey('bool')], kTestValues2['flutter.bool']); - expect(values[_prefixedKey('int')], kTestValues2['flutter.int']); - expect(values[_prefixedKey('double')], kTestValues2['flutter.double']); - expect(values[_prefixedKey('List')], kTestValues2['flutter.List']); + expect(values[prefixedKey('String')], kTestValues2['flutter.String']); + expect(values[prefixedKey('bool')], kTestValues2['flutter.bool']); + expect(values[prefixedKey('int')], kTestValues2['flutter.int']); + expect(values[prefixedKey('double')], kTestValues2['flutter.double']); + expect(values[prefixedKey('List')], kTestValues2['flutter.List']); }); testWidgets('removing', (WidgetTester _) async { - final String key = _prefixedKey('testKey'); + final String key = prefixedKey('testKey'); await preferences.setValue('String', key, kTestValues['flutter.String']!); await preferences.setValue('Bool', key, kTestValues['flutter.bool']!); await preferences.setValue('Int', key, kTestValues['flutter.int']!); diff --git a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md index b8351c8795d1..935a5ee54c2b 100644 --- a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. ## 2.1.1 diff --git a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart index 0c47e9865765..04fa335b703e 100644 --- a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart @@ -19,22 +19,22 @@ void main() { pathProvider = FakePathProviderWindows(); }); - Future _getFilePath() async { + Future getFilePath() async { final String? directory = await pathProvider.getApplicationSupportPath(); return path.join(directory!, 'shared_preferences.json'); } - Future _writeTestFile(String value) async { - fileSystem.file(await _getFilePath()) + Future writeTestFile(String value) async { + fileSystem.file(await getFilePath()) ..createSync(recursive: true) ..writeAsStringSync(value); } - Future _readTestFile() async { - return fileSystem.file(await _getFilePath()).readAsStringSync(); + Future readTestFile() async { + return fileSystem.file(await getFilePath()).readAsStringSync(); } - SharedPreferencesWindows _getPreferences() { + SharedPreferencesWindows getPreferences() { final SharedPreferencesWindows prefs = SharedPreferencesWindows(); prefs.fs = fileSystem; prefs.pathProvider = pathProvider; @@ -48,8 +48,8 @@ void main() { }); test('getAll', () async { - await _writeTestFile('{"key1": "one", "key2": 2}'); - final SharedPreferencesWindows prefs = _getPreferences(); + await writeTestFile('{"key1": "one", "key2": 2}'); + final SharedPreferencesWindows prefs = getPreferences(); final Map values = await prefs.getAll(); expect(values, hasLength(2)); @@ -58,30 +58,30 @@ void main() { }); test('remove', () async { - await _writeTestFile('{"key1":"one","key2":2}'); - final SharedPreferencesWindows prefs = _getPreferences(); + await writeTestFile('{"key1":"one","key2":2}'); + final SharedPreferencesWindows prefs = getPreferences(); await prefs.remove('key2'); - expect(await _readTestFile(), '{"key1":"one"}'); + expect(await readTestFile(), '{"key1":"one"}'); }); test('setValue', () async { - await _writeTestFile('{}'); - final SharedPreferencesWindows prefs = _getPreferences(); + await writeTestFile('{}'); + final SharedPreferencesWindows prefs = getPreferences(); await prefs.setValue('', 'key1', 'one'); await prefs.setValue('', 'key2', 2); - expect(await _readTestFile(), '{"key1":"one","key2":2}'); + expect(await readTestFile(), '{"key1":"one","key2":2}'); }); test('clear', () async { - await _writeTestFile('{"key1":"one","key2":2}'); - final SharedPreferencesWindows prefs = _getPreferences(); + await writeTestFile('{"key1":"one","key2":2}'); + final SharedPreferencesWindows prefs = getPreferences(); await prefs.clear(); - expect(await _readTestFile(), '{}'); + expect(await readTestFile(), '{}'); }); } diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 53cfabf31e78..0885f28f9db8 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.4.7 * Updates README via code excerpts. diff --git a/packages/video_player/video_player/example/integration_test/video_player_test.dart b/packages/video_player/video_player/example/integration_test/video_player_test.dart index 023c4b3fcb43..dd77a2f0252a 100644 --- a/packages/video_player/video_player/example/integration_test/video_player_test.dart +++ b/packages/video_player/video_player/example/integration_test/video_player_test.dart @@ -37,22 +37,22 @@ String getUrlForAssetAsNetworkSource(String assetKey) { void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - late VideoPlayerController _controller; - tearDown(() async => _controller.dispose()); + late VideoPlayerController controller; + tearDown(() async => controller.dispose()); group('asset videos', () { setUp(() { - _controller = VideoPlayerController.asset(_videoAssetKey); + controller = VideoPlayerController.asset(_videoAssetKey); }); testWidgets('can be initialized', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - expect(_controller.value.isInitialized, true); - expect(_controller.value.position, Duration.zero); - expect(_controller.value.isPlaying, false); + expect(controller.value.isInitialized, true); + expect(controller.value.position, Duration.zero); + expect(controller.value.isPlaying, false); // The WebM version has a slightly different duration than the MP4. - expect(_controller.value.duration, + expect(controller.value.duration, const Duration(seconds: 7, milliseconds: kIsWeb ? 544 : 540)); }); @@ -77,16 +77,16 @@ void main() { testWidgets( 'can be played', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Mute to allow playing without DOM interaction on Web. // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes - await _controller.setVolume(0); + await controller.setVolume(0); - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(_controller.value.isPlaying, true); - expect(_controller.value.position, + expect(controller.value.isPlaying, true); + expect(controller.value.position, (Duration position) => position > Duration.zero); }, ); @@ -94,85 +94,85 @@ void main() { testWidgets( 'can seek', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - await _controller.seekTo(const Duration(seconds: 3)); + await controller.seekTo(const Duration(seconds: 3)); - expect(_controller.value.position, const Duration(seconds: 3)); + expect(controller.value.position, const Duration(seconds: 3)); }, ); testWidgets( 'can be paused', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Mute to allow playing without DOM interaction on Web. // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes - await _controller.setVolume(0); + await controller.setVolume(0); // Play for a second, then pause, and then wait a second. - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - await _controller.pause(); - final Duration pausedPosition = _controller.value.position; + await controller.pause(); + final Duration pausedPosition = controller.value.position; await tester.pumpAndSettle(_playDuration); // Verify that we stopped playing after the pause. - expect(_controller.value.isPlaying, false); - expect(_controller.value.position, pausedPosition); + expect(controller.value.isPlaying, false); + expect(controller.value.position, pausedPosition); }, ); testWidgets( 'stay paused when seeking after video completed', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Mute to allow playing without DOM interaction on Web. // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes - await _controller.setVolume(0); + await controller.setVolume(0); final Duration tenMillisBeforeEnd = - _controller.value.duration - const Duration(milliseconds: 10); - await _controller.seekTo(tenMillisBeforeEnd); - await _controller.play(); + controller.value.duration - const Duration(milliseconds: 10); + await controller.seekTo(tenMillisBeforeEnd); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(_controller.value.isPlaying, false); - expect(_controller.value.position, _controller.value.duration); + expect(controller.value.isPlaying, false); + expect(controller.value.position, controller.value.duration); - await _controller.seekTo(tenMillisBeforeEnd); + await controller.seekTo(tenMillisBeforeEnd); await tester.pumpAndSettle(_playDuration); - expect(_controller.value.isPlaying, false); - expect(_controller.value.position, tenMillisBeforeEnd); + expect(controller.value.isPlaying, false); + expect(controller.value.position, tenMillisBeforeEnd); }, ); testWidgets( 'do not exceed duration on play after video completed', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Mute to allow playing without DOM interaction on Web. // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes - await _controller.setVolume(0); - await _controller.seekTo( - _controller.value.duration - const Duration(milliseconds: 10)); - await _controller.play(); + await controller.setVolume(0); + await controller.seekTo( + controller.value.duration - const Duration(milliseconds: 10)); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(_controller.value.isPlaying, false); - expect(_controller.value.position, _controller.value.duration); + expect(controller.value.isPlaying, false); + expect(controller.value.position, controller.value.duration); - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(_controller.value.position, - lessThanOrEqualTo(_controller.value.duration)); + expect(controller.value.position, + lessThanOrEqualTo(controller.value.duration)); }, ); testWidgets('test video player view with local asset', (WidgetTester tester) async { Future started() async { - await _controller.initialize(); - await _controller.play(); + await controller.initialize(); + await controller.play(); return true; } @@ -185,8 +185,8 @@ void main() { builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.data ?? false) { return AspectRatio( - aspectRatio: _controller.value.aspectRatio, - child: VideoPlayer(_controller), + aspectRatio: controller.value.aspectRatio, + child: VideoPlayer(controller), ); } else { return const Text('waiting for video to load'); @@ -198,7 +198,7 @@ void main() { )); await tester.pumpAndSettle(); - expect(_controller.value.isPlaying, true); + expect(controller.value.isPlaying, true); }, skip: kIsWeb || // Web does not support local assets. // Extremely flaky on iOS: https://github.com/flutter/flutter/issues/86915 @@ -216,54 +216,54 @@ void main() { final File file = File('$tempDir/$filename'); await file.writeAsBytes(bytes.buffer.asInt8List()); - _controller = VideoPlayerController.file(file); + controller = VideoPlayerController.file(file); }); testWidgets('test video player using static file() method as constructor', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - await _controller.play(); - expect(_controller.value.isPlaying, true); + await controller.play(); + expect(controller.value.isPlaying, true); - await _controller.pause(); - expect(_controller.value.isPlaying, false); + await controller.pause(); + expect(controller.value.isPlaying, false); }, skip: kIsWeb); }); group('network videos', () { setUp(() { - _controller = VideoPlayerController.network( + controller = VideoPlayerController.network( getUrlForAssetAsNetworkSource(_videoAssetKey)); }); testWidgets( 'reports buffering status', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Mute to allow playing without DOM interaction on Web. // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes - await _controller.setVolume(0); + await controller.setVolume(0); final Completer started = Completer(); final Completer ended = Completer(); - _controller.addListener(() { - if (!started.isCompleted && _controller.value.isBuffering) { + controller.addListener(() { + if (!started.isCompleted && controller.value.isBuffering) { started.complete(); } if (started.isCompleted && - !_controller.value.isBuffering && + !controller.value.isBuffering && !ended.isCompleted) { ended.complete(); } }); - await _controller.play(); - await _controller.seekTo(const Duration(seconds: 5)); + await controller.play(); + await controller.seekTo(const Duration(seconds: 5)); await tester.pumpAndSettle(_playDuration); - await _controller.pause(); + await controller.pause(); - expect(_controller.value.isPlaying, false); - expect(_controller.value.position, + expect(controller.value.isPlaying, false); + expect(controller.value.position, (Duration position) => position > Duration.zero); await expectLater(started.future, completes); @@ -277,63 +277,63 @@ void main() { // but could be removed in the future. group('asset audios', () { setUp(() { - _controller = VideoPlayerController.asset('assets/Audio.mp3'); + controller = VideoPlayerController.asset('assets/Audio.mp3'); }); testWidgets('can be initialized', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - expect(_controller.value.isInitialized, true); - expect(_controller.value.position, Duration.zero); - expect(_controller.value.isPlaying, false); + expect(controller.value.isInitialized, true); + expect(controller.value.position, Duration.zero); + expect(controller.value.isPlaying, false); // Due to the duration calculation accuracy between platforms, // the milliseconds on Web will be a slightly different from natives. // The audio was made with 44100 Hz, 192 Kbps CBR, and 32 bits. expect( - _controller.value.duration, + controller.value.duration, const Duration(seconds: 5, milliseconds: kIsWeb ? 42 : 41), ); }); testWidgets('can be played', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Mute to allow playing without DOM interaction on Web. // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes - await _controller.setVolume(0); + await controller.setVolume(0); - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(_controller.value.isPlaying, true); + expect(controller.value.isPlaying, true); expect( - _controller.value.position, + controller.value.position, (Duration position) => position > Duration.zero, ); }); testWidgets('can seek', (WidgetTester tester) async { - await _controller.initialize(); - await _controller.seekTo(const Duration(seconds: 3)); + await controller.initialize(); + await controller.seekTo(const Duration(seconds: 3)); - expect(_controller.value.position, const Duration(seconds: 3)); + expect(controller.value.position, const Duration(seconds: 3)); }); testWidgets('can be paused', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Mute to allow playing without DOM interaction on Web. // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes - await _controller.setVolume(0); + await controller.setVolume(0); // Play for a second, then pause, and then wait a second. - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - await _controller.pause(); - final Duration pausedPosition = _controller.value.position; + await controller.pause(); + final Duration pausedPosition = controller.value.position; await tester.pumpAndSettle(_playDuration); // Verify that we stopped playing after the pause. - expect(_controller.value.isPlaying, false); - expect(_controller.value.position, pausedPosition); + expect(controller.value.isPlaying, false); + expect(controller.value.position, pausedPosition); }); }); } 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 e7b3e1de7e63..8e5e98b68f18 100644 --- a/packages/video_player/video_player/test/video_player_test.dart +++ b/packages/video_player/video_player/test/video_player_test.dart @@ -105,7 +105,7 @@ class _FakeClosedCaptionFile extends ClosedCaptionFile { } void main() { - void _verifyPlayStateRespondsToLifecycle( + void verifyPlayStateRespondsToLifecycle( VideoPlayerController controller, { required bool shouldPlayInBackground, }) { @@ -248,7 +248,7 @@ void main() { ); await controller.initialize(); await controller.play(); - _verifyPlayStateRespondsToLifecycle(controller, + verifyPlayStateRespondsToLifecycle(controller, shouldPlayInBackground: false); }); @@ -1025,7 +1025,7 @@ void main() { ); await controller.initialize(); await controller.play(); - _verifyPlayStateRespondsToLifecycle( + verifyPlayStateRespondsToLifecycle( controller, shouldPlayInBackground: true, ); @@ -1038,7 +1038,7 @@ void main() { ); await controller.initialize(); await controller.play(); - _verifyPlayStateRespondsToLifecycle( + verifyPlayStateRespondsToLifecycle( controller, shouldPlayInBackground: false, ); diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md index 7986d1a28625..7298bacf4f78 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 `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/integration_test/video_player_test.dart b/packages/video_player/video_player_android/example/integration_test/video_player_test.dart index ef7bdeda3503..751412c80f43 100644 --- a/packages/video_player/video_player_android/example/integration_test/video_player_test.dart +++ b/packages/video_player/video_player_android/example/integration_test/video_player_test.dart @@ -39,12 +39,12 @@ String getUrlForAssetAsNetworkSource(String assetKey) { void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - late MiniController _controller; - tearDown(() async => _controller.dispose()); + late MiniController controller; + tearDown(() async => controller.dispose()); group('asset videos', () { setUp(() { - _controller = MiniController.asset(_videoAssetKey); + controller = MiniController.asset(_videoAssetKey); }); testWidgets('registers expected implementation', @@ -54,44 +54,44 @@ void main() { }); testWidgets('can be initialized', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - expect(_controller.value.isInitialized, true); - expect(await _controller.position, Duration.zero); - expect(_controller.value.duration, + expect(controller.value.isInitialized, true); + expect(await controller.position, Duration.zero); + expect(controller.value.duration, const Duration(seconds: 7, milliseconds: 540)); }); testWidgets('can be played', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(await _controller.position, greaterThan(Duration.zero)); + expect(await controller.position, greaterThan(Duration.zero)); }); testWidgets('can seek', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - await _controller.seekTo(const Duration(seconds: 3)); + await controller.seekTo(const Duration(seconds: 3)); - expect(await _controller.position, const Duration(seconds: 3)); + expect(await controller.position, const Duration(seconds: 3)); }); testWidgets('can be paused', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Play for a second, then pause, and then wait a second. - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - await _controller.pause(); + await controller.pause(); await tester.pumpAndSettle(_playDuration); - final Duration pausedPosition = (await _controller.position)!; + final Duration pausedPosition = (await controller.position)!; await tester.pumpAndSettle(_playDuration); // Verify that we stopped playing after the pause. - expect(await _controller.position, pausedPosition); + expect(await controller.position, pausedPosition); }); }); @@ -106,48 +106,48 @@ void main() { final File file = File('$tempDir/$filename'); await file.writeAsBytes(bytes.buffer.asInt8List()); - _controller = MiniController.file(file); + controller = MiniController.file(file); }); testWidgets('test video player using static file() method as constructor', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(await _controller.position, greaterThan(Duration.zero)); + expect(await controller.position, greaterThan(Duration.zero)); }); }); group('network videos', () { setUp(() { final String videoUrl = getUrlForAssetAsNetworkSource(_videoAssetKey); - _controller = MiniController.network(videoUrl); + controller = MiniController.network(videoUrl); }); testWidgets('reports buffering status', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); final Completer started = Completer(); final Completer ended = Completer(); - _controller.addListener(() { - if (!started.isCompleted && _controller.value.isBuffering) { + controller.addListener(() { + if (!started.isCompleted && controller.value.isBuffering) { started.complete(); } if (started.isCompleted && - !_controller.value.isBuffering && + !controller.value.isBuffering && !ended.isCompleted) { ended.complete(); } }); - await _controller.play(); - await _controller.seekTo(const Duration(seconds: 5)); + await controller.play(); + await controller.seekTo(const Duration(seconds: 5)); await tester.pumpAndSettle(_playDuration); - await _controller.pause(); + await controller.pause(); - expect(await _controller.position, greaterThan(Duration.zero)); + expect(await controller.position, greaterThan(Duration.zero)); await expectLater(started.future, completes); await expectLater(ended.future, completes); diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index cc4411c8c651..7cfa025271cf 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.3.6 * Fixes a bug in iOS 16 where videos from protected live streams are not shown. diff --git a/packages/video_player/video_player_avfoundation/example/integration_test/video_player_test.dart b/packages/video_player/video_player_avfoundation/example/integration_test/video_player_test.dart index 15108aa0713a..5027973a660d 100644 --- a/packages/video_player/video_player_avfoundation/example/integration_test/video_player_test.dart +++ b/packages/video_player/video_player_avfoundation/example/integration_test/video_player_test.dart @@ -39,12 +39,12 @@ String getUrlForAssetAsNetworkSource(String assetKey) { void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - late MiniController _controller; - tearDown(() async => _controller.dispose()); + late MiniController controller; + tearDown(() async => controller.dispose()); group('asset videos', () { setUp(() { - _controller = MiniController.asset(_videoAssetKey); + controller = MiniController.asset(_videoAssetKey); }); testWidgets('registers expected implementation', @@ -54,50 +54,50 @@ void main() { }); testWidgets('can be initialized', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - expect(_controller.value.isInitialized, true); - expect(await _controller.position, Duration.zero); - expect(_controller.value.duration, + expect(controller.value.isInitialized, true); + expect(await controller.position, Duration.zero); + expect(controller.value.duration, const Duration(seconds: 7, milliseconds: 540)); }); testWidgets('can be played', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(await _controller.position, greaterThan(Duration.zero)); + expect(await controller.position, greaterThan(Duration.zero)); }); testWidgets('can seek', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - await _controller.seekTo(const Duration(seconds: 3)); + await controller.seekTo(const Duration(seconds: 3)); // TODO(stuartmorgan): Switch to _controller.position once seekTo is // fixed on the native side to wait for completion, so this is testing // the native code rather than the MiniController position cache. - expect(_controller.value.position, const Duration(seconds: 3)); + expect(controller.value.position, const Duration(seconds: 3)); }); testWidgets('can be paused', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); // Play for a second, then pause, and then wait a second. - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - await _controller.pause(); - final Duration pausedPosition = (await _controller.position)!; + await controller.pause(); + final Duration pausedPosition = (await controller.position)!; await tester.pumpAndSettle(_playDuration); // Verify that we stopped playing after the pause. // TODO(stuartmorgan): Investigate why this has a slight discrepency, and // fix it if possible. Is AVPlayer's pause method internally async? const Duration allowableDelta = Duration(milliseconds: 10); - expect(await _controller.position, - lessThan(pausedPosition + allowableDelta)); + expect( + await controller.position, lessThan(pausedPosition + allowableDelta)); }); }); @@ -112,51 +112,51 @@ void main() { final File file = File('$tempDir/$filename'); await file.writeAsBytes(bytes.buffer.asInt8List()); - _controller = MiniController.file(file); + controller = MiniController.file(file); }); testWidgets('test video player using static file() method as constructor', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); - await _controller.play(); + await controller.play(); await tester.pumpAndSettle(_playDuration); - expect(await _controller.position, greaterThan(Duration.zero)); + expect(await controller.position, greaterThan(Duration.zero)); }); }); group('network videos', () { setUp(() { final String videoUrl = getUrlForAssetAsNetworkSource(_videoAssetKey); - _controller = MiniController.network(videoUrl); + controller = MiniController.network(videoUrl); }); testWidgets('reports buffering status', (WidgetTester tester) async { - await _controller.initialize(); + await controller.initialize(); final Completer started = Completer(); final Completer ended = Completer(); - _controller.addListener(() { - if (!started.isCompleted && _controller.value.isBuffering) { + controller.addListener(() { + if (!started.isCompleted && controller.value.isBuffering) { started.complete(); } if (started.isCompleted && - !_controller.value.isBuffering && + !controller.value.isBuffering && !ended.isCompleted) { ended.complete(); } }); - await _controller.play(); - await _controller.seekTo(const Duration(seconds: 5)); + await controller.play(); + await controller.seekTo(const Duration(seconds: 5)); await tester.pumpAndSettle(_playDuration); - await _controller.pause(); + await controller.pause(); // TODO(stuartmorgan): Switch to _controller.position once seekTo is // fixed on the native side to wait for completion, so this is testing // the native code rather than the MiniController position cache. - expect(_controller.value.position, greaterThan(Duration.zero)); + expect(controller.value.position, greaterThan(Duration.zero)); await expectLater(started.future, completes); await expectLater(ended.future, completes); diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index 73dd7ced0279..d5559f9ca7f7 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. * Fixes avoid_redundant_argument_values lint warnings and minor typos. * Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/104231). 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 8e326fef182f..63f43848508b 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 @@ -235,12 +235,12 @@ Future main() async { testWidgets('set custom userAgent', (WidgetTester tester) async { final Completer controllerCompleter1 = Completer(); - final GlobalKey _globalKey = GlobalKey(); + final GlobalKey globalKey = GlobalKey(); await tester.pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent1', @@ -258,7 +258,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent2', @@ -274,13 +274,13 @@ Future main() async { (WidgetTester tester) async { final Completer controllerCompleter = Completer(); - final GlobalKey _globalKey = GlobalKey(); + final GlobalKey globalKey = GlobalKey(); // Build the webView with no user agent to get the default platform user agent. await tester.pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: primaryUrl, javascriptMode: JavascriptMode.unrestricted, onWebViewCreated: (WebViewController controller) { @@ -296,7 +296,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent', @@ -310,7 +310,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, ), diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 4853aec23f9a..dfad03ebaa15 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.10.3 * Updates imports for `prefer_relative_imports`. diff --git a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart index b7c32f5d77d3..69c1a46d750f 100644 --- a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart @@ -241,12 +241,12 @@ Future main() async { testWidgets('set custom userAgent', (WidgetTester tester) async { final Completer controllerCompleter1 = Completer(); - final GlobalKey _globalKey = GlobalKey(); + final GlobalKey globalKey = GlobalKey(); await tester.pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent1', @@ -264,7 +264,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent2', @@ -280,13 +280,13 @@ Future main() async { (WidgetTester tester) async { final Completer controllerCompleter = Completer(); - final GlobalKey _globalKey = GlobalKey(); + final GlobalKey globalKey = GlobalKey(); // Build the webView with no user agent to get the default platform user agent. await tester.pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: primaryUrl, javascriptMode: JavascriptMode.unrestricted, onWebViewCreated: (WebViewController controller) { @@ -302,7 +302,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent', @@ -316,7 +316,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, ), diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md index e8eb01e6590e..b7050e4f4db3 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.9.5 + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 1.9.4 * Updates imports for `prefer_relative_imports`. diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart index f32881701cfb..0e98ea08fd16 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/method_channel/webview_method_channel.dart @@ -247,30 +247,29 @@ class MethodChannelWebViewPlatform implements WebViewPlatformController { static Map _webSettingsToMap(WebSettings? settings) { final Map map = {}; - void _addIfNonNull(String key, dynamic value) { + void addIfNonNull(String key, dynamic value) { if (value == null) { return; } map[key] = value; } - void _addSettingIfPresent(String key, WebSetting setting) { + void addSettingIfPresent(String key, WebSetting setting) { if (!setting.isPresent) { return; } map[key] = setting.value; } - _addIfNonNull('jsMode', settings!.javascriptMode?.index); - _addIfNonNull('hasNavigationDelegate', settings.hasNavigationDelegate); - _addIfNonNull('hasProgressTracking', settings.hasProgressTracking); - _addIfNonNull('debuggingEnabled', settings.debuggingEnabled); - _addIfNonNull( - 'gestureNavigationEnabled', settings.gestureNavigationEnabled); - _addIfNonNull( + addIfNonNull('jsMode', settings!.javascriptMode?.index); + addIfNonNull('hasNavigationDelegate', settings.hasNavigationDelegate); + addIfNonNull('hasProgressTracking', settings.hasProgressTracking); + addIfNonNull('debuggingEnabled', settings.debuggingEnabled); + addIfNonNull('gestureNavigationEnabled', settings.gestureNavigationEnabled); + addIfNonNull( 'allowsInlineMediaPlayback', settings.allowsInlineMediaPlayback); - _addSettingIfPresent('userAgent', settings.userAgent); - _addIfNonNull('zoomEnabled', settings.zoomEnabled); + addSettingIfPresent('userAgent', settings.userAgent); + addIfNonNull('zoomEnabled', settings.zoomEnabled); return map; } diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml index 4b148725ff8f..8f60592b852d 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutte issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 1.9.4 +version: 1.9.5 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart index 30795b01c83f..aec568e92b79 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/src/platform_interface/javascript_channel_registry_test.dart @@ -7,35 +7,35 @@ import 'package:webview_flutter_platform_interface/src/platform_interface/javasc import 'package:webview_flutter_platform_interface/src/types/types.dart'; void main() { - final Map _log = {}; - final Set _channels = { + final Map log = {}; + final Set channels = { JavascriptChannel( name: 'js_channel_1', onMessageReceived: (JavascriptMessage message) => - _log['js_channel_1'] = message.message, + log['js_channel_1'] = message.message, ), JavascriptChannel( name: 'js_channel_2', onMessageReceived: (JavascriptMessage message) => - _log['js_channel_2'] = message.message, + log['js_channel_2'] = message.message, ), JavascriptChannel( name: 'js_channel_3', onMessageReceived: (JavascriptMessage message) => - _log['js_channel_3'] = message.message, + log['js_channel_3'] = message.message, ), }; tearDown(() { - _log.clear(); + log.clear(); }); test('ctor should initialize with channels.', () { final JavascriptChannelRegistry registry = - JavascriptChannelRegistry(_channels); + JavascriptChannelRegistry(channels); expect(registry.channels.length, 3); - for (final JavascriptChannel channel in _channels) { + for (final JavascriptChannel channel in channels) { expect(registry.channels[channel.name], channel); } }); @@ -43,7 +43,7 @@ void main() { test('onJavascriptChannelMessage should forward message on correct channel.', () { final JavascriptChannelRegistry registry = - JavascriptChannelRegistry(_channels); + JavascriptChannelRegistry(channels); registry.onJavascriptChannelMessage( 'js_channel_2', @@ -51,7 +51,7 @@ void main() { ); expect( - _log, + log, containsPair( 'js_channel_2', 'test message on channel 2', @@ -62,7 +62,7 @@ void main() { 'onJavascriptChannelMessage should throw ArgumentError when message arrives on non-existing channel.', () { final JavascriptChannelRegistry registry = - JavascriptChannelRegistry(_channels); + JavascriptChannelRegistry(channels); expect( () => registry.onJavascriptChannelMessage( @@ -79,7 +79,7 @@ void main() { 'updateJavascriptChannelsFromSet should clear all channels when null is supplied.', () { final JavascriptChannelRegistry registry = - JavascriptChannelRegistry(_channels); + JavascriptChannelRegistry(channels); expect(registry.channels.length, 3); @@ -91,7 +91,7 @@ void main() { test('updateJavascriptChannelsFromSet should update registry with new set.', () { final JavascriptChannelRegistry registry = - JavascriptChannelRegistry(_channels); + JavascriptChannelRegistry(channels); expect(registry.channels.length, 3); @@ -99,12 +99,12 @@ void main() { JavascriptChannel( name: 'new_js_channel_1', onMessageReceived: (JavascriptMessage message) => - _log['new_js_channel_1'] = message.message, + log['new_js_channel_1'] = message.message, ), JavascriptChannel( name: 'new_js_channel_2', onMessageReceived: (JavascriptMessage message) => - _log['new_js_channel_2'] = message.message, + log['new_js_channel_2'] = message.message, ), }; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart index f481edda1edd..8d7177150b7c 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/src/types/javascript_channel_test.dart @@ -6,17 +6,17 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:webview_flutter_platform_interface/src/types/javascript_channel.dart'; void main() { - final List _validChars = + final List validChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_'.split(''); - final List _commonInvalidChars = + final List commonInvalidChars = r'`~!@#$%^&*()-=+[]{}\|"' ':;/?<>,. '.split(''); - final List _digits = List.generate(10, (int index) => index++); + final List digits = List.generate(10, (int index) => index++); test( 'ctor should create JavascriptChannel when name starts with a valid character followed by a number.', () { - for (final String char in _validChars) { - for (final int digit in _digits) { + for (final String char in validChars) { + for (final int digit in digits) { final JavascriptChannel channel = JavascriptChannel(name: '$char$digit', onMessageReceived: (_) {}); @@ -26,7 +26,7 @@ void main() { }); test('ctor should assert when channel name starts with a number.', () { - for (final int i in _digits) { + for (final int i in digits) { expect( () => JavascriptChannel(name: '$i', onMessageReceived: (_) {}), throwsAssertionError, @@ -35,8 +35,8 @@ void main() { }); test('ctor should assert when channel contains invalid char.', () { - for (final String validChar in _validChars) { - for (final String invalidChar in _commonInvalidChars) { + for (final String validChar in validChars) { + for (final String invalidChar in commonInvalidChars) { expect( () => JavascriptChannel( name: validChar + invalidChar, onMessageReceived: (_) {}), diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 318ffe65593a..c0a2ade72534 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates code for `no_leading_underscores_for_local_identifiers` lint. + ## 2.9.5 * Updates imports for `prefer_relative_imports`. 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 e259bc72a67b..047d69f0d0ee 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 @@ -253,12 +253,12 @@ Future main() async { testWidgets('set custom userAgent', (WidgetTester tester) async { final Completer controllerCompleter1 = Completer(); - final GlobalKey _globalKey = GlobalKey(); + final GlobalKey globalKey = GlobalKey(); await tester.pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent1', @@ -276,7 +276,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent2', @@ -292,13 +292,13 @@ Future main() async { (WidgetTester tester) async { final Completer controllerCompleter = Completer(); - final GlobalKey _globalKey = GlobalKey(); + final GlobalKey globalKey = GlobalKey(); // Build the webView with no user agent to get the default platform user agent. await tester.pumpWidget( Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: primaryUrl, javascriptMode: JavascriptMode.unrestricted, onWebViewCreated: (WebViewController controller) { @@ -314,7 +314,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, userAgent: 'Custom_User_Agent', @@ -328,7 +328,7 @@ Future main() async { Directionality( textDirection: TextDirection.ltr, child: WebView( - key: _globalKey, + key: globalKey, initialUrl: 'about:blank', javascriptMode: JavascriptMode.unrestricted, ), diff --git a/script/tool/lib/src/common/package_looping_command.dart b/script/tool/lib/src/common/package_looping_command.dart index a32ada2c35e8..d8b1cf001d13 100644 --- a/script/tool/lib/src/common/package_looping_command.dart +++ b/script/tool/lib/src/common/package_looping_command.dart @@ -428,9 +428,9 @@ abstract class PackageLoopingCommand extends PackageCommand { .length; // Split the warnings into those from packages that ran, and those that // were skipped. - final Set _skippedPackagesWithWarnings = + final Set skippedPackagesWithWarnings = _packagesWithWarnings.intersection(skippedPackages); - final int skippedWarningCount = _skippedPackagesWithWarnings.length; + final int skippedWarningCount = skippedPackagesWithWarnings.length; final int runWarningCount = _packagesWithWarnings.length - skippedWarningCount; diff --git a/script/tool/lib/src/native_test_command.dart b/script/tool/lib/src/native_test_command.dart index 81b13cbb75e2..af5f4df98e86 100644 --- a/script/tool/lib/src/native_test_command.dart +++ b/script/tool/lib/src/native_test_command.dart @@ -406,9 +406,9 @@ this command. ); // The exit code from 'xcodebuild test' when there are no tests. - const int _xcodebuildNoTestExitCode = 66; + const int xcodebuildNoTestExitCode = 66; switch (exitCode) { - case _xcodebuildNoTestExitCode: + case xcodebuildNoTestExitCode: _printNoExampleTestsMessage(example, platform); break; case 0: diff --git a/script/tool/test/dependabot_check_command_test.dart b/script/tool/test/dependabot_check_command_test.dart index b0558c3d22ac..39dd8f4fcb92 100644 --- a/script/tool/test/dependabot_check_command_test.dart +++ b/script/tool/test/dependabot_check_command_test.dart @@ -36,7 +36,7 @@ void main() { runner.addCommand(command); }); - void _setDependabotCoverage({ + void setDependabotCoverage({ Iterable gradleDirs = const [], }) { final Iterable gradleEntries = @@ -57,7 +57,7 @@ ${gradleEntries.join('\n')} } test('skips with no supported ecosystems', () async { - _setDependabotCoverage(); + setDependabotCoverage(); createFakePackage('a_package', packagesDir); final List output = @@ -71,7 +71,7 @@ ${gradleEntries.join('\n')} }); test('fails for app missing Gradle coverage', () async { - _setDependabotCoverage(); + setDependabotCoverage(); final RepositoryPackage package = createFakePackage('a_package', packagesDir); package.directory @@ -97,7 +97,7 @@ ${gradleEntries.join('\n')} }); test('fails for plugin missing Gradle coverage', () async { - _setDependabotCoverage(); + setDependabotCoverage(); final RepositoryPackage plugin = createFakePlugin('a_plugin', packagesDir); plugin.directory.childDirectory('android').createSync(recursive: true); @@ -118,7 +118,7 @@ ${gradleEntries.join('\n')} }); test('passes for correct Gradle coverage', () async { - _setDependabotCoverage(gradleDirs: [ + setDependabotCoverage(gradleDirs: [ 'packages/a_plugin/android', 'packages/a_plugin/example/android/app', ]); diff --git a/script/tool/test/firebase_test_lab_command_test.dart b/script/tool/test/firebase_test_lab_command_test.dart index 2d3175e171e0..68ea62b2334f 100644 --- a/script/tool/test/firebase_test_lab_command_test.dart +++ b/script/tool/test/firebase_test_lab_command_test.dart @@ -40,7 +40,7 @@ void main() { runner.addCommand(command); }); - void _writeJavaTestFile(RepositoryPackage plugin, String relativeFilePath, + void writeJavaTestFile(RepositoryPackage plugin, String relativeFilePath, {String runnerClass = 'FlutterTestRunner'}) { childFileWithSubcomponents( plugin.directory, p.posix.split(relativeFilePath)) @@ -67,7 +67,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); Error? commandError; final List output = await runCapturingPrint( @@ -97,7 +97,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); final List output = await runCapturingPrint(runner, ['firebase-test-lab']); @@ -120,7 +120,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin1, javaTestFileRelativePath); + writeJavaTestFile(plugin1, javaTestFileRelativePath); final RepositoryPackage plugin2 = createFakePlugin('plugin2', packagesDir, extraFiles: [ 'test/plugin_test.dart', @@ -128,7 +128,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin2, javaTestFileRelativePath); + writeJavaTestFile(plugin2, javaTestFileRelativePath); final List output = await runCapturingPrint(runner, [ 'firebase-test-lab', @@ -207,7 +207,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); final List output = await runCapturingPrint(runner, [ 'firebase-test-lab', @@ -286,7 +286,7 @@ public class MainActivityTest { ], ]); for (final String example in examples) { - _writeJavaTestFile( + writeJavaTestFile( plugin, 'example/$example/$javaTestFileExampleRelativePath'); } @@ -347,7 +347,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); processRunner.mockProcessesForExecutable['gcloud'] = [ MockProcess(), // auth @@ -393,7 +393,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); processRunner.mockProcessesForExecutable['gcloud'] = [ MockProcess(), // auth @@ -460,7 +460,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); Error? commandError; final List output = await runCapturingPrint( @@ -501,7 +501,7 @@ public class MainActivityTest { javaTestFileRelativePath, ]); // Use the wrong @RunWith annotation. - _writeJavaTestFile(plugin, javaTestFileRelativePath, + writeJavaTestFile(plugin, javaTestFileRelativePath, runnerClass: 'AndroidJUnit4.class'); Error? commandError; @@ -565,7 +565,7 @@ public class MainActivityTest { 'example/integration_test/foo_test.dart', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); final List output = await runCapturingPrint(runner, [ 'firebase-test-lab', @@ -628,7 +628,7 @@ public class MainActivityTest { 'example/integration_test/foo_test.dart', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); processRunner.mockProcessesForExecutable['flutter'] = [ MockProcess(exitCode: 1) // flutter build @@ -663,7 +663,7 @@ public class MainActivityTest { 'example/integration_test/foo_test.dart', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); final String gradlewPath = plugin .getExamples() @@ -704,7 +704,7 @@ public class MainActivityTest { 'example/integration_test/foo_test.dart', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); final String gradlewPath = plugin .getExamples() @@ -750,7 +750,7 @@ public class MainActivityTest { 'example/android/gradlew', javaTestFileRelativePath, ]); - _writeJavaTestFile(plugin, javaTestFileRelativePath); + writeJavaTestFile(plugin, javaTestFileRelativePath); await runCapturingPrint(runner, [ 'firebase-test-lab', diff --git a/script/tool/test/format_command_test.dart b/script/tool/test/format_command_test.dart index c1c4a212a019..9a865053a2b6 100644 --- a/script/tool/test/format_command_test.dart +++ b/script/tool/test/format_command_test.dart @@ -49,7 +49,7 @@ void main() { /// Returns a modified version of a list of [relativePaths] that are relative /// to [package] to instead be relative to [packagesDir]. - List _getPackagesDirRelativePaths( + List getPackagesDirRelativePaths( RepositoryPackage package, List relativePaths) { final p.Context path = analyzeCommand.path; final String relativeBase = @@ -65,7 +65,7 @@ void main() { /// /// This is for each of testing batching, since it means each file will /// consume 100 characters of the batch length. - List _get99CharacterPathExtraFiles(String packageName, int count) { + List get99CharacterPathExtraFiles(String packageName, int count) { final int padding = 99 - packageName.length - 1 - // the path separator after the package name @@ -99,10 +99,7 @@ void main() { orderedEquals([ ProcessCall( getFlutterCommand(mockPlatform), - [ - 'format', - ..._getPackagesDirRelativePaths(plugin, files) - ], + ['format', ...getPackagesDirRelativePaths(plugin, files)], packagesDir.path), ])); }); @@ -138,7 +135,7 @@ void main() { getFlutterCommand(mockPlatform), [ 'format', - ..._getPackagesDirRelativePaths(plugin, formattedFiles) + ...getPackagesDirRelativePaths(plugin, formattedFiles) ], packagesDir.path), ])); @@ -191,7 +188,7 @@ void main() { '-jar', javaFormatPath, '--replace', - ..._getPackagesDirRelativePaths(plugin, files) + ...getPackagesDirRelativePaths(plugin, files) ], packagesDir.path), ])); @@ -271,7 +268,7 @@ void main() { '-jar', javaFormatPath, '--replace', - ..._getPackagesDirRelativePaths(plugin, files) + ...getPackagesDirRelativePaths(plugin, files) ], packagesDir.path), ])); @@ -303,7 +300,7 @@ void main() { [ '-i', '--style=file', - ..._getPackagesDirRelativePaths(plugin, files) + ...getPackagesDirRelativePaths(plugin, files) ], packagesDir.path), ])); @@ -358,7 +355,7 @@ void main() { [ '-i', '--style=file', - ..._getPackagesDirRelativePaths(plugin, files) + ...getPackagesDirRelativePaths(plugin, files) ], packagesDir.path), ])); @@ -426,14 +423,14 @@ void main() { [ '-i', '--style=file', - ..._getPackagesDirRelativePaths(plugin, clangFiles) + ...getPackagesDirRelativePaths(plugin, clangFiles) ], packagesDir.path), ProcessCall( getFlutterCommand(mockPlatform), [ 'format', - ..._getPackagesDirRelativePaths(plugin, dartFiles) + ...getPackagesDirRelativePaths(plugin, dartFiles) ], packagesDir.path), ProcessCall( @@ -442,7 +439,7 @@ void main() { '-jar', javaFormatPath, '--replace', - ..._getPackagesDirRelativePaths(plugin, javaFiles) + ...getPackagesDirRelativePaths(plugin, javaFiles) ], packagesDir.path), ])); @@ -541,7 +538,7 @@ void main() { // Make the file list one file longer than would fit in the batch. final List batch1 = - _get99CharacterPathExtraFiles(pluginName, batchSize + 1); + get99CharacterPathExtraFiles(pluginName, batchSize + 1); final String extraFile = batch1.removeLast(); createFakePlugin( @@ -578,7 +575,7 @@ void main() { // Make the file list one file longer than would fit in a Windows batch. final List batch = - _get99CharacterPathExtraFiles(pluginName, batchSize + 1); + get99CharacterPathExtraFiles(pluginName, batchSize + 1); createFakePlugin( pluginName, @@ -598,7 +595,7 @@ void main() { // Make the file list one file longer than would fit in the batch. final List batch1 = - _get99CharacterPathExtraFiles(pluginName, batchSize + 1); + get99CharacterPathExtraFiles(pluginName, batchSize + 1); final String extraFile = batch1.removeLast(); createFakePlugin( diff --git a/script/tool/test/license_check_command_test.dart b/script/tool/test/license_check_command_test.dart index 005b77d99a13..09841df74e70 100644 --- a/script/tool/test/license_check_command_test.dart +++ b/script/tool/test/license_check_command_test.dart @@ -48,7 +48,7 @@ void main() { /// [commentString] is added to the start of each line. /// [prefix] is added to the start of the entire block. /// [suffix] is added to the end of the entire block. - void _writeLicense( + void writeLicense( File file, { String comment = '// ', String prefix = '', @@ -164,7 +164,7 @@ void main() { test('passes if all checked files have license blocks', () async { final File checked = root.childFile('checked.cc'); checked.createSync(); - _writeLicense(checked); + writeLicense(checked); final File notChecked = root.childFile('not_checked.md'); notChecked.createSync(); @@ -183,7 +183,7 @@ void main() { test('passes correct license blocks on Windows', () async { final File checked = root.childFile('checked.cc'); checked.createSync(); - _writeLicense(checked, useCrlf: true); + writeLicense(checked, useCrlf: true); final List output = await runCapturingPrint(runner, ['license-check']); @@ -200,13 +200,13 @@ void main() { test('handles the comment styles for all supported languages', () async { final File fileA = root.childFile('file_a.cc'); fileA.createSync(); - _writeLicense(fileA); + writeLicense(fileA); final File fileB = root.childFile('file_b.sh'); fileB.createSync(); - _writeLicense(fileB, comment: '# '); + writeLicense(fileB, comment: '# '); final File fileC = root.childFile('file_c.html'); fileC.createSync(); - _writeLicense(fileC, comment: '', prefix: ''); + writeLicense(fileC, comment: '', prefix: ''); final List output = await runCapturingPrint(runner, ['license-check']); @@ -225,10 +225,10 @@ void main() { test('fails if any checked files are missing license blocks', () async { final File goodA = root.childFile('good.cc'); goodA.createSync(); - _writeLicense(goodA); + writeLicense(goodA); final File goodB = root.childFile('good.h'); goodB.createSync(); - _writeLicense(goodB); + writeLicense(goodB); root.childFile('bad.cc').createSync(); root.childFile('bad.h').createSync(); @@ -255,10 +255,10 @@ void main() { test('fails if any checked files are missing just the copyright', () async { final File good = root.childFile('good.cc'); good.createSync(); - _writeLicense(good); + writeLicense(good); final File bad = root.childFile('bad.cc'); bad.createSync(); - _writeLicense(bad, copyright: ''); + writeLicense(bad, copyright: ''); Error? commandError; final List output = await runCapturingPrint( @@ -282,10 +282,10 @@ void main() { test('fails if any checked files are missing just the license', () async { final File good = root.childFile('good.cc'); good.createSync(); - _writeLicense(good); + writeLicense(good); final File bad = root.childFile('bad.cc'); bad.createSync(); - _writeLicense(bad, license: []); + writeLicense(bad, license: []); Error? commandError; final List output = await runCapturingPrint( @@ -310,7 +310,7 @@ void main() { () async { final File thirdPartyFile = root.childFile('third_party.cc'); thirdPartyFile.createSync(); - _writeLicense(thirdPartyFile, copyright: 'Copyright 2017 Someone Else'); + writeLicense(thirdPartyFile, copyright: 'Copyright 2017 Someone Else'); Error? commandError; final List output = await runCapturingPrint( @@ -339,7 +339,7 @@ void main() { .childDirectory('third_party') .childFile('file.cc'); thirdPartyFile.createSync(recursive: true); - _writeLicense(thirdPartyFile, + writeLicense(thirdPartyFile, copyright: 'Copyright 2017 Workiva Inc.', license: [ 'Licensed under the Apache License, Version 2.0 (the "License");', @@ -366,7 +366,7 @@ void main() { .childDirectory('third_party') .childFile('first_party.cc'); firstPartyFileInThirdParty.createSync(recursive: true); - _writeLicense(firstPartyFileInThirdParty); + writeLicense(firstPartyFileInThirdParty); final List output = await runCapturingPrint(runner, ['license-check']); @@ -383,10 +383,10 @@ void main() { test('fails for licenses that the tool does not expect', () async { final File good = root.childFile('good.cc'); good.createSync(); - _writeLicense(good); + writeLicense(good); final File bad = root.childDirectory('third_party').childFile('bad.cc'); bad.createSync(recursive: true); - _writeLicense(bad, license: [ + writeLicense(bad, license: [ 'This program is free software: you can redistribute it and/or modify', 'it under the terms of the GNU General Public License', ]); @@ -414,10 +414,10 @@ void main() { () async { final File good = root.childFile('good.cc'); good.createSync(); - _writeLicense(good); + writeLicense(good); final File bad = root.childDirectory('third_party').childFile('bad.cc'); bad.createSync(recursive: true); - _writeLicense( + writeLicense( bad, copyright: 'Copyright 2017 Some New Authors.', license: [ diff --git a/script/tool/test/make_deps_path_based_command_test.dart b/script/tool/test/make_deps_path_based_command_test.dart index 36753e8001f8..e846a63fc68e 100644 --- a/script/tool/test/make_deps_path_based_command_test.dart +++ b/script/tool/test/make_deps_path_based_command_test.dart @@ -49,7 +49,7 @@ void main() { /// Adds dummy 'dependencies:' entries for each package in [dependencies] /// to [package]. - void _addDependencies( + void addDependencies( RepositoryPackage package, Iterable dependencies) { final List lines = package.pubspecFile.readAsLinesSync(); final int dependenciesStartIndex = lines.indexOf('dependencies:'); @@ -62,7 +62,7 @@ void main() { /// Adds a 'dev_dependencies:' section with entries for each package in /// [dependencies] to [package]. - void _addDevDependenciesSection( + void addDevDependenciesSection( RepositoryPackage package, Iterable devDependencies) { final String originalContent = package.pubspecFile.readAsStringSync(); package.pubspecFile.writeAsStringSync(''' @@ -77,7 +77,7 @@ ${devDependencies.map((String dep) => ' $dep: ^1.0.0').join('\n')} createFakePackage('foo', packagesDir, isFlutter: true); final RepositoryPackage packageBar = createFakePackage('bar', packagesDir, isFlutter: true); - _addDependencies(packageBar, ['foo']); + addDependencies(packageBar, ['foo']); final String originalPubspecContents = packageBar.pubspecFile.readAsStringSync(); @@ -105,16 +105,16 @@ ${devDependencies.map((String dep) => ' $dep: ^1.0.0').join('\n')} final RepositoryPackage pluginAppFacing = createFakePlugin('bar', pluginGroup); - _addDependencies(simplePackage, [ + addDependencies(simplePackage, [ 'bar', 'bar_android', 'bar_platform_interface', ]); - _addDependencies(pluginAppFacing, [ + addDependencies(pluginAppFacing, [ 'bar_platform_interface', 'bar_android', ]); - _addDependencies(pluginImplementation, [ + addDependencies(pluginImplementation, [ 'bar_platform_interface', ]); @@ -160,7 +160,7 @@ ${devDependencies.map((String dep) => ' $dep: ^1.0.0').join('\n')} final RepositoryPackage builderPackage = createFakePackage('foo_builder', packagesDir); - _addDevDependenciesSection(builderPackage, [ + addDevDependenciesSection(builderPackage, [ 'foo', ]); @@ -193,8 +193,8 @@ ${devDependencies.map((String dep) => ' $dep: ^1.0.0').join('\n')} final RepositoryPackage targetPackage = createFakePackage('target', packagesDir); - _addDependencies(targetPackage, ['a', 'c']); - _addDevDependenciesSection(targetPackage, ['b']); + addDependencies(targetPackage, ['a', 'c']); + addDevDependenciesSection(targetPackage, ['b']); final List output = await runCapturingPrint(runner, ['make-deps-path-based', '--target-dependencies=c,a,b']); @@ -233,16 +233,16 @@ ${devDependencies.map((String dep) => ' $dep: ^1.0.0').join('\n')} final RepositoryPackage pluginAppFacing = createFakePlugin('bar', pluginGroup); - _addDependencies(simplePackage, [ + addDependencies(simplePackage, [ 'bar', 'bar_android', 'bar_platform_interface', ]); - _addDependencies(pluginAppFacing, [ + addDependencies(pluginAppFacing, [ 'bar_platform_interface', 'bar_android', ]); - _addDependencies(pluginImplementation, [ + addDependencies(pluginImplementation, [ 'bar_platform_interface', ]); diff --git a/script/tool/test/native_test_command_test.dart b/script/tool/test/native_test_command_test.dart index d420184b6125..f24d014bbfea 100644 --- a/script/tool/test/native_test_command_test.dart +++ b/script/tool/test/native_test_command_test.dart @@ -68,7 +68,7 @@ void _createFakeCMakeCache(RepositoryPackage plugin, Platform platform) { // TODO(stuartmorgan): Rework these tests to use a mock Xcode instead of // doing all the process mocking and validation. void main() { - const String _kDestination = '--ios-destination'; + const String kDestination = '--ios-destination'; group('test native_test_command on Posix', () { late FileSystem fileSystem; @@ -95,7 +95,7 @@ void main() { // Returns a MockProcess to provide for "xcrun xcodebuild -list" for a // project that contains [targets]. - MockProcess _getMockXcodebuildListProcess(List targets) { + MockProcess getMockXcodebuildListProcess(List targets) { final Map projects = { 'project': { 'targets': targets, @@ -106,7 +106,7 @@ void main() { // Returns the ProcessCall to expect for checking the targets present in // the [package]'s [platform]/Runner.xcodeproj. - ProcessCall _getTargetCheckCall(Directory package, String platform) { + ProcessCall getTargetCheckCall(Directory package, String platform) { return ProcessCall( 'xcrun', [ @@ -124,7 +124,7 @@ void main() { // Returns the ProcessCall to expect for running the tests in the // workspace [platform]/Runner.xcworkspace, with the given extra flags. - ProcessCall _getRunTestCall( + ProcessCall getRunTestCall( Directory package, String platform, { String? destination, @@ -150,7 +150,7 @@ void main() { // Returns the ProcessCall to expect for build the Linux unit tests for the // given plugin. - ProcessCall _getLinuxBuildCall(RepositoryPackage plugin) { + ProcessCall getLinuxBuildCall(RepositoryPackage plugin) { return ProcessCall( 'cmake', [ @@ -212,7 +212,7 @@ void main() { final Directory pluginExampleDirectory = getExampleDir(plugin); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess(['RunnerTests', 'RunnerUITests']), + getMockXcodebuildListProcess(['RunnerTests', 'RunnerUITests']), // Exit code 66 from testing indicates no tests. MockProcess(exitCode: 66), ]; @@ -229,8 +229,8 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'macos'), - _getRunTestCall(pluginExampleDirectory, 'macos', + getTargetCheckCall(pluginExampleDirectory, 'macos'), + getRunTestCall(pluginExampleDirectory, 'macos', extraFlags: ['-only-testing:RunnerUITests']), ])); }); @@ -243,7 +243,7 @@ void main() { }); final List output = await runCapturingPrint(runner, - ['native-test', '--ios', _kDestination, 'foo_destination']); + ['native-test', '--ios', kDestination, 'foo_destination']); expect( output, containsAllInOrder([ @@ -260,7 +260,7 @@ void main() { }); final List output = await runCapturingPrint(runner, - ['native-test', '--ios', _kDestination, 'foo_destination']); + ['native-test', '--ios', kDestination, 'foo_destination']); expect( output, containsAllInOrder([ @@ -279,14 +279,14 @@ void main() { final Directory pluginExampleDirectory = getExampleDir(plugin); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), ]; final List output = await runCapturingPrint(runner, [ 'native-test', '--ios', - _kDestination, + kDestination, 'foo_destination', ]); @@ -300,8 +300,8 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'ios'), - _getRunTestCall(pluginExampleDirectory, 'ios', + getTargetCheckCall(pluginExampleDirectory, 'ios'), + getRunTestCall(pluginExampleDirectory, 'ios', destination: 'foo_destination'), ])); }); @@ -316,7 +316,7 @@ void main() { processRunner.mockProcessesForExecutable['xcrun'] = [ MockProcess(stdout: jsonEncode(_kDeviceListMap)), // simctl - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), ]; @@ -336,8 +336,8 @@ void main() { '--json', ], null), - _getTargetCheckCall(pluginExampleDirectory, 'ios'), - _getRunTestCall(pluginExampleDirectory, 'ios', + getTargetCheckCall(pluginExampleDirectory, 'ios'), + getRunTestCall(pluginExampleDirectory, 'ios', destination: 'id=1E76A0FD-38AC-4537-A989-EA639D7D012A'), ])); }); @@ -386,7 +386,7 @@ void main() { final Directory pluginExampleDirectory = getExampleDir(plugin); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), ]; @@ -403,8 +403,8 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'macos'), - _getRunTestCall(pluginExampleDirectory, 'macos'), + getTargetCheckCall(pluginExampleDirectory, 'macos'), + getRunTestCall(pluginExampleDirectory, 'macos'), ])); }); }); @@ -918,7 +918,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getLinuxBuildCall(plugin), + getLinuxBuildCall(plugin), ProcessCall(testBinary.path, const [], null), ])); }); @@ -958,7 +958,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getLinuxBuildCall(plugin), + getLinuxBuildCall(plugin), ProcessCall(releaseTestBinary.path, const [], null), ])); }); @@ -1017,7 +1017,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getLinuxBuildCall(plugin), + getLinuxBuildCall(plugin), ])); }); @@ -1058,7 +1058,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getLinuxBuildCall(plugin), + getLinuxBuildCall(plugin), ProcessCall(testBinary.path, const [], null), ])); }); @@ -1102,7 +1102,7 @@ void main() { final Directory pluginExampleDirectory = getExampleDir(plugin); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), ]; @@ -1121,8 +1121,8 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'macos'), - _getRunTestCall(pluginExampleDirectory, 'macos', + getTargetCheckCall(pluginExampleDirectory, 'macos'), + getRunTestCall(pluginExampleDirectory, 'macos', extraFlags: ['-only-testing:RunnerTests']), ])); }); @@ -1137,7 +1137,7 @@ void main() { final Directory pluginExampleDirectory = getExampleDir(plugin1); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), ]; @@ -1156,8 +1156,8 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'macos'), - _getRunTestCall(pluginExampleDirectory, 'macos', + getTargetCheckCall(pluginExampleDirectory, 'macos'), + getRunTestCall(pluginExampleDirectory, 'macos', extraFlags: ['-only-testing:RunnerUITests']), ])); }); @@ -1173,7 +1173,7 @@ void main() { // Simulate a project with unit tests but no integration tests... processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess(['RunnerTests']), + getMockXcodebuildListProcess(['RunnerTests']), ]; // ... then try to run only integration tests. @@ -1193,7 +1193,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'macos'), + getTargetCheckCall(pluginExampleDirectory, 'macos'), ])); }); @@ -1207,7 +1207,7 @@ void main() { final Directory pluginExampleDirectory = getExampleDir(plugin1); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess(['RunnerUITests']), + getMockXcodebuildListProcess(['RunnerUITests']), ]; Error? commandError; @@ -1232,7 +1232,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'macos'), + getTargetCheckCall(pluginExampleDirectory, 'macos'), ])); }); @@ -1269,7 +1269,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'macos'), + getTargetCheckCall(pluginExampleDirectory, 'macos'), ])); }); }); @@ -1295,10 +1295,10 @@ void main() { pluginExampleDirectory.childDirectory('android'); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), // iOS list MockProcess(), // iOS run - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), // macOS list MockProcess(), // macOS run ]; @@ -1308,7 +1308,7 @@ void main() { '--android', '--ios', '--macos', - _kDestination, + kDestination, 'foo_destination', ]); @@ -1325,11 +1325,11 @@ void main() { orderedEquals([ ProcessCall(androidFolder.childFile('gradlew').path, const ['testDebugUnitTest'], androidFolder.path), - _getTargetCheckCall(pluginExampleDirectory, 'ios'), - _getRunTestCall(pluginExampleDirectory, 'ios', + getTargetCheckCall(pluginExampleDirectory, 'ios'), + getRunTestCall(pluginExampleDirectory, 'ios', destination: 'foo_destination'), - _getTargetCheckCall(pluginExampleDirectory, 'macos'), - _getRunTestCall(pluginExampleDirectory, 'macos'), + getTargetCheckCall(pluginExampleDirectory, 'macos'), + getRunTestCall(pluginExampleDirectory, 'macos'), ])); }); @@ -1342,7 +1342,7 @@ void main() { final Directory pluginExampleDirectory = getExampleDir(plugin); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), ]; @@ -1350,7 +1350,7 @@ void main() { 'native-test', '--ios', '--macos', - _kDestination, + kDestination, 'foo_destination', ]); @@ -1364,8 +1364,8 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'macos'), - _getRunTestCall(pluginExampleDirectory, 'macos'), + getTargetCheckCall(pluginExampleDirectory, 'macos'), + getRunTestCall(pluginExampleDirectory, 'macos'), ])); }); @@ -1378,7 +1378,7 @@ void main() { final Directory pluginExampleDirectory = getExampleDir(plugin); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), ]; @@ -1386,7 +1386,7 @@ void main() { 'native-test', '--ios', '--macos', - _kDestination, + kDestination, 'foo_destination', ]); @@ -1400,8 +1400,8 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getTargetCheckCall(pluginExampleDirectory, 'ios'), - _getRunTestCall(pluginExampleDirectory, 'ios', + getTargetCheckCall(pluginExampleDirectory, 'ios'), + getRunTestCall(pluginExampleDirectory, 'ios', destination: 'foo_destination'), ])); }); @@ -1415,7 +1415,7 @@ void main() { '--ios', '--macos', '--windows', - _kDestination, + kDestination, 'foo_destination', ]); @@ -1447,7 +1447,7 @@ void main() { 'native-test', '--macos', '--windows', - _kDestination, + kDestination, 'foo_destination', ]); @@ -1477,7 +1477,7 @@ void main() { ); processRunner.mockProcessesForExecutable['xcrun'] = [ - _getMockXcodebuildListProcess( + getMockXcodebuildListProcess( ['RunnerTests', 'RunnerUITests']), ]; @@ -1598,7 +1598,7 @@ void main() { // Returns the ProcessCall to expect for build the Windows unit tests for // the given plugin. - ProcessCall _getWindowsBuildCall(RepositoryPackage plugin) { + ProcessCall getWindowsBuildCall(RepositoryPackage plugin) { return ProcessCall( _fakeCmakeCommand, [ @@ -1647,7 +1647,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getWindowsBuildCall(plugin), + getWindowsBuildCall(plugin), ProcessCall(testBinary.path, const [], null), ])); }); @@ -1687,7 +1687,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getWindowsBuildCall(plugin), + getWindowsBuildCall(plugin), ProcessCall(debugTestBinary.path, const [], null), ])); }); @@ -1746,7 +1746,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getWindowsBuildCall(plugin), + getWindowsBuildCall(plugin), ])); }); @@ -1787,7 +1787,7 @@ void main() { expect( processRunner.recordedCalls, orderedEquals([ - _getWindowsBuildCall(plugin), + getWindowsBuildCall(plugin), ProcessCall(testBinary.path, const [], null), ])); }); diff --git a/script/tool/test/publish_command_test.dart b/script/tool/test/publish_command_test.dart index 19e8bdd233ec..da5f9c871f05 100644 --- a/script/tool/test/publish_command_test.dart +++ b/script/tool/test/publish_command_test.dart @@ -33,7 +33,7 @@ void main() { // Map of package name to mock response. late Map> mockHttpResponses; - void _createMockCredentialFile() { + void createMockCredentialFile() { final String credentialPath = PublishCommand.getCredentialPath(); fileSystem.file(credentialPath) ..createSync(recursive: true) @@ -204,7 +204,7 @@ void main() { test( '--skip-confirmation flag automatically adds --force to --pub-publish-flags', () async { - _createMockCredentialFile(); + createMockCredentialFile(); final RepositoryPackage plugin = createFakePlugin('foo', packagesDir, examples: []); @@ -225,7 +225,7 @@ void main() { }); test('--force is only added once, regardless of plugin count', () async { - _createMockCredentialFile(); + createMockCredentialFile(); final RepositoryPackage plugin1 = createFakePlugin('plugin_a', packagesDir, examples: []); final RepositoryPackage plugin2 = @@ -393,7 +393,7 @@ void main() { test('does not ask for user input if the --skip-confirmation flag is on', () async { - _createMockCredentialFile(); + createMockCredentialFile(); createFakePlugin('foo', packagesDir, examples: []); final List output = diff --git a/script/tool/test/remove_dev_dependencies_test.dart b/script/tool/test/remove_dev_dependencies_test.dart index 6b212870c53b..776cbf197838 100644 --- a/script/tool/test/remove_dev_dependencies_test.dart +++ b/script/tool/test/remove_dev_dependencies_test.dart @@ -27,7 +27,7 @@ void main() { runner.addCommand(command); }); - void _addToPubspec(RepositoryPackage package, String addition) { + void addToPubspec(RepositoryPackage package, String addition) { final String originalContent = package.pubspecFile.readAsStringSync(); package.pubspecFile.writeAsStringSync(''' $originalContent @@ -53,7 +53,7 @@ $addition final RepositoryPackage package = createFakePackage('a_package', packagesDir, version: '1.0.0'); - _addToPubspec(package, ''' + addToPubspec(package, ''' dev_dependencies: some_dependency: ^2.1.8 another_dependency: ^1.0.0 @@ -79,7 +79,7 @@ dev_dependencies: createFakePackage('a_package', packagesDir, version: '1.0.0'); final RepositoryPackage example = package.getExamples().first; - _addToPubspec(example, ''' + addToPubspec(example, ''' dev_dependencies: some_dependency: ^2.1.8 another_dependency: ^1.0.0 diff --git a/script/tool/test/version_check_command_test.dart b/script/tool/test/version_check_command_test.dart index 598176bbe209..d485d81ceaf2 100644 --- a/script/tool/test/version_check_command_test.dart +++ b/script/tool/test/version_check_command_test.dart @@ -681,8 +681,7 @@ void main() { }); group('missing change detection', () { - Future> _runWithMissingChangeDetection( - List extraArgs, + Future> runWithMissingChangeDetection(List extraArgs, {void Function(Error error)? errorHandler}) async { return runCapturingPrint( runner, @@ -712,7 +711,7 @@ void main() { ]; final List output = - await _runWithMissingChangeDetection([]); + await runWithMissingChangeDetection([]); expect( output, @@ -743,7 +742,7 @@ packages/plugin/lib/plugin.dart ]; Error? commandError; - final List output = await _runWithMissingChangeDetection( + final List output = await runWithMissingChangeDetection( [], errorHandler: (Error e) { commandError = e; }); @@ -780,7 +779,7 @@ packages/plugin/pubspec.yaml ]; final List output = - await _runWithMissingChangeDetection([]); + await runWithMissingChangeDetection([]); expect( output, @@ -810,7 +809,7 @@ tool/plugin/lib/plugin.dart ]; final List output = - await _runWithMissingChangeDetection([]); + await runWithMissingChangeDetection([]); expect( output, @@ -843,7 +842,7 @@ packages/plugin/CHANGELOG.md ]; final List output = - await _runWithMissingChangeDetection([]); + await runWithMissingChangeDetection([]); expect( output, @@ -874,7 +873,7 @@ packages/plugin/pubspec.yaml ]; final List output = - await _runWithMissingChangeDetection([ + await runWithMissingChangeDetection([ '--pr-labels=some label,override: no versioning needed,another-label' ]); @@ -906,7 +905,7 @@ packages/plugin/example/lib/foo.dart ]; Error? commandError; - final List output = await _runWithMissingChangeDetection( + final List output = await runWithMissingChangeDetection( [], errorHandler: (Error e) { commandError = e; }); @@ -942,7 +941,7 @@ packages/plugin/CHANGELOG.md ]; final List output = - await _runWithMissingChangeDetection([]); + await runWithMissingChangeDetection([]); expect( output, @@ -973,7 +972,7 @@ packages/another_plugin/CHANGELOG.md ]; Error? commandError; - final List output = await _runWithMissingChangeDetection( + final List output = await runWithMissingChangeDetection( [], errorHandler: (Error e) { commandError = e; }); @@ -1006,7 +1005,7 @@ packages/plugin/example/lib/foo.dart ]; final List output = - await _runWithMissingChangeDetection([ + await runWithMissingChangeDetection([ '--pr-labels=some label,override: no changelog needed,another-label' ]); @@ -1050,7 +1049,7 @@ packages/plugin/android/build.gradle ]; final List output = - await _runWithMissingChangeDetection([]); + await runWithMissingChangeDetection([]); expect( output, @@ -1082,7 +1081,7 @@ packages/plugin/run_tests.sh ]; final List output = - await _runWithMissingChangeDetection([]); + await runWithMissingChangeDetection([]); expect( output, From ab5e9e6b7cf44263e28b2e6aec6f827e3268e777 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 28 Sep 2022 15:42:06 -0400 Subject: [PATCH 032/133] [file_selector] Add all iOS files to example app (#6513) --- .../example/ios/Flutter/Debug.xcconfig | 1 + .../example/ios/Flutter/Release.xcconfig | 1 + .../file_selector/example/ios/Podfile | 41 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/file_selector/file_selector/example/ios/Podfile diff --git a/packages/file_selector/file_selector/example/ios/Flutter/Debug.xcconfig b/packages/file_selector/file_selector/example/ios/Flutter/Debug.xcconfig index 592ceee85b89..ec97fc6f3021 100644 --- a/packages/file_selector/file_selector/example/ios/Flutter/Debug.xcconfig +++ b/packages/file_selector/file_selector/example/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/packages/file_selector/file_selector/example/ios/Flutter/Release.xcconfig b/packages/file_selector/file_selector/example/ios/Flutter/Release.xcconfig index 592ceee85b89..c4855bfe2000 100644 --- a/packages/file_selector/file_selector/example/ios/Flutter/Release.xcconfig +++ b/packages/file_selector/file_selector/example/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/packages/file_selector/file_selector/example/ios/Podfile b/packages/file_selector/file_selector/example/ios/Podfile new file mode 100644 index 000000000000..88359b225fa1 --- /dev/null +++ b/packages/file_selector/file_selector/example/ios/Podfile @@ -0,0 +1,41 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end From 5bb51296b00ec32b8df193a38435769d5e26aafa Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 28 Sep 2022 16:51:15 -0400 Subject: [PATCH 033/133] [tool] Adds a `fix` command (#6512) --- script/tool/CHANGELOG.md | 4 ++ script/tool/lib/src/fix_command.dart | 51 +++++++++++++++++ script/tool/lib/src/main.dart | 2 + script/tool/test/fix_command_test.dart | 78 ++++++++++++++++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 script/tool/lib/src/fix_command.dart create mode 100644 script/tool/test/fix_command_test.dart diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index 830d3ca931e6..bf549d4e79dc 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.11.1 + +* Adds a `fix` command to run `dart fix --apply` in target packages. + ## 0.11 * Renames `publish-plugin` to `publish`. diff --git a/script/tool/lib/src/fix_command.dart b/script/tool/lib/src/fix_command.dart new file mode 100644 index 000000000000..2819609eabbd --- /dev/null +++ b/script/tool/lib/src/fix_command.dart @@ -0,0 +1,51 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; + +import 'package:file/file.dart'; +import 'package:platform/platform.dart'; + +import 'common/core.dart'; +import 'common/package_looping_command.dart'; +import 'common/process_runner.dart'; +import 'common/repository_package.dart'; + +/// A command to run Dart's "fix" command on packages. +class FixCommand extends PackageLoopingCommand { + /// Creates a fix command instance. + FixCommand( + Directory packagesDir, { + ProcessRunner processRunner = const ProcessRunner(), + Platform platform = const LocalPlatform(), + }) : super(packagesDir, processRunner: processRunner, platform: platform); + + @override + final String name = 'fix'; + + @override + final String description = 'Fixes packages using dart fix.\n\n' + 'This command requires "dart" and "flutter" to be in your path, and ' + 'assumes that dependencies have already been fetched (e.g., by running ' + 'the analyze command first).'; + + @override + final bool hasLongOutput = false; + + @override + PackageLoopingType get packageLoopingType => + PackageLoopingType.includeAllSubpackages; + + @override + Future runForPackage(RepositoryPackage package) async { + final int exitCode = await processRunner.runAndStream( + 'dart', ['fix', '--apply'], + workingDir: package.directory); + if (exitCode != 0) { + printError('Unable to automatically fix package.'); + return PackageResult.fail(); + } + return PackageResult.success(); + } +} diff --git a/script/tool/lib/src/main.dart b/script/tool/lib/src/main.dart index 078976d97376..414ca7f303c0 100644 --- a/script/tool/lib/src/main.dart +++ b/script/tool/lib/src/main.dart @@ -17,6 +17,7 @@ import 'dependabot_check_command.dart'; import 'drive_examples_command.dart'; import 'federation_safety_check_command.dart'; import 'firebase_test_lab_command.dart'; +import 'fix_command.dart'; import 'format_command.dart'; import 'license_check_command.dart'; import 'lint_android_command.dart'; @@ -61,6 +62,7 @@ void main(List args) { ..addCommand(DriveExamplesCommand(packagesDir)) ..addCommand(FederationSafetyCheckCommand(packagesDir)) ..addCommand(FirebaseTestLabCommand(packagesDir)) + ..addCommand(FixCommand(packagesDir)) ..addCommand(FormatCommand(packagesDir)) ..addCommand(LicenseCheckCommand(packagesDir)) ..addCommand(LintAndroidCommand(packagesDir)) diff --git a/script/tool/test/fix_command_test.dart b/script/tool/test/fix_command_test.dart new file mode 100644 index 000000000000..16061d2206cd --- /dev/null +++ b/script/tool/test/fix_command_test.dart @@ -0,0 +1,78 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:io' as io; + +import 'package:args/command_runner.dart'; +import 'package:file/file.dart'; +import 'package:file/memory.dart'; +import 'package:flutter_plugin_tools/src/common/core.dart'; +import 'package:flutter_plugin_tools/src/fix_command.dart'; +import 'package:test/test.dart'; + +import 'mocks.dart'; +import 'util.dart'; + +void main() { + late FileSystem fileSystem; + late MockPlatform mockPlatform; + late Directory packagesDir; + late RecordingProcessRunner processRunner; + late CommandRunner runner; + + setUp(() { + fileSystem = MemoryFileSystem(); + mockPlatform = MockPlatform(); + packagesDir = createPackagesDirectory(fileSystem: fileSystem); + processRunner = RecordingProcessRunner(); + final FixCommand command = FixCommand( + packagesDir, + processRunner: processRunner, + platform: mockPlatform, + ); + + runner = CommandRunner('fix_command', 'Test for fix_command'); + runner.addCommand(command); + }); + + test('runs fix in top-level packages and subpackages', () async { + final RepositoryPackage package = createFakePackage('a', packagesDir); + final RepositoryPackage plugin = createFakePlugin('b', packagesDir); + + await runCapturingPrint(runner, ['fix']); + + expect( + processRunner.recordedCalls, + orderedEquals([ + ProcessCall('dart', const ['fix', '--apply'], package.path), + ProcessCall('dart', const ['fix', '--apply'], + package.getExamples().first.path), + ProcessCall('dart', const ['fix', '--apply'], plugin.path), + ProcessCall('dart', const ['fix', '--apply'], + plugin.getExamples().first.path), + ])); + }); + + test('fails if "dart fix" fails', () async { + createFakePlugin('foo', packagesDir); + + processRunner.mockProcessesForExecutable['dart'] = [ + MockProcess(exitCode: 1), + ]; + + Error? commandError; + final List output = await runCapturingPrint(runner, ['fix'], + errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains('Unable to automatically fix package.'), + ]), + ); + }); +} From d73b921da0950b663492d9b6527688f1d5fabd43 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 29 Sep 2022 11:50:23 -0400 Subject: [PATCH 034/133] Roll Flutter from 9bf849184d6c to a11bef968893 (37 revisions) (#6515) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index e9a6ba9a1691..953ea3223c85 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -9bf849184d6ca75b8d9fa5ac8cdaa10e9bc6521e +a11bef968893d5c43a2d70cff649d251b8681277 From f46fe078c1841a7f378af2118e68e514a68ebd53 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 29 Sep 2022 12:58:22 -0400 Subject: [PATCH 035/133] Roll Flutter (stable) from e3c29ec00c9c to 18a827f3933c (4 revisions) (#6514) --- .ci/flutter_stable.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index 4c15f9c261c3..20445c3150b3 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -e3c29ec00c9c825c891d75054c63fcc46454dca1 +18a827f3933c19f51862dde3fa472197683249d6 From c2792606af661ce9b21e0f859ac3cd6f100482a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Sep 2022 18:02:23 +0000 Subject: [PATCH 036/133] [google_maps]: Bump play-services-maps from 18.0.2 to 18.1.0 in /packages/google_maps_flutter/google_maps_flutter_android/android (#6195) --- .../google_maps_flutter_android/CHANGELOG.md | 4 ++++ .../google_maps_flutter_android/android/build.gradle | 2 +- .../io/flutter/plugins/googlemaps/PolygonControllerTest.java | 4 ++-- .../io/flutter/plugins/googlemaps/PolylineControllerTest.java | 4 ++-- .../google_maps_flutter_android/pubspec.yaml | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) 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 2ea420daec8a..6fbd8d7e0b17 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 @@ +## 2.3.2 + +* Update `com.google.android.gms:play-services-maps` to 18.1.0. + ## 2.3.1 * Updates imports for `prefer_relative_imports`. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle index ecc85217c5bf..06599fc94c49 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle @@ -35,7 +35,7 @@ android { dependencies { implementation "androidx.annotation:annotation:1.1.0" - implementation 'com.google.android.gms:play-services-maps:18.0.2' + implementation 'com.google.android.gms:play-services-maps:18.1.0' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test:rules:1.4.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolygonControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolygonControllerTest.java index 5c73a3f3e449..271c63bdc25c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolygonControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolygonControllerTest.java @@ -7,7 +7,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; -import com.google.android.gms.internal.maps.zzaa; +import com.google.android.gms.internal.maps.zzad; import com.google.android.gms.maps.model.Polygon; import org.junit.Test; import org.mockito.Mockito; @@ -16,7 +16,7 @@ public class PolygonControllerTest { @Test public void controller_SetsStrokeDensity() { - final zzaa z = mock(zzaa.class); + final zzad z = mock(zzad.class); final Polygon polygon = spy(new Polygon(z)); final float density = 5; diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolylineControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolylineControllerTest.java index db570174e215..abb98627b35a 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolylineControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/PolylineControllerTest.java @@ -7,7 +7,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; -import com.google.android.gms.internal.maps.zzad; +import com.google.android.gms.internal.maps.zzag; import com.google.android.gms.maps.model.Polyline; import org.junit.Test; import org.mockito.Mockito; @@ -16,7 +16,7 @@ public class PolylineControllerTest { @Test public void controller_SetsStrokeDensity() { - final zzad z = mock(zzad.class); + final zzag z = mock(zzag.class); final Polyline polyline = spy(new Polyline(z)); final float density = 5; diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index 1ae73ca97cda..798380b5854d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.3.1 +version: 2.3.2 environment: sdk: ">=2.14.0 <3.0.0" From b82bb69bd3f63e2079246bbd0f808334c74b4eb9 Mon Sep 17 00:00:00 2001 From: Camille Simon <43054281+camsim99@users.noreply.github.com> Date: Thu, 29 Sep 2022 12:29:15 -0700 Subject: [PATCH 037/133] [camera] Re-land Add ProcessCameraProvider class to CameraX Plugin (#6508) --- .../camera_android_camerax/CHANGELOG.md | 1 + .../android/build.gradle | 23 +-- .../camerax/CameraAndroidCameraxPlugin.java | 31 +++- .../camerax/CameraInfoFlutterApiImpl.java | 3 +- .../camerax/GeneratedCameraXLibrary.java | 134 ++++++++++++++++++ .../ProcessCameraProviderFlutterApiImpl.java | 23 +++ .../ProcessCameraProviderHostApiImpl.java | 87 ++++++++++++ .../camerax/ProcessCameraProviderTest.java | 114 +++++++++++++++ ...roid_camera_camerax_flutter_api_impls.dart | 9 ++ .../lib/src/camerax_library.pigeon.dart | 109 ++++++++++++++ .../lib/src/process_camera_provider.dart | 119 ++++++++++++++++ .../pigeons/camerax_library.dart | 13 ++ .../test/process_camera_provider_test.dart | 96 +++++++++++++ .../process_camera_provider_test.mocks.dart | 40 ++++++ .../test/test_camerax_library.pigeon.dart | 50 +++++++ 15 files changed, 836 insertions(+), 16 deletions(-) create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java create mode 100644 packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java create mode 100644 packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart create mode 100644 packages/camera/camera_android_camerax/test/process_camera_provider_test.dart create mode 100644 packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 2bdfa594b3be..ce2fb9046c69 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -3,3 +3,4 @@ * Creates camera_android_camerax plugin for development. * Adds CameraInfo class and removes unnecessary code from plugin. * Adds CameraSelector class. +* Adds ProcessCameraProvider class. diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index 1772afebe429..b4209bbe62a6 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -36,16 +36,6 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } -dependencies { - // CameraX core library using the camera2 implementation must use same version number. - def camerax_version = "1.2.0-beta01" - implementation "androidx.camera:camera-core:${camerax_version}" - implementation "androidx.camera:camera-camera2:${camerax_version}" - implementation "androidx.camera:camera-lifecycle:${camerax_version}" - testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-inline:4.7.0' - testImplementation 'androidx.test:core:1.4.0' -} testOptions { unitTests.includeAndroidResources = true unitTests.returnDefaultValues = true @@ -58,3 +48,16 @@ dependencies { } } } + +dependencies { + // CameraX core library using the camera2 implementation must use same version number. + def camerax_version = "1.2.0-beta02" + implementation "androidx.camera:camera-core:${camerax_version}" + implementation "androidx.camera:camera-camera2:${camerax_version}" + implementation "androidx.camera:camera-lifecycle:${camerax_version}" + implementation 'com.google.guava:guava:31.1-android' + testImplementation 'junit:junit:4.13.2' + testImplementation 'org.mockito:mockito-inline:4.7.0' + testImplementation 'androidx.test:core:1.4.0' + testImplementation 'org.robolectric:robolectric:4.8' +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java index bb5756a7e3b9..b8fbaf539c32 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java @@ -15,6 +15,7 @@ public final class CameraAndroidCameraxPlugin implements FlutterPlugin, ActivityAware { private InstanceManager instanceManager; private FlutterPluginBinding pluginBinding; + private ProcessCameraProviderHostApiImpl processCameraProviderHostApi; /** * Initialize this within the {@code #configureFlutterEngine} of a Flutter activity or fragment. @@ -39,6 +40,10 @@ void setUp(BinaryMessenger binaryMessenger, Context context) { binaryMessenger, new JavaObjectHostApiImpl(instanceManager)); GeneratedCameraXLibrary.CameraSelectorHostApi.setup( binaryMessenger, new CameraSelectorHostApiImpl(binaryMessenger, instanceManager)); + processCameraProviderHostApi = + new ProcessCameraProviderHostApiImpl(binaryMessenger, instanceManager, context); + GeneratedCameraXLibrary.ProcessCameraProviderHostApi.setup( + binaryMessenger, processCameraProviderHostApi); } @Override @@ -60,15 +65,33 @@ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { // Activity Lifecycle methods: @Override - public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) {} + public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) { + updateContext(activityPluginBinding.getActivity()); + } @Override - public void onDetachedFromActivityForConfigChanges() {} + public void onDetachedFromActivityForConfigChanges() { + updateContext(pluginBinding.getApplicationContext()); + } @Override public void onReattachedToActivityForConfigChanges( - @NonNull ActivityPluginBinding activityPluginBinding) {} + @NonNull ActivityPluginBinding activityPluginBinding) { + updateContext(activityPluginBinding.getActivity()); + } @Override - public void onDetachedFromActivity() {} + public void onDetachedFromActivity() { + updateContext(pluginBinding.getApplicationContext()); + } + + /** + * Updates context that is used to fetch the corresponding instance of a {@code + * ProcessCameraProvider}. + */ + private void updateContext(Context context) { + if (processCameraProviderHostApi != null) { + processCameraProviderHostApi.setContext(context); + } + } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java index b5ba9fc1ff3b..c538e420cc7e 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraInfoFlutterApiImpl.java @@ -18,7 +18,6 @@ public CameraInfoFlutterApiImpl( } void create(CameraInfo cameraInfo, Reply reply) { - instanceManager.addHostCreatedInstance(cameraInfo); - create(instanceManager.getIdentifierForStrongReference(cameraInfo), reply); + create(instanceManager.addHostCreatedInstance(cameraInfo), reply); } } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java index e87a80db030c..041564c3bfcb 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java @@ -22,6 +22,13 @@ /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) public class GeneratedCameraXLibrary { + + public interface Result { + void success(T result); + + void error(Throwable error); + } + private static class JavaObjectHostApiCodec extends StandardMessageCodec { public static final JavaObjectHostApiCodec INSTANCE = new JavaObjectHostApiCodec(); @@ -311,6 +318,133 @@ public void create( } } + private static class ProcessCameraProviderHostApiCodec extends StandardMessageCodec { + public static final ProcessCameraProviderHostApiCodec INSTANCE = + new ProcessCameraProviderHostApiCodec(); + + private ProcessCameraProviderHostApiCodec() {} + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface ProcessCameraProviderHostApi { + void getInstance(Result result); + + @NonNull + List getAvailableCameraInfos(@NonNull Long identifier); + + /** The codec used by ProcessCameraProviderHostApi. */ + static MessageCodec getCodec() { + return ProcessCameraProviderHostApiCodec.INSTANCE; + } + + /** + * Sets up an instance of `ProcessCameraProviderHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup(BinaryMessenger binaryMessenger, ProcessCameraProviderHostApi api) { + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance", + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + Result resultCallback = + new Result() { + public void success(Long result) { + wrapped.put("result", result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + wrapped.put("error", wrapError(error)); + reply.reply(wrapped); + } + }; + + api.getInstance(resultCallback); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + reply.reply(wrapped); + } + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos", + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList) message; + Number identifierArg = (Number) args.get(0); + if (identifierArg == null) { + throw new NullPointerException("identifierArg unexpectedly null."); + } + List output = + api.getAvailableCameraInfos( + (identifierArg == null) ? null : identifierArg.longValue()); + wrapped.put("result", output); + } catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + private static class ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { + public static final ProcessCameraProviderFlutterApiCodec INSTANCE = + new ProcessCameraProviderFlutterApiCodec(); + + private ProcessCameraProviderFlutterApiCodec() {} + } + + /** Generated class from Pigeon that represents Flutter messages that can be called from Java. */ + public static class ProcessCameraProviderFlutterApi { + private final BinaryMessenger binaryMessenger; + + public ProcessCameraProviderFlutterApi(BinaryMessenger argBinaryMessenger) { + this.binaryMessenger = argBinaryMessenger; + } + + public interface Reply { + void reply(T reply); + } + + static MessageCodec getCodec() { + return ProcessCameraProviderFlutterApiCodec.INSTANCE; + } + + public void create(@NonNull Long identifierArg, Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create", + getCodec()); + channel.send( + new ArrayList(Arrays.asList(identifierArg)), + channelReply -> { + callback.reply(null); + }); + } + } + private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); errorMap.put("message", exception.toString()); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java new file mode 100644 index 000000000000..90c94d0c26cb --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderFlutterApiImpl.java @@ -0,0 +1,23 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import androidx.camera.lifecycle.ProcessCameraProvider; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ProcessCameraProviderFlutterApi; + +public class ProcessCameraProviderFlutterApiImpl extends ProcessCameraProviderFlutterApi { + public ProcessCameraProviderFlutterApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager) { + super(binaryMessenger); + this.instanceManager = instanceManager; + } + + private final InstanceManager instanceManager; + + void create(ProcessCameraProvider processCameraProvider, Reply reply) { + create(instanceManager.addHostCreatedInstance(processCameraProvider), reply); + } +} diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java new file mode 100644 index 000000000000..19c5eb5b3f70 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/ProcessCameraProviderHostApiImpl.java @@ -0,0 +1,87 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import android.content.Context; +import androidx.annotation.NonNull; +import androidx.camera.core.CameraInfo; +import androidx.camera.lifecycle.ProcessCameraProvider; +import androidx.core.content.ContextCompat; +import com.google.common.util.concurrent.ListenableFuture; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ProcessCameraProviderHostApi; +import java.util.ArrayList; +import java.util.List; + +public class ProcessCameraProviderHostApiImpl implements ProcessCameraProviderHostApi { + private final BinaryMessenger binaryMessenger; + private final InstanceManager instanceManager; + + private Context context; + + public ProcessCameraProviderHostApiImpl( + BinaryMessenger binaryMessenger, InstanceManager instanceManager, Context context) { + this.binaryMessenger = binaryMessenger; + this.instanceManager = instanceManager; + this.context = context; + } + + /** + * Sets the context that the {@code ProcessCameraProvider} will use to attach the lifecycle of the + * camera to. + * + *

If using the camera plugin in an add-to-app context, ensure that a new instance of the + * {@code ProcessCameraProvider} is fetched via {@code #getInstance} anytime the context changes. + */ + public void setContext(Context context) { + this.context = context; + } + + /** + * Returns the instance of the ProcessCameraProvider to manage the lifecycle of the camera for the + * current {@code Context}. + */ + @Override + public void getInstance(GeneratedCameraXLibrary.Result result) { + ListenableFuture processCameraProviderFuture = + ProcessCameraProvider.getInstance(context); + + processCameraProviderFuture.addListener( + () -> { + try { + // Camera provider is now guaranteed to be available. + ProcessCameraProvider processCameraProvider = processCameraProviderFuture.get(); + + if (!instanceManager.containsInstance(processCameraProvider)) { + final ProcessCameraProviderFlutterApiImpl flutterApi = + new ProcessCameraProviderFlutterApiImpl(binaryMessenger, instanceManager); + flutterApi.create(processCameraProvider, reply -> {}); + } + result.success(instanceManager.getIdentifierForStrongReference(processCameraProvider)); + } catch (Exception e) { + result.error(e); + } + }, + ContextCompat.getMainExecutor(context)); + } + + /** Returns cameras available to the ProcessCameraProvider. */ + @Override + public List getAvailableCameraInfos(@NonNull Long identifier) { + ProcessCameraProvider processCameraProvider = + (ProcessCameraProvider) instanceManager.getInstance(identifier); + + List availableCameras = processCameraProvider.getAvailableCameraInfos(); + List availableCamerasIds = new ArrayList(); + final CameraInfoFlutterApiImpl cameraInfoFlutterApi = + new CameraInfoFlutterApiImpl(binaryMessenger, instanceManager); + + for (CameraInfo cameraInfo : availableCameras) { + cameraInfoFlutterApi.create(cameraInfo, result -> {}); + availableCamerasIds.add(instanceManager.getIdentifierForStrongReference(cameraInfo)); + } + return availableCamerasIds; + } +} diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java new file mode 100644 index 000000000000..5008e4ef34b0 --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ProcessCameraProviderTest.java @@ -0,0 +1,114 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import androidx.camera.core.CameraInfo; +import androidx.camera.lifecycle.ProcessCameraProvider; +import androidx.test.core.app.ApplicationProvider; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import io.flutter.plugin.common.BinaryMessenger; +import java.util.Arrays; +import java.util.Objects; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +@RunWith(RobolectricTestRunner.class) +public class ProcessCameraProviderTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public ProcessCameraProvider processCameraProvider; + @Mock public BinaryMessenger mockBinaryMessenger; + + InstanceManager testInstanceManager; + private Context context; + + @Before + public void setUp() { + testInstanceManager = InstanceManager.open(identifier -> {}); + context = ApplicationProvider.getApplicationContext(); + } + + @After + public void tearDown() { + testInstanceManager.close(); + } + + @Test + public void getInstanceTest() { + final ProcessCameraProviderHostApiImpl processCameraProviderHostApi = + new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + final ListenableFuture processCameraProviderFuture = + spy(Futures.immediateFuture(processCameraProvider)); + final GeneratedCameraXLibrary.Result mockResult = + mock(GeneratedCameraXLibrary.Result.class); + + testInstanceManager.addDartCreatedInstance(processCameraProvider, 0); + + try (MockedStatic mockedProcessCameraProvider = + Mockito.mockStatic(ProcessCameraProvider.class)) { + mockedProcessCameraProvider + .when(() -> ProcessCameraProvider.getInstance(context)) + .thenAnswer( + (Answer>) + invocation -> processCameraProviderFuture); + + final ArgumentCaptor runnableCaptor = ArgumentCaptor.forClass(Runnable.class); + + processCameraProviderHostApi.getInstance(mockResult); + verify(processCameraProviderFuture).addListener(runnableCaptor.capture(), any()); + runnableCaptor.getValue().run(); + verify(mockResult).success(0L); + } + } + + @Test + public void getAvailableCameraInfosTest() { + final ProcessCameraProviderHostApiImpl processCameraProviderHostApi = + new ProcessCameraProviderHostApiImpl(mockBinaryMessenger, testInstanceManager, context); + final CameraInfo mockCameraInfo = mock(CameraInfo.class); + + testInstanceManager.addDartCreatedInstance(processCameraProvider, 0); + testInstanceManager.addDartCreatedInstance(mockCameraInfo, 1); + + when(processCameraProvider.getAvailableCameraInfos()).thenReturn(Arrays.asList(mockCameraInfo)); + + assertEquals(processCameraProviderHostApi.getAvailableCameraInfos(0L), Arrays.asList(1L)); + verify(processCameraProvider).getAvailableCameraInfos(); + } + + @Test + public void flutterApiCreateTest() { + final ProcessCameraProviderFlutterApiImpl spyFlutterApi = + spy(new ProcessCameraProviderFlutterApiImpl(mockBinaryMessenger, testInstanceManager)); + + spyFlutterApi.create(processCameraProvider, reply -> {}); + + final long identifier = + Objects.requireNonNull( + testInstanceManager.getIdentifierForStrongReference(processCameraProvider)); + verify(spyFlutterApi).create(eq(identifier), any()); + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart index 576260c0b7b8..9c6564a06c08 100644 --- a/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart +++ b/packages/camera/camera_android_camerax/lib/src/android_camera_camerax_flutter_api_impls.dart @@ -6,6 +6,7 @@ import 'camera_info.dart'; import 'camera_selector.dart'; import 'camerax_library.pigeon.dart'; import 'java_object.dart'; +import 'process_camera_provider.dart'; /// Handles initialization of Flutter APIs for the Android CameraX library. class AndroidCameraXCameraFlutterApis { @@ -14,6 +15,7 @@ class AndroidCameraXCameraFlutterApis { JavaObjectFlutterApiImpl? javaObjectFlutterApi, CameraInfoFlutterApiImpl? cameraInfoFlutterApi, CameraSelectorFlutterApiImpl? cameraSelectorFlutterApi, + ProcessCameraProviderFlutterApiImpl? processCameraProviderFlutterApi, }) { this.javaObjectFlutterApi = javaObjectFlutterApi ?? JavaObjectFlutterApiImpl(); @@ -21,6 +23,8 @@ class AndroidCameraXCameraFlutterApis { cameraInfoFlutterApi ?? CameraInfoFlutterApiImpl(); this.cameraSelectorFlutterApi = cameraSelectorFlutterApi ?? CameraSelectorFlutterApiImpl(); + this.processCameraProviderFlutterApi = processCameraProviderFlutterApi ?? + ProcessCameraProviderFlutterApiImpl(); } static bool _haveBeenSetUp = false; @@ -40,12 +44,17 @@ class AndroidCameraXCameraFlutterApis { /// Flutter Api for [CameraSelector]. late final CameraSelectorFlutterApiImpl cameraSelectorFlutterApi; + /// Flutter Api for [ProcessCameraProvider]. + late final ProcessCameraProviderFlutterApiImpl + processCameraProviderFlutterApi; + /// Ensures all the Flutter APIs have been setup to receive calls from native code. void ensureSetUp() { if (!_haveBeenSetUp) { JavaObjectFlutterApi.setup(javaObjectFlutterApi); CameraInfoFlutterApi.setup(cameraInfoFlutterApi); CameraSelectorFlutterApi.setup(cameraSelectorFlutterApi); + ProcessCameraProviderFlutterApi.setup(processCameraProviderFlutterApi); _haveBeenSetUp = true; } } diff --git a/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart b/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart index a399001d35b0..c0b052378def 100644 --- a/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart +++ b/packages/camera/camera_android_camerax/lib/src/camerax_library.pigeon.dart @@ -263,3 +263,112 @@ abstract class CameraSelectorFlutterApi { } } } + +class _ProcessCameraProviderHostApiCodec extends StandardMessageCodec { + const _ProcessCameraProviderHostApiCodec(); +} + +class ProcessCameraProviderHostApi { + /// Constructor for [ProcessCameraProviderHostApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + ProcessCameraProviderHostApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = + _ProcessCameraProviderHostApiCodec(); + + Future getInstance() async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send(null) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else if (replyMap['result'] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyMap['result'] as int?)!; + } + } + + Future> getAvailableCameraInfos(int arg_identifier) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, + binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_identifier]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = + (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else if (replyMap['result'] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyMap['result'] as List?)!.cast(); + } + } +} + +class _ProcessCameraProviderFlutterApiCodec extends StandardMessageCodec { + const _ProcessCameraProviderFlutterApiCodec(); +} + +abstract class ProcessCameraProviderFlutterApi { + static const MessageCodec codec = + _ProcessCameraProviderFlutterApiCodec(); + + void create(int identifier); + static void setup(ProcessCameraProviderFlutterApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderFlutterApi.create was null, expected non-null int.'); + api.create(arg_identifier!); + return; + }); + } + } + } +} diff --git a/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart new file mode 100644 index 000000000000..e2b588d15faa --- /dev/null +++ b/packages/camera/camera_android_camerax/lib/src/process_camera_provider.dart @@ -0,0 +1,119 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/services.dart'; + +import 'android_camera_camerax_flutter_api_impls.dart'; +import 'camera_info.dart'; +import 'camerax_library.pigeon.dart'; +import 'instance_manager.dart'; +import 'java_object.dart'; + +/// Provides an object to manage the camera. +/// +/// See https://developer.android.com/reference/androidx/camera/lifecycle/ProcessCameraProvider. +class ProcessCameraProvider extends JavaObject { + /// Creates a detached [ProcessCameraProvider]. + ProcessCameraProvider.detached( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) + : super.detached( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager) { + _api = ProcessCameraProviderHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + } + + late final ProcessCameraProviderHostApiImpl _api; + + /// Gets an instance of [ProcessCameraProvider]. + static Future getInstance( + {BinaryMessenger? binaryMessenger, InstanceManager? instanceManager}) { + AndroidCameraXCameraFlutterApis.instance.ensureSetUp(); + final ProcessCameraProviderHostApiImpl api = + ProcessCameraProviderHostApiImpl( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + + return api.getInstancefromInstances(); + } + + /// Retrieves the cameras available to the device. + Future> getAvailableCameraInfos() { + return _api.getAvailableCameraInfosFromInstances(this); + } +} + +/// Host API implementation of [ProcessCameraProvider]. +class ProcessCameraProviderHostApiImpl extends ProcessCameraProviderHostApi { + /// Creates a [ProcessCameraProviderHostApiImpl]. + ProcessCameraProviderHostApiImpl( + {this.binaryMessenger, InstanceManager? instanceManager}) + : super(binaryMessenger: binaryMessenger) { + this.instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + } + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + late final InstanceManager instanceManager; + + /// Retrieves an instance of a ProcessCameraProvider from the context of + /// the FlutterActivity. + Future getInstancefromInstances() async { + return instanceManager.getInstanceWithWeakReference(await getInstance())! + as ProcessCameraProvider; + } + + /// Retrives the list of CameraInfos corresponding to the available cameras. + Future> getAvailableCameraInfosFromInstances( + ProcessCameraProvider instance) async { + int? identifier = instanceManager.getIdentifier(instance); + identifier ??= instanceManager.addDartCreatedInstance(instance, + onCopy: (ProcessCameraProvider original) { + return ProcessCameraProvider.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + }); + + final List cameraInfos = await getAvailableCameraInfos(identifier); + return (cameraInfos.map((int? id) => + instanceManager.getInstanceWithWeakReference(id!)! as CameraInfo)) + .toList(); + } +} + +/// Flutter API Implementation of [ProcessCameraProvider]. +class ProcessCameraProviderFlutterApiImpl + implements ProcessCameraProviderFlutterApi { + /// Constructs a [ProcessCameraProviderFlutterApiImpl]. + ProcessCameraProviderFlutterApiImpl({ + this.binaryMessenger, + InstanceManager? instanceManager, + }) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager; + + /// Receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used which routes to + /// the host platform. + final BinaryMessenger? binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + final InstanceManager instanceManager; + + @override + void create(int identifier) { + instanceManager.addHostCreatedInstance( + ProcessCameraProvider.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager), + identifier, + onCopy: (ProcessCameraProvider original) { + return ProcessCameraProvider.detached( + binaryMessenger: binaryMessenger, instanceManager: instanceManager); + }, + ); + } +} diff --git a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart index aace7a06b1fd..4d7d96910246 100644 --- a/packages/camera/camera_android_camerax/pigeons/camerax_library.dart +++ b/packages/camera/camera_android_camerax/pigeons/camerax_library.dart @@ -57,3 +57,16 @@ abstract class CameraSelectorHostApi { abstract class CameraSelectorFlutterApi { void create(int identifier, int? lensFacing); } + +@HostApi(dartHostTestHandler: 'TestProcessCameraProviderHostApi') +abstract class ProcessCameraProviderHostApi { + @async + int getInstance(); + + List getAvailableCameraInfos(int identifier); +} + +@FlutterApi() +abstract class ProcessCameraProviderFlutterApi { + void create(int identifier); +} diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart new file mode 100644 index 000000000000..65e7d00ddaea --- /dev/null +++ b/packages/camera/camera_android_camerax/test/process_camera_provider_test.dart @@ -0,0 +1,96 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:camera_android_camerax/src/camera_info.dart'; +import 'package:camera_android_camerax/src/instance_manager.dart'; +import 'package:camera_android_camerax/src/process_camera_provider.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'process_camera_provider_test.mocks.dart'; +import 'test_camerax_library.pigeon.dart'; + +@GenerateMocks([TestProcessCameraProviderHostApi]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ProcessCameraProvider', () { + tearDown(() => TestProcessCameraProviderHostApi.setup(null)); + + test('getInstanceTest', () async { + final MockTestProcessCameraProviderHostApi mockApi = + MockTestProcessCameraProviderHostApi(); + TestProcessCameraProviderHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ProcessCameraProvider processCameraProvider = + ProcessCameraProvider.detached( + instanceManager: instanceManager, + ); + + instanceManager.addHostCreatedInstance( + processCameraProvider, + 0, + onCopy: (_) => ProcessCameraProvider.detached(), + ); + + when(mockApi.getInstance()).thenAnswer((_) async => 0); + expect( + await ProcessCameraProvider.getInstance( + instanceManager: instanceManager), + equals(processCameraProvider)); + verify(mockApi.getInstance()); + }); + + test('getAvailableCameraInfosTest', () async { + final MockTestProcessCameraProviderHostApi mockApi = + MockTestProcessCameraProviderHostApi(); + TestProcessCameraProviderHostApi.setup(mockApi); + + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ProcessCameraProvider processCameraProvider = + ProcessCameraProvider.detached( + instanceManager: instanceManager, + ); + + instanceManager.addHostCreatedInstance( + processCameraProvider, + 0, + onCopy: (_) => ProcessCameraProvider.detached(), + ); + final CameraInfo fakeAvailableCameraInfo = + CameraInfo.detached(instanceManager: instanceManager); + instanceManager.addHostCreatedInstance( + fakeAvailableCameraInfo, + 1, + onCopy: (_) => CameraInfo.detached(), + ); + + when(mockApi.getAvailableCameraInfos(0)).thenReturn([1]); + expect(await processCameraProvider.getAvailableCameraInfos(), + equals([fakeAvailableCameraInfo])); + verify(mockApi.getAvailableCameraInfos(0)); + }); + + test('flutterApiCreateTest', () { + final InstanceManager instanceManager = InstanceManager( + onWeakReferenceRemoved: (_) {}, + ); + final ProcessCameraProviderFlutterApiImpl flutterApi = + ProcessCameraProviderFlutterApiImpl( + instanceManager: instanceManager, + ); + + flutterApi.create(0); + + expect(instanceManager.getInstanceWithWeakReference(0), + isA()); + }); + }); +} diff --git a/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart new file mode 100644 index 000000000000..9fcfe690c062 --- /dev/null +++ b/packages/camera/camera_android_camerax/test/process_camera_provider_test.mocks.dart @@ -0,0 +1,40 @@ +// Mocks generated by Mockito 5.3.0 from annotations +// in camera_android_camerax/test/process_camera_provider_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; + +import 'test_camerax_library.pigeon.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TestProcessCameraProviderHostApi]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTestProcessCameraProviderHostApi extends _i1.Mock + implements _i2.TestProcessCameraProviderHostApi { + MockTestProcessCameraProviderHostApi() { + _i1.throwOnMissingStub(this); + } + + @override + _i3.Future getInstance() => + (super.noSuchMethod(Invocation.method(#getInstance, []), + returnValue: _i3.Future.value(0)) as _i3.Future); + @override + List getAvailableCameraInfos(int? identifier) => (super.noSuchMethod( + Invocation.method(#getAvailableCameraInfos, [identifier]), + returnValue: []) as List); +} diff --git a/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart b/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart index b10e14e9d518..2196b73d7fdb 100644 --- a/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart +++ b/packages/camera/camera_android_camerax/test/test_camerax_library.pigeon.dart @@ -135,3 +135,53 @@ abstract class TestCameraSelectorHostApi { } } } + +class _TestProcessCameraProviderHostApiCodec extends StandardMessageCodec { + const _TestProcessCameraProviderHostApiCodec(); +} + +abstract class TestProcessCameraProviderHostApi { + static const MessageCodec codec = + _TestProcessCameraProviderHostApiCodec(); + + Future getInstance(); + List getAvailableCameraInfos(int identifier); + static void setup(TestProcessCameraProviderHostApi? api, + {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getInstance', codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + // ignore message + final int output = await api.getInstance(); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos', + codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.ProcessCameraProviderHostApi.getAvailableCameraInfos was null, expected non-null int.'); + final List output = + api.getAvailableCameraInfos(arg_identifier!); + return {'result': output}; + }); + } + } + } +} From 35b975504b594edce0685dbf8372929ce1d4dd48 Mon Sep 17 00:00:00 2001 From: eugerossetto <101729072+eugerossetto@users.noreply.github.com> Date: Fri, 30 Sep 2022 11:53:10 -0300 Subject: [PATCH 038/133] [image_picker_windows] Annotate XTypeGroup constructor with // ignore: prefer_const_constructors (#6504) --- .../image_picker_windows/lib/image_picker_windows.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/image_picker/image_picker_windows/lib/image_picker_windows.dart b/packages/image_picker/image_picker_windows/lib/image_picker_windows.dart index 0c6d6fbd6d66..10880d12ae6b 100644 --- a/packages/image_picker/image_picker_windows/lib/image_picker_windows.dart +++ b/packages/image_picker/image_picker_windows/lib/image_picker_windows.dart @@ -119,6 +119,8 @@ class ImagePickerWindows extends ImagePickerPlatform { 'ImageSource.gallery is currently the only supported source on Windows'); } final XTypeGroup typeGroup = + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'images', extensions: imageFormats); final XFile? file = await fileSelector .openFile(acceptedTypeGroups: [typeGroup]); @@ -143,6 +145,8 @@ class ImagePickerWindows extends ImagePickerPlatform { 'ImageSource.gallery is currently the only supported source on Windows'); } final XTypeGroup typeGroup = + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'videos', extensions: videoFormats); final XFile? file = await fileSelector .openFile(acceptedTypeGroups: [typeGroup]); @@ -159,6 +163,8 @@ class ImagePickerWindows extends ImagePickerPlatform { int? imageQuality, }) async { final XTypeGroup typeGroup = + // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 + // ignore: prefer_const_constructors XTypeGroup(label: 'images', extensions: imageFormats); final List files = await fileSelector .openFiles(acceptedTypeGroups: [typeGroup]); From e8f19eda9c483ade75c7097b08fd8981cf24c93a Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Fri, 30 Sep 2022 10:53:12 -0400 Subject: [PATCH 039/133] [tool] Only run postsubmit on changed packages (#6516) --- script/tool/CHANGELOG.md | 6 +- .../lib/src/common/git_version_finder.dart | 2 +- .../tool/lib/src/common/package_command.dart | 38 +++++++------ script/tool/pubspec.yaml | 2 +- .../test/common/package_command_test.dart | 57 ++++++++++++++----- 5 files changed, 71 insertions(+), 34 deletions(-) diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index bf549d4e79dc..f62509040a3d 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,5 +1,9 @@ -## 0.11.1 +## 12.0 +* Changes the behavior of `--packages-for-branch` on main/master to run for + packages changed in the last commit, rather than running for all packages. + This allows CI to test the same filtered set of packages in post-submit as are + tested in presubmit. * Adds a `fix` command to run `dart fix --apply` in target packages. ## 0.11 diff --git a/script/tool/lib/src/common/git_version_finder.dart b/script/tool/lib/src/common/git_version_finder.dart index eb8fba6b76b8..b135424827a6 100644 --- a/script/tool/lib/src/common/git_version_finder.dart +++ b/script/tool/lib/src/common/git_version_finder.dart @@ -103,7 +103,7 @@ class GitVersionFinder { ['merge-base', '--fork-point', 'FETCH_HEAD', 'HEAD'], throwOnError: false); final String stdout = (baseShaFromMergeBase.stdout as String? ?? '').trim(); - final String stderr = (baseShaFromMergeBase.stdout as String? ?? '').trim(); + final String stderr = (baseShaFromMergeBase.stderr as String? ?? '').trim(); if (stderr.isNotEmpty || stdout.isEmpty) { baseShaFromMergeBase = await baseGitDir .runCommand(['merge-base', 'FETCH_HEAD', 'HEAD']); diff --git a/script/tool/lib/src/common/package_command.dart b/script/tool/lib/src/common/package_command.dart index 60d7ecc80076..1d82c4e936b6 100644 --- a/script/tool/lib/src/common/package_command.dart +++ b/script/tool/lib/src/common/package_command.dart @@ -84,9 +84,8 @@ abstract class PackageCommand extends Command { 'Cannot be combined with $_packagesArg.\n', hide: true); argParser.addFlag(_packagesForBranchArg, - help: - 'This runs on all packages (equivalent to no package selection flag)\n' - 'on main (or master), and behaves like --run-on-changed-packages on ' + help: 'This runs on all packages changed in the last commit on main ' + '(or master), and behaves like --run-on-changed-packages on ' 'any other branch.\n\n' 'Cannot be combined with $_packagesArg.\n\n' 'This is intended for use in CI.\n', @@ -311,9 +310,9 @@ abstract class PackageCommand extends Command { Set packages = Set.from(getStringListArg(_packagesArg)); - final bool runOnChangedPackages; + final GitVersionFinder? changedFileFinder; if (getBoolArg(_runOnChangedPackagesArg)) { - runOnChangedPackages = true; + changedFileFinder = await retrieveVersionFinder(); } else if (getBoolArg(_packagesForBranchArg)) { final String? branch = await _getBranch(); if (branch == null) { @@ -321,24 +320,28 @@ abstract class PackageCommand extends Command { 'only be used in a git repository.'); throw ToolExit(exitInvalidArguments); } else { - runOnChangedPackages = branch != 'master' && branch != 'main'; - // Log the mode for auditing what was intended to run. - print('--$_packagesForBranchArg: running on ' - '${runOnChangedPackages ? 'changed' : 'all'} packages'); + // Configure the change finder the correct mode for the branch. + final bool lastCommitOnly = branch == 'main' || branch == 'master'; + if (lastCommitOnly) { + // Log the mode to make it easier to audit logs to see that the + // intended diff was used. + print('--$_packagesForBranchArg: running on default branch; ' + 'using parent commit as the diff base.'); + changedFileFinder = GitVersionFinder(await gitDir, 'HEAD~'); + } else { + changedFileFinder = await retrieveVersionFinder(); + } } } else { - runOnChangedPackages = false; + changedFileFinder = null; } - final Set excludedPackageNames = getExcludedPackageNames(); - - if (runOnChangedPackages) { - final GitVersionFinder gitVersionFinder = await retrieveVersionFinder(); - final String baseSha = await gitVersionFinder.getBaseSha(); + if (changedFileFinder != null) { + final String baseSha = await changedFileFinder.getBaseSha(); print( - 'Running for all packages that have changed relative to "$baseSha"\n'); + 'Running for all packages that have diffs relative to "$baseSha"\n'); final List changedFiles = - await gitVersionFinder.getChangedFiles(); + await changedFileFinder.getChangedFiles(); if (!_changesRequireFullTest(changedFiles)) { packages = _getChangedPackageNames(changedFiles); } @@ -362,6 +365,7 @@ abstract class PackageCommand extends Command { .childDirectory('third_party') .childDirectory('packages'); + final Set excludedPackageNames = getExcludedPackageNames(); for (final Directory dir in [ packagesDir, if (thirdPartyPackagesDirectory.existsSync()) thirdPartyPackagesDirectory, diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml index 246c2ade2564..9e767ad724c0 100644 --- a/script/tool/pubspec.yaml +++ b/script/tool/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_plugin_tools description: Productivity utils for flutter/plugins and flutter/packages repository: https://github.com/flutter/plugins/tree/main/script/tool -version: 0.11.0 +version: 0.12.0 dependencies: args: ^2.1.0 diff --git a/script/tool/test/common/package_command_test.dart b/script/tool/test/common/package_command_test.dart index c3d1ee343ff4..be21b86bff79 100644 --- a/script/tool/test/common/package_command_test.dart +++ b/script/tool/test/common/package_command_test.dart @@ -523,7 +523,7 @@ packages/plugin1/CHANGELOG output, containsAllInOrder([ contains( - 'Running for all packages that have changed relative to "main"'), + 'Running for all packages that have diffs relative to "main"'), ])); expect(command.plugins, unorderedEquals([plugin1.path])); @@ -732,13 +732,17 @@ packages/b_package/lib/src/foo.dart }); group('--packages-for-branch', () { - test('only tests changed packages on a branch', () async { + test('only tests changed packages relative to the merge base on a branch', + () async { processRunner.mockProcessesForExecutable['git-diff'] = [ MockProcess(stdout: 'packages/plugin1/plugin1.dart'), ]; processRunner.mockProcessesForExecutable['git-rev-parse'] = [ MockProcess(stdout: 'a-branch'), ]; + processRunner.mockProcessesForExecutable['git-merge-base'] = [ + MockProcess(stdout: 'abc123'), + ]; final RepositoryPackage plugin1 = createFakePlugin('plugin1', packagesDir); createFakePlugin('plugin2', packagesDir); @@ -750,11 +754,20 @@ packages/b_package/lib/src/foo.dart expect( output, containsAllInOrder([ - contains('--packages-for-branch: running on changed packages'), + contains( + 'Running for all packages that have diffs relative to "abc123"'), ])); + // Ensure that it's diffing against the merge-base. + expect( + processRunner.recordedCalls, + contains( + const ProcessCall( + 'git-diff', ['--name-only', 'abc123', 'HEAD'], null), + )); }); - test('tests all packages on main', () async { + test('only tests changed packages relative to the previous commit on main', + () async { processRunner.mockProcessesForExecutable['git-diff'] = [ MockProcess(stdout: 'packages/plugin1/plugin1.dart'), ]; @@ -763,19 +776,27 @@ packages/b_package/lib/src/foo.dart ]; final RepositoryPackage plugin1 = createFakePlugin('plugin1', packagesDir); - final RepositoryPackage plugin2 = - createFakePlugin('plugin2', packagesDir); + createFakePlugin('plugin2', packagesDir); final List output = await runCapturingPrint( runner, ['sample', '--packages-for-branch']); - expect(command.plugins, - unorderedEquals([plugin1.path, plugin2.path])); + expect(command.plugins, unorderedEquals([plugin1.path])); expect( output, containsAllInOrder([ - contains('--packages-for-branch: running on all packages'), + contains('--packages-for-branch: running on default branch; ' + 'using parent commit as the diff base'), + contains( + 'Running for all packages that have diffs relative to "HEAD~"'), ])); + // Ensure that it's diffing against the prior commit. + expect( + processRunner.recordedCalls, + contains( + const ProcessCall( + 'git-diff', ['--name-only', 'HEAD~', 'HEAD'], null), + )); }); test('tests all packages on master', () async { @@ -787,19 +808,27 @@ packages/b_package/lib/src/foo.dart ]; final RepositoryPackage plugin1 = createFakePlugin('plugin1', packagesDir); - final RepositoryPackage plugin2 = - createFakePlugin('plugin2', packagesDir); + createFakePlugin('plugin2', packagesDir); final List output = await runCapturingPrint( runner, ['sample', '--packages-for-branch']); - expect(command.plugins, - unorderedEquals([plugin1.path, plugin2.path])); + expect(command.plugins, unorderedEquals([plugin1.path])); expect( output, containsAllInOrder([ - contains('--packages-for-branch: running on all packages'), + contains('--packages-for-branch: running on default branch; ' + 'using parent commit as the diff base'), + contains( + 'Running for all packages that have diffs relative to "HEAD~"'), ])); + // Ensure that it's diffing against the prior commit. + expect( + processRunner.recordedCalls, + contains( + const ProcessCall( + 'git-diff', ['--name-only', 'HEAD~', 'HEAD'], null), + )); }); test('throws if getting the branch fails', () async { From dc5f1855cb628a38dc52ca518189a3d97a599cbd Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 30 Sep 2022 11:54:13 -0400 Subject: [PATCH 040/133] Roll Flutter from a11bef968893 to 99fb2d36e807 (20 revisions) (#6520) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 953ea3223c85..52837a9367c2 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -a11bef968893d5c43a2d70cff649d251b8681277 +99fb2d36e80737c16b51b3e014fc996c901fdabe From b7bb9db36c8175298c7276b5f6e549ad5ca7cf9a Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Fri, 30 Sep 2022 17:55:50 -0400 Subject: [PATCH 041/133] [tool] Improve changed-package run mode logging (#6521) --- .../tool/lib/src/common/package_command.dart | 9 ++-- .../test/common/package_command_test.dart | 51 ++++++++++++++++--- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/script/tool/lib/src/common/package_command.dart b/script/tool/lib/src/common/package_command.dart index 1d82c4e936b6..0e83d03e9846 100644 --- a/script/tool/lib/src/common/package_command.dart +++ b/script/tool/lib/src/common/package_command.dart @@ -338,11 +338,14 @@ abstract class PackageCommand extends Command { if (changedFileFinder != null) { final String baseSha = await changedFileFinder.getBaseSha(); - print( - 'Running for all packages that have diffs relative to "$baseSha"\n'); final List changedFiles = await changedFileFinder.getChangedFiles(); - if (!_changesRequireFullTest(changedFiles)) { + if (_changesRequireFullTest(changedFiles)) { + print('Running for all packages, since a file has changed that could ' + 'affect the entire repository.'); + } else { + print( + 'Running for all packages that have diffs relative to "$baseSha"\n'); packages = _getChangedPackageNames(changedFiles); } } else if (getBoolArg(_runOnDirtyPackagesArg)) { diff --git a/script/tool/test/common/package_command_test.dart b/script/tool/test/common/package_command_test.dart index be21b86bff79..aa0a20253955 100644 --- a/script/tool/test/common/package_command_test.dart +++ b/script/tool/test/common/package_command_test.dart @@ -408,11 +408,18 @@ packages/plugin1/CHANGELOG createFakePlugin('plugin1', packagesDir); final RepositoryPackage plugin2 = createFakePlugin('plugin2', packagesDir); - await runCapturingPrint(runner, + + final List output = await runCapturingPrint(runner, ['sample', '--base-sha=main', '--run-on-changed-packages']); expect(command.plugins, unorderedEquals([plugin1.path, plugin2.path])); + expect( + output, + containsAllInOrder([ + contains('Running for all packages, since a file has changed ' + 'that could affect the entire repository.') + ])); }); test('all plugins should be tested if .ci.yaml changes', () async { @@ -426,11 +433,17 @@ packages/plugin1/CHANGELOG createFakePlugin('plugin1', packagesDir); final RepositoryPackage plugin2 = createFakePlugin('plugin2', packagesDir); - await runCapturingPrint(runner, + final List output = await runCapturingPrint(runner, ['sample', '--base-sha=main', '--run-on-changed-packages']); expect(command.plugins, unorderedEquals([plugin1.path, plugin2.path])); + expect( + output, + containsAllInOrder([ + contains('Running for all packages, since a file has changed ' + 'that could affect the entire repository.') + ])); }); test('all plugins should be tested if anything in .ci/ changes', @@ -445,14 +458,20 @@ packages/plugin1/CHANGELOG createFakePlugin('plugin1', packagesDir); final RepositoryPackage plugin2 = createFakePlugin('plugin2', packagesDir); - await runCapturingPrint(runner, + final List output = await runCapturingPrint(runner, ['sample', '--base-sha=main', '--run-on-changed-packages']); expect(command.plugins, unorderedEquals([plugin1.path, plugin2.path])); + expect( + output, + containsAllInOrder([ + contains('Running for all packages, since a file has changed ' + 'that could affect the entire repository.') + ])); }); - test('all plugins should be tested if anything in script changes.', + test('all plugins should be tested if anything in script/ changes.', () async { processRunner.mockProcessesForExecutable['git-diff'] = [ MockProcess(stdout: ''' @@ -464,11 +483,17 @@ packages/plugin1/CHANGELOG createFakePlugin('plugin1', packagesDir); final RepositoryPackage plugin2 = createFakePlugin('plugin2', packagesDir); - await runCapturingPrint(runner, + final List output = await runCapturingPrint(runner, ['sample', '--base-sha=main', '--run-on-changed-packages']); expect(command.plugins, unorderedEquals([plugin1.path, plugin2.path])); + expect( + output, + containsAllInOrder([ + contains('Running for all packages, since a file has changed ' + 'that could affect the entire repository.') + ])); }); test('all plugins should be tested if the root analysis options change.', @@ -483,11 +508,17 @@ packages/plugin1/CHANGELOG createFakePlugin('plugin1', packagesDir); final RepositoryPackage plugin2 = createFakePlugin('plugin2', packagesDir); - await runCapturingPrint(runner, + final List output = await runCapturingPrint(runner, ['sample', '--base-sha=main', '--run-on-changed-packages']); expect(command.plugins, unorderedEquals([plugin1.path, plugin2.path])); + expect( + output, + containsAllInOrder([ + contains('Running for all packages, since a file has changed ' + 'that could affect the entire repository.') + ])); }); test('all plugins should be tested if formatting options change.', @@ -502,11 +533,17 @@ packages/plugin1/CHANGELOG createFakePlugin('plugin1', packagesDir); final RepositoryPackage plugin2 = createFakePlugin('plugin2', packagesDir); - await runCapturingPrint(runner, + final List output = await runCapturingPrint(runner, ['sample', '--base-sha=main', '--run-on-changed-packages']); expect(command.plugins, unorderedEquals([plugin1.path, plugin2.path])); + expect( + output, + containsAllInOrder([ + contains('Running for all packages, since a file has changed ' + 'that could affect the entire repository.') + ])); }); test('Only changed plugin should be tested.', () async { From 28c9c0d034d952c0b5bab6674133946af119c3cd Mon Sep 17 00:00:00 2001 From: eugerossetto <101729072+eugerossetto@users.noreply.github.com> Date: Fri, 30 Sep 2022 21:53:05 -0300 Subject: [PATCH 042/133] [file_selector] Convert XTypeGroup to const (#6476) --- .../CHANGELOG.md | 4 +++ .../src/types/x_type_group/x_type_group.dart | 28 +++++++++++-------- .../pubspec.yaml | 2 +- .../method_channel_file_selector_test.dart | 12 ++++---- .../test/x_type_group_test.dart | 12 ++++---- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md index c4ee86a4ce19..ad1fe2cb6cef 100644 --- a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md +++ b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.0 + +* Makes `XTypeGroup`'s constructor constant. + ## 2.1.1 * Updates imports for `prefer_relative_imports`. diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart b/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart index 506dc1ce2de9..00cd56563c32 100644 --- a/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart +++ b/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart @@ -1,37 +1,43 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/foundation.dart' show immutable; -/// A set of allowed XTypes +/// A set of allowed XTypes. +@immutable class XTypeGroup { /// Creates a new group with the given label and file extensions. /// /// A group with none of the type options provided indicates that any type is /// allowed. - XTypeGroup({ + const XTypeGroup({ this.label, List? extensions, this.mimeTypes, this.macUTIs, this.webWildCards, - }) : extensions = _removeLeadingDots(extensions); + }) : _extensions = extensions; - /// The 'name' or reference to this group of types + /// The 'name' or reference to this group of types. final String? label; - /// The extensions for this group - final List? extensions; - - /// The MIME types for this group + /// The MIME types for this group. final List? mimeTypes; - /// The UTIs for this group + /// The UTIs for this group. final List? macUTIs; - /// The web wild cards for this group (ex: image/*, video/*) + /// The web wild cards for this group (ex: image/*, video/*). final List? webWildCards; - /// Converts this object into a JSON formatted object + final List? _extensions; + + /// The extensions for this group. + List? get extensions { + return _removeLeadingDots(_extensions); + } + + /// Converts this object into a JSON formatted object. Map toJSON() { return { 'label': label, diff --git a/packages/file_selector/file_selector_platform_interface/pubspec.yaml b/packages/file_selector/file_selector_platform_interface/pubspec.yaml index b01af3501cc7..c4500061a3a1 100644 --- a/packages/file_selector/file_selector_platform_interface/pubspec.yaml +++ b/packages/file_selector/file_selector_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.1.1 +version: 2.2.0 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart b/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart index 33f9fbf45a8b..0f5f3a17ae0c 100644 --- a/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart +++ b/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart @@ -26,14 +26,14 @@ void main() { group('#openFile', () { test('passes the accepted type groups correctly', () async { - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -91,14 +91,14 @@ void main() { }); group('#openFiles', () { test('passes the accepted type groups correctly', () async { - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -157,14 +157,14 @@ void main() { group('#getSavePath', () { test('passes the accepted type groups correctly', () async { - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], diff --git a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart index e09605c109c5..107cdc3a2538 100644 --- a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart +++ b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart @@ -31,7 +31,7 @@ void main() { }); test('A wildcard group can be created', () { - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'Any', ); @@ -44,7 +44,7 @@ void main() { }); test('allowsAny treats empty arrays the same as null', () { - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'Any', extensions: [], mimeTypes: [], @@ -56,13 +56,13 @@ void main() { }); test('allowsAny returns false if anything is set', () { - final XTypeGroup extensionOnly = + const XTypeGroup extensionOnly = XTypeGroup(label: 'extensions', extensions: ['txt']); - final XTypeGroup mimeOnly = + const XTypeGroup mimeOnly = XTypeGroup(label: 'mime', mimeTypes: ['text/plain']); - final XTypeGroup utiOnly = + const XTypeGroup utiOnly = XTypeGroup(label: 'utis', macUTIs: ['public.text']); - final XTypeGroup webOnly = + const XTypeGroup webOnly = XTypeGroup(label: 'web', webWildCards: ['.txt']); expect(extensionOnly.allowsAny, false); From a295dc1288f4fdf2383b1bdc442137cc7b689c72 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 3 Oct 2022 11:43:32 -0400 Subject: [PATCH 043/133] Roll Flutter from 99fb2d36e807 to a4b246f2a88c (28 revisions) (#6530) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 52837a9367c2..df69827cfd5a 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -99fb2d36e80737c16b51b3e014fc996c901fdabe +a4b246f2a88c3f5b838c5abff8063a4e7436d44b From 25e10b2a036d7684edb7927751e8c43411ea0695 Mon Sep 17 00:00:00 2001 From: hellohuanlin <41930132+hellohuanlin@users.noreply.github.com> Date: Mon, 3 Oct 2022 16:35:22 -0700 Subject: [PATCH 044/133] [video_player] Fixes a bug where the aspect ratio of some HLS videos are incorrectly inverted (#6507) --- .../video_player_avfoundation/CHANGELOG.md | 3 +- .../ios/RunnerTests/VideoPlayerTests.m | 25 ++++------- .../ios/Classes/FLTVideoPlayerPlugin.m | 42 +++++++++---------- .../video_player_avfoundation/pubspec.yaml | 2 +- 4 files changed, 31 insertions(+), 41 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 7cfa025271cf..ed2f345784bd 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.3.7 +* Fixes a bug where the aspect ratio of some HLS videos are incorrectly inverted. * Updates code for `no_leading_underscores_for_local_identifiers` lint. ## 2.3.6 diff --git a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m index 813fca2b8e7d..f9f66e04bcb3 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m +++ b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m @@ -11,9 +11,6 @@ @interface FLTVideoPlayer : NSObject @property(readonly, nonatomic) AVPlayer *player; -// This is to fix a bug (https://github.com/flutter/flutter/issues/111457) in iOS 16 with blank -// video for encrypted video streams. An invisible AVPlayerLayer is used to overwrite the -// protection of pixel buffers in those streams. @property(readonly, nonatomic) AVPlayerLayer *playerLayer; @end @@ -65,13 +62,12 @@ @interface VideoPlayerTests : XCTestCase @implementation VideoPlayerTests -- (void)testIOS16BugWithEncryptedVideoStream { - // This is to fix a bug (https://github.com/flutter/flutter/issues/111457) in iOS 16 with blank - // video for encrypted video streams. An invisible AVPlayerLayer is used to overwrite the - // protection of pixel buffers in those streams. - // Note that a better unit test is to validate that `copyPixelBuffer` API returns the pixel - // buffers as expected, which requires setting up the video player properly with a protected video - // stream (.m3u8 file). +- (void)testBlankVideoBugWithEncryptedVideoStreamAndInvertedAspectRatioBugForSomeVideoStream { + // This is to fix 2 bugs: 1. blank video for encrypted video streams on iOS 16 + // (https://github.com/flutter/flutter/issues/111457) and 2. swapped width and height for some + // video streams (not just iOS 16). (https://github.com/flutter/flutter/issues/109116). An + // invisible AVPlayerLayer is used to overwrite the protection of pixel buffers in those streams + // for issue #1, and restore the correct width and height for issue #2. NSObject *registry = (NSObject *)[[UIApplication sharedApplication] delegate]; NSObject *registrar = @@ -95,13 +91,8 @@ - (void)testIOS16BugWithEncryptedVideoStream { FLTVideoPlayer *player = videoPlayerPlugin.playersByTextureId[textureMessage.textureId]; XCTAssertNotNil(player); - if (@available(iOS 16.0, *)) { - XCTAssertNotNil(player.playerLayer, @"AVPlayerLayer should be present for iOS 16."); - XCTAssertNotNil(player.playerLayer.superlayer, - @"AVPlayerLayer should be added on screen for iOS 16."); - } else { - XCTAssertNil(player.playerLayer, @"AVPlayerLayer should not be present before iOS 16."); - } + XCTAssertNotNil(player.playerLayer, @"AVPlayerLayer should be present."); + XCTAssertNotNil(player.playerLayer.superlayer, @"AVPlayerLayer should be added on screen."); } - (void)testSeekToInvokesTextureFrameAvailableOnTextureRegistry { diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m index 645c86d6eade..3b066769621c 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -36,7 +36,11 @@ - (void)onDisplayLink:(CADisplayLink *)link { @interface FLTVideoPlayer : NSObject @property(readonly, nonatomic) AVPlayer *player; @property(readonly, nonatomic) AVPlayerItemVideoOutput *videoOutput; -/// An invisible player layer used to access the pixel buffers in protected video streams in iOS 16. +// This is to fix 2 bugs: 1. blank video for encrypted video streams on iOS 16 +// (https://github.com/flutter/flutter/issues/111457) and 2. swapped width and height for some video +// streams (not just iOS 16). (https://github.com/flutter/flutter/issues/109116). +// An invisible AVPlayerLayer is used to overwrite the protection of pixel buffers in those streams +// for issue #1, and restore the correct width and height for issue #2. @property(readonly, nonatomic) AVPlayerLayer *playerLayer; @property(readonly, nonatomic) CADisplayLink *displayLink; @property(nonatomic) FlutterEventChannel *eventChannel; @@ -134,17 +138,13 @@ NS_INLINE CGFloat radiansToDegrees(CGFloat radians) { return degrees; }; -NS_INLINE UIViewController *rootViewController() API_AVAILABLE(ios(16.0)) { - for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) { - if ([scene isKindOfClass:UIWindowScene.class]) { - for (UIWindow *window in ((UIWindowScene *)scene).windows) { - if (window.isKeyWindow) { - return window.rootViewController; - } - } - } - } - return nil; +NS_INLINE UIViewController *rootViewController() { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + // TODO: (hellohuanlin) Provide a non-deprecated codepath. See + // https://github.com/flutter/flutter/issues/104117 + return UIApplication.sharedApplication.keyWindow.rootViewController; +#pragma clang diagnostic pop } - (AVMutableVideoComposition *)getVideoCompositionWithTransform:(CGAffineTransform)transform @@ -242,13 +242,13 @@ - (instancetype)initWithPlayerItem:(AVPlayerItem *)item _player = [AVPlayer playerWithPlayerItem:item]; _player.actionAtItemEnd = AVPlayerActionAtItemEndNone; - // This is to fix a bug (https://github.com/flutter/flutter/issues/111457) in iOS 16 with blank - // video for encrypted video streams. An invisible AVPlayerLayer is used to overwrite the - // protection of pixel buffers in those streams. - if (@available(iOS 16.0, *)) { - _playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player]; - [rootViewController().view.layer addSublayer:_playerLayer]; - } + // This is to fix 2 bugs: 1. blank video for encrypted video streams on iOS 16 + // (https://github.com/flutter/flutter/issues/111457) and 2. swapped width and height for some + // video streams (not just iOS 16). (https://github.com/flutter/flutter/issues/109116). An + // invisible AVPlayerLayer is used to overwrite the protection of pixel buffers in those streams + // for issue #1, and restore the correct width and height for issue #2. + _playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player]; + [rootViewController().view.layer addSublayer:_playerLayer]; [self createVideoOutputAndDisplayLink:frameUpdater]; @@ -481,9 +481,7 @@ - (FlutterError *_Nullable)onListenWithArguments:(id _Nullable)arguments /// so the channel is going to die or is already dead. - (void)disposeSansEventChannel { _disposed = YES; - if (@available(iOS 16.0, *)) { - [_playerLayer removeFromSuperlayer]; - } + [_playerLayer removeFromSuperlayer]; [_displayLink invalidate]; AVPlayerItem *currentItem = self.player.currentItem; [currentItem removeObserver:self forKeyPath:@"status"]; diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index bd88ddf94876..6da166791281 100644 --- a/packages/video_player/video_player_avfoundation/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_avfoundation description: iOS implementation of the video_player plugin. repository: https://github.com/flutter/plugins/tree/main/packages/video_player/video_player_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.3.6 +version: 2.3.7 environment: sdk: ">=2.14.0 <3.0.0" From 911dcc7670f736dd7785386c69cd1c298dbe7180 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 4 Oct 2022 11:52:20 -0400 Subject: [PATCH 045/133] Roll Flutter from a4b246f2a88c to 55d67cc7d992 (20 revisions) (#6534) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index df69827cfd5a..aa54d97b2eaf 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -a4b246f2a88c3f5b838c5abff8063a4e7436d44b +55d67cc7d99226cd12d6c4a76de357fc2c92823e From 221548ff75b1a3395fd7cd8107025aff42be9e2d Mon Sep 17 00:00:00 2001 From: hellohuanlin <41930132+hellohuanlin@users.noreply.github.com> Date: Tue, 4 Oct 2022 15:19:51 -0700 Subject: [PATCH 046/133] [quick_actions]Migrate the XCUITests to Swift (#6425) --- .../quick_actions_ios/CHANGELOG.md | 4 + .../ios/Runner.xcodeproj/project.pbxproj | 14 ++- .../example/ios/RunnerUITests/RunnerUITests.m | 99 ------------------- .../ios/RunnerUITests/RunnerUITests.swift | 96 ++++++++++++++++++ 4 files changed, 110 insertions(+), 103 deletions(-) delete mode 100644 packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.m create mode 100644 packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index e002bd70ac09..31fe43832d2f 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Migrates `RunnerUITests` to Swift. + ## 1.0.1 * Removes custom modulemap file with "Test" submodule and private headers for Swift migration. diff --git a/packages/quick_actions/quick_actions_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/quick_actions/quick_actions_ios/example/ios/Runner.xcodeproj/project.pbxproj index 47360fe51a70..c853a197ca9b 100644 --- a/packages/quick_actions/quick_actions_ios/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/quick_actions/quick_actions_ios/example/ios/Runner.xcodeproj/project.pbxproj @@ -10,13 +10,13 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 2632072169FF635893D8EB4D /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 436668746754BEEA28B76E55 /* libPods-RunnerTests.a */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 686BE83025E58CCF00862533 /* RunnerUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 686BE82F25E58CCF00862533 /* RunnerUITests.m */; }; 6A841C2B6AED5CF8DB2A1894 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C35AD3650AB6BF850E016715 /* libPods-Runner.a */; }; 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E092A7F628D128EB005C7F67 /* RunnerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E092A7F528D128EB005C7F67 /* RunnerUITests.swift */; }; E0C09C29289C729D00E6977E /* FLTQuickActionsPluginTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C09C28289C729D00E6977E /* FLTQuickActionsPluginTests.m */; }; E0C09C32289DBFCA00E6977E /* FLTShortcutStateManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C09C31289DBFCA00E6977E /* FLTShortcutStateManagerTests.m */; }; /* End PBXBuildFile section */ @@ -60,7 +60,6 @@ 436668746754BEEA28B76E55 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 5278439583922091276A37C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 686BE82D25E58CCF00862533 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 686BE82F25E58CCF00862533 /* RunnerUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RunnerUITests.m; sourceTree = ""; }; 686BE83125E58CCF00862533 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -76,6 +75,7 @@ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9D27FE1F0F21D4D47DDA16DE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; C35AD3650AB6BF850E016715 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + E092A7F528D128EB005C7F67 /* RunnerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerUITests.swift; sourceTree = ""; }; E0C09C28289C729D00E6977E /* FLTQuickActionsPluginTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FLTQuickActionsPluginTests.m; sourceTree = ""; }; E0C09C31289DBFCA00E6977E /* FLTShortcutStateManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLTShortcutStateManagerTests.m; sourceTree = ""; }; F0609304FBCAEC2289164BD5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; @@ -121,8 +121,8 @@ 686BE82E25E58CCF00862533 /* RunnerUITests */ = { isa = PBXGroup; children = ( - 686BE82F25E58CCF00862533 /* RunnerUITests.m */, 686BE83125E58CCF00862533 /* Info.plist */, + E092A7F528D128EB005C7F67 /* RunnerUITests.swift */, ); path = RunnerUITests; sourceTree = ""; @@ -281,6 +281,7 @@ }; 686BE82C25E58CCF00862533 = { CreatedOnToolsVersion = 12.4; + LastSwiftMigration = 1330; ProvisioningStyle = Automatic; TestTargetID = 97C146ED1CF9000F007C117D; }; @@ -424,7 +425,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 686BE83025E58CCF00862533 /* RunnerUITests.m in Sources */, + E092A7F628D128EB005C7F67 /* RunnerUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -512,6 +513,7 @@ buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; @@ -529,6 +531,8 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.google.RunnerUITests; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = Runner; }; @@ -539,6 +543,7 @@ buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; @@ -555,6 +560,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.google.RunnerUITests; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = Runner; }; diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.m b/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.m deleted file mode 100644 index 0bad57f886de..000000000000 --- a/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.m +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import -#import - -static const int kElementWaitingTime = 30; - -@interface RunnerUITests : XCTestCase - -@end - -@implementation RunnerUITests { - XCUIApplication *_exampleApp; -} - -- (void)setUp { - [super setUp]; - self.continueAfterFailure = NO; - _exampleApp = [[XCUIApplication alloc] init]; -} - -- (void)tearDown { - [super tearDown]; - [_exampleApp terminate]; - _exampleApp = nil; -} - -- (void)testQuickActionWithFreshStart { - XCUIApplication *springboard = - [[XCUIApplication alloc] initWithBundleIdentifier:@"com.apple.springboard"]; - XCUIElement *quickActionsAppIcon = springboard.icons[@"quick_actions_example"]; - if (![quickActionsAppIcon waitForExistenceWithTimeout:kElementWaitingTime]) { - os_log_error(OS_LOG_DEFAULT, "%@", springboard.debugDescription); - XCTFail(@"Failed due to not able to find the example app from springboard with %@ seconds", - @(kElementWaitingTime)); - } - - [quickActionsAppIcon pressForDuration:2]; - XCUIElement *actionTwo = springboard.buttons[@"Action two"]; - if (![actionTwo waitForExistenceWithTimeout:kElementWaitingTime]) { - os_log_error(OS_LOG_DEFAULT, "%@", springboard.debugDescription); - XCTFail(@"Failed due to not able to find the actionTwo button from springboard with %@ seconds", - @(kElementWaitingTime)); - } - - [actionTwo tap]; - - XCUIElement *actionTwoConfirmation = _exampleApp.otherElements[@"action_two"]; - if (![actionTwoConfirmation waitForExistenceWithTimeout:kElementWaitingTime]) { - os_log_error(OS_LOG_DEFAULT, "%@", springboard.debugDescription); - XCTFail(@"Failed due to not able to find the actionTwoConfirmation in the app with %@ seconds", - @(kElementWaitingTime)); - } - XCTAssertTrue(actionTwoConfirmation.exists); -} - -- (void)testQuickActionWhenAppIsInBackground { - [_exampleApp launch]; - - XCUIElement *actionsReady = _exampleApp.otherElements[@"actions ready"]; - if (![actionsReady waitForExistenceWithTimeout:kElementWaitingTime]) { - os_log_error(OS_LOG_DEFAULT, "%@", _exampleApp.debugDescription); - XCTFail(@"Failed due to not able to find the actionsReady in the app with %@ seconds", - @(kElementWaitingTime)); - } - - [[XCUIDevice sharedDevice] pressButton:XCUIDeviceButtonHome]; - - XCUIApplication *springboard = - [[XCUIApplication alloc] initWithBundleIdentifier:@"com.apple.springboard"]; - XCUIElement *quickActionsAppIcon = springboard.icons[@"quick_actions_example"]; - if (![quickActionsAppIcon waitForExistenceWithTimeout:kElementWaitingTime]) { - os_log_error(OS_LOG_DEFAULT, "%@", springboard.debugDescription); - XCTFail(@"Failed due to not able to find the example app from springboard with %@ seconds", - @(kElementWaitingTime)); - } - - [quickActionsAppIcon pressForDuration:2]; - XCUIElement *actionOne = springboard.buttons[@"Action one"]; - if (![actionOne waitForExistenceWithTimeout:kElementWaitingTime]) { - os_log_error(OS_LOG_DEFAULT, "%@", springboard.debugDescription); - XCTFail(@"Failed due to not able to find the actionOne button from springboard with %@ seconds", - @(kElementWaitingTime)); - } - - [actionOne tap]; - - XCUIElement *actionOneConfirmation = _exampleApp.otherElements[@"action_one"]; - if (![actionOneConfirmation waitForExistenceWithTimeout:kElementWaitingTime]) { - os_log_error(OS_LOG_DEFAULT, "%@", springboard.debugDescription); - XCTFail(@"Failed due to not able to find the actionOneConfirmation in the app with %@ seconds", - @(kElementWaitingTime)); - } - XCTAssertTrue(actionOneConfirmation.exists); -} - -@end diff --git a/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift b/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift new file mode 100644 index 000000000000..a59692e7639d --- /dev/null +++ b/packages/quick_actions/quick_actions_ios/example/ios/RunnerUITests/RunnerUITests.swift @@ -0,0 +1,96 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import XCTest + +private let elementWaitingTime: TimeInterval = 30 + +class RunnerUITests: XCTestCase { + + private var exampleApp: XCUIApplication! + + override func setUp() { + super.setUp() + self.continueAfterFailure = false + exampleApp = XCUIApplication() + } + + override func tearDown() { + super.tearDown() + exampleApp.terminate() + exampleApp = nil + } + + func testQuickActionWithFreshStart() { + let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") + let quickActionsAppIcon = springboard.icons["quick_actions_example"] + if !quickActionsAppIcon.waitForExistence(timeout: elementWaitingTime) { + XCTFail( + "Failed due to not able to find the example app from springboard with \(elementWaitingTime) seconds. Springboard debug description: \(springboard.debugDescription)" + ) + } + + quickActionsAppIcon.press(forDuration: 2) + + let actionTwo = springboard.buttons["Action two"] + if !actionTwo.waitForExistence(timeout: elementWaitingTime) { + XCTFail( + "Failed due to not able to find the actionTwo button from springboard with \(elementWaitingTime) seconds. Springboard debug description: \(springboard.debugDescription)" + ) + } + + actionTwo.tap() + + let actionTwoConfirmation = exampleApp.otherElements["action_two"] + if !actionTwoConfirmation.waitForExistence(timeout: elementWaitingTime) { + XCTFail( + "Failed due to not able to find the actionTwoConfirmation in the app with \(elementWaitingTime) seconds. Springboard debug description: \(springboard.debugDescription)" + ) + } + + XCTAssert(actionTwoConfirmation.exists) + } + + func testQuickActionWhenAppIsInBackground() { + exampleApp.launch() + + let actionsReady = exampleApp.otherElements["actions ready"] + + if !actionsReady.waitForExistence(timeout: elementWaitingTime) { + XCTFail( + "Failed due to not able to find the actionsReady in the app with \(elementWaitingTime) seconds. App debug description: \(exampleApp.debugDescription)" + ) + } + + XCUIDevice.shared.press(.home) + + let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") + let quickActionsAppIcon = springboard.icons["quick_actions_example"] + if !quickActionsAppIcon.waitForExistence(timeout: elementWaitingTime) { + XCTFail( + "Failed due to not able to find the example app from springboard with \(elementWaitingTime) seconds. Springboard debug description: \(springboard.debugDescription)" + ) + } + + quickActionsAppIcon.press(forDuration: 2) + + let actionOne = springboard.buttons["Action one"] + if !actionOne.waitForExistence(timeout: elementWaitingTime) { + XCTFail( + "Failed due to not able to find the actionOne button from springboard with \(elementWaitingTime) seconds. Springboard debug description: \(springboard.debugDescription)" + ) + } + + actionOne.tap() + + let actionOneConfirmation = exampleApp.otherElements["action_one"] + if !actionOneConfirmation.waitForExistence(timeout: elementWaitingTime) { + XCTFail( + "Failed due to not able to find the actionOneConfirmation in the app with \(elementWaitingTime) seconds. Springboard debug description: \(springboard.debugDescription)" + ) + } + + XCTAssert(actionOneConfirmation.exists) + } +} From 3a928b8a3d8b5714c0777e66d7f74cf4ffbe800f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 22:32:57 +0000 Subject: [PATCH 047/133] [webview]: Bump annotation from 1.4.0 to 1.5.0 in /packages/webview_flutter/webview_flutter_android/android (#6488) --- packages/webview_flutter/webview_flutter_android/CHANGELOG.md | 3 ++- .../webview_flutter_android/android/build.gradle | 2 +- packages/webview_flutter/webview_flutter_android/pubspec.yaml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index dfad03ebaa15..fbb502c7cca8 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.10.4 * Updates code for `no_leading_underscores_for_local_identifiers` lint. +* Bumps androidx.annotation from 1.4.0 to 1.5.0. ## 2.10.3 diff --git a/packages/webview_flutter/webview_flutter_android/android/build.gradle b/packages/webview_flutter/webview_flutter_android/android/build.gradle index 0b95a4be66ff..65374fee88bf 100644 --- a/packages/webview_flutter/webview_flutter_android/android/build.gradle +++ b/packages/webview_flutter/webview_flutter_android/android/build.gradle @@ -35,7 +35,7 @@ android { } dependencies { - implementation 'androidx.annotation:annotation:1.4.0' + implementation 'androidx.annotation:annotation:1.5.0' implementation 'androidx.webkit:webkit:1.5.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:4.8.0' diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml index c2a326f7d4ac..e411b4e1326a 100644 --- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_android description: A Flutter plugin that provides a WebView widget on Android. repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutter/webview_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 2.10.3 +version: 2.10.4 environment: sdk: ">=2.14.0 <3.0.0" From fb5c86c9532ba883e9e5bf7598e64196c3e85554 Mon Sep 17 00:00:00 2001 From: Piotr Mitkowski Date: Wed, 5 Oct 2022 19:01:05 +0200 Subject: [PATCH 048/133] [image_picker] add requestFullMetadata for iOS (optional permissions) (#5915) --- .../image_picker/image_picker/CHANGELOG.md | 3 +- packages/image_picker/image_picker/README.md | 1 + .../image_picker/example/lib/main.dart | 2 +- .../image_picker/lib/image_picker.dart | 70 ++-- .../image_picker/image_picker/pubspec.yaml | 6 +- .../image_picker/test/image_picker_test.dart | 355 +++++++++++++++--- .../test/image_picker_test.mocks.dart | 18 + 7 files changed, 386 insertions(+), 69 deletions(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index ccf1cb3c5e7d..76192566b18b 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,7 +1,8 @@ -## NEXT +## 0.8.6 * Updates minimum Flutter version to 2.10. * Fixes avoid_redundant_argument_values lint warnings and minor typos. +* Adds `requestFullMetadata` option to `pickImage`, so images on iOS can be picked without `Photo Library Usage` permission. ## 0.8.5+3 diff --git a/packages/image_picker/image_picker/README.md b/packages/image_picker/image_picker/README.md index 2fa20be34859..aadfc83ff5e6 100755 --- a/packages/image_picker/image_picker/README.md +++ b/packages/image_picker/image_picker/README.md @@ -23,6 +23,7 @@ As a result of implementing PHPicker it becomes impossible to pick HEIC images o Add the following keys to your _Info.plist_ file, located in `/ios/Runner/Info.plist`: * `NSPhotoLibraryUsageDescription` - describe why your app needs permission for the photo library. This is called _Privacy - Photo Library Usage Description_ in the visual editor. + * This permission is not required for image picking on iOS 11+ if you pass `false` for `requestFullMetadata`. * `NSCameraUsageDescription` - describe why your app needs access to the camera. This is called _Privacy - Camera Usage Description_ in the visual editor. * `NSMicrophoneUsageDescription` - describe why your app needs access to the microphone, if you intend to record videos. This is called _Privacy - Microphone Usage Description_ in the visual editor. diff --git a/packages/image_picker/image_picker/example/lib/main.dart b/packages/image_picker/image_picker/example/lib/main.dart index 4eecc5fa2a1a..5e448ddbee68 100755 --- a/packages/image_picker/image_picker/example/lib/main.dart +++ b/packages/image_picker/image_picker/example/lib/main.dart @@ -93,7 +93,7 @@ class _MyHomePageState extends State { await _displayPickImageDialog(context!, (double? maxWidth, double? maxHeight, int? quality) async { try { - final List? pickedFileList = await _picker.pickMultiImage( + final List pickedFileList = await _picker.pickMultiImage( maxWidth: maxWidth, maxHeight: maxHeight, imageQuality: quality, diff --git a/packages/image_picker/image_picker/lib/image_picker.dart b/packages/image_picker/image_picker/lib/image_picker.dart index 84c649028c96..2e266ccd5a5a 100755 --- a/packages/image_picker/image_picker/lib/image_picker.dart +++ b/packages/image_picker/image_picker/lib/image_picker.dart @@ -173,8 +173,9 @@ class ImagePicker { /// The `source` argument controls where the image comes from. This can /// be either [ImageSource.camera] or [ImageSource.gallery]. /// - /// Where iOS supports HEIC images, Android 8 and below doesn't. Android 9 and above only support HEIC images if used - /// in addition to a size modification, of which the usage is explained below. + /// Where iOS supports HEIC images, Android 8 and below doesn't. Android 9 and + /// above only support HEIC images if used in addition to a size modification, + /// of which the usage is explained below. /// /// If specified, the image will be at most `maxWidth` wide and /// `maxHeight` tall. Otherwise the image will be returned at it's @@ -182,14 +183,22 @@ class ImagePicker { /// The `imageQuality` argument modifies the quality of the image, ranging from 0-100 /// where 100 is the original/max quality. If `imageQuality` is null, the image with /// the original quality will be returned. Compression is only supported for certain - /// image types such as JPEG and on Android PNG and WebP, too. If compression is not supported for the image that is picked, - /// a warning message will be logged. - /// - /// Use `preferredCameraDevice` to specify the camera to use when the `source` is [ImageSource.camera]. - /// The `preferredCameraDevice` is ignored when `source` is [ImageSource.gallery]. It is also ignored if the chosen camera is not supported on the device. - /// Defaults to [CameraDevice.rear]. Note that Android has no documented parameter for an intent to specify if - /// the front or rear camera should be opened, this function is not guaranteed - /// to work on an Android device. + /// image types such as JPEG and on Android PNG and WebP, too. If compression is not + /// supported for the image that is picked, a warning message will be logged. + /// + /// Use `preferredCameraDevice` to specify the camera to use when the `source` is + /// [ImageSource.camera]. + /// The `preferredCameraDevice` is ignored when `source` is [ImageSource.gallery]. + /// It is also ignored if the chosen camera is not supported on the device. + /// Defaults to [CameraDevice.rear]. Note that Android has no documented parameter + /// for an intent to specify if the front or rear camera should be opened, this + /// function is not guaranteed to work on an Android device. + /// + /// Use `requestFullMetadata` (defaults to `true`) to control how much additional + /// information the plugin tries to get. + /// If `requestFullMetadata` is set to `true`, the plugin tries to get the full + /// image metadata which may require extra permission requests on some platforms, + /// such as `Photo Library Usage` permission on iOS. /// /// In Android, the MainActivity can be destroyed for various reasons. If that happens, the result will be lost /// in this call. You can then call [retrieveLostData] when your app relaunches to retrieve the lost data. @@ -206,6 +215,7 @@ class ImagePicker { double? maxHeight, int? imageQuality, CameraDevice preferredCameraDevice = CameraDevice.rear, + bool requestFullMetadata = true, }) { if (imageQuality != null && (imageQuality < 0 || imageQuality > 100)) { throw ArgumentError.value( @@ -218,12 +228,15 @@ class ImagePicker { throw ArgumentError.value(maxHeight, 'maxHeight', 'cannot be negative'); } - return platform.getImage( + return platform.getImageFromSource( source: source, - maxWidth: maxWidth, - maxHeight: maxHeight, - imageQuality: imageQuality, - preferredCameraDevice: preferredCameraDevice, + options: ImagePickerOptions( + maxWidth: maxWidth, + maxHeight: maxHeight, + imageQuality: imageQuality, + preferredCameraDevice: preferredCameraDevice, + requestFullMetadata: requestFullMetadata, + ), ); } @@ -239,11 +252,18 @@ class ImagePicker { /// If specified, the images will be at most `maxWidth` wide and /// `maxHeight` tall. Otherwise the images will be returned at it's /// original width and height. + /// /// The `imageQuality` argument modifies the quality of the images, ranging from 0-100 /// where 100 is the original/max quality. If `imageQuality` is null, the images with /// the original quality will be returned. Compression is only supported for certain - /// image types such as JPEG and on Android PNG and WebP, too. If compression is not supported for the image that is picked, - /// a warning message will be logged. + /// image types such as JPEG and on Android PNG and WebP, too. If compression is not + /// supported for the image that is picked, a warning message will be logged. + /// + /// Use `requestFullMetadata` (defaults to `true`) to control how much additional + /// information the plugin tries to get. + /// If `requestFullMetadata` is set to `true`, the plugin tries to get the full + /// image metadata which may require extra permission requests on some platforms, + /// such as `Photo Library Usage` permission on iOS. /// /// The method could throw [PlatformException] if the app does not have permission to access /// the camera or photos gallery, no camera is available, plugin is already in use, @@ -251,10 +271,11 @@ class ImagePicker { /// be allocated (Android only) or due to an unknown error. /// /// See also [pickImage] to allow users to only pick a single image. - Future?> pickMultiImage({ + Future> pickMultiImage({ double? maxWidth, double? maxHeight, int? imageQuality, + bool requestFullMetadata = true, }) { if (imageQuality != null && (imageQuality < 0 || imageQuality > 100)) { throw ArgumentError.value( @@ -267,10 +288,15 @@ class ImagePicker { throw ArgumentError.value(maxHeight, 'maxHeight', 'cannot be negative'); } - return platform.getMultiImage( - maxWidth: maxWidth, - maxHeight: maxHeight, - imageQuality: imageQuality, + return platform.getMultiImageWithOptions( + options: MultiImagePickerOptions( + imageOptions: ImageOptions( + maxWidth: maxWidth, + maxHeight: maxHeight, + imageQuality: imageQuality, + requestFullMetadata: requestFullMetadata, + ), + ), ); } diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 58f9f0658483..7fed3bf4637b 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.5+3 +version: 0.8.6 environment: sdk: ">=2.14.0 <3.0.0" @@ -24,8 +24,8 @@ dependencies: sdk: flutter image_picker_android: ^0.8.4+11 image_picker_for_web: ^2.1.0 - image_picker_ios: ^0.8.4+11 - image_picker_platform_interface: ^2.3.0 + image_picker_ios: ^0.8.6+1 + image_picker_platform_interface: ^2.6.1 dev_dependencies: build_runner: ^2.1.10 diff --git a/packages/image_picker/image_picker/test/image_picker_test.dart b/packages/image_picker/image_picker/test/image_picker_test.dart index 10b5ac16e570..2d959bd20f7b 100644 --- a/packages/image_picker/image_picker/test/image_picker_test.dart +++ b/packages/image_picker/image_picker/test/image_picker_test.dart @@ -29,12 +29,8 @@ void main() { group('#Single image/video', () { group('#pickImage', () { setUp(() { - when(mockPlatform.getImage( - source: anyNamed('source'), - maxWidth: anyNamed('maxWidth'), - maxHeight: anyNamed('maxHeight'), - imageQuality: anyNamed('imageQuality'), - preferredCameraDevice: anyNamed('preferredCameraDevice'))) + when(mockPlatform.getImageFromSource( + source: anyNamed('source'), options: anyNamed('options'))) .thenAnswer((Invocation _) async => null); }); @@ -44,8 +40,20 @@ void main() { await picker.pickImage(source: ImageSource.gallery); verifyInOrder([ - mockPlatform.getImage(source: ImageSource.camera), - mockPlatform.getImage(source: ImageSource.gallery), + mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf(), + named: 'options', + ), + ), + mockPlatform.getImageFromSource( + source: ImageSource.gallery, + options: argThat( + isInstanceOf(), + named: 'options', + ), + ), ]); }); @@ -76,20 +84,111 @@ void main() { imageQuality: 70); verifyInOrder([ - mockPlatform.getImage(source: ImageSource.camera), - mockPlatform.getImage(source: ImageSource.camera, maxWidth: 10.0), - mockPlatform.getImage(source: ImageSource.camera, maxHeight: 10.0), - mockPlatform.getImage( - source: ImageSource.camera, maxWidth: 10.0, maxHeight: 20.0), - mockPlatform.getImage( - source: ImageSource.camera, maxWidth: 10.0, imageQuality: 70), - mockPlatform.getImage( - source: ImageSource.camera, maxHeight: 10.0, imageQuality: 70), - mockPlatform.getImage( - source: ImageSource.camera, - maxWidth: 10.0, - maxHeight: 20.0, - imageQuality: 70), + mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf() + .having((ImagePickerOptions options) => options.maxWidth, + 'maxWidth', isNull) + .having((ImagePickerOptions options) => options.maxHeight, + 'maxHeight', isNull) + .having( + (ImagePickerOptions options) => options.imageQuality, + 'imageQuality', + isNull), + named: 'options', + ), + ), + mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf() + .having((ImagePickerOptions options) => options.maxWidth, + 'maxWidth', equals(10.0)) + .having((ImagePickerOptions options) => options.maxHeight, + 'maxHeight', isNull) + .having( + (ImagePickerOptions options) => options.imageQuality, + 'imageQuality', + isNull), + named: 'options', + ), + ), + mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf() + .having((ImagePickerOptions options) => options.maxWidth, + 'maxWidth', isNull) + .having((ImagePickerOptions options) => options.maxHeight, + 'maxHeight', equals(10.0)) + .having( + (ImagePickerOptions options) => options.imageQuality, + 'imageQuality', + isNull), + named: 'options', + ), + ), + mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf() + .having((ImagePickerOptions options) => options.maxWidth, + 'maxWidth', equals(10.0)) + .having((ImagePickerOptions options) => options.maxHeight, + 'maxHeight', equals(20.0)) + .having( + (ImagePickerOptions options) => options.imageQuality, + 'imageQuality', + isNull), + named: 'options', + ), + ), + mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf() + .having((ImagePickerOptions options) => options.maxWidth, + 'maxWidth', equals(10.0)) + .having((ImagePickerOptions options) => options.maxHeight, + 'maxHeight', isNull) + .having( + (ImagePickerOptions options) => options.imageQuality, + 'imageQuality', + equals(70)), + named: 'options', + ), + ), + mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf() + .having((ImagePickerOptions options) => options.maxWidth, + 'maxWidth', isNull) + .having((ImagePickerOptions options) => options.maxHeight, + 'maxHeight', equals(10.0)) + .having( + (ImagePickerOptions options) => options.imageQuality, + 'imageQuality', + equals(70)), + named: 'options', + ), + ), + mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf() + .having((ImagePickerOptions options) => options.maxWidth, + 'maxWidth', equals(10.0)) + .having((ImagePickerOptions options) => options.maxHeight, + 'maxHeight', equals(20.0)) + .having( + (ImagePickerOptions options) => options.imageQuality, + 'imageQuality', + equals(70)), + named: 'options', + ), + ), ]); }); @@ -117,7 +216,16 @@ void main() { final ImagePicker picker = ImagePicker(); await picker.pickImage(source: ImageSource.camera); - verify(mockPlatform.getImage(source: ImageSource.camera)); + verify(mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf().having( + (ImagePickerOptions options) => options.preferredCameraDevice, + 'preferredCameraDevice', + equals(CameraDevice.rear)), + named: 'options', + ), + )); }); test('camera position can set to front', () async { @@ -126,9 +234,51 @@ void main() { source: ImageSource.camera, preferredCameraDevice: CameraDevice.front); - verify(mockPlatform.getImage( - source: ImageSource.camera, - preferredCameraDevice: CameraDevice.front)); + verify(mockPlatform.getImageFromSource( + source: ImageSource.camera, + options: argThat( + isInstanceOf().having( + (ImagePickerOptions options) => options.preferredCameraDevice, + 'preferredCameraDevice', + equals(CameraDevice.front)), + named: 'options', + ), + )); + }); + + test('full metadata argument defaults to true', () async { + final ImagePicker picker = ImagePicker(); + await picker.pickImage(source: ImageSource.gallery); + + verify(mockPlatform.getImageFromSource( + source: ImageSource.gallery, + options: argThat( + isInstanceOf().having( + (ImagePickerOptions options) => options.requestFullMetadata, + 'requestFullMetadata', + isTrue), + named: 'options', + ), + )); + }); + + test('passes the full metadata argument correctly', () async { + final ImagePicker picker = ImagePicker(); + await picker.pickImage( + source: ImageSource.gallery, + requestFullMetadata: false, + ); + + verify(mockPlatform.getImageFromSource( + source: ImageSource.gallery, + options: argThat( + isInstanceOf().having( + (ImagePickerOptions options) => options.requestFullMetadata, + 'requestFullMetadata', + isFalse), + named: 'options', + ), + )); }); }); @@ -250,11 +400,11 @@ void main() { group('#Multi images', () { setUp(() { - when(mockPlatform.getMultiImage( - maxWidth: anyNamed('maxWidth'), - maxHeight: anyNamed('maxHeight'), - imageQuality: anyNamed('imageQuality'))) - .thenAnswer((Invocation _) async => null); + when( + mockPlatform.getMultiImageWithOptions( + options: anyNamed('options'), + ), + ).thenAnswer((Invocation _) async => []); }); group('#pickMultiImage', () { @@ -283,14 +433,101 @@ void main() { maxWidth: 10.0, maxHeight: 20.0, imageQuality: 70); verifyInOrder([ - mockPlatform.getMultiImage(), - mockPlatform.getMultiImage(maxWidth: 10.0), - mockPlatform.getMultiImage(maxHeight: 10.0), - mockPlatform.getMultiImage(maxWidth: 10.0, maxHeight: 20.0), - mockPlatform.getMultiImage(maxWidth: 10.0, imageQuality: 70), - mockPlatform.getMultiImage(maxHeight: 10.0, imageQuality: 70), - mockPlatform.getMultiImage( - maxWidth: 10.0, maxHeight: 20.0, imageQuality: 70), + mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf(), + named: 'options', + ), + ), + mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf().having( + (MultiImagePickerOptions options) => + options.imageOptions.maxWidth, + 'maxWidth', + equals(10.0)), + named: 'options', + ), + ), + mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf().having( + (MultiImagePickerOptions options) => + options.imageOptions.maxHeight, + 'maxHeight', + equals(10.0)), + named: 'options', + ), + ), + mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf() + .having( + (MultiImagePickerOptions options) => + options.imageOptions.maxWidth, + 'maxWidth', + equals(10.0)) + .having( + (MultiImagePickerOptions options) => + options.imageOptions.maxHeight, + 'maxHeight', + equals(20.0)), + named: 'options', + ), + ), + mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf() + .having( + (MultiImagePickerOptions options) => + options.imageOptions.maxWidth, + 'maxWidth', + equals(10.0)) + .having( + (MultiImagePickerOptions options) => + options.imageOptions.imageQuality, + 'imageQuality', + equals(70)), + named: 'options', + ), + ), + mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf() + .having( + (MultiImagePickerOptions options) => + options.imageOptions.maxHeight, + 'maxHeight', + equals(10.0)) + .having( + (MultiImagePickerOptions options) => + options.imageOptions.imageQuality, + 'imageQuality', + equals(70)), + named: 'options', + ), + ), + mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf() + .having( + (MultiImagePickerOptions options) => + options.imageOptions.maxWidth, + 'maxWidth', + equals(10.0)) + .having( + (MultiImagePickerOptions options) => + options.imageOptions.maxWidth, + 'maxHeight', + equals(10.0)) + .having( + (MultiImagePickerOptions options) => + options.imageOptions.imageQuality, + 'imageQuality', + equals(70)), + named: 'options', + ), + ), ]); }); @@ -307,11 +544,45 @@ void main() { ); }); - test('handles a null image file response gracefully', () async { + test('handles an empty image file response gracefully', () async { + final ImagePicker picker = ImagePicker(); + + expect(await picker.pickMultiImage(), isEmpty); + expect(await picker.pickMultiImage(), isEmpty); + }); + + test('full metadata argument defaults to true', () async { final ImagePicker picker = ImagePicker(); + await picker.pickMultiImage(); + + verify(mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf().having( + (MultiImagePickerOptions options) => + options.imageOptions.requestFullMetadata, + 'requestFullMetadata', + isTrue), + named: 'options', + ), + )); + }); + + test('passes the full metadata argument correctly', () async { + final ImagePicker picker = ImagePicker(); + await picker.pickMultiImage( + requestFullMetadata: false, + ); - expect(await picker.pickMultiImage(), isNull); - expect(await picker.pickMultiImage(), isNull); + verify(mockPlatform.getMultiImageWithOptions( + options: argThat( + isInstanceOf().having( + (MultiImagePickerOptions options) => + options.imageOptions.requestFullMetadata, + 'requestFullMetadata', + isFalse), + named: 'options', + ), + )); }); }); }); diff --git a/packages/image_picker/image_picker/test/image_picker_test.mocks.dart b/packages/image_picker/image_picker/test/image_picker_test.mocks.dart index a79d076dd42c..f749b538665b 100644 --- a/packages/image_picker/image_picker/test/image_picker_test.mocks.dart +++ b/packages/image_picker/image_picker/test/image_picker_test.mocks.dart @@ -51,6 +51,7 @@ class MockImagePickerPlatform extends _i1.Mock }), returnValue: Future<_i2.PickedFile?>.value()) as _i4.Future<_i2.PickedFile?>); + @override _i4.Future?> pickMultiImage( {double? maxWidth, double? maxHeight, int? imageQuality}) => @@ -62,6 +63,7 @@ class MockImagePickerPlatform extends _i1.Mock }), returnValue: Future?>.value()) as _i4.Future?>); + @override _i4.Future<_i2.PickedFile?> pickVideo( {_i2.ImageSource? source, @@ -75,11 +77,13 @@ class MockImagePickerPlatform extends _i1.Mock }), returnValue: Future<_i2.PickedFile?>.value()) as _i4.Future<_i2.PickedFile?>); + @override _i4.Future<_i2.LostData> retrieveLostData() => (super.noSuchMethod(Invocation.method(#retrieveLostData, []), returnValue: Future<_i2.LostData>.value(_FakeLostData_0())) as _i4.Future<_i2.LostData>); + @override _i4.Future<_i5.XFile?> getImage( {_i2.ImageSource? source, @@ -96,6 +100,7 @@ class MockImagePickerPlatform extends _i1.Mock #preferredCameraDevice: preferredCameraDevice }), returnValue: Future<_i5.XFile?>.value()) as _i4.Future<_i5.XFile?>); + @override _i4.Future?> getMultiImage( {double? maxWidth, double? maxHeight, int? imageQuality}) => @@ -107,6 +112,7 @@ class MockImagePickerPlatform extends _i1.Mock }), returnValue: Future?>.value()) as _i4.Future?>); + @override _i4.Future<_i5.XFile?> getVideo( {_i2.ImageSource? source, @@ -119,12 +125,14 @@ class MockImagePickerPlatform extends _i1.Mock #maxDuration: maxDuration }), returnValue: Future<_i5.XFile?>.value()) as _i4.Future<_i5.XFile?>); + @override _i4.Future<_i2.LostDataResponse> getLostData() => (super.noSuchMethod(Invocation.method(#getLostData, []), returnValue: Future<_i2.LostDataResponse>.value(_FakeLostDataResponse_1())) as _i4.Future<_i2.LostDataResponse>); + @override _i4.Future<_i5.XFile?> getImageFromSource( {_i2.ImageSource? source, @@ -133,4 +141,14 @@ class MockImagePickerPlatform extends _i1.Mock Invocation.method( #getImageFromSource, [], {#source: source, #options: options}), returnValue: Future<_i5.XFile?>.value()) as _i4.Future<_i5.XFile?>); + + @override + _i4.Future> getMultiImageWithOptions( + {_i2.MultiImagePickerOptions? options = + const _i2.MultiImagePickerOptions()}) => + (super.noSuchMethod( + Invocation.method(#getMultiImageWithOptions, [], {#options: options}), + returnValue: + Future>.value(<_i5.XFile>[])) as _i4 + .Future>); } From 45962d1a0b59e276724e27d360c06bc37898225f Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 5 Oct 2022 13:23:08 -0400 Subject: [PATCH 049/133] Roll Flutter from 55d67cc7d992 to d554fcb36a6e (23 revisions) (#6536) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index aa54d97b2eaf..7dd277eedd71 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -55d67cc7d99226cd12d6c4a76de357fc2c92823e +d554fcb36a6e6a6a83d0c7759d2a4cd113701aef From 54e748c343ef4050246ed1a2b317028176f70e17 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 5 Oct 2022 13:26:39 -0400 Subject: [PATCH 050/133] Roll Flutter (stable) from 18a827f3933c to eb6d86ee27de (2 revisions) (#6537) --- .ci/flutter_stable.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index 20445c3150b3..c26442d70e76 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -18a827f3933c19f51862dde3fa472197683249d6 +eb6d86ee27deecba4a83536aa20f366a6044895c From 5f20bf1c8b6030218a7d6de438f3f750040a43c9 Mon Sep 17 00:00:00 2001 From: eugerossetto <101729072+eugerossetto@users.noreply.github.com> Date: Thu, 6 Oct 2022 13:46:21 -0300 Subject: [PATCH 051/133] [file_selector] Use const instead of final for XTypeGroup. (#6542) --- .../file_selector/file_selector/CHANGELOG.md | 3 +- .../file_selector/file_selector/README.md | 6 +- .../example/lib/open_image_page.dart | 5 +- .../lib/open_multiple_images_page.dart | 7 +-- .../example/lib/open_text_page.dart | 6 +- .../file_selector/file_selector/pubspec.yaml | 4 +- .../test/file_selector_test.dart | 9 +-- .../file_selector_ios/CHANGELOG.md | 3 +- .../example/lib/open_image_page.dart | 8 +-- .../lib/open_multiple_images_page.dart | 11 +--- .../example/lib/open_text_page.dart | 8 +-- .../file_selector_ios/example/pubspec.yaml | 2 +- .../file_selector_ios/pubspec.yaml | 4 +- .../test/file_selector_ios_test.dart | 35 +++-------- .../file_selector_linux/CHANGELOG.md | 3 +- .../example/lib/open_image_page.dart | 6 +- .../lib/open_multiple_images_page.dart | 12 +--- .../example/lib/open_text_page.dart | 6 +- .../file_selector_linux/example/pubspec.yaml | 2 +- .../file_selector_linux/pubspec.yaml | 4 +- .../test/file_selector_linux_test.dart | 51 ++++----------- .../file_selector_macos/CHANGELOG.md | 4 ++ .../example/lib/open_image_page.dart | 6 +- .../lib/open_multiple_images_page.dart | 12 +--- .../example/lib/open_text_page.dart | 6 +- .../file_selector_macos/example/pubspec.yaml | 2 +- .../file_selector_macos/pubspec.yaml | 4 +- .../test/file_selector_macos_test.dart | 63 +++++-------------- .../test/x_type_group_test.dart | 14 ++--- .../file_selector_web/CHANGELOG.md | 4 ++ .../file_selector_web_test.dart | 11 +--- .../file_selector_web/example/pubspec.yaml | 2 +- .../file_selector_web/pubspec.yaml | 4 +- .../file_selector_web/test/utils_test.dart | 37 ++--------- .../file_selector_windows/CHANGELOG.md | 4 ++ .../example/lib/open_image_page.dart | 6 +- .../lib/open_multiple_images_page.dart | 12 +--- .../example/lib/open_text_page.dart | 6 +- .../example/pubspec.yaml | 2 +- .../file_selector_windows/pubspec.yaml | 4 +- .../test/file_selector_windows_test.dart | 51 ++++----------- 41 files changed, 121 insertions(+), 328 deletions(-) diff --git a/packages/file_selector/file_selector/CHANGELOG.md b/packages/file_selector/file_selector/CHANGELOG.md index 1cecd5605a7e..06d01090edc0 100644 --- a/packages/file_selector/file_selector/CHANGELOG.md +++ b/packages/file_selector/file_selector/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.9.2+1 +* Changes XTypeGroup initialization from final to const. * Updates minimum Flutter version to 2.10. ## 0.9.2 diff --git a/packages/file_selector/file_selector/README.md b/packages/file_selector/file_selector/README.md index d5fb2d36263e..97433584b87a 100644 --- a/packages/file_selector/file_selector/README.md +++ b/packages/file_selector/file_selector/README.md @@ -34,7 +34,7 @@ Please also take a look at our [example][example] app. #### Open a single file ``` dart -final XTypeGroup typeGroup = XTypeGroup( +const XTypeGroup typeGroup = XTypeGroup( label: 'images', extensions: ['jpg', 'png'], ); @@ -45,11 +45,11 @@ final XFile? file = #### Open multiple files at once ``` dart -final XTypeGroup jpgsTypeGroup = XTypeGroup( +const XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', extensions: ['jpg', 'jpeg'], ); -final XTypeGroup pngTypeGroup = XTypeGroup( +const XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', extensions: ['png'], ); 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 b72d4e5f562f..ba18e6e78594 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 @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_constructors, prefer_const_literals_to_create_immutables - import 'dart:io'; import 'package:file_selector/file_selector.dart'; @@ -18,7 +15,7 @@ class OpenImagePage extends StatelessWidget { Future _openImageFile(BuildContext context) async { // #docregion SingleOpen - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'images', extensions: ['jpg', 'png'], ); 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 87549e046549..8ae83c2a85dc 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 @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_constructors, prefer_const_literals_to_create_immutables - import 'dart:io'; import 'package:file_selector/file_selector.dart'; @@ -18,11 +15,11 @@ class OpenMultipleImagesPage extends StatelessWidget { Future _openImageFile(BuildContext context) async { // #docregion MultiOpen - final XTypeGroup jpgsTypeGroup = XTypeGroup( + const XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', extensions: ['jpg', 'jpeg'], ); - final XTypeGroup pngTypeGroup = XTypeGroup( + const XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', extensions: ['png'], ); 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 04d48afc21e4..f052db1eefc1 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 @@ -12,12 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'text', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], ); // This demonstrates using an initial directory for the prompt, which should diff --git a/packages/file_selector/file_selector/pubspec.yaml b/packages/file_selector/file_selector/pubspec.yaml index 556ddf23b3be..cae08e47eeb1 100644 --- a/packages/file_selector/file_selector/pubspec.yaml +++ b/packages/file_selector/file_selector/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for opening and saving files, or selecting directories, using native file selection UI. repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.2 +version: 0.9.2+1 environment: sdk: ">=2.12.0 <3.0.0" @@ -27,7 +27,7 @@ dependencies: file_selector_ios: ^0.5.0 file_selector_linux: ^0.9.0 file_selector_macos: ^0.9.0 - file_selector_platform_interface: ^2.0.0 + file_selector_platform_interface: ^2.2.0 file_selector_web: ^0.9.0 file_selector_windows: ^0.9.0 flutter: diff --git a/packages/file_selector/file_selector/test/file_selector_test.dart b/packages/file_selector/file_selector/test/file_selector_test.dart index 0bef946142ee..13c986b09922 100644 --- a/packages/file_selector/file_selector/test/file_selector_test.dart +++ b/packages/file_selector/file_selector/test/file_selector_test.dart @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_literals_to_create_immutables - import 'package:file_selector/file_selector.dart'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -15,15 +12,11 @@ void main() { const String initialDirectory = '/home/flutteruser'; const String confirmButtonText = 'Use this profile picture'; const String suggestedName = 'suggested_name'; - final List acceptedTypeGroups = [ - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const List acceptedTypeGroups = [ XTypeGroup(label: 'documents', mimeTypes: [ 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessing', ]), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors XTypeGroup(label: 'images', extensions: [ 'jpg', 'png', diff --git a/packages/file_selector/file_selector_ios/CHANGELOG.md b/packages/file_selector/file_selector_ios/CHANGELOG.md index 2b2d2f8c2d58..439e1d4fd4c1 100644 --- a/packages/file_selector/file_selector_ios/CHANGELOG.md +++ b/packages/file_selector/file_selector_ios/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.5.0+2 +* Changes XTypeGroup initialization from final to const. * Updates minimum Flutter version to 2.10. ## 0.5.0+1 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 eff6c4f7c028..606a64870566 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 @@ -15,15 +15,9 @@ class OpenImagePage extends StatelessWidget { const OpenImagePage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'images', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'png'], - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables macUTIs: ['public.image'], ); final XFile? file = await FileSelectorPlatform.instance 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 0035ebcba5eb..adc4a65f12b5 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 @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_literals_to_create_immutables - import 'dart:io'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; @@ -18,16 +15,12 @@ class OpenMultipleImagesPage extends StatelessWidget { const OpenMultipleImagesPage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup jpgsTypeGroup = XTypeGroup( + const XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', extensions: ['jpg', 'jpeg'], macUTIs: ['public.jpeg'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup pngTypeGroup = XTypeGroup( + const XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', extensions: ['png'], macUTIs: ['public.png'], 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 b91195ef4a3d..e7bbf8bc937f 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 @@ -12,15 +12,9 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'text', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables macUTIs: ['public.text'], ); final XFile? file = await FileSelectorPlatform.instance diff --git a/packages/file_selector/file_selector_ios/example/pubspec.yaml b/packages/file_selector/file_selector_ios/example/pubspec.yaml index eae4a2b45492..5a2eaa6f7dcd 100644 --- a/packages/file_selector/file_selector_ios/example/pubspec.yaml +++ b/packages/file_selector/file_selector_ios/example/pubspec.yaml @@ -17,7 +17,7 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: .. - file_selector_platform_interface: ^2.0.0 + file_selector_platform_interface: ^2.2.0 flutter: sdk: flutter diff --git a/packages/file_selector/file_selector_ios/pubspec.yaml b/packages/file_selector/file_selector_ios/pubspec.yaml index b69db86b2950..3f8ecfac04ce 100644 --- a/packages/file_selector/file_selector_ios/pubspec.yaml +++ b/packages/file_selector/file_selector_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_ios description: iOS implementation of the file_selector plugin. repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.5.0+1 +version: 0.5.0+2 environment: sdk: ">=2.14.4 <3.0.0" @@ -17,7 +17,7 @@ flutter: pluginClass: FFSFileSelectorPlugin dependencies: - file_selector_platform_interface: ^2.1.0 + file_selector_platform_interface: ^2.2.0 flutter: sdk: flutter diff --git a/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart b/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart index a388fe951a4c..f66bd7dc7ced 100644 --- a/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart +++ b/packages/file_selector/file_selector_ios/test/file_selector_ios_test.dart @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_literals_to_create_immutables - import 'package:file_selector_ios/file_selector_ios.dart'; import 'package:file_selector_ios/src/messages.g.dart'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; @@ -39,18 +36,14 @@ void main() { }); test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -69,9 +62,7 @@ void main() { expect(config.allowMultiSelection, isFalse); }); test('throws for a type group that does not support iOS', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], ); @@ -82,9 +73,7 @@ void main() { }); test('allows a wildcard group', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', ); @@ -99,18 +88,14 @@ void main() { }); test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -129,9 +114,7 @@ void main() { expect(config.allowMultiSelection, isTrue); }); test('throws for a type group that does not support iOS', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], ); @@ -142,9 +125,7 @@ void main() { }); test('allows a wildcard group', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', ); diff --git a/packages/file_selector/file_selector_linux/CHANGELOG.md b/packages/file_selector/file_selector_linux/CHANGELOG.md index d76c635cde8e..a1f57b5cc857 100644 --- a/packages/file_selector/file_selector_linux/CHANGELOG.md +++ b/packages/file_selector/file_selector_linux/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.9.0+1 +* Changes XTypeGroup initialization from final to const. * Updates minimum Flutter version to 2.10. ## 0.9.0 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 1925b27002df..b6ada56ebb2b 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 @@ -15,12 +15,8 @@ class OpenImagePage extends StatelessWidget { const OpenImagePage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'images', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'png'], ); final XFile? file = await FileSelectorPlatform.instance 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 ee7e7d1a967d..c8e352a5b8bd 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 @@ -15,20 +15,12 @@ class OpenMultipleImagesPage extends StatelessWidget { const OpenMultipleImagesPage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup jpgsTypeGroup = XTypeGroup( + const XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'jpeg'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup pngTypeGroup = XTypeGroup( + const XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['png'], ); final List files = await FileSelectorPlatform.instance 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 d5e8d462de1d..4c88d7475049 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 @@ -12,12 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'text', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], ); final XFile? file = await FileSelectorPlatform.instance diff --git a/packages/file_selector/file_selector_linux/example/pubspec.yaml b/packages/file_selector/file_selector_linux/example/pubspec.yaml index 857c950ecc95..51bdb28717aa 100644 --- a/packages/file_selector/file_selector_linux/example/pubspec.yaml +++ b/packages/file_selector/file_selector_linux/example/pubspec.yaml @@ -9,7 +9,7 @@ environment: dependencies: file_selector_linux: path: ../ - file_selector_platform_interface: ^2.0.0 + file_selector_platform_interface: ^2.2.0 flutter: sdk: flutter diff --git a/packages/file_selector/file_selector_linux/pubspec.yaml b/packages/file_selector/file_selector_linux/pubspec.yaml index e0b26d18e719..a8aea37d72e2 100644 --- a/packages/file_selector/file_selector_linux/pubspec.yaml +++ b/packages/file_selector/file_selector_linux/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_linux description: Liunx implementation of the file_selector plugin. repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector_linux issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.0 +version: 0.9.0+1 environment: sdk: ">=2.12.0 <3.0.0" @@ -18,7 +18,7 @@ flutter: dependencies: cross_file: ^0.3.1 - file_selector_platform_interface: ^2.1.0 + file_selector_platform_interface: ^2.2.0 flutter: sdk: flutter diff --git a/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart b/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart index 54111c27140e..748f922ae6ef 100644 --- a/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart +++ b/packages/file_selector/file_selector_linux/test/file_selector_linux_test.dart @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_literals_to_create_immutables - import 'package:file_selector_linux/file_selector_linux.dart'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:flutter/services.dart'; @@ -32,18 +29,14 @@ void main() { group('#openFile', () { test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -108,9 +101,7 @@ void main() { }); test('throws for a type group that does not support Linux', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], ); @@ -121,9 +112,7 @@ void main() { }); test('passes a wildcard group correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'any', ); @@ -150,18 +139,14 @@ void main() { group('#openFiles', () { test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -226,9 +211,7 @@ void main() { }); test('throws for a type group that does not support Linux', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], ); @@ -239,9 +222,7 @@ void main() { }); test('passes a wildcard group correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'any', ); @@ -268,18 +249,14 @@ void main() { group('#getSavePath', () { test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -345,9 +322,7 @@ void main() { }); test('throws for a type group that does not support Linux', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], ); @@ -358,9 +333,7 @@ void main() { }); test('passes a wildcard group correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'any', ); diff --git a/packages/file_selector/file_selector_macos/CHANGELOG.md b/packages/file_selector/file_selector_macos/CHANGELOG.md index f9241da91476..af17db8ae3ef 100644 --- a/packages/file_selector/file_selector_macos/CHANGELOG.md +++ b/packages/file_selector/file_selector_macos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.0+3 + +* Changes XTypeGroup initialization from final to const. + ## 0.9.0+2 * Updates imports for `prefer_relative_imports`. 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 1925b27002df..b6ada56ebb2b 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 @@ -15,12 +15,8 @@ class OpenImagePage extends StatelessWidget { const OpenImagePage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'images', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'png'], ); final XFile? file = await FileSelectorPlatform.instance 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 ee7e7d1a967d..c8e352a5b8bd 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 @@ -15,20 +15,12 @@ class OpenMultipleImagesPage extends StatelessWidget { const OpenMultipleImagesPage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup jpgsTypeGroup = XTypeGroup( + const XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'jpeg'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup pngTypeGroup = XTypeGroup( + const XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['png'], ); final List files = await FileSelectorPlatform.instance 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 d5e8d462de1d..4c88d7475049 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 @@ -12,12 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'text', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], ); final XFile? file = await FileSelectorPlatform.instance diff --git a/packages/file_selector/file_selector_macos/example/pubspec.yaml b/packages/file_selector/file_selector_macos/example/pubspec.yaml index 58c5d6e22b49..d3f3114bb481 100644 --- a/packages/file_selector/file_selector_macos/example/pubspec.yaml +++ b/packages/file_selector/file_selector_macos/example/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: .. - file_selector_platform_interface: ^2.0.0 + file_selector_platform_interface: ^2.2.0 flutter: sdk: flutter diff --git a/packages/file_selector/file_selector_macos/pubspec.yaml b/packages/file_selector/file_selector_macos/pubspec.yaml index b921cc8e8070..3fc3832d7280 100644 --- a/packages/file_selector/file_selector_macos/pubspec.yaml +++ b/packages/file_selector/file_selector_macos/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_macos description: macOS implementation of the file_selector plugin. repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector_macos issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.0+2 +version: 0.9.0+3 environment: sdk: ">=2.12.0 <3.0.0" @@ -18,7 +18,7 @@ flutter: dependencies: cross_file: ^0.3.1 - file_selector_platform_interface: ^2.1.0 + file_selector_platform_interface: ^2.2.0 flutter: sdk: flutter diff --git a/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart b/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart index 29702a5421b1..789d70a51777 100644 --- a/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart +++ b/packages/file_selector/file_selector_macos/test/file_selector_macos_test.dart @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_literals_to_create_immutables - import 'package:file_selector_macos/file_selector_macos.dart'; import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:flutter/services.dart'; @@ -33,18 +30,14 @@ void main() { group('openFile', () { test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -103,9 +96,7 @@ void main() { }); test('throws for a type group that does not support macOS', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], ); @@ -116,9 +107,7 @@ void main() { }); test('allows a wildcard group', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', ); @@ -129,18 +118,14 @@ void main() { group('openFiles', () { test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -199,9 +184,7 @@ void main() { }); test('throws for a type group that does not support macOS', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], ); @@ -212,9 +195,7 @@ void main() { }); test('allows a wildcard group', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', ); @@ -225,18 +206,14 @@ void main() { group('getSavePath', () { test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -296,9 +273,7 @@ void main() { }); test('throws for a type group that does not support macOS', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'images', webWildCards: ['images/*'], ); @@ -309,9 +284,7 @@ void main() { }); test('allows a wildcard group', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', ); @@ -353,25 +326,19 @@ void main() { test('ignores all type groups if any of them is a wildcard', () async { await plugin.getSavePath(acceptedTypeGroups: [ - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - XTypeGroup( + const XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - XTypeGroup( + const XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], macUTIs: ['public.image'], ), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - XTypeGroup( + const XTypeGroup( label: 'any', ), ]); diff --git a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart index 107cdc3a2538..c5e65d0264f5 100644 --- a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart +++ b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart @@ -9,12 +9,12 @@ void main() { group('XTypeGroup', () { test('toJSON() creates correct map', () { const String label = 'test group'; - final List extensions = ['txt', 'jpg']; - final List mimeTypes = ['text/plain']; - final List macUTIs = ['public.plain-text']; - final List webWildCards = ['image/*']; + const List extensions = ['txt', 'jpg']; + const List mimeTypes = ['text/plain']; + const List macUTIs = ['public.plain-text']; + const List webWildCards = ['image/*']; - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: label, extensions: extensions, mimeTypes: mimeTypes, @@ -72,8 +72,8 @@ void main() { }); test('Leading dots are removed from extensions', () { - final List extensions = ['.txt', '.jpg']; - final XTypeGroup group = XTypeGroup(extensions: extensions); + const List extensions = ['.txt', '.jpg']; + const XTypeGroup group = XTypeGroup(extensions: extensions); expect(group.extensions, ['txt', 'jpg']); }); diff --git a/packages/file_selector/file_selector_web/CHANGELOG.md b/packages/file_selector/file_selector_web/CHANGELOG.md index 69ca20363866..5e531bb633d2 100644 --- a/packages/file_selector/file_selector_web/CHANGELOG.md +++ b/packages/file_selector/file_selector_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.0+2 + +* Changes XTypeGroup initialization from final to const. + ## 0.9.0+1 * Updates imports for `prefer_relative_imports`. diff --git a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart index 5f476d937977..664c40871f49 100644 --- a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart +++ b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_literals_to_create_immutables - import 'dart:html'; import 'dart:typed_data'; @@ -29,9 +26,7 @@ void main() { final FileSelectorWeb plugin = FileSelectorWeb(domHelper: mockDomHelper); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'images', extensions: ['jpg', 'jpeg'], mimeTypes: ['image/png'], @@ -61,9 +56,7 @@ void main() { final FileSelectorWeb plugin = FileSelectorWeb(domHelper: mockDomHelper); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'files', extensions: ['.txt'], ); diff --git a/packages/file_selector/file_selector_web/example/pubspec.yaml b/packages/file_selector/file_selector_web/example/pubspec.yaml index 3a36ce5c74f3..e14f5c2eedea 100644 --- a/packages/file_selector/file_selector_web/example/pubspec.yaml +++ b/packages/file_selector/file_selector_web/example/pubspec.yaml @@ -6,7 +6,7 @@ environment: flutter: ">=2.10.0" dependencies: - file_selector_platform_interface: ^2.1.0 + file_selector_platform_interface: ^2.2.0 file_selector_web: path: ../ flutter: diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index 38229588fd27..848a41b754af 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_web description: Web platform implementation of file_selector repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.0+1 +version: 0.9.0+2 environment: sdk: ">=2.12.0 <3.0.0" @@ -17,7 +17,7 @@ flutter: fileName: file_selector_web.dart dependencies: - file_selector_platform_interface: ^2.1.0 + file_selector_platform_interface: ^2.2.0 flutter: sdk: flutter flutter_web_plugins: diff --git a/packages/file_selector/file_selector_web/test/utils_test.dart b/packages/file_selector/file_selector_web/test/utils_test.dart index dcb7c3d8c627..f9f3a41295f0 100644 --- a/packages/file_selector/file_selector_web/test/utils_test.dart +++ b/packages/file_selector/file_selector_web/test/utils_test.dart @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_literals_to_create_immutables - import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:file_selector_web/src/utils.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -13,15 +10,9 @@ void main() { group('FileSelectorWeb utils', () { group('acceptedTypesToString', () { test('works', () { - final List acceptedTypes = [ - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const List acceptedTypes = [ XTypeGroup(label: 'images', webWildCards: ['images/*']), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors XTypeGroup(label: 'jpgs', extensions: ['jpg', 'jpeg']), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors XTypeGroup(label: 'pngs', mimeTypes: ['image/png']), ]; final String accepts = acceptedTypesToString(acceptedTypes); @@ -29,18 +20,14 @@ void main() { }); test('works with an empty list', () { - final List acceptedTypes = []; + const List acceptedTypes = []; final String accepts = acceptedTypesToString(acceptedTypes); expect(accepts, ''); }); test('works with extensions', () { - final List acceptedTypes = [ - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const List acceptedTypes = [ XTypeGroup(label: 'jpgs', extensions: ['jpeg', 'jpg']), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors XTypeGroup(label: 'pngs', extensions: ['png']), ]; final String accepts = acceptedTypesToString(acceptedTypes); @@ -48,13 +35,9 @@ void main() { }); test('works with mime types', () { - final List acceptedTypes = [ - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const List acceptedTypes = [ XTypeGroup( label: 'jpgs', mimeTypes: ['image/jpeg', 'image/jpg']), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors XTypeGroup(label: 'pngs', mimeTypes: ['image/png']), ]; final String accepts = acceptedTypesToString(acceptedTypes); @@ -62,15 +45,9 @@ void main() { }); test('works with web wild cards', () { - final List acceptedTypes = [ - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const List acceptedTypes = [ XTypeGroup(label: 'images', webWildCards: ['image/*']), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors XTypeGroup(label: 'audios', webWildCards: ['audio/*']), - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors XTypeGroup(label: 'videos', webWildCards: ['video/*']), ]; final String accepts = acceptedTypesToString(acceptedTypes); @@ -78,9 +55,7 @@ void main() { }); test('throws for a type group that does not support web', () { - final List acceptedTypes = [ - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const List acceptedTypes = [ XTypeGroup(label: 'text', macUTIs: ['public.text']), ]; expect(() => acceptedTypesToString(acceptedTypes), throwsArgumentError); diff --git a/packages/file_selector/file_selector_windows/CHANGELOG.md b/packages/file_selector/file_selector_windows/CHANGELOG.md index 1221bbd4d508..13e895ca46f1 100644 --- a/packages/file_selector/file_selector_windows/CHANGELOG.md +++ b/packages/file_selector/file_selector_windows/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.1+4 + +* Changes XTypeGroup initialization from final to const. + ## 0.9.1+3 * Updates imports for `prefer_relative_imports`. 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 1925b27002df..b6ada56ebb2b 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 @@ -15,12 +15,8 @@ class OpenImagePage extends StatelessWidget { const OpenImagePage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'images', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'png'], ); final XFile? file = await FileSelectorPlatform.instance 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 ee7e7d1a967d..c8e352a5b8bd 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 @@ -15,20 +15,12 @@ class OpenMultipleImagesPage extends StatelessWidget { const OpenMultipleImagesPage({Key? key}) : super(key: key); Future _openImageFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup jpgsTypeGroup = XTypeGroup( + const XTypeGroup jpgsTypeGroup = XTypeGroup( label: 'JPEGs', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['jpg', 'jpeg'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup pngTypeGroup = XTypeGroup( + const XTypeGroup pngTypeGroup = XTypeGroup( label: 'PNGs', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['png'], ); final List files = await FileSelectorPlatform.instance 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 d5e8d462de1d..4c88d7475049 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 @@ -12,12 +12,8 @@ class OpenTextPage extends StatelessWidget { const OpenTextPage({Key? key}) : super(key: key); Future _openTextFile(BuildContext context) async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup typeGroup = XTypeGroup( + const XTypeGroup typeGroup = XTypeGroup( label: 'text', - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_literals_to_create_immutables extensions: ['txt', 'json'], ); final XFile? file = await FileSelectorPlatform.instance diff --git a/packages/file_selector/file_selector_windows/example/pubspec.yaml b/packages/file_selector/file_selector_windows/example/pubspec.yaml index 99c251d0867f..bc886d32c896 100644 --- a/packages/file_selector/file_selector_windows/example/pubspec.yaml +++ b/packages/file_selector/file_selector_windows/example/pubspec.yaml @@ -8,7 +8,7 @@ environment: flutter: ">=2.10.0" dependencies: - file_selector_platform_interface: ^2.0.0 + file_selector_platform_interface: ^2.2.0 file_selector_windows: # When depending on this package from a real application you should use: # file_selector_windows: ^x.y.z diff --git a/packages/file_selector/file_selector_windows/pubspec.yaml b/packages/file_selector/file_selector_windows/pubspec.yaml index 7859822701e1..ee0701b3fd30 100644 --- a/packages/file_selector/file_selector_windows/pubspec.yaml +++ b/packages/file_selector/file_selector_windows/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_windows description: Windows implementation of the file_selector plugin. repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector_windows issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.1+3 +version: 0.9.1+4 environment: sdk: ">=2.12.0 <3.0.0" @@ -18,7 +18,7 @@ flutter: dependencies: cross_file: ^0.3.1 - file_selector_platform_interface: ^2.1.0 + file_selector_platform_interface: ^2.2.0 flutter: sdk: flutter diff --git a/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart b/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart index 2d8dc4b78688..f07c9b67618d 100644 --- a/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart +++ b/packages/file_selector/file_selector_windows/test/file_selector_windows_test.dart @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 -// ignore_for_file: prefer_const_literals_to_create_immutables - import 'package:file_selector_platform_interface/file_selector_platform_interface.dart'; import 'package:file_selector_windows/file_selector_windows.dart'; import 'package:file_selector_windows/src/messages.g.dart'; @@ -50,18 +47,14 @@ void main() { }); test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -93,9 +86,7 @@ void main() { }); test('throws for a type group that does not support Windows', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', mimeTypes: ['text/plain'], ); @@ -106,9 +97,7 @@ void main() { }); test('allows a wildcard group', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', ); @@ -136,18 +125,14 @@ void main() { }); test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -179,9 +164,7 @@ void main() { }); test('throws for a type group that does not support Windows', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', mimeTypes: ['text/plain'], ); @@ -192,9 +175,7 @@ void main() { }); test('allows a wildcard group', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', ); @@ -250,18 +231,14 @@ void main() { }); test('passes the accepted type groups correctly', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', extensions: ['txt'], mimeTypes: ['text/plain'], macUTIs: ['public.text'], ); - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup groupTwo = XTypeGroup( + const XTypeGroup groupTwo = XTypeGroup( label: 'image', extensions: ['jpg'], mimeTypes: ['image/jpg'], @@ -300,9 +277,7 @@ void main() { }); test('throws for a type group that does not support Windows', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', mimeTypes: ['text/plain'], ); @@ -313,9 +288,7 @@ void main() { }); test('allows a wildcard group', () async { - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors - final XTypeGroup group = XTypeGroup( + const XTypeGroup group = XTypeGroup( label: 'text', ); From 3cd4360b674d3530840c2506b00793de585d73b6 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 6 Oct 2022 13:35:55 -0400 Subject: [PATCH 052/133] Roll Flutter from d554fcb36a6e to be86a916548a (22 revisions) (#6548) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 7dd277eedd71..f7578dc7ad5d 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -d554fcb36a6e6a6a83d0c7759d2a4cd113701aef +be86a916548a66c93e4f2f919b5ca0ccd2cdae0c From d4db207f557b6cc4ed24d2aeef8fc5ec044f76b6 Mon Sep 17 00:00:00 2001 From: eugerossetto <101729072+eugerossetto@users.noreply.github.com> Date: Thu, 6 Oct 2022 15:39:24 -0300 Subject: [PATCH 053/133] [image_picker_windows] Use const instead of final for XTypeGroup. (#6544) --- .../image_picker/image_picker_windows/CHANGELOG.md | 3 ++- .../lib/image_picker_windows.dart | 12 +++--------- .../image_picker/image_picker_windows/pubspec.yaml | 4 ++-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/image_picker/image_picker_windows/CHANGELOG.md b/packages/image_picker/image_picker_windows/CHANGELOG.md index 2480d6da9ea4..427598760a4b 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+3 +* Changes XTypeGroup initialization from final to const. * Updates minimum Flutter version to 2.10. ## 0.1.0+2 diff --git a/packages/image_picker/image_picker_windows/lib/image_picker_windows.dart b/packages/image_picker/image_picker_windows/lib/image_picker_windows.dart index 10880d12ae6b..90e86bf486b4 100644 --- a/packages/image_picker/image_picker_windows/lib/image_picker_windows.dart +++ b/packages/image_picker/image_picker_windows/lib/image_picker_windows.dart @@ -118,9 +118,7 @@ class ImagePickerWindows extends ImagePickerPlatform { throw UnimplementedError( 'ImageSource.gallery is currently the only supported source on Windows'); } - final XTypeGroup typeGroup = - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const XTypeGroup typeGroup = XTypeGroup(label: 'images', extensions: imageFormats); final XFile? file = await fileSelector .openFile(acceptedTypeGroups: [typeGroup]); @@ -144,9 +142,7 @@ class ImagePickerWindows extends ImagePickerPlatform { throw UnimplementedError( 'ImageSource.gallery is currently the only supported source on Windows'); } - final XTypeGroup typeGroup = - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const XTypeGroup typeGroup = XTypeGroup(label: 'videos', extensions: videoFormats); final XFile? file = await fileSelector .openFile(acceptedTypeGroups: [typeGroup]); @@ -162,9 +158,7 @@ class ImagePickerWindows extends ImagePickerPlatform { double? maxHeight, int? imageQuality, }) async { - final XTypeGroup typeGroup = - // TODO(stuartmorgan): https://github.com/flutter/flutter/issues/111906 - // ignore: prefer_const_constructors + const XTypeGroup typeGroup = XTypeGroup(label: 'images', extensions: imageFormats); final List files = await fileSelector .openFiles(acceptedTypeGroups: [typeGroup]); diff --git a/packages/image_picker/image_picker_windows/pubspec.yaml b/packages/image_picker/image_picker_windows/pubspec.yaml index 2887b080cef3..5d6988cc2931 100644 --- a/packages/image_picker/image_picker_windows/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker_windows 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+2 +version: 0.1.0+3 environment: sdk: ">=2.12.0 <3.0.0" @@ -16,7 +16,7 @@ flutter: dartPluginClass: ImagePickerWindows dependencies: - file_selector_platform_interface: ^2.0.4 + file_selector_platform_interface: ^2.2.0 file_selector_windows: ^0.8.2 flutter: sdk: flutter From 51c808188cc9fc2a8b1d42f8fd852f515f7538e8 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 7 Oct 2022 11:46:26 -0400 Subject: [PATCH 054/133] Roll Flutter from be86a916548a to eec8d9d9cc29 (28 revisions) (#6551) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index f7578dc7ad5d..914a9007d2d1 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -be86a916548a66c93e4f2f919b5ca0ccd2cdae0c +eec8d9d9cc2945e12f11bc714de107ad9799ad9b From 028e7494bb0c0391ba3e3a4b065af9f52a30cde4 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Fri, 7 Oct 2022 18:35:03 -0400 Subject: [PATCH 055/133] [tool] Fix version mistake in CHANGELOG (#6552) --- script/tool/CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index f62509040a3d..b7864c9c0501 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,4 +1,4 @@ -## 12.0 +## 0.12.0 * Changes the behavior of `--packages-for-branch` on main/master to run for packages changed in the last commit, rather than running for all packages. @@ -6,7 +6,7 @@ tested in presubmit. * Adds a `fix` command to run `dart fix --apply` in target packages. -## 0.11 +## 0.11.0 * Renames `publish-plugin` to `publish`. * Renames arguments to `list`: From cfbdcd0b40faabfbd345ea4d6498efd99affe838 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 8 Oct 2022 11:55:22 -0400 Subject: [PATCH 056/133] Roll Flutter from eec8d9d9cc29 to 23f22cb8535c (22 revisions) (#6554) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 914a9007d2d1..c651766c614a 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -eec8d9d9cc2945e12f11bc714de107ad9799ad9b +23f22cb8535c0e8746badef943c8c178d30b5f07 From 1cf02a83a4809be90c6a3431b9a3b846c87aa0a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 16:14:57 +0000 Subject: [PATCH 057/133] [gh_actions]: Bump github/codeql-action from 2.1.25 to 2.1.27 (#6559) --- .github/workflows/scorecards-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index e14935f4e455..ab43bd18872e 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -50,6 +50,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@86f3159a697a097a813ad9bfa0002412d97690a4 + uses: github/codeql-action/upload-sarif@807578363a7869ca324a79039e6db9c843e0e100 with: sarif_file: results.sarif From 61b6fee478560e2baa8493b58f2f3c04a6954a9d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 20:10:28 +0000 Subject: [PATCH 058/133] [gh_actions]: Bump actions/checkout from 3.0.2 to 3.1.0 (#6561) --- .github/workflows/release.yml | 2 +- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5ff15569f842..7008ebfa8966 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: cd $GITHUB_WORKSPACE # Checks out a copy of the repo. - name: Check out code - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 with: fetch-depth: 0 # Fetch all history so the tool can get all the tags to determine version. - name: Set up tools diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index ab43bd18872e..dbd4ac47b189 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -22,7 +22,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 with: persist-credentials: false From f64d53ca4af6053e9579b3fc885fa3dbd5e3d679 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 20:58:13 +0000 Subject: [PATCH 059/133] [gh_actions]: Bump ossf/scorecard-action from 2.0.3 to 2.0.4 (#6560) --- .github/workflows/scorecards-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index dbd4ac47b189..22a0c413d8bc 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -27,7 +27,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@865b4092859256271290c77adbd10a43f4779972 + uses: ossf/scorecard-action@e363bfca00e752f91de7b7d2a77340e2e523cb18 with: results_file: results.sarif results_format: sarif From 88aa7b1a3de4ce7bcf70a03af777d73b2b628e77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 21:43:38 +0000 Subject: [PATCH 060/133] [gh_actions]: Bump actions/labeler from 4.0.1 to 4.0.2 (#6558) --- .github/workflows/pull_request_label.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull_request_label.yml b/.github/workflows/pull_request_label.yml index baec3deb4893..16ad0a3c171a 100644 --- a/.github/workflows/pull_request_label.yml +++ b/.github/workflows/pull_request_label.yml @@ -21,7 +21,7 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/labeler@e54e5b338fbd6e6cdb5d60f51c22335fc57c401e + - uses: actions/labeler@5c7539237e04b714afd8ad9b4aed733815b9fab4 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" sync-labels: true From 5239062837ef235c614b646d3143ffda6ec57dd0 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 10 Oct 2022 17:47:22 -0400 Subject: [PATCH 061/133] Roll Flutter from 23f22cb8535c to 89d9880f46e0 (3 revisions) (#6556) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index c651766c614a..f1a12af1e745 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -23f22cb8535c0e8746badef943c8c178d30b5f07 +89d9880f46e066f79bdf6da19bd44edfaa64c041 From b175843a5f2ded85b4e1c32021e7485b2aacce0d Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Tue, 11 Oct 2022 09:41:35 -0400 Subject: [PATCH 062/133] [various] Add some more Java lint ignores (#6562) --- packages/camera/camera_android/android/build.gradle | 2 ++ packages/camera/camera_android_camerax/android/build.gradle | 5 +++++ packages/espresso/android/build.gradle | 2 ++ .../flutter_plugin_android_lifecycle/android/build.gradle | 2 ++ .../google_maps_flutter_android/android/build.gradle | 2 ++ .../google_sign_in_android/android/build.gradle | 2 ++ .../image_picker/image_picker_android/android/build.gradle | 1 + .../in_app_purchase_android/android/build.gradle | 2 ++ packages/local_auth/local_auth_android/android/build.gradle | 2 ++ .../path_provider/path_provider_android/android/build.gradle | 2 ++ .../quick_actions/quick_actions_android/android/build.gradle | 2 ++ .../shared_preferences_android/android/build.gradle | 1 + .../url_launcher/url_launcher_android/android/build.gradle | 1 + .../video_player/video_player_android/android/build.gradle | 1 + .../webview_flutter_android/android/build.gradle | 1 + 15 files changed, 28 insertions(+) diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle index b060181316c1..b371f2b5d8b7 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle @@ -35,6 +35,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' baseline file("lint-baseline.xml") diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index b4209bbe62a6..d20643f70268 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -47,6 +47,11 @@ android { } } } + + lintOptions { + disable 'AndroidGradlePluginVersion' + disable 'GradleDependency' + } } dependencies { diff --git a/packages/espresso/android/build.gradle b/packages/espresso/android/build.gradle index d78609270bf4..a83e9cce859f 100644 --- a/packages/espresso/android/build.gradle +++ b/packages/espresso/android/build.gradle @@ -29,6 +29,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' baseline file("lint-baseline.xml") diff --git a/packages/flutter_plugin_android_lifecycle/android/build.gradle b/packages/flutter_plugin_android_lifecycle/android/build.gradle index a86e070bc693..5786a74e2e78 100644 --- a/packages/flutter_plugin_android_lifecycle/android/build.gradle +++ b/packages/flutter_plugin_android_lifecycle/android/build.gradle @@ -30,6 +30,8 @@ android { consumerProguardFiles 'proguard.txt' } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle index 06599fc94c49..44ad60be4f55 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle @@ -29,6 +29,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle b/packages/google_sign_in/google_sign_in_android/android/build.gradle index 3384029d666a..f3a324fefbc9 100644 --- a/packages/google_sign_in/google_sign_in_android/android/build.gradle +++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle @@ -29,6 +29,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/image_picker/image_picker_android/android/build.gradle b/packages/image_picker/image_picker_android/android/build.gradle index a6c01e386448..aed1ad5174ea 100644 --- a/packages/image_picker/image_picker_android/android/build.gradle +++ b/packages/image_picker/image_picker_android/android/build.gradle @@ -29,6 +29,7 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle index d58d1cc7c052..2375acdc856f 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle @@ -29,6 +29,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/local_auth/local_auth_android/android/build.gradle b/packages/local_auth/local_auth_android/android/build.gradle index 399d8a4fbb45..569d7e3564b4 100644 --- a/packages/local_auth/local_auth_android/android/build.gradle +++ b/packages/local_auth/local_auth_android/android/build.gradle @@ -29,6 +29,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' baseline file("lint-baseline.xml") diff --git a/packages/path_provider/path_provider_android/android/build.gradle b/packages/path_provider/path_provider_android/android/build.gradle index 4bfa738ac44c..32c046bf235f 100644 --- a/packages/path_provider/path_provider_android/android/build.gradle +++ b/packages/path_provider/path_provider_android/android/build.gradle @@ -29,6 +29,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/quick_actions/quick_actions_android/android/build.gradle b/packages/quick_actions/quick_actions_android/android/build.gradle index 8cb1ca327251..e4cdec819ec9 100644 --- a/packages/quick_actions/quick_actions_android/android/build.gradle +++ b/packages/quick_actions/quick_actions_android/android/build.gradle @@ -29,6 +29,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + // TODO(stuartmorgan): Enable when gradle is updated. + // disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/shared_preferences/shared_preferences_android/android/build.gradle b/packages/shared_preferences/shared_preferences_android/android/build.gradle index bd6adf411077..feae770a475d 100644 --- a/packages/shared_preferences/shared_preferences_android/android/build.gradle +++ b/packages/shared_preferences/shared_preferences_android/android/build.gradle @@ -37,6 +37,7 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' baseline file("lint-baseline.xml") diff --git a/packages/url_launcher/url_launcher_android/android/build.gradle b/packages/url_launcher/url_launcher_android/android/build.gradle index a4fa269cbfc7..0353973b4ffe 100644 --- a/packages/url_launcher/url_launcher_android/android/build.gradle +++ b/packages/url_launcher/url_launcher_android/android/build.gradle @@ -29,6 +29,7 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/video_player/video_player_android/android/build.gradle b/packages/video_player/video_player_android/android/build.gradle index 2376d53a0ec1..2677050d303b 100644 --- a/packages/video_player/video_player_android/android/build.gradle +++ b/packages/video_player/video_player_android/android/build.gradle @@ -34,6 +34,7 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { + disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } diff --git a/packages/webview_flutter/webview_flutter_android/android/build.gradle b/packages/webview_flutter/webview_flutter_android/android/build.gradle index 65374fee88bf..7384f8d453da 100644 --- a/packages/webview_flutter/webview_flutter_android/android/build.gradle +++ b/packages/webview_flutter/webview_flutter_android/android/build.gradle @@ -30,6 +30,7 @@ android { } lintOptions { + disable 'AndroidGradlePluginVersion' disable 'InvalidPackage' disable 'GradleDependency' } From 5a5725730cb20628d1ffbd86dc39f1861629a642 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 11 Oct 2022 11:53:58 -0400 Subject: [PATCH 063/133] Roll Flutter from 89d9880f46e0 to 4fed6aaeff8f (23 revisions) (#6564) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index f1a12af1e745..255109237fbb 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -89d9880f46e066f79bdf6da19bd44edfaa64c041 +4fed6aaeff8f38d4e04e8c8e1c8648dded229617 From 5f0a5f225befdef9c8bbadc148a40f9673d20475 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 12 Oct 2022 13:14:26 -0400 Subject: [PATCH 064/133] Roll Flutter from 4fed6aaeff8f to 91d88336ddcf (13 revisions) (#6567) * 92b43050f Roll Flutter Engine from a5f44b8c08b6 to 7c4ad0b7d49e (1 revision) (flutter/flutter#113284) * 95687eb26 Roll Plugins from cfbdcd0b40fa to b175843a5f2d (6 revisions) (flutter/flutter#113287) * 4cbeb9ddb Roll Flutter Engine from 7c4ad0b7d49e to 281152f8322d (1 revision) (flutter/flutter#113288) * e1f3cff2e Roll Flutter Engine from 281152f8322d to c9f4e97abf68 (1 revision) (flutter/flutter#113291) * 8c8bb2222 BufferLogger should log stacktrace (flutter/flutter#113240) * ee38dbdd6 Roll Flutter Engine from c9f4e97abf68 to b783740a940f (1 revision) (flutter/flutter#113297) * a84a2582b Roll Flutter Engine from b783740a940f to 7979ffc80832 (1 revision) (flutter/flutter#113299) * b2bba4a28 Roll Flutter Engine from 7979ffc80832 to 30d57deea8a6 (1 revision) (flutter/flutter#113304) * 07e929363 Roll Flutter Engine from 30d57deea8a6 to bb0641278cd7 (1 revision) (flutter/flutter#113305) * 096cd8349 Roll Flutter Engine from bb0641278cd7 to c4da2d8903ce (1 revision) (flutter/flutter#113309) * aab696c23 Roll Flutter Engine from c4da2d8903ce to 481f20168905 (1 revision) (flutter/flutter#113313) * a5ee67ef8 Roll Flutter Engine from 481f20168905 to ea64def17550 (1 revision) (flutter/flutter#113321) * 91d88336d Added `Switch` Animation for Material 3 (flutter/flutter#113090) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 255109237fbb..06ec521d86f7 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -4fed6aaeff8f38d4e04e8c8e1c8648dded229617 +91d88336ddcf53969674d7ec19c9f5ada2e6e799 From c407d929e5996c65976d6e4bd82d60e18d0ccc37 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 13 Oct 2022 11:53:10 -0400 Subject: [PATCH 065/133] Roll Flutter from 91d88336ddcf to c738c8aa9616 (8 revisions) (#6571) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 06ec521d86f7..3f43e970bb54 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -91d88336ddcf53969674d7ec19c9f5ada2e6e799 +c738c8aa961670929f90124ace71b7d9b263e002 From ef8a9ff609208949e38307d23c0fb44d975a4b77 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Thu, 13 Oct 2022 16:17:22 -0400 Subject: [PATCH 066/133] [quick_actions] Update dependency versions (#6563) --- packages/quick_actions/quick_actions/CHANGELOG.md | 4 ++++ packages/quick_actions/quick_actions/pubspec.yaml | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/quick_actions/quick_actions/CHANGELOG.md b/packages/quick_actions/quick_actions/CHANGELOG.md index b8b431490cae..7d1881596255 100644 --- a/packages/quick_actions/quick_actions/CHANGELOG.md +++ b/packages/quick_actions/quick_actions/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.1 + +* Updates implementaion package versions to current versions. + ## 1.0.0 * Updates version to 1.0 to reflect current status. diff --git a/packages/quick_actions/quick_actions/pubspec.yaml b/packages/quick_actions/quick_actions/pubspec.yaml index 9ce18456969e..08b486fe50e3 100644 --- a/packages/quick_actions/quick_actions/pubspec.yaml +++ b/packages/quick_actions/quick_actions/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for creating shortcuts on home screen, also known as Quick Actions on iOS and App Shortcuts on Android. repository: https://github.com/flutter/plugins/tree/main/packages/quick_actions/quick_actions issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+quick_actions%22 -version: 1.0.0 +version: 1.0.1 environment: sdk: ">=2.14.0 <3.0.0" @@ -20,8 +20,8 @@ flutter: dependencies: flutter: sdk: flutter - quick_actions_android: ^0.6.0+9 - quick_actions_ios: ^0.6.0+9 + quick_actions_android: ^1.0.0 + quick_actions_ios: ^1.0.0 quick_actions_platform_interface: ^1.0.0 dev_dependencies: From b033ac7de5df235e7f3da0e539fa47e2e743e94a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 14 Oct 2022 11:52:23 -0400 Subject: [PATCH 067/133] Roll Flutter from c738c8aa9616 to 08e1729204f3 (8 revisions) (#6574) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 3f43e970bb54..e96d0e3b813d 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -c738c8aa961670929f90124ace71b7d9b263e002 +08e1729204f3e2be062bf3aabbe14048561171ac From 3d44753ad9bab0965d465ff6c73c9c416923b5c8 Mon Sep 17 00:00:00 2001 From: Hosam Hasan Ramadan Date: Fri, 14 Oct 2022 19:22:37 +0200 Subject: [PATCH 068/133] [shared_preferences] fix typo (#6570) --- .../shared_preferences/shared_preferences_android/CHANGELOG.md | 3 ++- .../lib/shared_preferences_android.dart | 2 +- .../shared_preferences/shared_preferences_android/pubspec.yaml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index f21af6aff7aa..d9d7bbd82f46 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.0.14 +* Fixes typo in `SharedPreferencesAndroid` docs. * Updates code for `no_leading_underscores_for_local_identifiers` lint. ## 2.0.13 diff --git a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart index 86f447b8959c..da5147d32da2 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart @@ -10,7 +10,7 @@ import 'package:shared_preferences_platform_interface/shared_preferences_platfor const MethodChannel _kChannel = MethodChannel('plugins.flutter.io/shared_preferences_android'); -/// The macOS implementation of [SharedPreferencesStorePlatform]. +/// The Android implementation of [SharedPreferencesStorePlatform]. /// /// This class implements the `package:shared_preferences` functionality for Android. class SharedPreferencesAndroid extends SharedPreferencesStorePlatform { diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index 7d7dfa85b71a..7692c114bfce 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_android description: Android implementation of the shared_preferences plugin repository: https://github.com/flutter/plugins/tree/main/packages/shared_preferences/shared_preferences_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.0.13 +version: 2.0.14 environment: sdk: ">=2.14.0 <3.0.0" From b74525777205166722553659de51abee3b14d177 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 15 Oct 2022 11:47:03 -0400 Subject: [PATCH 069/133] Roll Flutter from 08e1729204f3 to a707d05e9d4c (6 revisions) (#6577) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index e96d0e3b813d..aedbdf2f7aaa 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -08e1729204f3e2be062bf3aabbe14048561171ac +a707d05e9d4c7ec95403444e04a65cd69c0da3b0 From 5a0209d99d8966e0907f9e0632558234f8dca71c Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 17 Oct 2022 12:51:20 -0400 Subject: [PATCH 070/133] Roll Flutter from a707d05e9d4c to f26dd3730df8 (10 revisions) (#6584) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index aedbdf2f7aaa..b98166d52783 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -a707d05e9d4c7ec95403444e04a65cd69c0da3b0 +f26dd3730df8fe831243f9d58dd8ef6b8919d2ce From fd3ee3885c8b87724f8ad7e1223a97661affd06f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20=C3=81ngel=20Dausa?= Date: Tue, 18 Oct 2022 15:13:20 -0300 Subject: [PATCH 071/133] [file_selector] Update file_selector_platform_interface by adding the new property 'uniformTypeIdentifiers' to the XTypeGroup. (#6433) --- .../CHANGELOG.md | 4 ++ .../src/types/x_type_group/x_type_group.dart | 15 ++-- .../pubspec.yaml | 2 +- .../test/x_type_group_test.dart | 70 +++++++++++++++++-- 4 files changed, 82 insertions(+), 9 deletions(-) diff --git a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md index ad1fe2cb6cef..ad803fb12e66 100644 --- a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md +++ b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.0 + +* Replaces `macUTIs` with `uniformTypeIdentifiers`. `macUTIs` is available as an alias, but will be deprecated in a future release. + ## 2.2.0 * Makes `XTypeGroup`'s constructor constant. diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart b/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart index 00cd56563c32..e12b431d91d8 100644 --- a/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart +++ b/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart @@ -14,9 +14,13 @@ class XTypeGroup { this.label, List? extensions, this.mimeTypes, - this.macUTIs, + List? macUTIs, + List? uniformTypeIdentifiers, this.webWildCards, - }) : _extensions = extensions; + }) : _extensions = extensions, + assert(uniformTypeIdentifiers == null || macUTIs == null, + 'Only one of uniformTypeIdentifiers or macUTIs can be non-null'), + uniformTypeIdentifiers = uniformTypeIdentifiers ?? macUTIs; /// The 'name' or reference to this group of types. final String? label; @@ -24,8 +28,8 @@ class XTypeGroup { /// The MIME types for this group. final List? mimeTypes; - /// The UTIs for this group. - final List? macUTIs; + /// The uniform type identifiers for this group + final List? uniformTypeIdentifiers; /// The web wild cards for this group (ex: image/*, video/*). final List? webWildCards; @@ -56,6 +60,9 @@ class XTypeGroup { (webWildCards?.isEmpty ?? true); } + /// Returns the list of uniform type identifiers for this group + List? get macUTIs => uniformTypeIdentifiers; + static List? _removeLeadingDots(List? exts) => exts ?.map((String ext) => ext.startsWith('.') ? ext.substring(1) : ext) .toList(); diff --git a/packages/file_selector/file_selector_platform_interface/pubspec.yaml b/packages/file_selector/file_selector_platform_interface/pubspec.yaml index c4500061a3a1..ac8727c09e36 100644 --- a/packages/file_selector/file_selector_platform_interface/pubspec.yaml +++ b/packages/file_selector/file_selector_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.0 +version: 2.3.0 environment: sdk: ">=2.12.0 <3.0.0" diff --git a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart index c5e65d0264f5..5ac5722716c7 100644 --- a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart +++ b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart @@ -8,12 +8,11 @@ import 'package:flutter_test/flutter_test.dart'; void main() { group('XTypeGroup', () { test('toJSON() creates correct map', () { - const String label = 'test group'; const List extensions = ['txt', 'jpg']; const List mimeTypes = ['text/plain']; const List macUTIs = ['public.plain-text']; const List webWildCards = ['image/*']; - + const String label = 'test group'; const XTypeGroup group = XTypeGroup( label: label, extensions: extensions, @@ -30,7 +29,7 @@ void main() { expect(jsonMap['webWildCards'], webWildCards); }); - test('A wildcard group can be created', () { + test('a wildcard group can be created', () { const XTypeGroup group = XTypeGroup( label: 'Any', ); @@ -71,7 +70,70 @@ void main() { expect(webOnly.allowsAny, false); }); - test('Leading dots are removed from extensions', () { + test('passing only macUTIs should fill uniformTypeIdentifiers', () { + const List macUTIs = ['public.plain-text']; + const XTypeGroup group = XTypeGroup( + macUTIs: macUTIs, + ); + + expect(group.uniformTypeIdentifiers, macUTIs); + }); + + test( + 'passing only uniformTypeIdentifiers should fill uniformTypeIdentifiers', + () { + const List uniformTypeIdentifiers = ['public.plain-text']; + const XTypeGroup group = XTypeGroup( + uniformTypeIdentifiers: uniformTypeIdentifiers, + ); + + expect(group.uniformTypeIdentifiers, uniformTypeIdentifiers); + }); + + test('macUTIs getter return macUTIs value passed in constructor', () { + const List macUTIs = ['public.plain-text']; + const XTypeGroup group = XTypeGroup( + macUTIs: macUTIs, + ); + + expect(group.macUTIs, macUTIs); + }); + + test( + 'macUTIs getter returns uniformTypeIdentifiers value passed in constructor', + () { + const List uniformTypeIdentifiers = ['public.plain-text']; + const XTypeGroup group = XTypeGroup( + uniformTypeIdentifiers: uniformTypeIdentifiers, + ); + + expect(group.macUTIs, uniformTypeIdentifiers); + }); + + test('passing both uniformTypeIdentifiers and macUTIs should throw', () { + const List macUTIs = ['public.plain-text']; + const List uniformTypeIndentifiers = [ + 'public.plain-images' + ]; + expect( + () => XTypeGroup( + macUTIs: macUTIs, + uniformTypeIdentifiers: uniformTypeIndentifiers), + throwsA(predicate((Object? e) => + e is AssertionError && + e.message == + 'Only one of uniformTypeIdentifiers or macUTIs can be non-null'))); + }); + + test( + 'having uniformTypeIdentifiers and macUTIs as null should leave uniformTypeIdentifiers as null', + () { + const XTypeGroup group = XTypeGroup(); + + expect(group.uniformTypeIdentifiers, null); + }); + + test('leading dots are removed from extensions', () { const List extensions = ['.txt', '.jpg']; const XTypeGroup group = XTypeGroup(extensions: extensions); From e6184f9cca0139ad3a45c212c2189b928b4e690d Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 18 Oct 2022 15:12:10 -0400 Subject: [PATCH 072/133] Roll Flutter from f26dd3730df8 to eea60f86f1b1 (19 revisions) (#6588) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index b98166d52783..2c2862d5434f 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -f26dd3730df8fe831243f9d58dd8ef6b8919d2ce +eea60f86f1b1f22b1f51538a976e44ae10c2badf From 79894bcdc117e615e76dfb43e9d9df9de89f46a3 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 19 Oct 2022 11:44:24 -0400 Subject: [PATCH 073/133] Roll Flutter from eea60f86f1b1 to abfaec68114b (10 revisions) (#6590) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 2c2862d5434f..43de99735cb2 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -eea60f86f1b1f22b1f51538a976e44ae10c2badf +abfaec68114b0616485df3ec2eb2f5c2d76b4ceb From aeab040673b0ab2662294bf803f393cd01eaf4a7 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 19 Oct 2022 14:52:57 -0400 Subject: [PATCH 074/133] [ci] Cirrus pre-alignment with flutter/packages, part 1 (#6569) --- .ci/scripts/prepare_tool.sh | 0 .cirrus.yml | 119 ++++++++++++++++++------------------ 2 files changed, 60 insertions(+), 59 deletions(-) mode change 100644 => 100755 .ci/scripts/prepare_tool.sh diff --git a/.ci/scripts/prepare_tool.sh b/.ci/scripts/prepare_tool.sh old mode 100644 new mode 100755 diff --git a/.cirrus.yml b/.cirrus.yml index 01de99c23e9c..89e1405a901e 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -4,13 +4,26 @@ gcp_credentials: ENCRYPTED[!f1177d1ddb5330ffaa9ea11c9c9e8e0c542185e895c36071f18c only_if: $CIRRUS_TAG == '' && ($CIRRUS_PR != '' || $CIRRUS_BRANCH == 'main') env: CHANNEL: "master" # Default to master when not explicitly set by a task. - PLUGIN_TOOL: "./script/tool/bin/flutter_plugin_tools.dart" + PLUGIN_TOOL_COMMAND: "dart ./script/tool/bin/flutter_plugin_tools.dart" tool_setup_template: &TOOL_SETUP_TEMPLATE tool_setup_script: - - git fetch origin main # To set FETCH_HEAD for "git merge-base" to work - - cd script/tool - - dart pub get + - .ci/scripts/prepare_tool.sh + +macos_template: &MACOS_TEMPLATE + # Only one macOS task can run in parallel without credits, so use them for + # PRs on macOS. + use_compute_credits: $CIRRUS_USER_COLLABORATOR == 'true' + +macos_intel_template: &MACOS_INTEL_TEMPLATE + << : *MACOS_TEMPLATE + osx_instance: + image: big-sur-xcode-13 + +macos_arm_template: &MACOS_ARM_TEMPLATE + << : *MACOS_TEMPLATE + macos_instance: + image: ghcr.io/cirruslabs/macos-ventura-xcode:14 flutter_upgrade_template: &FLUTTER_UPGRADE_TEMPLATE upgrade_flutter_script: @@ -39,7 +52,7 @@ flutter_upgrade_template: &FLUTTER_UPGRADE_TEMPLATE build_all_plugins_app_template: &BUILD_ALL_PLUGINS_APP_TEMPLATE create_all_plugins_app_script: - - dart $PLUGIN_TOOL all-plugins-app --output-dir=. --exclude script/configs/exclude_all_plugins_app.yaml + - $PLUGIN_TOOL_COMMAND all-plugins-app --output-dir=. --exclude script/configs/exclude_all_plugins_app.yaml build_all_plugins_debug_script: - cd all_plugins - if [[ "$BUILD_ALL_ARGS" == "web" ]]; then @@ -51,21 +64,6 @@ build_all_plugins_app_template: &BUILD_ALL_PLUGINS_APP_TEMPLATE - cd all_plugins - flutter build $BUILD_ALL_ARGS --release -macos_template: &MACOS_TEMPLATE - # Only one macOS task can run in parallel without credits, so use them for - # PRs on macOS. - use_compute_credits: $CIRRUS_USER_COLLABORATOR == 'true' - -macos_intel_template: &MACOS_INTEL_TEMPLATE - << : *MACOS_TEMPLATE - osx_instance: - image: big-sur-xcode-13 - -macos_arm_template: &MACOS_ARM_TEMPLATE - << : *MACOS_TEMPLATE - macos_instance: - image: ghcr.io/cirruslabs/macos-ventura-xcode:14 - # Light-workload Linux tasks. # These use default machines, with fewer CPUs, to reduce pressure on the # concurrency limits. @@ -84,22 +82,13 @@ task: script: - cd script/tool - dart pub run test - - name: publishable - version_check_script: - # For pre-submit, pass the PR labels to the script to allow for version - # check overrides. - # For post-submit, ignore platform version breaking version changes and - # missing version/CHANGELOG detection since the labels aren't - # available outside of the context of the PR. - - if [[ $CIRRUS_PR == "" ]]; then - - ./script/tool_runner.sh version-check --ignore-platform-interface-breaks - - else - - ./script/tool_runner.sh version-check --check-for-missing-changes --pr-labels="$CIRRUS_PR_LABELS" - - fi - publish_check_script: ./script/tool_runner.sh publish-check - - name: format + # Repository rules and best-practice enforcement. + # Only channel-agnostic tests should go here since it is only run once + # (on Flutter master). + - name: repo_checks always: format_script: ./script/tool_runner.sh format --fail-on-change + license_script: $PLUGIN_TOOL_COMMAND license-check pubspec_script: ./script/tool_runner.sh pubspec-check readme_script: - ./script/tool_runner.sh readme-check @@ -108,19 +97,33 @@ task: # has been fixed, this can be removed and there can just be a single # run with --require-excerpts and no exclusions. - ./script/tool_runner.sh readme-check --require-excerpts --exclude=script/configs/temp_exclude_excerpt.yaml - license_script: dart $PLUGIN_TOOL license-check - dependabot_script: dart $PLUGIN_TOOL dependabot-check - - name: federated_safety - # This check is only meaningful for PRs, as it validates changes - # rather than state. - only_if: $CIRRUS_PR != "" - script: ./script/tool_runner.sh federation-safety-check + dependabot_script: $PLUGIN_TOOL_COMMAND dependabot-check + version_script: + # For pre-submit, pass the PR labels to the script to allow for + # check overrides. + # For post-submit, ignore platform version breaking version changes + # and missing version/CHANGELOG detection since the labels aren't + # available outside of the context of the PR. + - if [[ $CIRRUS_PR == "" ]]; then + - ./script/tool_runner.sh version-check --ignore-platform-interface-breaks + - else + - ./script/tool_runner.sh version-check --check-for-missing-changes --pr-labels="$CIRRUS_PR_LABELS" + - fi + publishable_script: ./script/tool_runner.sh publish-check --allow-pre-release + federated_safety_script: + # This check is only meaningful for PRs, as it validates changes + # rather than state. + - if [[ $CIRRUS_PR == "" ]]; then + - ./script/tool_runner.sh federation-safety-check + - else + - echo "Only run in presubmit" + - fi - name: dart_unit_tests env: matrix: CHANNEL: "master" CHANNEL: "stable" - test_script: + unit_test_script: - ./script/tool_runner.sh test - name: analyze env: @@ -142,39 +145,42 @@ task: # This uses --run-on-dirty-packages rather than --packages-for-branch # since only the packages changed by 'make-deps-path-based' need to be # checked. - - dart $PLUGIN_TOOL analyze --run-on-dirty-packages --log-timing --custom-analysis=script/configs/custom_analysis.yaml + - $PLUGIN_TOOL_COMMAND analyze --run-on-dirty-packages --log-timing --custom-analysis=script/configs/custom_analysis.yaml # Restore the tree to a clean state, to avoid accidental issues if # other script steps are added to this task. - git checkout . - # Does a sanity check that plugins at least pass analysis on the N-1 and N-2 - # versions of Flutter stable if the plugin claims to support that version. + # Does a sanity check that packages at least pass analysis on the N-1 and N-2 + # versions of Flutter stable if the package claims to support that version. # This is to minimize accidentally making changes that break old versions # (which we don't commit to supporting, but don't want to actively break) # without updating the constraints. # Note: The versions below should be manually updated after a new stable # version comes out. - - name: legacy-version-analyze + - name: legacy_version_analyze depends_on: analyze - env: - matrix: + matrix: + env: CHANNEL: "3.0.5" + DART_VERSION: "2.17.6" + env: CHANNEL: "2.10.5" + DART_VERSION: "2.16.2" package_prep_script: - # Allow analyzing plugins that use a Pigeon version with a higher - # minimum Flutter/Dart version than the plugin itself. + # Allow analyzing packages that use a dev dependency with a higher + # minimum Flutter/Dart version than the package itself. - ./script/tool_runner.sh remove-dev-dependencies analyze_script: # Only analyze lib/; non-client code doesn't need to work on # all supported legacy version. - - ./script/tool_runner.sh analyze --lib-only --skip-if-not-supporting-flutter-version="$CHANNEL" --custom-analysis=script/configs/custom_analysis.yaml - # Does a sanity check that plugins pass analysis with the lowest possible + - ./script/tool_runner.sh analyze --lib-only --skip-if-not-supporting-flutter-version="$CHANNEL" --skip-if-not-supporting-dart-version="$DART_VERSION" --custom-analysis=script/configs/custom_analysis.yaml + # Does a sanity check that packages pass analysis with the lowest possible # versions of all dependencies. This is to catch cases where we add use of - # new APIs but forget to update minimum versions of dependencies to when + # new APIs but forget to update minimum versions of dependencies to where # those APIs are introduced. - name: downgraded_analyze depends_on: analyze analyze_script: - - ./script/tool_runner.sh analyze --downgrade + - ./script/tool_runner.sh analyze --downgrade --custom-analysis=script/configs/custom_analysis.yaml - name: readme_excerpts env: CIRRUS_CLONE_SUBMODULES: true @@ -194,8 +200,6 @@ task: matrix: CHANNEL: "master" CHANNEL: "stable" - setup_script: - - flutter config --enable-linux-desktop << : *BUILD_ALL_PLUGINS_APP_TEMPLATE - name: linux-platform_tests # Don't run full platform tests on both channels in pre-submit. @@ -205,7 +209,6 @@ task: CHANNEL: "master" CHANNEL: "stable" build_script: - - flutter config --enable-linux-desktop - ./script/tool_runner.sh build-examples --linux native_test_script: - xvfb-run ./script/tool_runner.sh native-test --linux --no-integration @@ -339,7 +342,6 @@ task: CHANNEL: "stable" PATH: $PATH:/usr/local/bin build_script: - - flutter config --enable-macos-desktop - ./script/tool_runner.sh build-examples --macos xcode_analyze_script: - ./script/tool_runner.sh xcode-analyze --macos @@ -408,5 +410,4 @@ task: CHANNEL: "master" CHANNEL: "stable" setup_script: - - flutter config --enable-macos-desktop << : *BUILD_ALL_PLUGINS_APP_TEMPLATE From 6b61dd2da492f6d7af966993c742a0ed38fe1e01 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 20 Oct 2022 11:50:53 -0400 Subject: [PATCH 075/133] Roll Flutter (stable) from eb6d86ee27de to d9111f640213 (4 revisions) (#6594) --- .ci/flutter_stable.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index c26442d70e76..cc156ea76c97 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -eb6d86ee27deecba4a83536aa20f366a6044895c +d9111f64021372856901a1fd5bfbc386cade3318 From a577c004a4b97358a969303fe1d9e75ce1125477 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 20 Oct 2022 12:38:05 -0400 Subject: [PATCH 076/133] Roll Flutter from abfaec68114b to 637e5bce662f (13 revisions) (#6593) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 43de99735cb2..cb8fe40cd622 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -abfaec68114b0616485df3ec2eb2f5c2d76b4ceb +637e5bce662fb43459d409e13ba5a7fb2c3fa930 From 32b1f7bd39ac5974d1d348f28fb71c567827edab Mon Sep 17 00:00:00 2001 From: David Iglesias Date: Thu, 20 Oct 2022 10:42:17 -0700 Subject: [PATCH 077/133] [ci] Update web mocks. (#6591) --- .../google_maps_controller_test.mocks.dart | 501 ++- .../google_maps_plugin_test.mocks.dart | 335 +- .../example/pubspec.yaml | 2 +- .../url_launcher_web_test.mocks.dart | 1921 ++++++--- .../url_launcher_web/example/pubspec.yaml | 2 +- .../webview_flutter_web/pubspec.yaml | 2 +- .../test/webview_flutter_web_test.mocks.dart | 3540 +++++++++++------ 7 files changed, 4273 insertions(+), 2030 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.mocks.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.mocks.dart index a7fe6bae347b..efde66459327 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.mocks.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.0 from annotations +// Mocks generated by Mockito 5.3.2 from annotations // in google_maps_flutter_web_integration_tests/integration_test/google_maps_controller_test.dart. // Do not manually edit this file. @@ -21,8 +21,13 @@ import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: subtype_of_sealed_class class _FakeGMap_0 extends _i1.SmartFake implements _i2.GMap { - _FakeGMap_0(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); + _FakeGMap_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); } /// A class which mocks [CirclesController]. @@ -30,43 +35,85 @@ class _FakeGMap_0 extends _i1.SmartFake implements _i2.GMap { /// See the documentation for Mockito's code generation for more information. class MockCirclesController extends _i1.Mock implements _i3.CirclesController { @override - Map<_i4.CircleId, _i3.CircleController> get circles => - (super.noSuchMethod(Invocation.getter(#circles), - returnValue: <_i4.CircleId, _i3.CircleController>{}, - returnValueForMissingStub: <_i4.CircleId, _i3.CircleController>{}) - as Map<_i4.CircleId, _i3.CircleController>); - @override - _i2.GMap get googleMap => (super.noSuchMethod(Invocation.getter(#googleMap), - returnValue: _FakeGMap_0(this, Invocation.getter(#googleMap)), - returnValueForMissingStub: - _FakeGMap_0(this, Invocation.getter(#googleMap))) as _i2.GMap); - @override - set googleMap(_i2.GMap? _googleMap) => - super.noSuchMethod(Invocation.setter(#googleMap, _googleMap), - returnValueForMissingStub: null); - @override - int get mapId => (super.noSuchMethod(Invocation.getter(#mapId), - returnValue: 0, returnValueForMissingStub: 0) as int); - @override - set mapId(int? _mapId) => - super.noSuchMethod(Invocation.setter(#mapId, _mapId), - returnValueForMissingStub: null); - @override - void addCircles(Set<_i4.Circle>? circlesToAdd) => - super.noSuchMethod(Invocation.method(#addCircles, [circlesToAdd]), - returnValueForMissingStub: null); - @override - void changeCircles(Set<_i4.Circle>? circlesToChange) => - super.noSuchMethod(Invocation.method(#changeCircles, [circlesToChange]), - returnValueForMissingStub: null); + Map<_i4.CircleId, _i3.CircleController> get circles => (super.noSuchMethod( + Invocation.getter(#circles), + returnValue: <_i4.CircleId, _i3.CircleController>{}, + returnValueForMissingStub: <_i4.CircleId, _i3.CircleController>{}, + ) as Map<_i4.CircleId, _i3.CircleController>); + @override + _i2.GMap get googleMap => (super.noSuchMethod( + Invocation.getter(#googleMap), + returnValue: _FakeGMap_0( + this, + Invocation.getter(#googleMap), + ), + returnValueForMissingStub: _FakeGMap_0( + this, + Invocation.getter(#googleMap), + ), + ) as _i2.GMap); + @override + set googleMap(_i2.GMap? _googleMap) => super.noSuchMethod( + Invocation.setter( + #googleMap, + _googleMap, + ), + returnValueForMissingStub: null, + ); + @override + int get mapId => (super.noSuchMethod( + Invocation.getter(#mapId), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override + set mapId(int? _mapId) => super.noSuchMethod( + Invocation.setter( + #mapId, + _mapId, + ), + returnValueForMissingStub: null, + ); + @override + void addCircles(Set<_i4.Circle>? circlesToAdd) => super.noSuchMethod( + Invocation.method( + #addCircles, + [circlesToAdd], + ), + returnValueForMissingStub: null, + ); + @override + void changeCircles(Set<_i4.Circle>? circlesToChange) => super.noSuchMethod( + Invocation.method( + #changeCircles, + [circlesToChange], + ), + returnValueForMissingStub: null, + ); @override void removeCircles(Set<_i4.CircleId>? circleIdsToRemove) => - super.noSuchMethod(Invocation.method(#removeCircles, [circleIdsToRemove]), - returnValueForMissingStub: null); - @override - void bindToMap(int? mapId, _i2.GMap? googleMap) => - super.noSuchMethod(Invocation.method(#bindToMap, [mapId, googleMap]), - returnValueForMissingStub: null); + super.noSuchMethod( + Invocation.method( + #removeCircles, + [circleIdsToRemove], + ), + returnValueForMissingStub: null, + ); + @override + void bindToMap( + int? mapId, + _i2.GMap? googleMap, + ) => + super.noSuchMethod( + Invocation.method( + #bindToMap, + [ + mapId, + googleMap, + ], + ), + returnValueForMissingStub: null, + ); } /// A class which mocks [PolygonsController]. @@ -76,42 +123,84 @@ class MockPolygonsController extends _i1.Mock implements _i3.PolygonsController { @override Map<_i4.PolygonId, _i3.PolygonController> get polygons => (super.noSuchMethod( - Invocation.getter(#polygons), - returnValue: <_i4.PolygonId, _i3.PolygonController>{}, - returnValueForMissingStub: <_i4.PolygonId, _i3.PolygonController>{}) - as Map<_i4.PolygonId, _i3.PolygonController>); - @override - _i2.GMap get googleMap => (super.noSuchMethod(Invocation.getter(#googleMap), - returnValue: _FakeGMap_0(this, Invocation.getter(#googleMap)), - returnValueForMissingStub: - _FakeGMap_0(this, Invocation.getter(#googleMap))) as _i2.GMap); - @override - set googleMap(_i2.GMap? _googleMap) => - super.noSuchMethod(Invocation.setter(#googleMap, _googleMap), - returnValueForMissingStub: null); - @override - int get mapId => (super.noSuchMethod(Invocation.getter(#mapId), - returnValue: 0, returnValueForMissingStub: 0) as int); - @override - set mapId(int? _mapId) => - super.noSuchMethod(Invocation.setter(#mapId, _mapId), - returnValueForMissingStub: null); - @override - void addPolygons(Set<_i4.Polygon>? polygonsToAdd) => - super.noSuchMethod(Invocation.method(#addPolygons, [polygonsToAdd]), - returnValueForMissingStub: null); - @override - void changePolygons(Set<_i4.Polygon>? polygonsToChange) => - super.noSuchMethod(Invocation.method(#changePolygons, [polygonsToChange]), - returnValueForMissingStub: null); - @override - void removePolygons(Set<_i4.PolygonId>? polygonIdsToRemove) => super - .noSuchMethod(Invocation.method(#removePolygons, [polygonIdsToRemove]), - returnValueForMissingStub: null); - @override - void bindToMap(int? mapId, _i2.GMap? googleMap) => - super.noSuchMethod(Invocation.method(#bindToMap, [mapId, googleMap]), - returnValueForMissingStub: null); + Invocation.getter(#polygons), + returnValue: <_i4.PolygonId, _i3.PolygonController>{}, + returnValueForMissingStub: <_i4.PolygonId, _i3.PolygonController>{}, + ) as Map<_i4.PolygonId, _i3.PolygonController>); + @override + _i2.GMap get googleMap => (super.noSuchMethod( + Invocation.getter(#googleMap), + returnValue: _FakeGMap_0( + this, + Invocation.getter(#googleMap), + ), + returnValueForMissingStub: _FakeGMap_0( + this, + Invocation.getter(#googleMap), + ), + ) as _i2.GMap); + @override + set googleMap(_i2.GMap? _googleMap) => super.noSuchMethod( + Invocation.setter( + #googleMap, + _googleMap, + ), + returnValueForMissingStub: null, + ); + @override + int get mapId => (super.noSuchMethod( + Invocation.getter(#mapId), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override + set mapId(int? _mapId) => super.noSuchMethod( + Invocation.setter( + #mapId, + _mapId, + ), + returnValueForMissingStub: null, + ); + @override + void addPolygons(Set<_i4.Polygon>? polygonsToAdd) => super.noSuchMethod( + Invocation.method( + #addPolygons, + [polygonsToAdd], + ), + returnValueForMissingStub: null, + ); + @override + void changePolygons(Set<_i4.Polygon>? polygonsToChange) => super.noSuchMethod( + Invocation.method( + #changePolygons, + [polygonsToChange], + ), + returnValueForMissingStub: null, + ); + @override + void removePolygons(Set<_i4.PolygonId>? polygonIdsToRemove) => + super.noSuchMethod( + Invocation.method( + #removePolygons, + [polygonIdsToRemove], + ), + returnValueForMissingStub: null, + ); + @override + void bindToMap( + int? mapId, + _i2.GMap? googleMap, + ) => + super.noSuchMethod( + Invocation.method( + #bindToMap, + [ + mapId, + googleMap, + ], + ), + returnValueForMissingStub: null, + ); } /// A class which mocks [PolylinesController]. @@ -121,42 +210,85 @@ class MockPolylinesController extends _i1.Mock implements _i3.PolylinesController { @override Map<_i4.PolylineId, _i3.PolylineController> get lines => (super.noSuchMethod( - Invocation.getter(#lines), - returnValue: <_i4.PolylineId, _i3.PolylineController>{}, - returnValueForMissingStub: <_i4.PolylineId, _i3.PolylineController>{}) - as Map<_i4.PolylineId, _i3.PolylineController>); - @override - _i2.GMap get googleMap => (super.noSuchMethod(Invocation.getter(#googleMap), - returnValue: _FakeGMap_0(this, Invocation.getter(#googleMap)), - returnValueForMissingStub: - _FakeGMap_0(this, Invocation.getter(#googleMap))) as _i2.GMap); - @override - set googleMap(_i2.GMap? _googleMap) => - super.noSuchMethod(Invocation.setter(#googleMap, _googleMap), - returnValueForMissingStub: null); - @override - int get mapId => (super.noSuchMethod(Invocation.getter(#mapId), - returnValue: 0, returnValueForMissingStub: 0) as int); - @override - set mapId(int? _mapId) => - super.noSuchMethod(Invocation.setter(#mapId, _mapId), - returnValueForMissingStub: null); - @override - void addPolylines(Set<_i4.Polyline>? polylinesToAdd) => - super.noSuchMethod(Invocation.method(#addPolylines, [polylinesToAdd]), - returnValueForMissingStub: null); - @override - void changePolylines(Set<_i4.Polyline>? polylinesToChange) => super - .noSuchMethod(Invocation.method(#changePolylines, [polylinesToChange]), - returnValueForMissingStub: null); - @override - void removePolylines(Set<_i4.PolylineId>? polylineIdsToRemove) => super - .noSuchMethod(Invocation.method(#removePolylines, [polylineIdsToRemove]), - returnValueForMissingStub: null); - @override - void bindToMap(int? mapId, _i2.GMap? googleMap) => - super.noSuchMethod(Invocation.method(#bindToMap, [mapId, googleMap]), - returnValueForMissingStub: null); + Invocation.getter(#lines), + returnValue: <_i4.PolylineId, _i3.PolylineController>{}, + returnValueForMissingStub: <_i4.PolylineId, _i3.PolylineController>{}, + ) as Map<_i4.PolylineId, _i3.PolylineController>); + @override + _i2.GMap get googleMap => (super.noSuchMethod( + Invocation.getter(#googleMap), + returnValue: _FakeGMap_0( + this, + Invocation.getter(#googleMap), + ), + returnValueForMissingStub: _FakeGMap_0( + this, + Invocation.getter(#googleMap), + ), + ) as _i2.GMap); + @override + set googleMap(_i2.GMap? _googleMap) => super.noSuchMethod( + Invocation.setter( + #googleMap, + _googleMap, + ), + returnValueForMissingStub: null, + ); + @override + int get mapId => (super.noSuchMethod( + Invocation.getter(#mapId), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override + set mapId(int? _mapId) => super.noSuchMethod( + Invocation.setter( + #mapId, + _mapId, + ), + returnValueForMissingStub: null, + ); + @override + void addPolylines(Set<_i4.Polyline>? polylinesToAdd) => super.noSuchMethod( + Invocation.method( + #addPolylines, + [polylinesToAdd], + ), + returnValueForMissingStub: null, + ); + @override + void changePolylines(Set<_i4.Polyline>? polylinesToChange) => + super.noSuchMethod( + Invocation.method( + #changePolylines, + [polylinesToChange], + ), + returnValueForMissingStub: null, + ); + @override + void removePolylines(Set<_i4.PolylineId>? polylineIdsToRemove) => + super.noSuchMethod( + Invocation.method( + #removePolylines, + [polylineIdsToRemove], + ), + returnValueForMissingStub: null, + ); + @override + void bindToMap( + int? mapId, + _i2.GMap? googleMap, + ) => + super.noSuchMethod( + Invocation.method( + #bindToMap, + [ + mapId, + googleMap, + ], + ), + returnValueForMissingStub: null, + ); } /// A class which mocks [MarkersController]. @@ -164,53 +296,108 @@ class MockPolylinesController extends _i1.Mock /// See the documentation for Mockito's code generation for more information. class MockMarkersController extends _i1.Mock implements _i3.MarkersController { @override - Map<_i4.MarkerId, _i3.MarkerController> get markers => - (super.noSuchMethod(Invocation.getter(#markers), - returnValue: <_i4.MarkerId, _i3.MarkerController>{}, - returnValueForMissingStub: <_i4.MarkerId, _i3.MarkerController>{}) - as Map<_i4.MarkerId, _i3.MarkerController>); - @override - _i2.GMap get googleMap => (super.noSuchMethod(Invocation.getter(#googleMap), - returnValue: _FakeGMap_0(this, Invocation.getter(#googleMap)), - returnValueForMissingStub: - _FakeGMap_0(this, Invocation.getter(#googleMap))) as _i2.GMap); - @override - set googleMap(_i2.GMap? _googleMap) => - super.noSuchMethod(Invocation.setter(#googleMap, _googleMap), - returnValueForMissingStub: null); - @override - int get mapId => (super.noSuchMethod(Invocation.getter(#mapId), - returnValue: 0, returnValueForMissingStub: 0) as int); - @override - set mapId(int? _mapId) => - super.noSuchMethod(Invocation.setter(#mapId, _mapId), - returnValueForMissingStub: null); - @override - void addMarkers(Set<_i4.Marker>? markersToAdd) => - super.noSuchMethod(Invocation.method(#addMarkers, [markersToAdd]), - returnValueForMissingStub: null); - @override - void changeMarkers(Set<_i4.Marker>? markersToChange) => - super.noSuchMethod(Invocation.method(#changeMarkers, [markersToChange]), - returnValueForMissingStub: null); + Map<_i4.MarkerId, _i3.MarkerController> get markers => (super.noSuchMethod( + Invocation.getter(#markers), + returnValue: <_i4.MarkerId, _i3.MarkerController>{}, + returnValueForMissingStub: <_i4.MarkerId, _i3.MarkerController>{}, + ) as Map<_i4.MarkerId, _i3.MarkerController>); + @override + _i2.GMap get googleMap => (super.noSuchMethod( + Invocation.getter(#googleMap), + returnValue: _FakeGMap_0( + this, + Invocation.getter(#googleMap), + ), + returnValueForMissingStub: _FakeGMap_0( + this, + Invocation.getter(#googleMap), + ), + ) as _i2.GMap); + @override + set googleMap(_i2.GMap? _googleMap) => super.noSuchMethod( + Invocation.setter( + #googleMap, + _googleMap, + ), + returnValueForMissingStub: null, + ); + @override + int get mapId => (super.noSuchMethod( + Invocation.getter(#mapId), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + @override + set mapId(int? _mapId) => super.noSuchMethod( + Invocation.setter( + #mapId, + _mapId, + ), + returnValueForMissingStub: null, + ); + @override + void addMarkers(Set<_i4.Marker>? markersToAdd) => super.noSuchMethod( + Invocation.method( + #addMarkers, + [markersToAdd], + ), + returnValueForMissingStub: null, + ); + @override + void changeMarkers(Set<_i4.Marker>? markersToChange) => super.noSuchMethod( + Invocation.method( + #changeMarkers, + [markersToChange], + ), + returnValueForMissingStub: null, + ); @override void removeMarkers(Set<_i4.MarkerId>? markerIdsToRemove) => - super.noSuchMethod(Invocation.method(#removeMarkers, [markerIdsToRemove]), - returnValueForMissingStub: null); - @override - void showMarkerInfoWindow(_i4.MarkerId? markerId) => - super.noSuchMethod(Invocation.method(#showMarkerInfoWindow, [markerId]), - returnValueForMissingStub: null); - @override - void hideMarkerInfoWindow(_i4.MarkerId? markerId) => - super.noSuchMethod(Invocation.method(#hideMarkerInfoWindow, [markerId]), - returnValueForMissingStub: null); - @override - bool isInfoWindowShown(_i4.MarkerId? markerId) => - (super.noSuchMethod(Invocation.method(#isInfoWindowShown, [markerId]), - returnValue: false, returnValueForMissingStub: false) as bool); - @override - void bindToMap(int? mapId, _i2.GMap? googleMap) => - super.noSuchMethod(Invocation.method(#bindToMap, [mapId, googleMap]), - returnValueForMissingStub: null); + super.noSuchMethod( + Invocation.method( + #removeMarkers, + [markerIdsToRemove], + ), + returnValueForMissingStub: null, + ); + @override + void showMarkerInfoWindow(_i4.MarkerId? markerId) => super.noSuchMethod( + Invocation.method( + #showMarkerInfoWindow, + [markerId], + ), + returnValueForMissingStub: null, + ); + @override + void hideMarkerInfoWindow(_i4.MarkerId? markerId) => super.noSuchMethod( + Invocation.method( + #hideMarkerInfoWindow, + [markerId], + ), + returnValueForMissingStub: null, + ); + @override + bool isInfoWindowShown(_i4.MarkerId? markerId) => (super.noSuchMethod( + Invocation.method( + #isInfoWindowShown, + [markerId], + ), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + @override + void bindToMap( + int? mapId, + _i2.GMap? googleMap, + ) => + super.noSuchMethod( + Invocation.method( + #bindToMap, + [ + mapId, + googleMap, + ], + ), + returnValueForMissingStub: null, + ); } diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.mocks.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.mocks.dart index 04cbc4a3416d..a85bce31e20f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.mocks.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.3.0 from annotations +// Mocks generated by Mockito 5.3.2 from annotations // in google_maps_flutter_web_integration_tests/integration_test/google_maps_plugin_test.dart. // Do not manually edit this file. @@ -24,24 +24,44 @@ import 'package:mockito/mockito.dart' as _i1; class _FakeStreamController_0 extends _i1.SmartFake implements _i2.StreamController { - _FakeStreamController_0(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); + _FakeStreamController_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); } class _FakeLatLngBounds_1 extends _i1.SmartFake implements _i3.LatLngBounds { - _FakeLatLngBounds_1(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); + _FakeLatLngBounds_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); } class _FakeScreenCoordinate_2 extends _i1.SmartFake implements _i3.ScreenCoordinate { - _FakeScreenCoordinate_2(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); + _FakeScreenCoordinate_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); } class _FakeLatLng_3 extends _i1.SmartFake implements _i3.LatLng { - _FakeLatLng_3(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); + _FakeLatLng_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); } /// A class which mocks [GoogleMapController]. @@ -51,117 +71,226 @@ class MockGoogleMapController extends _i1.Mock implements _i4.GoogleMapController { @override _i2.StreamController<_i3.MapEvent> get stream => (super.noSuchMethod( - Invocation.getter(#stream), - returnValue: _FakeStreamController_0<_i3.MapEvent>( - this, Invocation.getter(#stream)), - returnValueForMissingStub: _FakeStreamController_0<_i3.MapEvent>( - this, Invocation.getter(#stream))) as _i2 - .StreamController<_i3.MapEvent>); + Invocation.getter(#stream), + returnValue: _FakeStreamController_0<_i3.MapEvent>( + this, + Invocation.getter(#stream), + ), + returnValueForMissingStub: + _FakeStreamController_0<_i3.MapEvent>( + this, + Invocation.getter(#stream), + ), + ) as _i2.StreamController<_i3.MapEvent>); @override _i2.Stream<_i3.MapEvent> get events => (super.noSuchMethod( - Invocation.getter(#events), - returnValue: _i2.Stream<_i3.MapEvent>.empty(), - returnValueForMissingStub: _i2.Stream<_i3.MapEvent>.empty()) - as _i2.Stream<_i3.MapEvent>); - @override - bool get isInitialized => - (super.noSuchMethod(Invocation.getter(#isInitialized), - returnValue: false, returnValueForMissingStub: false) as bool); - @override - void debugSetOverrides( - {_i4.DebugCreateMapFunction? createMap, - _i4.MarkersController? markers, - _i4.CirclesController? circles, - _i4.PolygonsController? polygons, - _i4.PolylinesController? polylines}) => + Invocation.getter(#events), + returnValue: _i2.Stream<_i3.MapEvent>.empty(), + returnValueForMissingStub: _i2.Stream<_i3.MapEvent>.empty(), + ) as _i2.Stream<_i3.MapEvent>); + @override + bool get isInitialized => (super.noSuchMethod( + Invocation.getter(#isInitialized), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + @override + void debugSetOverrides({ + _i4.DebugCreateMapFunction? createMap, + _i4.MarkersController? markers, + _i4.CirclesController? circles, + _i4.PolygonsController? polygons, + _i4.PolylinesController? polylines, + }) => super.noSuchMethod( - Invocation.method(#debugSetOverrides, [], { + Invocation.method( + #debugSetOverrides, + [], + { #createMap: createMap, #markers: markers, #circles: circles, #polygons: polygons, - #polylines: polylines - }), - returnValueForMissingStub: null); + #polylines: polylines, + }, + ), + returnValueForMissingStub: null, + ); @override - void init() => super.noSuchMethod(Invocation.method(#init, []), - returnValueForMissingStub: null); + void init() => super.noSuchMethod( + Invocation.method( + #init, + [], + ), + returnValueForMissingStub: null, + ); @override void updateMapConfiguration(_i3.MapConfiguration? update) => - super.noSuchMethod(Invocation.method(#updateMapConfiguration, [update]), - returnValueForMissingStub: null); + super.noSuchMethod( + Invocation.method( + #updateMapConfiguration, + [update], + ), + returnValueForMissingStub: null, + ); @override - void updateStyles(List<_i5.MapTypeStyle>? styles) => - super.noSuchMethod(Invocation.method(#updateStyles, [styles]), - returnValueForMissingStub: null); + void updateStyles(List<_i5.MapTypeStyle>? styles) => super.noSuchMethod( + Invocation.method( + #updateStyles, + [styles], + ), + returnValueForMissingStub: null, + ); @override _i2.Future<_i3.LatLngBounds> getVisibleRegion() => (super.noSuchMethod( - Invocation.method(#getVisibleRegion, []), - returnValue: _i2.Future<_i3.LatLngBounds>.value( - _FakeLatLngBounds_1(this, Invocation.method(#getVisibleRegion, []))), - returnValueForMissingStub: _i2.Future<_i3.LatLngBounds>.value( - _FakeLatLngBounds_1( - this, Invocation.method(#getVisibleRegion, [])))) as _i2 - .Future<_i3.LatLngBounds>); + Invocation.method( + #getVisibleRegion, + [], + ), + returnValue: _i2.Future<_i3.LatLngBounds>.value(_FakeLatLngBounds_1( + this, + Invocation.method( + #getVisibleRegion, + [], + ), + )), + returnValueForMissingStub: + _i2.Future<_i3.LatLngBounds>.value(_FakeLatLngBounds_1( + this, + Invocation.method( + #getVisibleRegion, + [], + ), + )), + ) as _i2.Future<_i3.LatLngBounds>); @override _i2.Future<_i3.ScreenCoordinate> getScreenCoordinate(_i3.LatLng? latLng) => - (super.noSuchMethod(Invocation.method(#getScreenCoordinate, [latLng]), - returnValue: _i2.Future<_i3.ScreenCoordinate>.value( - _FakeScreenCoordinate_2( - this, Invocation.method(#getScreenCoordinate, [latLng]))), - returnValueForMissingStub: _i2.Future<_i3.ScreenCoordinate>.value( - _FakeScreenCoordinate_2( - this, Invocation.method(#getScreenCoordinate, [latLng])))) - as _i2.Future<_i3.ScreenCoordinate>); + (super.noSuchMethod( + Invocation.method( + #getScreenCoordinate, + [latLng], + ), + returnValue: + _i2.Future<_i3.ScreenCoordinate>.value(_FakeScreenCoordinate_2( + this, + Invocation.method( + #getScreenCoordinate, + [latLng], + ), + )), + returnValueForMissingStub: + _i2.Future<_i3.ScreenCoordinate>.value(_FakeScreenCoordinate_2( + this, + Invocation.method( + #getScreenCoordinate, + [latLng], + ), + )), + ) as _i2.Future<_i3.ScreenCoordinate>); @override _i2.Future<_i3.LatLng> getLatLng(_i3.ScreenCoordinate? screenCoordinate) => - (super.noSuchMethod(Invocation.method(#getLatLng, [screenCoordinate]), - returnValue: _i2.Future<_i3.LatLng>.value(_FakeLatLng_3( - this, Invocation.method(#getLatLng, [screenCoordinate]))), - returnValueForMissingStub: _i2.Future<_i3.LatLng>.value(_FakeLatLng_3( - this, Invocation.method(#getLatLng, [screenCoordinate])))) as _i2 - .Future<_i3.LatLng>); + (super.noSuchMethod( + Invocation.method( + #getLatLng, + [screenCoordinate], + ), + returnValue: _i2.Future<_i3.LatLng>.value(_FakeLatLng_3( + this, + Invocation.method( + #getLatLng, + [screenCoordinate], + ), + )), + returnValueForMissingStub: _i2.Future<_i3.LatLng>.value(_FakeLatLng_3( + this, + Invocation.method( + #getLatLng, + [screenCoordinate], + ), + )), + ) as _i2.Future<_i3.LatLng>); @override _i2.Future moveCamera(_i3.CameraUpdate? cameraUpdate) => - (super.noSuchMethod(Invocation.method(#moveCamera, [cameraUpdate]), - returnValue: _i2.Future.value(), - returnValueForMissingStub: _i2.Future.value()) - as _i2.Future); - @override - _i2.Future getZoomLevel() => - (super.noSuchMethod(Invocation.method(#getZoomLevel, []), - returnValue: _i2.Future.value(0.0), - returnValueForMissingStub: _i2.Future.value(0.0)) - as _i2.Future); - @override - void updateCircles(_i3.CircleUpdates? updates) => - super.noSuchMethod(Invocation.method(#updateCircles, [updates]), - returnValueForMissingStub: null); - @override - void updatePolygons(_i3.PolygonUpdates? updates) => - super.noSuchMethod(Invocation.method(#updatePolygons, [updates]), - returnValueForMissingStub: null); - @override - void updatePolylines(_i3.PolylineUpdates? updates) => - super.noSuchMethod(Invocation.method(#updatePolylines, [updates]), - returnValueForMissingStub: null); - @override - void updateMarkers(_i3.MarkerUpdates? updates) => - super.noSuchMethod(Invocation.method(#updateMarkers, [updates]), - returnValueForMissingStub: null); - @override - void showInfoWindow(_i3.MarkerId? markerId) => - super.noSuchMethod(Invocation.method(#showInfoWindow, [markerId]), - returnValueForMissingStub: null); - @override - void hideInfoWindow(_i3.MarkerId? markerId) => - super.noSuchMethod(Invocation.method(#hideInfoWindow, [markerId]), - returnValueForMissingStub: null); - @override - bool isInfoWindowShown(_i3.MarkerId? markerId) => - (super.noSuchMethod(Invocation.method(#isInfoWindowShown, [markerId]), - returnValue: false, returnValueForMissingStub: false) as bool); - @override - void dispose() => super.noSuchMethod(Invocation.method(#dispose, []), - returnValueForMissingStub: null); + (super.noSuchMethod( + Invocation.method( + #moveCamera, + [cameraUpdate], + ), + returnValue: _i2.Future.value(), + returnValueForMissingStub: _i2.Future.value(), + ) as _i2.Future); + @override + _i2.Future getZoomLevel() => (super.noSuchMethod( + Invocation.method( + #getZoomLevel, + [], + ), + returnValue: _i2.Future.value(0.0), + returnValueForMissingStub: _i2.Future.value(0.0), + ) as _i2.Future); + @override + void updateCircles(_i3.CircleUpdates? updates) => super.noSuchMethod( + Invocation.method( + #updateCircles, + [updates], + ), + returnValueForMissingStub: null, + ); + @override + void updatePolygons(_i3.PolygonUpdates? updates) => super.noSuchMethod( + Invocation.method( + #updatePolygons, + [updates], + ), + returnValueForMissingStub: null, + ); + @override + void updatePolylines(_i3.PolylineUpdates? updates) => super.noSuchMethod( + Invocation.method( + #updatePolylines, + [updates], + ), + returnValueForMissingStub: null, + ); + @override + void updateMarkers(_i3.MarkerUpdates? updates) => super.noSuchMethod( + Invocation.method( + #updateMarkers, + [updates], + ), + returnValueForMissingStub: null, + ); + @override + void showInfoWindow(_i3.MarkerId? markerId) => super.noSuchMethod( + Invocation.method( + #showInfoWindow, + [markerId], + ), + returnValueForMissingStub: null, + ); + @override + void hideInfoWindow(_i3.MarkerId? markerId) => super.noSuchMethod( + Invocation.method( + #hideInfoWindow, + [markerId], + ), + returnValueForMissingStub: null, + ); + @override + bool isInfoWindowShown(_i3.MarkerId? markerId) => (super.noSuchMethod( + Invocation.method( + #isInfoWindowShown, + [markerId], + ), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + @override + void dispose() => super.noSuchMethod( + Invocation.method( + #dispose, + [], + ), + returnValueForMissingStub: null, + ); } diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml index 7e25b6e3b483..35c9c903e982 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml @@ -25,4 +25,4 @@ dev_dependencies: http: ^0.13.0 integration_test: sdk: flutter - mockito: ^5.3.0 + mockito: ^5.3.2 diff --git a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart index 36903b0a4250..0717dc7ff478 100644 --- a/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart +++ b/packages/url_launcher/url_launcher_web/example/integration_test/url_launcher_web_test.mocks.dart @@ -1,13 +1,15 @@ -// Mocks generated by Mockito 5.0.17 from annotations +// Mocks generated by Mockito 5.3.2 from annotations // in regular_integration_tests/integration_test/url_launcher_web_test.dart. // Do not manually edit this file. +// ignore_for_file: no_leading_underscores_for_library_prefixes import 'dart:async' as _i3; import 'dart:html' as _i2; import 'dart:math' as _i4; import 'package:mockito/mockito.dart' as _i1; +// ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values // ignore_for_file: avoid_setters_without_getters // ignore_for_file: comment_references @@ -16,40 +18,170 @@ import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: prefer_const_constructors // ignore_for_file: unnecessary_parenthesis // ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class -class _FakeDocument_0 extends _i1.Fake implements _i2.Document {} +class _FakeDocument_0 extends _i1.SmartFake implements _i2.Document { + _FakeDocument_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeLocation_1 extends _i1.Fake implements _i2.Location {} +class _FakeLocation_1 extends _i1.SmartFake implements _i2.Location { + _FakeLocation_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeConsole_2 extends _i1.Fake implements _i2.Console {} +class _FakeConsole_2 extends _i1.SmartFake implements _i2.Console { + _FakeConsole_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeHistory_3 extends _i1.Fake implements _i2.History {} +class _FakeHistory_3 extends _i1.SmartFake implements _i2.History { + _FakeHistory_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeStorage_4 extends _i1.Fake implements _i2.Storage {} +class _FakeStorage_4 extends _i1.SmartFake implements _i2.Storage { + _FakeStorage_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeNavigator_5 extends _i1.Fake implements _i2.Navigator {} +class _FakeNavigator_5 extends _i1.SmartFake implements _i2.Navigator { + _FakeNavigator_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakePerformance_6 extends _i1.Fake implements _i2.Performance {} +class _FakePerformance_6 extends _i1.SmartFake implements _i2.Performance { + _FakePerformance_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeEvents_7 extends _i1.Fake implements _i2.Events {} +class _FakeEvents_7 extends _i1.SmartFake implements _i2.Events { + _FakeEvents_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeWindowBase_8 extends _i1.Fake implements _i2.WindowBase {} +class _FakeWindowBase_8 extends _i1.SmartFake implements _i2.WindowBase { + _FakeWindowBase_8( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeFileSystem_9 extends _i1.Fake implements _i2.FileSystem {} +class _FakeFileSystem_9 extends _i1.SmartFake implements _i2.FileSystem { + _FakeFileSystem_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeStylePropertyMapReadonly_10 extends _i1.Fake - implements _i2.StylePropertyMapReadonly {} +class _FakeStylePropertyMapReadonly_10 extends _i1.SmartFake + implements _i2.StylePropertyMapReadonly { + _FakeStylePropertyMapReadonly_10( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeMediaQueryList_11 extends _i1.Fake implements _i2.MediaQueryList {} +class _FakeMediaQueryList_11 extends _i1.SmartFake + implements _i2.MediaQueryList { + _FakeMediaQueryList_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeEntry_12 extends _i1.Fake implements _i2.Entry {} +class _FakeEntry_12 extends _i1.SmartFake implements _i2.Entry { + _FakeEntry_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeGeolocation_13 extends _i1.Fake implements _i2.Geolocation {} +class _FakeGeolocation_13 extends _i1.SmartFake implements _i2.Geolocation { + _FakeGeolocation_13( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeMediaStream_14 extends _i1.Fake implements _i2.MediaStream {} +class _FakeMediaStream_14 extends _i1.SmartFake implements _i2.MediaStream { + _FakeMediaStream_14( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeRelatedApplication_15 extends _i1.Fake - implements _i2.RelatedApplication {} +class _FakeRelatedApplication_15 extends _i1.SmartFake + implements _i2.RelatedApplication { + _FakeRelatedApplication_15( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} /// A class which mocks [Window]. /// @@ -60,589 +192,966 @@ class MockWindow extends _i1.Mock implements _i2.Window { } @override - _i3.Future get animationFrame => - (super.noSuchMethod(Invocation.getter(#animationFrame), - returnValue: Future.value(0)) as _i3.Future); - @override - _i2.Document get document => (super.noSuchMethod(Invocation.getter(#document), - returnValue: _FakeDocument_0()) as _i2.Document); - @override - _i2.Location get location => (super.noSuchMethod(Invocation.getter(#location), - returnValue: _FakeLocation_1()) as _i2.Location); - @override - set location(_i2.LocationBase? value) => - super.noSuchMethod(Invocation.setter(#location, value), - returnValueForMissingStub: null); - @override - _i2.Console get console => (super.noSuchMethod(Invocation.getter(#console), - returnValue: _FakeConsole_2()) as _i2.Console); - @override - set defaultStatus(String? value) => - super.noSuchMethod(Invocation.setter(#defaultStatus, value), - returnValueForMissingStub: null); - @override - set defaultstatus(String? value) => - super.noSuchMethod(Invocation.setter(#defaultstatus, value), - returnValueForMissingStub: null); - @override - num get devicePixelRatio => - (super.noSuchMethod(Invocation.getter(#devicePixelRatio), returnValue: 0) - as num); - @override - _i2.History get history => (super.noSuchMethod(Invocation.getter(#history), - returnValue: _FakeHistory_3()) as _i2.History); - @override - _i2.Storage get localStorage => - (super.noSuchMethod(Invocation.getter(#localStorage), - returnValue: _FakeStorage_4()) as _i2.Storage); - @override - set name(String? value) => super.noSuchMethod(Invocation.setter(#name, value), - returnValueForMissingStub: null); - @override - _i2.Navigator get navigator => - (super.noSuchMethod(Invocation.getter(#navigator), - returnValue: _FakeNavigator_5()) as _i2.Navigator); - @override - set opener(_i2.WindowBase? value) => - super.noSuchMethod(Invocation.setter(#opener, value), - returnValueForMissingStub: null); - @override - int get outerHeight => - (super.noSuchMethod(Invocation.getter(#outerHeight), returnValue: 0) - as int); - @override - int get outerWidth => - (super.noSuchMethod(Invocation.getter(#outerWidth), returnValue: 0) - as int); - @override - _i2.Performance get performance => - (super.noSuchMethod(Invocation.getter(#performance), - returnValue: _FakePerformance_6()) as _i2.Performance); - @override - _i2.Storage get sessionStorage => - (super.noSuchMethod(Invocation.getter(#sessionStorage), - returnValue: _FakeStorage_4()) as _i2.Storage); - @override - set status(String? value) => - super.noSuchMethod(Invocation.setter(#status, value), - returnValueForMissingStub: null); - @override - _i3.Stream<_i2.Event> get onContentLoaded => - (super.noSuchMethod(Invocation.getter(#onContentLoaded), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onAbort => - (super.noSuchMethod(Invocation.getter(#onAbort), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onBlur => - (super.noSuchMethod(Invocation.getter(#onBlur), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onCanPlay => - (super.noSuchMethod(Invocation.getter(#onCanPlay), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onCanPlayThrough => - (super.noSuchMethod(Invocation.getter(#onCanPlayThrough), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onChange => - (super.noSuchMethod(Invocation.getter(#onChange), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.MouseEvent> get onClick => - (super.noSuchMethod(Invocation.getter(#onClick), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onContextMenu => - (super.noSuchMethod(Invocation.getter(#onContextMenu), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.Event> get onDoubleClick => - (super.noSuchMethod(Invocation.getter(#onDoubleClick), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.DeviceMotionEvent> get onDeviceMotion => - (super.noSuchMethod(Invocation.getter(#onDeviceMotion), - returnValue: Stream<_i2.DeviceMotionEvent>.empty()) - as _i3.Stream<_i2.DeviceMotionEvent>); + _i3.Future get animationFrame => (super.noSuchMethod( + Invocation.getter(#animationFrame), + returnValue: _i3.Future.value(0), + ) as _i3.Future); + @override + _i2.Document get document => (super.noSuchMethod( + Invocation.getter(#document), + returnValue: _FakeDocument_0( + this, + Invocation.getter(#document), + ), + ) as _i2.Document); + @override + _i2.Location get location => (super.noSuchMethod( + Invocation.getter(#location), + returnValue: _FakeLocation_1( + this, + Invocation.getter(#location), + ), + ) as _i2.Location); + @override + set location(_i2.LocationBase? value) => super.noSuchMethod( + Invocation.setter( + #location, + value, + ), + returnValueForMissingStub: null, + ); + @override + _i2.Console get console => (super.noSuchMethod( + Invocation.getter(#console), + returnValue: _FakeConsole_2( + this, + Invocation.getter(#console), + ), + ) as _i2.Console); + @override + set defaultStatus(String? value) => super.noSuchMethod( + Invocation.setter( + #defaultStatus, + value, + ), + returnValueForMissingStub: null, + ); + @override + set defaultstatus(String? value) => super.noSuchMethod( + Invocation.setter( + #defaultstatus, + value, + ), + returnValueForMissingStub: null, + ); + @override + num get devicePixelRatio => (super.noSuchMethod( + Invocation.getter(#devicePixelRatio), + returnValue: 0, + ) as num); + @override + _i2.History get history => (super.noSuchMethod( + Invocation.getter(#history), + returnValue: _FakeHistory_3( + this, + Invocation.getter(#history), + ), + ) as _i2.History); + @override + _i2.Storage get localStorage => (super.noSuchMethod( + Invocation.getter(#localStorage), + returnValue: _FakeStorage_4( + this, + Invocation.getter(#localStorage), + ), + ) as _i2.Storage); + @override + set name(String? value) => super.noSuchMethod( + Invocation.setter( + #name, + value, + ), + returnValueForMissingStub: null, + ); + @override + _i2.Navigator get navigator => (super.noSuchMethod( + Invocation.getter(#navigator), + returnValue: _FakeNavigator_5( + this, + Invocation.getter(#navigator), + ), + ) as _i2.Navigator); + @override + set opener(_i2.WindowBase? value) => super.noSuchMethod( + Invocation.setter( + #opener, + value, + ), + returnValueForMissingStub: null, + ); + @override + int get outerHeight => (super.noSuchMethod( + Invocation.getter(#outerHeight), + returnValue: 0, + ) as int); + @override + int get outerWidth => (super.noSuchMethod( + Invocation.getter(#outerWidth), + returnValue: 0, + ) as int); + @override + _i2.Performance get performance => (super.noSuchMethod( + Invocation.getter(#performance), + returnValue: _FakePerformance_6( + this, + Invocation.getter(#performance), + ), + ) as _i2.Performance); + @override + _i2.Storage get sessionStorage => (super.noSuchMethod( + Invocation.getter(#sessionStorage), + returnValue: _FakeStorage_4( + this, + Invocation.getter(#sessionStorage), + ), + ) as _i2.Storage); + @override + set status(String? value) => super.noSuchMethod( + Invocation.setter( + #status, + value, + ), + returnValueForMissingStub: null, + ); + @override + _i3.Stream<_i2.Event> get onContentLoaded => (super.noSuchMethod( + Invocation.getter(#onContentLoaded), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onAbort => (super.noSuchMethod( + Invocation.getter(#onAbort), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onBlur => (super.noSuchMethod( + Invocation.getter(#onBlur), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onCanPlay => (super.noSuchMethod( + Invocation.getter(#onCanPlay), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onCanPlayThrough => (super.noSuchMethod( + Invocation.getter(#onCanPlayThrough), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onChange => (super.noSuchMethod( + Invocation.getter(#onChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.MouseEvent> get onClick => (super.noSuchMethod( + Invocation.getter(#onClick), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onContextMenu => (super.noSuchMethod( + Invocation.getter(#onContextMenu), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.Event> get onDoubleClick => (super.noSuchMethod( + Invocation.getter(#onDoubleClick), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.DeviceMotionEvent> get onDeviceMotion => (super.noSuchMethod( + Invocation.getter(#onDeviceMotion), + returnValue: _i3.Stream<_i2.DeviceMotionEvent>.empty(), + ) as _i3.Stream<_i2.DeviceMotionEvent>); @override _i3.Stream<_i2.DeviceOrientationEvent> get onDeviceOrientation => - (super.noSuchMethod(Invocation.getter(#onDeviceOrientation), - returnValue: Stream<_i2.DeviceOrientationEvent>.empty()) - as _i3.Stream<_i2.DeviceOrientationEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDrag => - (super.noSuchMethod(Invocation.getter(#onDrag), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragEnd => - (super.noSuchMethod(Invocation.getter(#onDragEnd), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragEnter => - (super.noSuchMethod(Invocation.getter(#onDragEnter), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragLeave => - (super.noSuchMethod(Invocation.getter(#onDragLeave), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragOver => - (super.noSuchMethod(Invocation.getter(#onDragOver), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDragStart => - (super.noSuchMethod(Invocation.getter(#onDragStart), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onDrop => - (super.noSuchMethod(Invocation.getter(#onDrop), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.Event> get onDurationChange => - (super.noSuchMethod(Invocation.getter(#onDurationChange), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onEmptied => - (super.noSuchMethod(Invocation.getter(#onEmptied), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onEnded => - (super.noSuchMethod(Invocation.getter(#onEnded), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onError => - (super.noSuchMethod(Invocation.getter(#onError), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onFocus => - (super.noSuchMethod(Invocation.getter(#onFocus), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onHashChange => - (super.noSuchMethod(Invocation.getter(#onHashChange), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onInput => - (super.noSuchMethod(Invocation.getter(#onInput), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onInvalid => - (super.noSuchMethod(Invocation.getter(#onInvalid), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.KeyboardEvent> get onKeyDown => - (super.noSuchMethod(Invocation.getter(#onKeyDown), - returnValue: Stream<_i2.KeyboardEvent>.empty()) - as _i3.Stream<_i2.KeyboardEvent>); - @override - _i3.Stream<_i2.KeyboardEvent> get onKeyPress => - (super.noSuchMethod(Invocation.getter(#onKeyPress), - returnValue: Stream<_i2.KeyboardEvent>.empty()) - as _i3.Stream<_i2.KeyboardEvent>); - @override - _i3.Stream<_i2.KeyboardEvent> get onKeyUp => - (super.noSuchMethod(Invocation.getter(#onKeyUp), - returnValue: Stream<_i2.KeyboardEvent>.empty()) - as _i3.Stream<_i2.KeyboardEvent>); - @override - _i3.Stream<_i2.Event> get onLoad => - (super.noSuchMethod(Invocation.getter(#onLoad), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onLoadedData => - (super.noSuchMethod(Invocation.getter(#onLoadedData), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onLoadedMetadata => - (super.noSuchMethod(Invocation.getter(#onLoadedMetadata), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onLoadStart => - (super.noSuchMethod(Invocation.getter(#onLoadStart), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.MessageEvent> get onMessage => - (super.noSuchMethod(Invocation.getter(#onMessage), - returnValue: Stream<_i2.MessageEvent>.empty()) - as _i3.Stream<_i2.MessageEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseDown => - (super.noSuchMethod(Invocation.getter(#onMouseDown), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseEnter => - (super.noSuchMethod(Invocation.getter(#onMouseEnter), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseLeave => - (super.noSuchMethod(Invocation.getter(#onMouseLeave), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseMove => - (super.noSuchMethod(Invocation.getter(#onMouseMove), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseOut => - (super.noSuchMethod(Invocation.getter(#onMouseOut), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseOver => - (super.noSuchMethod(Invocation.getter(#onMouseOver), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.MouseEvent> get onMouseUp => - (super.noSuchMethod(Invocation.getter(#onMouseUp), - returnValue: Stream<_i2.MouseEvent>.empty()) - as _i3.Stream<_i2.MouseEvent>); - @override - _i3.Stream<_i2.WheelEvent> get onMouseWheel => - (super.noSuchMethod(Invocation.getter(#onMouseWheel), - returnValue: Stream<_i2.WheelEvent>.empty()) - as _i3.Stream<_i2.WheelEvent>); - @override - _i3.Stream<_i2.Event> get onOffline => - (super.noSuchMethod(Invocation.getter(#onOffline), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onOnline => - (super.noSuchMethod(Invocation.getter(#onOnline), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPageHide => - (super.noSuchMethod(Invocation.getter(#onPageHide), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPageShow => - (super.noSuchMethod(Invocation.getter(#onPageShow), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPause => - (super.noSuchMethod(Invocation.getter(#onPause), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPlay => - (super.noSuchMethod(Invocation.getter(#onPlay), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onPlaying => - (super.noSuchMethod(Invocation.getter(#onPlaying), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.PopStateEvent> get onPopState => - (super.noSuchMethod(Invocation.getter(#onPopState), - returnValue: Stream<_i2.PopStateEvent>.empty()) - as _i3.Stream<_i2.PopStateEvent>); - @override - _i3.Stream<_i2.Event> get onProgress => - (super.noSuchMethod(Invocation.getter(#onProgress), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onRateChange => - (super.noSuchMethod(Invocation.getter(#onRateChange), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onReset => - (super.noSuchMethod(Invocation.getter(#onReset), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onResize => - (super.noSuchMethod(Invocation.getter(#onResize), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onScroll => - (super.noSuchMethod(Invocation.getter(#onScroll), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSearch => - (super.noSuchMethod(Invocation.getter(#onSearch), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSeeked => - (super.noSuchMethod(Invocation.getter(#onSeeked), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSeeking => - (super.noSuchMethod(Invocation.getter(#onSeeking), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSelect => - (super.noSuchMethod(Invocation.getter(#onSelect), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onStalled => - (super.noSuchMethod(Invocation.getter(#onStalled), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.StorageEvent> get onStorage => - (super.noSuchMethod(Invocation.getter(#onStorage), - returnValue: Stream<_i2.StorageEvent>.empty()) - as _i3.Stream<_i2.StorageEvent>); - @override - _i3.Stream<_i2.Event> get onSubmit => - (super.noSuchMethod(Invocation.getter(#onSubmit), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onSuspend => - (super.noSuchMethod(Invocation.getter(#onSuspend), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onTimeUpdate => - (super.noSuchMethod(Invocation.getter(#onTimeUpdate), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.TouchEvent> get onTouchCancel => - (super.noSuchMethod(Invocation.getter(#onTouchCancel), - returnValue: Stream<_i2.TouchEvent>.empty()) - as _i3.Stream<_i2.TouchEvent>); - @override - _i3.Stream<_i2.TouchEvent> get onTouchEnd => - (super.noSuchMethod(Invocation.getter(#onTouchEnd), - returnValue: Stream<_i2.TouchEvent>.empty()) - as _i3.Stream<_i2.TouchEvent>); - @override - _i3.Stream<_i2.TouchEvent> get onTouchMove => - (super.noSuchMethod(Invocation.getter(#onTouchMove), - returnValue: Stream<_i2.TouchEvent>.empty()) - as _i3.Stream<_i2.TouchEvent>); - @override - _i3.Stream<_i2.TouchEvent> get onTouchStart => - (super.noSuchMethod(Invocation.getter(#onTouchStart), - returnValue: Stream<_i2.TouchEvent>.empty()) - as _i3.Stream<_i2.TouchEvent>); - @override - _i3.Stream<_i2.TransitionEvent> get onTransitionEnd => - (super.noSuchMethod(Invocation.getter(#onTransitionEnd), - returnValue: Stream<_i2.TransitionEvent>.empty()) - as _i3.Stream<_i2.TransitionEvent>); - @override - _i3.Stream<_i2.Event> get onUnload => - (super.noSuchMethod(Invocation.getter(#onUnload), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onVolumeChange => - (super.noSuchMethod(Invocation.getter(#onVolumeChange), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.Event> get onWaiting => - (super.noSuchMethod(Invocation.getter(#onWaiting), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.AnimationEvent> get onAnimationEnd => - (super.noSuchMethod(Invocation.getter(#onAnimationEnd), - returnValue: Stream<_i2.AnimationEvent>.empty()) - as _i3.Stream<_i2.AnimationEvent>); + (super.noSuchMethod( + Invocation.getter(#onDeviceOrientation), + returnValue: _i3.Stream<_i2.DeviceOrientationEvent>.empty(), + ) as _i3.Stream<_i2.DeviceOrientationEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onDrag => (super.noSuchMethod( + Invocation.getter(#onDrag), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onDragEnd => (super.noSuchMethod( + Invocation.getter(#onDragEnd), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onDragEnter => (super.noSuchMethod( + Invocation.getter(#onDragEnter), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onDragLeave => (super.noSuchMethod( + Invocation.getter(#onDragLeave), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onDragOver => (super.noSuchMethod( + Invocation.getter(#onDragOver), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onDragStart => (super.noSuchMethod( + Invocation.getter(#onDragStart), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onDrop => (super.noSuchMethod( + Invocation.getter(#onDrop), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.Event> get onDurationChange => (super.noSuchMethod( + Invocation.getter(#onDurationChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onEmptied => (super.noSuchMethod( + Invocation.getter(#onEmptied), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onEnded => (super.noSuchMethod( + Invocation.getter(#onEnded), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onError => (super.noSuchMethod( + Invocation.getter(#onError), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onFocus => (super.noSuchMethod( + Invocation.getter(#onFocus), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onHashChange => (super.noSuchMethod( + Invocation.getter(#onHashChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onInput => (super.noSuchMethod( + Invocation.getter(#onInput), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onInvalid => (super.noSuchMethod( + Invocation.getter(#onInvalid), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.KeyboardEvent> get onKeyDown => (super.noSuchMethod( + Invocation.getter(#onKeyDown), + returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), + ) as _i3.Stream<_i2.KeyboardEvent>); + @override + _i3.Stream<_i2.KeyboardEvent> get onKeyPress => (super.noSuchMethod( + Invocation.getter(#onKeyPress), + returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), + ) as _i3.Stream<_i2.KeyboardEvent>); + @override + _i3.Stream<_i2.KeyboardEvent> get onKeyUp => (super.noSuchMethod( + Invocation.getter(#onKeyUp), + returnValue: _i3.Stream<_i2.KeyboardEvent>.empty(), + ) as _i3.Stream<_i2.KeyboardEvent>); + @override + _i3.Stream<_i2.Event> get onLoad => (super.noSuchMethod( + Invocation.getter(#onLoad), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onLoadedData => (super.noSuchMethod( + Invocation.getter(#onLoadedData), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onLoadedMetadata => (super.noSuchMethod( + Invocation.getter(#onLoadedMetadata), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onLoadStart => (super.noSuchMethod( + Invocation.getter(#onLoadStart), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.MessageEvent> get onMessage => (super.noSuchMethod( + Invocation.getter(#onMessage), + returnValue: _i3.Stream<_i2.MessageEvent>.empty(), + ) as _i3.Stream<_i2.MessageEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onMouseDown => (super.noSuchMethod( + Invocation.getter(#onMouseDown), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onMouseEnter => (super.noSuchMethod( + Invocation.getter(#onMouseEnter), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onMouseLeave => (super.noSuchMethod( + Invocation.getter(#onMouseLeave), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onMouseMove => (super.noSuchMethod( + Invocation.getter(#onMouseMove), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onMouseOut => (super.noSuchMethod( + Invocation.getter(#onMouseOut), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onMouseOver => (super.noSuchMethod( + Invocation.getter(#onMouseOver), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.MouseEvent> get onMouseUp => (super.noSuchMethod( + Invocation.getter(#onMouseUp), + returnValue: _i3.Stream<_i2.MouseEvent>.empty(), + ) as _i3.Stream<_i2.MouseEvent>); + @override + _i3.Stream<_i2.WheelEvent> get onMouseWheel => (super.noSuchMethod( + Invocation.getter(#onMouseWheel), + returnValue: _i3.Stream<_i2.WheelEvent>.empty(), + ) as _i3.Stream<_i2.WheelEvent>); + @override + _i3.Stream<_i2.Event> get onOffline => (super.noSuchMethod( + Invocation.getter(#onOffline), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onOnline => (super.noSuchMethod( + Invocation.getter(#onOnline), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onPageHide => (super.noSuchMethod( + Invocation.getter(#onPageHide), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onPageShow => (super.noSuchMethod( + Invocation.getter(#onPageShow), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onPause => (super.noSuchMethod( + Invocation.getter(#onPause), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onPlay => (super.noSuchMethod( + Invocation.getter(#onPlay), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onPlaying => (super.noSuchMethod( + Invocation.getter(#onPlaying), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.PopStateEvent> get onPopState => (super.noSuchMethod( + Invocation.getter(#onPopState), + returnValue: _i3.Stream<_i2.PopStateEvent>.empty(), + ) as _i3.Stream<_i2.PopStateEvent>); + @override + _i3.Stream<_i2.Event> get onProgress => (super.noSuchMethod( + Invocation.getter(#onProgress), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onRateChange => (super.noSuchMethod( + Invocation.getter(#onRateChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onReset => (super.noSuchMethod( + Invocation.getter(#onReset), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onResize => (super.noSuchMethod( + Invocation.getter(#onResize), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onScroll => (super.noSuchMethod( + Invocation.getter(#onScroll), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onSearch => (super.noSuchMethod( + Invocation.getter(#onSearch), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onSeeked => (super.noSuchMethod( + Invocation.getter(#onSeeked), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onSeeking => (super.noSuchMethod( + Invocation.getter(#onSeeking), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onSelect => (super.noSuchMethod( + Invocation.getter(#onSelect), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onStalled => (super.noSuchMethod( + Invocation.getter(#onStalled), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.StorageEvent> get onStorage => (super.noSuchMethod( + Invocation.getter(#onStorage), + returnValue: _i3.Stream<_i2.StorageEvent>.empty(), + ) as _i3.Stream<_i2.StorageEvent>); + @override + _i3.Stream<_i2.Event> get onSubmit => (super.noSuchMethod( + Invocation.getter(#onSubmit), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onSuspend => (super.noSuchMethod( + Invocation.getter(#onSuspend), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onTimeUpdate => (super.noSuchMethod( + Invocation.getter(#onTimeUpdate), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.TouchEvent> get onTouchCancel => (super.noSuchMethod( + Invocation.getter(#onTouchCancel), + returnValue: _i3.Stream<_i2.TouchEvent>.empty(), + ) as _i3.Stream<_i2.TouchEvent>); + @override + _i3.Stream<_i2.TouchEvent> get onTouchEnd => (super.noSuchMethod( + Invocation.getter(#onTouchEnd), + returnValue: _i3.Stream<_i2.TouchEvent>.empty(), + ) as _i3.Stream<_i2.TouchEvent>); + @override + _i3.Stream<_i2.TouchEvent> get onTouchMove => (super.noSuchMethod( + Invocation.getter(#onTouchMove), + returnValue: _i3.Stream<_i2.TouchEvent>.empty(), + ) as _i3.Stream<_i2.TouchEvent>); + @override + _i3.Stream<_i2.TouchEvent> get onTouchStart => (super.noSuchMethod( + Invocation.getter(#onTouchStart), + returnValue: _i3.Stream<_i2.TouchEvent>.empty(), + ) as _i3.Stream<_i2.TouchEvent>); + @override + _i3.Stream<_i2.TransitionEvent> get onTransitionEnd => (super.noSuchMethod( + Invocation.getter(#onTransitionEnd), + returnValue: _i3.Stream<_i2.TransitionEvent>.empty(), + ) as _i3.Stream<_i2.TransitionEvent>); + @override + _i3.Stream<_i2.Event> get onUnload => (super.noSuchMethod( + Invocation.getter(#onUnload), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onVolumeChange => (super.noSuchMethod( + Invocation.getter(#onVolumeChange), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.Event> get onWaiting => (super.noSuchMethod( + Invocation.getter(#onWaiting), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.AnimationEvent> get onAnimationEnd => (super.noSuchMethod( + Invocation.getter(#onAnimationEnd), + returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), + ) as _i3.Stream<_i2.AnimationEvent>); @override _i3.Stream<_i2.AnimationEvent> get onAnimationIteration => - (super.noSuchMethod(Invocation.getter(#onAnimationIteration), - returnValue: Stream<_i2.AnimationEvent>.empty()) - as _i3.Stream<_i2.AnimationEvent>); - @override - _i3.Stream<_i2.AnimationEvent> get onAnimationStart => - (super.noSuchMethod(Invocation.getter(#onAnimationStart), - returnValue: Stream<_i2.AnimationEvent>.empty()) - as _i3.Stream<_i2.AnimationEvent>); - @override - _i3.Stream<_i2.Event> get onBeforeUnload => - (super.noSuchMethod(Invocation.getter(#onBeforeUnload), - returnValue: Stream<_i2.Event>.empty()) as _i3.Stream<_i2.Event>); - @override - _i3.Stream<_i2.WheelEvent> get onWheel => - (super.noSuchMethod(Invocation.getter(#onWheel), - returnValue: Stream<_i2.WheelEvent>.empty()) - as _i3.Stream<_i2.WheelEvent>); - @override - int get pageXOffset => - (super.noSuchMethod(Invocation.getter(#pageXOffset), returnValue: 0) - as int); - @override - int get pageYOffset => - (super.noSuchMethod(Invocation.getter(#pageYOffset), returnValue: 0) - as int); - @override - int get scrollX => - (super.noSuchMethod(Invocation.getter(#scrollX), returnValue: 0) as int); - @override - int get scrollY => - (super.noSuchMethod(Invocation.getter(#scrollY), returnValue: 0) as int); - @override - _i2.Events get on => - (super.noSuchMethod(Invocation.getter(#on), returnValue: _FakeEvents_7()) - as _i2.Events); - @override - _i2.WindowBase open(String? url, String? name, [String? options]) => - (super.noSuchMethod(Invocation.method(#open, [url, name, options]), - returnValue: _FakeWindowBase_8()) as _i2.WindowBase); + (super.noSuchMethod( + Invocation.getter(#onAnimationIteration), + returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), + ) as _i3.Stream<_i2.AnimationEvent>); + @override + _i3.Stream<_i2.AnimationEvent> get onAnimationStart => (super.noSuchMethod( + Invocation.getter(#onAnimationStart), + returnValue: _i3.Stream<_i2.AnimationEvent>.empty(), + ) as _i3.Stream<_i2.AnimationEvent>); + @override + _i3.Stream<_i2.Event> get onBeforeUnload => (super.noSuchMethod( + Invocation.getter(#onBeforeUnload), + returnValue: _i3.Stream<_i2.Event>.empty(), + ) as _i3.Stream<_i2.Event>); + @override + _i3.Stream<_i2.WheelEvent> get onWheel => (super.noSuchMethod( + Invocation.getter(#onWheel), + returnValue: _i3.Stream<_i2.WheelEvent>.empty(), + ) as _i3.Stream<_i2.WheelEvent>); + @override + int get pageXOffset => (super.noSuchMethod( + Invocation.getter(#pageXOffset), + returnValue: 0, + ) as int); + @override + int get pageYOffset => (super.noSuchMethod( + Invocation.getter(#pageYOffset), + returnValue: 0, + ) as int); + @override + int get scrollX => (super.noSuchMethod( + Invocation.getter(#scrollX), + returnValue: 0, + ) as int); + @override + int get scrollY => (super.noSuchMethod( + Invocation.getter(#scrollY), + returnValue: 0, + ) as int); + @override + _i2.Events get on => (super.noSuchMethod( + Invocation.getter(#on), + returnValue: _FakeEvents_7( + this, + Invocation.getter(#on), + ), + ) as _i2.Events); + @override + _i2.WindowBase open( + String? url, + String? name, [ + String? options, + ]) => + (super.noSuchMethod( + Invocation.method( + #open, + [ + url, + name, + options, + ], + ), + returnValue: _FakeWindowBase_8( + this, + Invocation.method( + #open, + [ + url, + name, + options, + ], + ), + ), + ) as _i2.WindowBase); @override int requestAnimationFrame(_i2.FrameRequestCallback? callback) => - (super.noSuchMethod(Invocation.method(#requestAnimationFrame, [callback]), - returnValue: 0) as int); - @override - void cancelAnimationFrame(int? id) => - super.noSuchMethod(Invocation.method(#cancelAnimationFrame, [id]), - returnValueForMissingStub: null); - @override - _i3.Future<_i2.FileSystem> requestFileSystem(int? size, - {bool? persistent = false}) => (super.noSuchMethod( - Invocation.method( - #requestFileSystem, [size], {#persistent: persistent}), - returnValue: Future<_i2.FileSystem>.value(_FakeFileSystem_9())) - as _i3.Future<_i2.FileSystem>); - @override - void alert([String? message]) => - super.noSuchMethod(Invocation.method(#alert, [message]), - returnValueForMissingStub: null); - @override - void cancelIdleCallback(int? handle) => - super.noSuchMethod(Invocation.method(#cancelIdleCallback, [handle]), - returnValueForMissingStub: null); - @override - void close() => super.noSuchMethod(Invocation.method(#close, []), - returnValueForMissingStub: null); - @override - bool confirm([String? message]) => - (super.noSuchMethod(Invocation.method(#confirm, [message]), - returnValue: false) as bool); - @override - _i3.Future fetch(dynamic input, [Map? init]) => - (super.noSuchMethod(Invocation.method(#fetch, [input, init]), - returnValue: Future.value()) as _i3.Future); - @override - bool find(String? string, bool? caseSensitive, bool? backwards, bool? wrap, - bool? wholeWord, bool? searchInFrames, bool? showDialog) => + Invocation.method( + #requestAnimationFrame, + [callback], + ), + returnValue: 0, + ) as int); + @override + void cancelAnimationFrame(int? id) => super.noSuchMethod( + Invocation.method( + #cancelAnimationFrame, + [id], + ), + returnValueForMissingStub: null, + ); + @override + _i3.Future<_i2.FileSystem> requestFileSystem( + int? size, { + bool? persistent = false, + }) => + (super.noSuchMethod( + Invocation.method( + #requestFileSystem, + [size], + {#persistent: persistent}, + ), + returnValue: _i3.Future<_i2.FileSystem>.value(_FakeFileSystem_9( + this, + Invocation.method( + #requestFileSystem, + [size], + {#persistent: persistent}, + ), + )), + ) as _i3.Future<_i2.FileSystem>); + @override + void alert([String? message]) => super.noSuchMethod( + Invocation.method( + #alert, + [message], + ), + returnValueForMissingStub: null, + ); + @override + void cancelIdleCallback(int? handle) => super.noSuchMethod( + Invocation.method( + #cancelIdleCallback, + [handle], + ), + returnValueForMissingStub: null, + ); + @override + void close() => super.noSuchMethod( + Invocation.method( + #close, + [], + ), + returnValueForMissingStub: null, + ); + @override + bool confirm([String? message]) => (super.noSuchMethod( + Invocation.method( + #confirm, + [message], + ), + returnValue: false, + ) as bool); + @override + _i3.Future fetch( + dynamic input, [ + Map? init, + ]) => + (super.noSuchMethod( + Invocation.method( + #fetch, + [ + input, + init, + ], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + @override + bool find( + String? string, + bool? caseSensitive, + bool? backwards, + bool? wrap, + bool? wholeWord, + bool? searchInFrames, + bool? showDialog, + ) => (super.noSuchMethod( - Invocation.method(#find, [ + Invocation.method( + #find, + [ string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, - showDialog - ]), - returnValue: false) as bool); + showDialog, + ], + ), + returnValue: false, + ) as bool); @override _i2.StylePropertyMapReadonly getComputedStyleMap( - _i2.Element? element, String? pseudoElement) => + _i2.Element? element, + String? pseudoElement, + ) => (super.noSuchMethod( - Invocation.method(#getComputedStyleMap, [element, pseudoElement]), - returnValue: _FakeStylePropertyMapReadonly_10()) - as _i2.StylePropertyMapReadonly); + Invocation.method( + #getComputedStyleMap, + [ + element, + pseudoElement, + ], + ), + returnValue: _FakeStylePropertyMapReadonly_10( + this, + Invocation.method( + #getComputedStyleMap, + [ + element, + pseudoElement, + ], + ), + ), + ) as _i2.StylePropertyMapReadonly); @override List<_i2.CssRule> getMatchedCssRules( - _i2.Element? element, String? pseudoElement) => + _i2.Element? element, + String? pseudoElement, + ) => (super.noSuchMethod( - Invocation.method(#getMatchedCssRules, [element, pseudoElement]), - returnValue: <_i2.CssRule>[]) as List<_i2.CssRule>); - @override - _i2.MediaQueryList matchMedia(String? query) => - (super.noSuchMethod(Invocation.method(#matchMedia, [query]), - returnValue: _FakeMediaQueryList_11()) as _i2.MediaQueryList); - @override - void moveBy(int? x, int? y) => - super.noSuchMethod(Invocation.method(#moveBy, [x, y]), - returnValueForMissingStub: null); - @override - void postMessage(dynamic message, String? targetOrigin, - [List? transfer]) => + Invocation.method( + #getMatchedCssRules, + [ + element, + pseudoElement, + ], + ), + returnValue: <_i2.CssRule>[], + ) as List<_i2.CssRule>); + @override + _i2.MediaQueryList matchMedia(String? query) => (super.noSuchMethod( + Invocation.method( + #matchMedia, + [query], + ), + returnValue: _FakeMediaQueryList_11( + this, + Invocation.method( + #matchMedia, + [query], + ), + ), + ) as _i2.MediaQueryList); + @override + void moveBy( + int? x, + int? y, + ) => super.noSuchMethod( - Invocation.method(#postMessage, [message, targetOrigin, transfer]), - returnValueForMissingStub: null); - @override - void print() => super.noSuchMethod(Invocation.method(#print, []), - returnValueForMissingStub: null); - @override - int requestIdleCallback(_i2.IdleRequestCallback? callback, - [Map? options]) => + Invocation.method( + #moveBy, + [ + x, + y, + ], + ), + returnValueForMissingStub: null, + ); + @override + void postMessage( + dynamic message, + String? targetOrigin, [ + List? transfer, + ]) => + super.noSuchMethod( + Invocation.method( + #postMessage, + [ + message, + targetOrigin, + transfer, + ], + ), + returnValueForMissingStub: null, + ); + @override + void print() => super.noSuchMethod( + Invocation.method( + #print, + [], + ), + returnValueForMissingStub: null, + ); + @override + int requestIdleCallback( + _i2.IdleRequestCallback? callback, [ + Map? options, + ]) => (super.noSuchMethod( - Invocation.method(#requestIdleCallback, [callback, options]), - returnValue: 0) as int); - @override - void resizeBy(int? x, int? y) => - super.noSuchMethod(Invocation.method(#resizeBy, [x, y]), - returnValueForMissingStub: null); - @override - void resizeTo(int? x, int? y) => - super.noSuchMethod(Invocation.method(#resizeTo, [x, y]), - returnValueForMissingStub: null); - @override - void scroll( - [dynamic options_OR_x, - dynamic y, - Map? scrollOptions]) => + Invocation.method( + #requestIdleCallback, + [ + callback, + options, + ], + ), + returnValue: 0, + ) as int); + @override + void resizeBy( + int? x, + int? y, + ) => super.noSuchMethod( - Invocation.method(#scroll, [options_OR_x, y, scrollOptions]), - returnValueForMissingStub: null); - @override - void scrollBy( - [dynamic options_OR_x, - dynamic y, - Map? scrollOptions]) => + Invocation.method( + #resizeBy, + [ + x, + y, + ], + ), + returnValueForMissingStub: null, + ); + @override + void resizeTo( + int? x, + int? y, + ) => super.noSuchMethod( - Invocation.method(#scrollBy, [options_OR_x, y, scrollOptions]), - returnValueForMissingStub: null); - @override - void scrollTo( - [dynamic options_OR_x, - dynamic y, - Map? scrollOptions]) => + Invocation.method( + #resizeTo, + [ + x, + y, + ], + ), + returnValueForMissingStub: null, + ); + @override + void scroll([ + dynamic options_OR_x, + dynamic y, + Map? scrollOptions, + ]) => super.noSuchMethod( - Invocation.method(#scrollTo, [options_OR_x, y, scrollOptions]), - returnValueForMissingStub: null); - @override - void stop() => super.noSuchMethod(Invocation.method(#stop, []), - returnValueForMissingStub: null); + Invocation.method( + #scroll, + [ + options_OR_x, + y, + scrollOptions, + ], + ), + returnValueForMissingStub: null, + ); + @override + void scrollBy([ + dynamic options_OR_x, + dynamic y, + Map? scrollOptions, + ]) => + super.noSuchMethod( + Invocation.method( + #scrollBy, + [ + options_OR_x, + y, + scrollOptions, + ], + ), + returnValueForMissingStub: null, + ); + @override + void scrollTo([ + dynamic options_OR_x, + dynamic y, + Map? scrollOptions, + ]) => + super.noSuchMethod( + Invocation.method( + #scrollTo, + [ + options_OR_x, + y, + scrollOptions, + ], + ), + returnValueForMissingStub: null, + ); + @override + void stop() => super.noSuchMethod( + Invocation.method( + #stop, + [], + ), + returnValueForMissingStub: null, + ); @override _i3.Future<_i2.Entry> resolveLocalFileSystemUrl(String? url) => - (super.noSuchMethod(Invocation.method(#resolveLocalFileSystemUrl, [url]), - returnValue: Future<_i2.Entry>.value(_FakeEntry_12())) - as _i3.Future<_i2.Entry>); - @override - String atob(String? atob) => - (super.noSuchMethod(Invocation.method(#atob, [atob]), returnValue: '') - as String); - @override - String btoa(String? btoa) => - (super.noSuchMethod(Invocation.method(#btoa, [btoa]), returnValue: '') - as String); - @override - void moveTo(_i4.Point? p) => - super.noSuchMethod(Invocation.method(#moveTo, [p]), - returnValueForMissingStub: null); - @override - void addEventListener(String? type, _i2.EventListener? listener, - [bool? useCapture]) => + (super.noSuchMethod( + Invocation.method( + #resolveLocalFileSystemUrl, + [url], + ), + returnValue: _i3.Future<_i2.Entry>.value(_FakeEntry_12( + this, + Invocation.method( + #resolveLocalFileSystemUrl, + [url], + ), + )), + ) as _i3.Future<_i2.Entry>); + @override + String atob(String? atob) => (super.noSuchMethod( + Invocation.method( + #atob, + [atob], + ), + returnValue: '', + ) as String); + @override + String btoa(String? btoa) => (super.noSuchMethod( + Invocation.method( + #btoa, + [btoa], + ), + returnValue: '', + ) as String); + @override + void moveTo(_i4.Point? p) => super.noSuchMethod( + Invocation.method( + #moveTo, + [p], + ), + returnValueForMissingStub: null, + ); + @override + void addEventListener( + String? type, + _i2.EventListener? listener, [ + bool? useCapture, + ]) => super.noSuchMethod( - Invocation.method(#addEventListener, [type, listener, useCapture]), - returnValueForMissingStub: null); - @override - void removeEventListener(String? type, _i2.EventListener? listener, - [bool? useCapture]) => + Invocation.method( + #addEventListener, + [ + type, + listener, + useCapture, + ], + ), + returnValueForMissingStub: null, + ); + @override + void removeEventListener( + String? type, + _i2.EventListener? listener, [ + bool? useCapture, + ]) => super.noSuchMethod( - Invocation.method(#removeEventListener, [type, listener, useCapture]), - returnValueForMissingStub: null); - @override - bool dispatchEvent(_i2.Event? event) => - (super.noSuchMethod(Invocation.method(#dispatchEvent, [event]), - returnValue: false) as bool); + Invocation.method( + #removeEventListener, + [ + type, + listener, + useCapture, + ], + ), + returnValueForMissingStub: null, + ); + @override + bool dispatchEvent(_i2.Event? event) => (super.noSuchMethod( + Invocation.method( + #dispatchEvent, + [event], + ), + returnValue: false, + ) as bool); } /// A class which mocks [Navigator]. @@ -654,97 +1163,199 @@ class MockNavigator extends _i1.Mock implements _i2.Navigator { } @override - String get language => - (super.noSuchMethod(Invocation.getter(#language), returnValue: '') - as String); - @override - _i2.Geolocation get geolocation => - (super.noSuchMethod(Invocation.getter(#geolocation), - returnValue: _FakeGeolocation_13()) as _i2.Geolocation); - @override - String get vendor => - (super.noSuchMethod(Invocation.getter(#vendor), returnValue: '') - as String); - @override - String get vendorSub => - (super.noSuchMethod(Invocation.getter(#vendorSub), returnValue: '') - as String); - @override - String get appCodeName => - (super.noSuchMethod(Invocation.getter(#appCodeName), returnValue: '') - as String); - @override - String get appName => - (super.noSuchMethod(Invocation.getter(#appName), returnValue: '') - as String); - @override - String get appVersion => - (super.noSuchMethod(Invocation.getter(#appVersion), returnValue: '') - as String); - @override - String get product => - (super.noSuchMethod(Invocation.getter(#product), returnValue: '') - as String); - @override - String get userAgent => - (super.noSuchMethod(Invocation.getter(#userAgent), returnValue: '') - as String); - @override - List<_i2.Gamepad?> getGamepads() => - (super.noSuchMethod(Invocation.method(#getGamepads, []), - returnValue: <_i2.Gamepad?>[]) as List<_i2.Gamepad?>); - @override - _i3.Future<_i2.MediaStream> getUserMedia( - {dynamic audio = false, dynamic video = false}) => + String get language => (super.noSuchMethod( + Invocation.getter(#language), + returnValue: '', + ) as String); + @override + _i2.Geolocation get geolocation => (super.noSuchMethod( + Invocation.getter(#geolocation), + returnValue: _FakeGeolocation_13( + this, + Invocation.getter(#geolocation), + ), + ) as _i2.Geolocation); + @override + String get vendor => (super.noSuchMethod( + Invocation.getter(#vendor), + returnValue: '', + ) as String); + @override + String get vendorSub => (super.noSuchMethod( + Invocation.getter(#vendorSub), + returnValue: '', + ) as String); + @override + String get appCodeName => (super.noSuchMethod( + Invocation.getter(#appCodeName), + returnValue: '', + ) as String); + @override + String get appName => (super.noSuchMethod( + Invocation.getter(#appName), + returnValue: '', + ) as String); + @override + String get appVersion => (super.noSuchMethod( + Invocation.getter(#appVersion), + returnValue: '', + ) as String); + @override + String get product => (super.noSuchMethod( + Invocation.getter(#product), + returnValue: '', + ) as String); + @override + String get userAgent => (super.noSuchMethod( + Invocation.getter(#userAgent), + returnValue: '', + ) as String); + @override + List<_i2.Gamepad?> getGamepads() => (super.noSuchMethod( + Invocation.method( + #getGamepads, + [], + ), + returnValue: <_i2.Gamepad?>[], + ) as List<_i2.Gamepad?>); + @override + _i3.Future<_i2.MediaStream> getUserMedia({ + dynamic audio = false, + dynamic video = false, + }) => (super.noSuchMethod( - Invocation.method(#getUserMedia, [], {#audio: audio, #video: video}), - returnValue: - Future<_i2.MediaStream>.value(_FakeMediaStream_14())) as _i3 - .Future<_i2.MediaStream>); - @override - void cancelKeyboardLock() => - super.noSuchMethod(Invocation.method(#cancelKeyboardLock, []), - returnValueForMissingStub: null); - @override - _i3.Future getBattery() => - (super.noSuchMethod(Invocation.method(#getBattery, []), - returnValue: Future.value()) as _i3.Future); + Invocation.method( + #getUserMedia, + [], + { + #audio: audio, + #video: video, + }, + ), + returnValue: _i3.Future<_i2.MediaStream>.value(_FakeMediaStream_14( + this, + Invocation.method( + #getUserMedia, + [], + { + #audio: audio, + #video: video, + }, + ), + )), + ) as _i3.Future<_i2.MediaStream>); + @override + void cancelKeyboardLock() => super.noSuchMethod( + Invocation.method( + #cancelKeyboardLock, + [], + ), + returnValueForMissingStub: null, + ); + @override + _i3.Future getBattery() => (super.noSuchMethod( + Invocation.method( + #getBattery, + [], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); @override _i3.Future<_i2.RelatedApplication> getInstalledRelatedApps() => - (super.noSuchMethod(Invocation.method(#getInstalledRelatedApps, []), - returnValue: Future<_i2.RelatedApplication>.value( - _FakeRelatedApplication_15())) - as _i3.Future<_i2.RelatedApplication>); - @override - _i3.Future getVRDisplays() => - (super.noSuchMethod(Invocation.method(#getVRDisplays, []), - returnValue: Future.value()) as _i3.Future); - @override - void registerProtocolHandler(String? scheme, String? url, String? title) => + (super.noSuchMethod( + Invocation.method( + #getInstalledRelatedApps, + [], + ), + returnValue: + _i3.Future<_i2.RelatedApplication>.value(_FakeRelatedApplication_15( + this, + Invocation.method( + #getInstalledRelatedApps, + [], + ), + )), + ) as _i3.Future<_i2.RelatedApplication>); + @override + _i3.Future getVRDisplays() => (super.noSuchMethod( + Invocation.method( + #getVRDisplays, + [], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + @override + void registerProtocolHandler( + String? scheme, + String? url, + String? title, + ) => super.noSuchMethod( - Invocation.method(#registerProtocolHandler, [scheme, url, title]), - returnValueForMissingStub: null); + Invocation.method( + #registerProtocolHandler, + [ + scheme, + url, + title, + ], + ), + returnValueForMissingStub: null, + ); @override _i3.Future requestKeyboardLock([List? keyCodes]) => - (super.noSuchMethod(Invocation.method(#requestKeyboardLock, [keyCodes]), - returnValue: Future.value()) as _i3.Future); + (super.noSuchMethod( + Invocation.method( + #requestKeyboardLock, + [keyCodes], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); @override _i3.Future requestMidiAccess([Map? options]) => - (super.noSuchMethod(Invocation.method(#requestMidiAccess, [options]), - returnValue: Future.value()) as _i3.Future); - @override - _i3.Future requestMediaKeySystemAccess(String? keySystem, - List>? supportedConfigurations) => (super.noSuchMethod( - Invocation.method(#requestMediaKeySystemAccess, - [keySystem, supportedConfigurations]), - returnValue: Future.value()) as _i3.Future); - @override - bool sendBeacon(String? url, Object? data) => - (super.noSuchMethod(Invocation.method(#sendBeacon, [url, data]), - returnValue: false) as bool); + Invocation.method( + #requestMidiAccess, + [options], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + @override + _i3.Future requestMediaKeySystemAccess( + String? keySystem, + List>? supportedConfigurations, + ) => + (super.noSuchMethod( + Invocation.method( + #requestMediaKeySystemAccess, + [ + keySystem, + supportedConfigurations, + ], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); + @override + bool sendBeacon( + String? url, + Object? data, + ) => + (super.noSuchMethod( + Invocation.method( + #sendBeacon, + [ + url, + data, + ], + ), + returnValue: false, + ) as bool); @override _i3.Future share([Map? data]) => - (super.noSuchMethod(Invocation.method(#share, [data]), - returnValue: Future.value()) as _i3.Future); + (super.noSuchMethod( + Invocation.method( + #share, + [data], + ), + returnValue: _i3.Future.value(), + ) as _i3.Future); } diff --git a/packages/url_launcher/url_launcher_web/example/pubspec.yaml b/packages/url_launcher/url_launcher_web/example/pubspec.yaml index 881cb29c7599..f972b2857ecf 100644 --- a/packages/url_launcher/url_launcher_web/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/example/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: sdk: flutter integration_test: sdk: flutter - mockito: ^5.0.0 + mockito: ^5.3.2 url_launcher_platform_interface: ^2.0.3 url_launcher_web: path: ../ diff --git a/packages/webview_flutter/webview_flutter_web/pubspec.yaml b/packages/webview_flutter/webview_flutter_web/pubspec.yaml index 8f1b523be555..f27e6408335a 100644 --- a/packages/webview_flutter/webview_flutter_web/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_web/pubspec.yaml @@ -29,4 +29,4 @@ dev_dependencies: sdk: flutter flutter_test: sdk: flutter - mockito: ^5.0.0 + mockito: ^5.3.2 diff --git a/packages/webview_flutter/webview_flutter_web/test/webview_flutter_web_test.mocks.dart b/packages/webview_flutter/webview_flutter_web/test/webview_flutter_web_test.mocks.dart index e35d1e93c59f..db442eeea7a3 100644 --- a/packages/webview_flutter/webview_flutter_web/test/webview_flutter_web_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_web/test/webview_flutter_web_test.mocks.dart @@ -1,25 +1,22 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Mocks generated by Mockito 5.0.16 from annotations +// Mocks generated by Mockito 5.3.2 from annotations // in webview_flutter_web/test/webview_flutter_web_test.dart. // Do not manually edit this file. +// ignore_for_file: no_leading_underscores_for_library_prefixes import 'dart:async' as _i6; import 'dart:html' as _i2; import 'dart:math' as _i3; import 'package:flutter/foundation.dart' as _i5; +import 'package:flutter/src/widgets/notification_listener.dart' as _i7; import 'package:flutter/widgets.dart' as _i4; import 'package:mockito/mockito.dart' as _i1; -import 'package:webview_flutter_platform_interface/src/types/auto_media_playback_policy.dart' - as _i8; -import 'package:webview_flutter_platform_interface/src/types/types.dart' as _i7; +import 'package:webview_flutter_platform_interface/src/types/types.dart' as _i8; import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart' as _i9; import 'package:webview_flutter_web/webview_flutter_web.dart' as _i10; +// ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values // ignore_for_file: avoid_setters_without_getters // ignore_for_file: comment_references @@ -28,66 +25,231 @@ import 'package:webview_flutter_web/webview_flutter_web.dart' as _i10; // ignore_for_file: prefer_const_constructors // ignore_for_file: unnecessary_parenthesis // ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeCssClassSet_0 extends _i1.SmartFake implements _i2.CssClassSet { + _FakeCssClassSet_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeCssClassSet_0 extends _i1.Fake implements _i2.CssClassSet {} +class _FakeRectangle_1 extends _i1.SmartFake + implements _i3.Rectangle { + _FakeRectangle_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeRectangle_1 extends _i1.Fake - implements _i3.Rectangle {} +class _FakeCssRect_2 extends _i1.SmartFake implements _i2.CssRect { + _FakeCssRect_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeCssRect_2 extends _i1.Fake implements _i2.CssRect {} +class _FakePoint_3 extends _i1.SmartFake + implements _i3.Point { + _FakePoint_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakePoint_3 extends _i1.Fake implements _i3.Point {} +class _FakeElementEvents_4 extends _i1.SmartFake implements _i2.ElementEvents { + _FakeElementEvents_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeElementEvents_4 extends _i1.Fake implements _i2.ElementEvents {} +class _FakeCssStyleDeclaration_5 extends _i1.SmartFake + implements _i2.CssStyleDeclaration { + _FakeCssStyleDeclaration_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeCssStyleDeclaration_5 extends _i1.Fake - implements _i2.CssStyleDeclaration {} +class _FakeElementStream_6 extends _i1.SmartFake + implements _i2.ElementStream { + _FakeElementStream_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeElementStream_6 extends _i1.Fake - implements _i2.ElementStream {} +class _FakeElementList_7 extends _i1.SmartFake + implements _i2.ElementList { + _FakeElementList_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeElementList_7 extends _i1.Fake - implements _i2.ElementList {} +class _FakeScrollState_8 extends _i1.SmartFake implements _i2.ScrollState { + _FakeScrollState_8( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeScrollState_8 extends _i1.Fake implements _i2.ScrollState {} +class _FakeAnimation_9 extends _i1.SmartFake implements _i2.Animation { + _FakeAnimation_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeAnimation_9 extends _i1.Fake implements _i2.Animation {} +class _FakeElement_10 extends _i1.SmartFake implements _i2.Element { + _FakeElement_10( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeElement_10 extends _i1.Fake implements _i2.Element {} +class _FakeShadowRoot_11 extends _i1.SmartFake implements _i2.ShadowRoot { + _FakeShadowRoot_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeShadowRoot_11 extends _i1.Fake implements _i2.ShadowRoot {} +class _FakeDocumentFragment_12 extends _i1.SmartFake + implements _i2.DocumentFragment { + _FakeDocumentFragment_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeDocumentFragment_12 extends _i1.Fake - implements _i2.DocumentFragment {} +class _FakeNode_13 extends _i1.SmartFake implements _i2.Node { + _FakeNode_13( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeNode_13 extends _i1.Fake implements _i2.Node {} +class _FakeWidget_14 extends _i1.SmartFake implements _i4.Widget { + _FakeWidget_14( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); -class _FakeWidget_14 extends _i1.Fake implements _i4.Widget { @override String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => super.toString(); } -class _FakeInheritedWidget_15 extends _i1.Fake implements _i4.InheritedWidget { +class _FakeInheritedWidget_15 extends _i1.SmartFake + implements _i4.InheritedWidget { + _FakeInheritedWidget_15( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); + @override String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => super.toString(); } -class _FakeDiagnosticsNode_16 extends _i1.Fake implements _i5.DiagnosticsNode { +class _FakeDiagnosticsNode_16 extends _i1.SmartFake + implements _i5.DiagnosticsNode { + _FakeDiagnosticsNode_16( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); + @override - String toString( - {_i5.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => + String toString({ + _i5.TextTreeConfiguration? parentConfiguration, + _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, + }) => super.toString(); } -class _FakeHttpRequest_17 extends _i1.Fake implements _i2.HttpRequest {} +class _FakeHttpRequest_17 extends _i1.SmartFake implements _i2.HttpRequest { + _FakeHttpRequest_17( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeHttpRequestUpload_18 extends _i1.Fake - implements _i2.HttpRequestUpload {} +class _FakeHttpRequestUpload_18 extends _i1.SmartFake + implements _i2.HttpRequestUpload { + _FakeHttpRequestUpload_18( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeEvents_19 extends _i1.Fake implements _i2.Events {} +class _FakeEvents_19 extends _i1.SmartFake implements _i2.Events { + _FakeEvents_19( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} /// A class which mocks [IFrameElement]. /// @@ -98,907 +260,1844 @@ class MockIFrameElement extends _i1.Mock implements _i2.IFrameElement { } @override - set allow(String? value) => - super.noSuchMethod(Invocation.setter(#allow, value), - returnValueForMissingStub: null); - @override - set allowFullscreen(bool? value) => - super.noSuchMethod(Invocation.setter(#allowFullscreen, value), - returnValueForMissingStub: null); - @override - set allowPaymentRequest(bool? value) => - super.noSuchMethod(Invocation.setter(#allowPaymentRequest, value), - returnValueForMissingStub: null); - @override - set csp(String? value) => super.noSuchMethod(Invocation.setter(#csp, value), - returnValueForMissingStub: null); - @override - set height(String? value) => - super.noSuchMethod(Invocation.setter(#height, value), - returnValueForMissingStub: null); - @override - set name(String? value) => super.noSuchMethod(Invocation.setter(#name, value), - returnValueForMissingStub: null); - @override - set referrerPolicy(String? value) => - super.noSuchMethod(Invocation.setter(#referrerPolicy, value), - returnValueForMissingStub: null); - @override - set src(String? value) => super.noSuchMethod(Invocation.setter(#src, value), - returnValueForMissingStub: null); - @override - set srcdoc(String? value) => - super.noSuchMethod(Invocation.setter(#srcdoc, value), - returnValueForMissingStub: null); - @override - set width(String? value) => - super.noSuchMethod(Invocation.setter(#width, value), - returnValueForMissingStub: null); - @override - set nonce(String? value) => - super.noSuchMethod(Invocation.setter(#nonce, value), - returnValueForMissingStub: null); - @override - Map get attributes => - (super.noSuchMethod(Invocation.getter(#attributes), - returnValue: {}) as Map); - @override - set attributes(Map? value) => - super.noSuchMethod(Invocation.setter(#attributes, value), - returnValueForMissingStub: null); - @override - List<_i2.Element> get children => - (super.noSuchMethod(Invocation.getter(#children), - returnValue: <_i2.Element>[]) as List<_i2.Element>); - @override - set children(List<_i2.Element>? value) => - super.noSuchMethod(Invocation.setter(#children, value), - returnValueForMissingStub: null); - @override - _i2.CssClassSet get classes => - (super.noSuchMethod(Invocation.getter(#classes), - returnValue: _FakeCssClassSet_0()) as _i2.CssClassSet); - @override - set classes(Iterable? value) => - super.noSuchMethod(Invocation.setter(#classes, value), - returnValueForMissingStub: null); - @override - Map get dataset => - (super.noSuchMethod(Invocation.getter(#dataset), - returnValue: {}) as Map); - @override - set dataset(Map? value) => - super.noSuchMethod(Invocation.setter(#dataset, value), - returnValueForMissingStub: null); - @override - _i3.Rectangle get client => - (super.noSuchMethod(Invocation.getter(#client), - returnValue: _FakeRectangle_1()) as _i3.Rectangle); - @override - _i3.Rectangle get offset => - (super.noSuchMethod(Invocation.getter(#offset), - returnValue: _FakeRectangle_1()) as _i3.Rectangle); - @override - String get localName => - (super.noSuchMethod(Invocation.getter(#localName), returnValue: '') - as String); - @override - _i2.CssRect get contentEdge => - (super.noSuchMethod(Invocation.getter(#contentEdge), - returnValue: _FakeCssRect_2()) as _i2.CssRect); - @override - _i2.CssRect get paddingEdge => - (super.noSuchMethod(Invocation.getter(#paddingEdge), - returnValue: _FakeCssRect_2()) as _i2.CssRect); - @override - _i2.CssRect get borderEdge => - (super.noSuchMethod(Invocation.getter(#borderEdge), - returnValue: _FakeCssRect_2()) as _i2.CssRect); - @override - _i2.CssRect get marginEdge => - (super.noSuchMethod(Invocation.getter(#marginEdge), - returnValue: _FakeCssRect_2()) as _i2.CssRect); - @override - _i3.Point get documentOffset => - (super.noSuchMethod(Invocation.getter(#documentOffset), - returnValue: _FakePoint_3()) as _i3.Point); - @override - set innerHtml(String? html) => - super.noSuchMethod(Invocation.setter(#innerHtml, html), - returnValueForMissingStub: null); - @override - String get innerText => - (super.noSuchMethod(Invocation.getter(#innerText), returnValue: '') - as String); - @override - set innerText(String? value) => - super.noSuchMethod(Invocation.setter(#innerText, value), - returnValueForMissingStub: null); - @override - _i2.ElementEvents get on => (super.noSuchMethod(Invocation.getter(#on), - returnValue: _FakeElementEvents_4()) as _i2.ElementEvents); - @override - int get offsetHeight => - (super.noSuchMethod(Invocation.getter(#offsetHeight), returnValue: 0) - as int); - @override - int get offsetLeft => - (super.noSuchMethod(Invocation.getter(#offsetLeft), returnValue: 0) - as int); - @override - int get offsetTop => - (super.noSuchMethod(Invocation.getter(#offsetTop), returnValue: 0) - as int); - @override - int get offsetWidth => - (super.noSuchMethod(Invocation.getter(#offsetWidth), returnValue: 0) - as int); - @override - int get scrollHeight => - (super.noSuchMethod(Invocation.getter(#scrollHeight), returnValue: 0) - as int); - @override - int get scrollLeft => - (super.noSuchMethod(Invocation.getter(#scrollLeft), returnValue: 0) - as int); - @override - set scrollLeft(int? value) => - super.noSuchMethod(Invocation.setter(#scrollLeft, value), - returnValueForMissingStub: null); - @override - int get scrollTop => - (super.noSuchMethod(Invocation.getter(#scrollTop), returnValue: 0) - as int); - @override - set scrollTop(int? value) => - super.noSuchMethod(Invocation.setter(#scrollTop, value), - returnValueForMissingStub: null); - @override - int get scrollWidth => - (super.noSuchMethod(Invocation.getter(#scrollWidth), returnValue: 0) - as int); - @override - String get contentEditable => - (super.noSuchMethod(Invocation.getter(#contentEditable), returnValue: '') - as String); - @override - set contentEditable(String? value) => - super.noSuchMethod(Invocation.setter(#contentEditable, value), - returnValueForMissingStub: null); - @override - set dir(String? value) => super.noSuchMethod(Invocation.setter(#dir, value), - returnValueForMissingStub: null); - @override - bool get draggable => - (super.noSuchMethod(Invocation.getter(#draggable), returnValue: false) - as bool); - @override - set draggable(bool? value) => - super.noSuchMethod(Invocation.setter(#draggable, value), - returnValueForMissingStub: null); - @override - bool get hidden => - (super.noSuchMethod(Invocation.getter(#hidden), returnValue: false) - as bool); - @override - set hidden(bool? value) => - super.noSuchMethod(Invocation.setter(#hidden, value), - returnValueForMissingStub: null); - @override - set inert(bool? value) => super.noSuchMethod(Invocation.setter(#inert, value), - returnValueForMissingStub: null); - @override - set inputMode(String? value) => - super.noSuchMethod(Invocation.setter(#inputMode, value), - returnValueForMissingStub: null); - @override - set lang(String? value) => super.noSuchMethod(Invocation.setter(#lang, value), - returnValueForMissingStub: null); - @override - set spellcheck(bool? value) => - super.noSuchMethod(Invocation.setter(#spellcheck, value), - returnValueForMissingStub: null); + set allow(String? value) => super.noSuchMethod( + Invocation.setter( + #allow, + value, + ), + returnValueForMissingStub: null, + ); + @override + set allowFullscreen(bool? value) => super.noSuchMethod( + Invocation.setter( + #allowFullscreen, + value, + ), + returnValueForMissingStub: null, + ); + @override + set allowPaymentRequest(bool? value) => super.noSuchMethod( + Invocation.setter( + #allowPaymentRequest, + value, + ), + returnValueForMissingStub: null, + ); + @override + set csp(String? value) => super.noSuchMethod( + Invocation.setter( + #csp, + value, + ), + returnValueForMissingStub: null, + ); + @override + set height(String? value) => super.noSuchMethod( + Invocation.setter( + #height, + value, + ), + returnValueForMissingStub: null, + ); + @override + set name(String? value) => super.noSuchMethod( + Invocation.setter( + #name, + value, + ), + returnValueForMissingStub: null, + ); + @override + set referrerPolicy(String? value) => super.noSuchMethod( + Invocation.setter( + #referrerPolicy, + value, + ), + returnValueForMissingStub: null, + ); + @override + set src(String? value) => super.noSuchMethod( + Invocation.setter( + #src, + value, + ), + returnValueForMissingStub: null, + ); + @override + set srcdoc(String? value) => super.noSuchMethod( + Invocation.setter( + #srcdoc, + value, + ), + returnValueForMissingStub: null, + ); + @override + set width(String? value) => super.noSuchMethod( + Invocation.setter( + #width, + value, + ), + returnValueForMissingStub: null, + ); + @override + set nonce(String? value) => super.noSuchMethod( + Invocation.setter( + #nonce, + value, + ), + returnValueForMissingStub: null, + ); + @override + Map get attributes => (super.noSuchMethod( + Invocation.getter(#attributes), + returnValue: {}, + ) as Map); + @override + set attributes(Map? value) => super.noSuchMethod( + Invocation.setter( + #attributes, + value, + ), + returnValueForMissingStub: null, + ); + @override + List<_i2.Element> get children => (super.noSuchMethod( + Invocation.getter(#children), + returnValue: <_i2.Element>[], + ) as List<_i2.Element>); + @override + set children(List<_i2.Element>? value) => super.noSuchMethod( + Invocation.setter( + #children, + value, + ), + returnValueForMissingStub: null, + ); + @override + _i2.CssClassSet get classes => (super.noSuchMethod( + Invocation.getter(#classes), + returnValue: _FakeCssClassSet_0( + this, + Invocation.getter(#classes), + ), + ) as _i2.CssClassSet); + @override + set classes(Iterable? value) => super.noSuchMethod( + Invocation.setter( + #classes, + value, + ), + returnValueForMissingStub: null, + ); + @override + Map get dataset => (super.noSuchMethod( + Invocation.getter(#dataset), + returnValue: {}, + ) as Map); + @override + set dataset(Map? value) => super.noSuchMethod( + Invocation.setter( + #dataset, + value, + ), + returnValueForMissingStub: null, + ); + @override + _i3.Rectangle get client => (super.noSuchMethod( + Invocation.getter(#client), + returnValue: _FakeRectangle_1( + this, + Invocation.getter(#client), + ), + ) as _i3.Rectangle); + @override + _i3.Rectangle get offset => (super.noSuchMethod( + Invocation.getter(#offset), + returnValue: _FakeRectangle_1( + this, + Invocation.getter(#offset), + ), + ) as _i3.Rectangle); + @override + String get localName => (super.noSuchMethod( + Invocation.getter(#localName), + returnValue: '', + ) as String); + @override + _i2.CssRect get contentEdge => (super.noSuchMethod( + Invocation.getter(#contentEdge), + returnValue: _FakeCssRect_2( + this, + Invocation.getter(#contentEdge), + ), + ) as _i2.CssRect); + @override + _i2.CssRect get paddingEdge => (super.noSuchMethod( + Invocation.getter(#paddingEdge), + returnValue: _FakeCssRect_2( + this, + Invocation.getter(#paddingEdge), + ), + ) as _i2.CssRect); + @override + _i2.CssRect get borderEdge => (super.noSuchMethod( + Invocation.getter(#borderEdge), + returnValue: _FakeCssRect_2( + this, + Invocation.getter(#borderEdge), + ), + ) as _i2.CssRect); + @override + _i2.CssRect get marginEdge => (super.noSuchMethod( + Invocation.getter(#marginEdge), + returnValue: _FakeCssRect_2( + this, + Invocation.getter(#marginEdge), + ), + ) as _i2.CssRect); + @override + _i3.Point get documentOffset => (super.noSuchMethod( + Invocation.getter(#documentOffset), + returnValue: _FakePoint_3( + this, + Invocation.getter(#documentOffset), + ), + ) as _i3.Point); + @override + set innerHtml(String? html) => super.noSuchMethod( + Invocation.setter( + #innerHtml, + html, + ), + returnValueForMissingStub: null, + ); + @override + String get innerText => (super.noSuchMethod( + Invocation.getter(#innerText), + returnValue: '', + ) as String); + @override + set innerText(String? value) => super.noSuchMethod( + Invocation.setter( + #innerText, + value, + ), + returnValueForMissingStub: null, + ); + @override + _i2.ElementEvents get on => (super.noSuchMethod( + Invocation.getter(#on), + returnValue: _FakeElementEvents_4( + this, + Invocation.getter(#on), + ), + ) as _i2.ElementEvents); + @override + int get offsetHeight => (super.noSuchMethod( + Invocation.getter(#offsetHeight), + returnValue: 0, + ) as int); + @override + int get offsetLeft => (super.noSuchMethod( + Invocation.getter(#offsetLeft), + returnValue: 0, + ) as int); + @override + int get offsetTop => (super.noSuchMethod( + Invocation.getter(#offsetTop), + returnValue: 0, + ) as int); + @override + int get offsetWidth => (super.noSuchMethod( + Invocation.getter(#offsetWidth), + returnValue: 0, + ) as int); + @override + int get scrollHeight => (super.noSuchMethod( + Invocation.getter(#scrollHeight), + returnValue: 0, + ) as int); + @override + int get scrollLeft => (super.noSuchMethod( + Invocation.getter(#scrollLeft), + returnValue: 0, + ) as int); + @override + set scrollLeft(int? value) => super.noSuchMethod( + Invocation.setter( + #scrollLeft, + value, + ), + returnValueForMissingStub: null, + ); + @override + int get scrollTop => (super.noSuchMethod( + Invocation.getter(#scrollTop), + returnValue: 0, + ) as int); + @override + set scrollTop(int? value) => super.noSuchMethod( + Invocation.setter( + #scrollTop, + value, + ), + returnValueForMissingStub: null, + ); + @override + int get scrollWidth => (super.noSuchMethod( + Invocation.getter(#scrollWidth), + returnValue: 0, + ) as int); + @override + String get contentEditable => (super.noSuchMethod( + Invocation.getter(#contentEditable), + returnValue: '', + ) as String); + @override + set contentEditable(String? value) => super.noSuchMethod( + Invocation.setter( + #contentEditable, + value, + ), + returnValueForMissingStub: null, + ); + @override + set dir(String? value) => super.noSuchMethod( + Invocation.setter( + #dir, + value, + ), + returnValueForMissingStub: null, + ); + @override + bool get draggable => (super.noSuchMethod( + Invocation.getter(#draggable), + returnValue: false, + ) as bool); + @override + set draggable(bool? value) => super.noSuchMethod( + Invocation.setter( + #draggable, + value, + ), + returnValueForMissingStub: null, + ); + @override + bool get hidden => (super.noSuchMethod( + Invocation.getter(#hidden), + returnValue: false, + ) as bool); + @override + set hidden(bool? value) => super.noSuchMethod( + Invocation.setter( + #hidden, + value, + ), + returnValueForMissingStub: null, + ); + @override + set inert(bool? value) => super.noSuchMethod( + Invocation.setter( + #inert, + value, + ), + returnValueForMissingStub: null, + ); + @override + set inputMode(String? value) => super.noSuchMethod( + Invocation.setter( + #inputMode, + value, + ), + returnValueForMissingStub: null, + ); + @override + set lang(String? value) => super.noSuchMethod( + Invocation.setter( + #lang, + value, + ), + returnValueForMissingStub: null, + ); + @override + set spellcheck(bool? value) => super.noSuchMethod( + Invocation.setter( + #spellcheck, + value, + ), + returnValueForMissingStub: null, + ); @override _i2.CssStyleDeclaration get style => (super.noSuchMethod( - Invocation.getter(#style), - returnValue: _FakeCssStyleDeclaration_5()) as _i2.CssStyleDeclaration); - @override - set tabIndex(int? value) => - super.noSuchMethod(Invocation.setter(#tabIndex, value), - returnValueForMissingStub: null); - @override - set title(String? value) => - super.noSuchMethod(Invocation.setter(#title, value), - returnValueForMissingStub: null); - @override - set translate(bool? value) => - super.noSuchMethod(Invocation.setter(#translate, value), - returnValueForMissingStub: null); - @override - String get className => - (super.noSuchMethod(Invocation.getter(#className), returnValue: '') - as String); - @override - set className(String? value) => - super.noSuchMethod(Invocation.setter(#className, value), - returnValueForMissingStub: null); - @override - int get clientHeight => - (super.noSuchMethod(Invocation.getter(#clientHeight), returnValue: 0) - as int); - @override - int get clientWidth => - (super.noSuchMethod(Invocation.getter(#clientWidth), returnValue: 0) - as int); - @override - String get id => - (super.noSuchMethod(Invocation.getter(#id), returnValue: '') as String); - @override - set id(String? value) => super.noSuchMethod(Invocation.setter(#id, value), - returnValueForMissingStub: null); - @override - set slot(String? value) => super.noSuchMethod(Invocation.setter(#slot, value), - returnValueForMissingStub: null); - @override - String get tagName => - (super.noSuchMethod(Invocation.getter(#tagName), returnValue: '') - as String); - @override - _i2.ElementStream<_i2.Event> get onAbort => - (super.noSuchMethod(Invocation.getter(#onAbort), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onBeforeCopy => - (super.noSuchMethod(Invocation.getter(#onBeforeCopy), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onBeforeCut => - (super.noSuchMethod(Invocation.getter(#onBeforeCut), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onBeforePaste => - (super.noSuchMethod(Invocation.getter(#onBeforePaste), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onBlur => - (super.noSuchMethod(Invocation.getter(#onBlur), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onCanPlay => - (super.noSuchMethod(Invocation.getter(#onCanPlay), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onCanPlayThrough => - (super.noSuchMethod(Invocation.getter(#onCanPlayThrough), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onChange => - (super.noSuchMethod(Invocation.getter(#onChange), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.MouseEvent> get onClick => - (super.noSuchMethod(Invocation.getter(#onClick), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onContextMenu => - (super.noSuchMethod(Invocation.getter(#onContextMenu), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.ClipboardEvent> get onCopy => - (super.noSuchMethod(Invocation.getter(#onCopy), - returnValue: _FakeElementStream_6<_i2.ClipboardEvent>()) - as _i2.ElementStream<_i2.ClipboardEvent>); - @override - _i2.ElementStream<_i2.ClipboardEvent> get onCut => - (super.noSuchMethod(Invocation.getter(#onCut), - returnValue: _FakeElementStream_6<_i2.ClipboardEvent>()) - as _i2.ElementStream<_i2.ClipboardEvent>); - @override - _i2.ElementStream<_i2.Event> get onDoubleClick => - (super.noSuchMethod(Invocation.getter(#onDoubleClick), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.MouseEvent> get onDrag => - (super.noSuchMethod(Invocation.getter(#onDrag), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onDragEnd => - (super.noSuchMethod(Invocation.getter(#onDragEnd), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onDragEnter => - (super.noSuchMethod(Invocation.getter(#onDragEnter), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onDragLeave => - (super.noSuchMethod(Invocation.getter(#onDragLeave), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onDragOver => - (super.noSuchMethod(Invocation.getter(#onDragOver), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onDragStart => - (super.noSuchMethod(Invocation.getter(#onDragStart), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onDrop => - (super.noSuchMethod(Invocation.getter(#onDrop), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.Event> get onDurationChange => - (super.noSuchMethod(Invocation.getter(#onDurationChange), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onEmptied => - (super.noSuchMethod(Invocation.getter(#onEmptied), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onEnded => - (super.noSuchMethod(Invocation.getter(#onEnded), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onError => - (super.noSuchMethod(Invocation.getter(#onError), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onFocus => - (super.noSuchMethod(Invocation.getter(#onFocus), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onInput => - (super.noSuchMethod(Invocation.getter(#onInput), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onInvalid => - (super.noSuchMethod(Invocation.getter(#onInvalid), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.KeyboardEvent> get onKeyDown => - (super.noSuchMethod(Invocation.getter(#onKeyDown), - returnValue: _FakeElementStream_6<_i2.KeyboardEvent>()) - as _i2.ElementStream<_i2.KeyboardEvent>); - @override - _i2.ElementStream<_i2.KeyboardEvent> get onKeyPress => - (super.noSuchMethod(Invocation.getter(#onKeyPress), - returnValue: _FakeElementStream_6<_i2.KeyboardEvent>()) - as _i2.ElementStream<_i2.KeyboardEvent>); - @override - _i2.ElementStream<_i2.KeyboardEvent> get onKeyUp => - (super.noSuchMethod(Invocation.getter(#onKeyUp), - returnValue: _FakeElementStream_6<_i2.KeyboardEvent>()) - as _i2.ElementStream<_i2.KeyboardEvent>); - @override - _i2.ElementStream<_i2.Event> get onLoad => - (super.noSuchMethod(Invocation.getter(#onLoad), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onLoadedData => - (super.noSuchMethod(Invocation.getter(#onLoadedData), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onLoadedMetadata => - (super.noSuchMethod(Invocation.getter(#onLoadedMetadata), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.MouseEvent> get onMouseDown => - (super.noSuchMethod(Invocation.getter(#onMouseDown), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onMouseEnter => - (super.noSuchMethod(Invocation.getter(#onMouseEnter), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onMouseLeave => - (super.noSuchMethod(Invocation.getter(#onMouseLeave), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onMouseMove => - (super.noSuchMethod(Invocation.getter(#onMouseMove), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onMouseOut => - (super.noSuchMethod(Invocation.getter(#onMouseOut), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onMouseOver => - (super.noSuchMethod(Invocation.getter(#onMouseOver), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.MouseEvent> get onMouseUp => - (super.noSuchMethod(Invocation.getter(#onMouseUp), - returnValue: _FakeElementStream_6<_i2.MouseEvent>()) - as _i2.ElementStream<_i2.MouseEvent>); - @override - _i2.ElementStream<_i2.WheelEvent> get onMouseWheel => - (super.noSuchMethod(Invocation.getter(#onMouseWheel), - returnValue: _FakeElementStream_6<_i2.WheelEvent>()) - as _i2.ElementStream<_i2.WheelEvent>); - @override - _i2.ElementStream<_i2.ClipboardEvent> get onPaste => - (super.noSuchMethod(Invocation.getter(#onPaste), - returnValue: _FakeElementStream_6<_i2.ClipboardEvent>()) - as _i2.ElementStream<_i2.ClipboardEvent>); - @override - _i2.ElementStream<_i2.Event> get onPause => - (super.noSuchMethod(Invocation.getter(#onPause), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onPlay => - (super.noSuchMethod(Invocation.getter(#onPlay), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onPlaying => - (super.noSuchMethod(Invocation.getter(#onPlaying), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onRateChange => - (super.noSuchMethod(Invocation.getter(#onRateChange), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onReset => - (super.noSuchMethod(Invocation.getter(#onReset), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onResize => - (super.noSuchMethod(Invocation.getter(#onResize), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onScroll => - (super.noSuchMethod(Invocation.getter(#onScroll), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onSearch => - (super.noSuchMethod(Invocation.getter(#onSearch), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onSeeked => - (super.noSuchMethod(Invocation.getter(#onSeeked), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onSeeking => - (super.noSuchMethod(Invocation.getter(#onSeeking), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onSelect => - (super.noSuchMethod(Invocation.getter(#onSelect), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onSelectStart => - (super.noSuchMethod(Invocation.getter(#onSelectStart), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onStalled => - (super.noSuchMethod(Invocation.getter(#onStalled), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onSubmit => - (super.noSuchMethod(Invocation.getter(#onSubmit), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onSuspend => - (super.noSuchMethod(Invocation.getter(#onSuspend), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onTimeUpdate => - (super.noSuchMethod(Invocation.getter(#onTimeUpdate), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.TouchEvent> get onTouchCancel => - (super.noSuchMethod(Invocation.getter(#onTouchCancel), - returnValue: _FakeElementStream_6<_i2.TouchEvent>()) - as _i2.ElementStream<_i2.TouchEvent>); - @override - _i2.ElementStream<_i2.TouchEvent> get onTouchEnd => - (super.noSuchMethod(Invocation.getter(#onTouchEnd), - returnValue: _FakeElementStream_6<_i2.TouchEvent>()) - as _i2.ElementStream<_i2.TouchEvent>); - @override - _i2.ElementStream<_i2.TouchEvent> get onTouchEnter => - (super.noSuchMethod(Invocation.getter(#onTouchEnter), - returnValue: _FakeElementStream_6<_i2.TouchEvent>()) - as _i2.ElementStream<_i2.TouchEvent>); - @override - _i2.ElementStream<_i2.TouchEvent> get onTouchLeave => - (super.noSuchMethod(Invocation.getter(#onTouchLeave), - returnValue: _FakeElementStream_6<_i2.TouchEvent>()) - as _i2.ElementStream<_i2.TouchEvent>); - @override - _i2.ElementStream<_i2.TouchEvent> get onTouchMove => - (super.noSuchMethod(Invocation.getter(#onTouchMove), - returnValue: _FakeElementStream_6<_i2.TouchEvent>()) - as _i2.ElementStream<_i2.TouchEvent>); - @override - _i2.ElementStream<_i2.TouchEvent> get onTouchStart => - (super.noSuchMethod(Invocation.getter(#onTouchStart), - returnValue: _FakeElementStream_6<_i2.TouchEvent>()) - as _i2.ElementStream<_i2.TouchEvent>); + Invocation.getter(#style), + returnValue: _FakeCssStyleDeclaration_5( + this, + Invocation.getter(#style), + ), + ) as _i2.CssStyleDeclaration); + @override + set tabIndex(int? value) => super.noSuchMethod( + Invocation.setter( + #tabIndex, + value, + ), + returnValueForMissingStub: null, + ); + @override + set title(String? value) => super.noSuchMethod( + Invocation.setter( + #title, + value, + ), + returnValueForMissingStub: null, + ); + @override + set translate(bool? value) => super.noSuchMethod( + Invocation.setter( + #translate, + value, + ), + returnValueForMissingStub: null, + ); + @override + String get className => (super.noSuchMethod( + Invocation.getter(#className), + returnValue: '', + ) as String); + @override + set className(String? value) => super.noSuchMethod( + Invocation.setter( + #className, + value, + ), + returnValueForMissingStub: null, + ); + @override + int get clientHeight => (super.noSuchMethod( + Invocation.getter(#clientHeight), + returnValue: 0, + ) as int); + @override + int get clientWidth => (super.noSuchMethod( + Invocation.getter(#clientWidth), + returnValue: 0, + ) as int); + @override + String get id => (super.noSuchMethod( + Invocation.getter(#id), + returnValue: '', + ) as String); + @override + set id(String? value) => super.noSuchMethod( + Invocation.setter( + #id, + value, + ), + returnValueForMissingStub: null, + ); + @override + set slot(String? value) => super.noSuchMethod( + Invocation.setter( + #slot, + value, + ), + returnValueForMissingStub: null, + ); + @override + String get tagName => (super.noSuchMethod( + Invocation.getter(#tagName), + returnValue: '', + ) as String); + @override + _i2.ElementStream<_i2.Event> get onAbort => (super.noSuchMethod( + Invocation.getter(#onAbort), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onAbort), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onBeforeCopy => (super.noSuchMethod( + Invocation.getter(#onBeforeCopy), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onBeforeCopy), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onBeforeCut => (super.noSuchMethod( + Invocation.getter(#onBeforeCut), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onBeforeCut), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onBeforePaste => (super.noSuchMethod( + Invocation.getter(#onBeforePaste), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onBeforePaste), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onBlur => (super.noSuchMethod( + Invocation.getter(#onBlur), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onBlur), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onCanPlay => (super.noSuchMethod( + Invocation.getter(#onCanPlay), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onCanPlay), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onCanPlayThrough => (super.noSuchMethod( + Invocation.getter(#onCanPlayThrough), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onCanPlayThrough), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onChange => (super.noSuchMethod( + Invocation.getter(#onChange), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onChange), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.MouseEvent> get onClick => (super.noSuchMethod( + Invocation.getter(#onClick), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onClick), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onContextMenu => (super.noSuchMethod( + Invocation.getter(#onContextMenu), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onContextMenu), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.ClipboardEvent> get onCopy => (super.noSuchMethod( + Invocation.getter(#onCopy), + returnValue: _FakeElementStream_6<_i2.ClipboardEvent>( + this, + Invocation.getter(#onCopy), + ), + ) as _i2.ElementStream<_i2.ClipboardEvent>); + @override + _i2.ElementStream<_i2.ClipboardEvent> get onCut => (super.noSuchMethod( + Invocation.getter(#onCut), + returnValue: _FakeElementStream_6<_i2.ClipboardEvent>( + this, + Invocation.getter(#onCut), + ), + ) as _i2.ElementStream<_i2.ClipboardEvent>); + @override + _i2.ElementStream<_i2.Event> get onDoubleClick => (super.noSuchMethod( + Invocation.getter(#onDoubleClick), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onDoubleClick), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.MouseEvent> get onDrag => (super.noSuchMethod( + Invocation.getter(#onDrag), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onDrag), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onDragEnd => (super.noSuchMethod( + Invocation.getter(#onDragEnd), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onDragEnd), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onDragEnter => (super.noSuchMethod( + Invocation.getter(#onDragEnter), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onDragEnter), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onDragLeave => (super.noSuchMethod( + Invocation.getter(#onDragLeave), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onDragLeave), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onDragOver => (super.noSuchMethod( + Invocation.getter(#onDragOver), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onDragOver), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onDragStart => (super.noSuchMethod( + Invocation.getter(#onDragStart), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onDragStart), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onDrop => (super.noSuchMethod( + Invocation.getter(#onDrop), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onDrop), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.Event> get onDurationChange => (super.noSuchMethod( + Invocation.getter(#onDurationChange), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onDurationChange), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onEmptied => (super.noSuchMethod( + Invocation.getter(#onEmptied), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onEmptied), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onEnded => (super.noSuchMethod( + Invocation.getter(#onEnded), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onEnded), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onError => (super.noSuchMethod( + Invocation.getter(#onError), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onError), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onFocus => (super.noSuchMethod( + Invocation.getter(#onFocus), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onFocus), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onInput => (super.noSuchMethod( + Invocation.getter(#onInput), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onInput), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onInvalid => (super.noSuchMethod( + Invocation.getter(#onInvalid), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onInvalid), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.KeyboardEvent> get onKeyDown => (super.noSuchMethod( + Invocation.getter(#onKeyDown), + returnValue: _FakeElementStream_6<_i2.KeyboardEvent>( + this, + Invocation.getter(#onKeyDown), + ), + ) as _i2.ElementStream<_i2.KeyboardEvent>); + @override + _i2.ElementStream<_i2.KeyboardEvent> get onKeyPress => (super.noSuchMethod( + Invocation.getter(#onKeyPress), + returnValue: _FakeElementStream_6<_i2.KeyboardEvent>( + this, + Invocation.getter(#onKeyPress), + ), + ) as _i2.ElementStream<_i2.KeyboardEvent>); + @override + _i2.ElementStream<_i2.KeyboardEvent> get onKeyUp => (super.noSuchMethod( + Invocation.getter(#onKeyUp), + returnValue: _FakeElementStream_6<_i2.KeyboardEvent>( + this, + Invocation.getter(#onKeyUp), + ), + ) as _i2.ElementStream<_i2.KeyboardEvent>); + @override + _i2.ElementStream<_i2.Event> get onLoad => (super.noSuchMethod( + Invocation.getter(#onLoad), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onLoad), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onLoadedData => (super.noSuchMethod( + Invocation.getter(#onLoadedData), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onLoadedData), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onLoadedMetadata => (super.noSuchMethod( + Invocation.getter(#onLoadedMetadata), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onLoadedMetadata), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.MouseEvent> get onMouseDown => (super.noSuchMethod( + Invocation.getter(#onMouseDown), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onMouseDown), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onMouseEnter => (super.noSuchMethod( + Invocation.getter(#onMouseEnter), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onMouseEnter), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onMouseLeave => (super.noSuchMethod( + Invocation.getter(#onMouseLeave), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onMouseLeave), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onMouseMove => (super.noSuchMethod( + Invocation.getter(#onMouseMove), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onMouseMove), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onMouseOut => (super.noSuchMethod( + Invocation.getter(#onMouseOut), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onMouseOut), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onMouseOver => (super.noSuchMethod( + Invocation.getter(#onMouseOver), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onMouseOver), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.MouseEvent> get onMouseUp => (super.noSuchMethod( + Invocation.getter(#onMouseUp), + returnValue: _FakeElementStream_6<_i2.MouseEvent>( + this, + Invocation.getter(#onMouseUp), + ), + ) as _i2.ElementStream<_i2.MouseEvent>); + @override + _i2.ElementStream<_i2.WheelEvent> get onMouseWheel => (super.noSuchMethod( + Invocation.getter(#onMouseWheel), + returnValue: _FakeElementStream_6<_i2.WheelEvent>( + this, + Invocation.getter(#onMouseWheel), + ), + ) as _i2.ElementStream<_i2.WheelEvent>); + @override + _i2.ElementStream<_i2.ClipboardEvent> get onPaste => (super.noSuchMethod( + Invocation.getter(#onPaste), + returnValue: _FakeElementStream_6<_i2.ClipboardEvent>( + this, + Invocation.getter(#onPaste), + ), + ) as _i2.ElementStream<_i2.ClipboardEvent>); + @override + _i2.ElementStream<_i2.Event> get onPause => (super.noSuchMethod( + Invocation.getter(#onPause), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onPause), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onPlay => (super.noSuchMethod( + Invocation.getter(#onPlay), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onPlay), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onPlaying => (super.noSuchMethod( + Invocation.getter(#onPlaying), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onPlaying), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onRateChange => (super.noSuchMethod( + Invocation.getter(#onRateChange), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onRateChange), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onReset => (super.noSuchMethod( + Invocation.getter(#onReset), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onReset), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onResize => (super.noSuchMethod( + Invocation.getter(#onResize), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onResize), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onScroll => (super.noSuchMethod( + Invocation.getter(#onScroll), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onScroll), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onSearch => (super.noSuchMethod( + Invocation.getter(#onSearch), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onSearch), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onSeeked => (super.noSuchMethod( + Invocation.getter(#onSeeked), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onSeeked), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onSeeking => (super.noSuchMethod( + Invocation.getter(#onSeeking), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onSeeking), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onSelect => (super.noSuchMethod( + Invocation.getter(#onSelect), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onSelect), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onSelectStart => (super.noSuchMethod( + Invocation.getter(#onSelectStart), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onSelectStart), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onStalled => (super.noSuchMethod( + Invocation.getter(#onStalled), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onStalled), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onSubmit => (super.noSuchMethod( + Invocation.getter(#onSubmit), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onSubmit), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onSuspend => (super.noSuchMethod( + Invocation.getter(#onSuspend), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onSuspend), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onTimeUpdate => (super.noSuchMethod( + Invocation.getter(#onTimeUpdate), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onTimeUpdate), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.TouchEvent> get onTouchCancel => (super.noSuchMethod( + Invocation.getter(#onTouchCancel), + returnValue: _FakeElementStream_6<_i2.TouchEvent>( + this, + Invocation.getter(#onTouchCancel), + ), + ) as _i2.ElementStream<_i2.TouchEvent>); + @override + _i2.ElementStream<_i2.TouchEvent> get onTouchEnd => (super.noSuchMethod( + Invocation.getter(#onTouchEnd), + returnValue: _FakeElementStream_6<_i2.TouchEvent>( + this, + Invocation.getter(#onTouchEnd), + ), + ) as _i2.ElementStream<_i2.TouchEvent>); + @override + _i2.ElementStream<_i2.TouchEvent> get onTouchEnter => (super.noSuchMethod( + Invocation.getter(#onTouchEnter), + returnValue: _FakeElementStream_6<_i2.TouchEvent>( + this, + Invocation.getter(#onTouchEnter), + ), + ) as _i2.ElementStream<_i2.TouchEvent>); + @override + _i2.ElementStream<_i2.TouchEvent> get onTouchLeave => (super.noSuchMethod( + Invocation.getter(#onTouchLeave), + returnValue: _FakeElementStream_6<_i2.TouchEvent>( + this, + Invocation.getter(#onTouchLeave), + ), + ) as _i2.ElementStream<_i2.TouchEvent>); + @override + _i2.ElementStream<_i2.TouchEvent> get onTouchMove => (super.noSuchMethod( + Invocation.getter(#onTouchMove), + returnValue: _FakeElementStream_6<_i2.TouchEvent>( + this, + Invocation.getter(#onTouchMove), + ), + ) as _i2.ElementStream<_i2.TouchEvent>); + @override + _i2.ElementStream<_i2.TouchEvent> get onTouchStart => (super.noSuchMethod( + Invocation.getter(#onTouchStart), + returnValue: _FakeElementStream_6<_i2.TouchEvent>( + this, + Invocation.getter(#onTouchStart), + ), + ) as _i2.ElementStream<_i2.TouchEvent>); @override _i2.ElementStream<_i2.TransitionEvent> get onTransitionEnd => - (super.noSuchMethod(Invocation.getter(#onTransitionEnd), - returnValue: _FakeElementStream_6<_i2.TransitionEvent>()) - as _i2.ElementStream<_i2.TransitionEvent>); - @override - _i2.ElementStream<_i2.Event> get onVolumeChange => - (super.noSuchMethod(Invocation.getter(#onVolumeChange), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onWaiting => - (super.noSuchMethod(Invocation.getter(#onWaiting), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onFullscreenChange => - (super.noSuchMethod(Invocation.getter(#onFullscreenChange), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.Event> get onFullscreenError => - (super.noSuchMethod(Invocation.getter(#onFullscreenError), - returnValue: _FakeElementStream_6<_i2.Event>()) - as _i2.ElementStream<_i2.Event>); - @override - _i2.ElementStream<_i2.WheelEvent> get onWheel => - (super.noSuchMethod(Invocation.getter(#onWheel), - returnValue: _FakeElementStream_6<_i2.WheelEvent>()) - as _i2.ElementStream<_i2.WheelEvent>); - @override - List<_i2.Node> get nodes => - (super.noSuchMethod(Invocation.getter(#nodes), returnValue: <_i2.Node>[]) - as List<_i2.Node>); - @override - set nodes(Iterable<_i2.Node>? value) => - super.noSuchMethod(Invocation.setter(#nodes, value), - returnValueForMissingStub: null); - @override - List<_i2.Node> get childNodes => - (super.noSuchMethod(Invocation.getter(#childNodes), - returnValue: <_i2.Node>[]) as List<_i2.Node>); - @override - int get nodeType => - (super.noSuchMethod(Invocation.getter(#nodeType), returnValue: 0) as int); - @override - set text(String? value) => super.noSuchMethod(Invocation.setter(#text, value), - returnValueForMissingStub: null); - @override - String? getAttribute(String? name) => - (super.noSuchMethod(Invocation.method(#getAttribute, [name])) as String?); - @override - String? getAttributeNS(String? namespaceURI, String? name) => (super.noSuchMethod( - Invocation.method(#getAttributeNS, [namespaceURI, name])) as String?); - @override - bool hasAttribute(String? name) => - (super.noSuchMethod(Invocation.method(#hasAttribute, [name]), - returnValue: false) as bool); - @override - bool hasAttributeNS(String? namespaceURI, String? name) => (super - .noSuchMethod(Invocation.method(#hasAttributeNS, [namespaceURI, name]), - returnValue: false) as bool); - @override - void removeAttribute(String? name) => - super.noSuchMethod(Invocation.method(#removeAttribute, [name]), - returnValueForMissingStub: null); - @override - void removeAttributeNS(String? namespaceURI, String? name) => super - .noSuchMethod(Invocation.method(#removeAttributeNS, [namespaceURI, name]), - returnValueForMissingStub: null); - @override - void setAttribute(String? name, Object? value) => - super.noSuchMethod(Invocation.method(#setAttribute, [name, value]), - returnValueForMissingStub: null); - @override - void setAttributeNS(String? namespaceURI, String? name, Object? value) => + Invocation.getter(#onTransitionEnd), + returnValue: _FakeElementStream_6<_i2.TransitionEvent>( + this, + Invocation.getter(#onTransitionEnd), + ), + ) as _i2.ElementStream<_i2.TransitionEvent>); + @override + _i2.ElementStream<_i2.Event> get onVolumeChange => (super.noSuchMethod( + Invocation.getter(#onVolumeChange), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onVolumeChange), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onWaiting => (super.noSuchMethod( + Invocation.getter(#onWaiting), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onWaiting), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onFullscreenChange => (super.noSuchMethod( + Invocation.getter(#onFullscreenChange), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onFullscreenChange), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.Event> get onFullscreenError => (super.noSuchMethod( + Invocation.getter(#onFullscreenError), + returnValue: _FakeElementStream_6<_i2.Event>( + this, + Invocation.getter(#onFullscreenError), + ), + ) as _i2.ElementStream<_i2.Event>); + @override + _i2.ElementStream<_i2.WheelEvent> get onWheel => (super.noSuchMethod( + Invocation.getter(#onWheel), + returnValue: _FakeElementStream_6<_i2.WheelEvent>( + this, + Invocation.getter(#onWheel), + ), + ) as _i2.ElementStream<_i2.WheelEvent>); + @override + List<_i2.Node> get nodes => (super.noSuchMethod( + Invocation.getter(#nodes), + returnValue: <_i2.Node>[], + ) as List<_i2.Node>); + @override + set nodes(Iterable<_i2.Node>? value) => super.noSuchMethod( + Invocation.setter( + #nodes, + value, + ), + returnValueForMissingStub: null, + ); + @override + List<_i2.Node> get childNodes => (super.noSuchMethod( + Invocation.getter(#childNodes), + returnValue: <_i2.Node>[], + ) as List<_i2.Node>); + @override + int get nodeType => (super.noSuchMethod( + Invocation.getter(#nodeType), + returnValue: 0, + ) as int); + @override + set text(String? value) => super.noSuchMethod( + Invocation.setter( + #text, + value, + ), + returnValueForMissingStub: null, + ); + @override + String? getAttribute(String? name) => (super.noSuchMethod(Invocation.method( + #getAttribute, + [name], + )) as String?); + @override + String? getAttributeNS( + String? namespaceURI, + String? name, + ) => + (super.noSuchMethod(Invocation.method( + #getAttributeNS, + [ + namespaceURI, + name, + ], + )) as String?); + @override + bool hasAttribute(String? name) => (super.noSuchMethod( + Invocation.method( + #hasAttribute, + [name], + ), + returnValue: false, + ) as bool); + @override + bool hasAttributeNS( + String? namespaceURI, + String? name, + ) => + (super.noSuchMethod( + Invocation.method( + #hasAttributeNS, + [ + namespaceURI, + name, + ], + ), + returnValue: false, + ) as bool); + @override + void removeAttribute(String? name) => super.noSuchMethod( + Invocation.method( + #removeAttribute, + [name], + ), + returnValueForMissingStub: null, + ); + @override + void removeAttributeNS( + String? namespaceURI, + String? name, + ) => + super.noSuchMethod( + Invocation.method( + #removeAttributeNS, + [ + namespaceURI, + name, + ], + ), + returnValueForMissingStub: null, + ); + @override + void setAttribute( + String? name, + Object? value, + ) => + super.noSuchMethod( + Invocation.method( + #setAttribute, + [ + name, + value, + ], + ), + returnValueForMissingStub: null, + ); + @override + void setAttributeNS( + String? namespaceURI, + String? name, + Object? value, + ) => super.noSuchMethod( - Invocation.method(#setAttributeNS, [namespaceURI, name, value]), - returnValueForMissingStub: null); + Invocation.method( + #setAttributeNS, + [ + namespaceURI, + name, + value, + ], + ), + returnValueForMissingStub: null, + ); @override _i2.ElementList querySelectorAll( String? selectors) => - (super.noSuchMethod(Invocation.method(#querySelectorAll, [selectors]), - returnValue: _FakeElementList_7()) as _i2.ElementList); + (super.noSuchMethod( + Invocation.method( + #querySelectorAll, + [selectors], + ), + returnValue: _FakeElementList_7( + this, + Invocation.method( + #querySelectorAll, + [selectors], + ), + ), + ) as _i2.ElementList); @override _i6.Future<_i2.ScrollState> setApplyScroll(String? nativeScrollBehavior) => (super.noSuchMethod( - Invocation.method(#setApplyScroll, [nativeScrollBehavior]), - returnValue: Future<_i2.ScrollState>.value(_FakeScrollState_8())) - as _i6.Future<_i2.ScrollState>); + Invocation.method( + #setApplyScroll, + [nativeScrollBehavior], + ), + returnValue: _i6.Future<_i2.ScrollState>.value(_FakeScrollState_8( + this, + Invocation.method( + #setApplyScroll, + [nativeScrollBehavior], + ), + )), + ) as _i6.Future<_i2.ScrollState>); @override _i6.Future<_i2.ScrollState> setDistributeScroll( String? nativeScrollBehavior) => (super.noSuchMethod( - Invocation.method(#setDistributeScroll, [nativeScrollBehavior]), - returnValue: Future<_i2.ScrollState>.value(_FakeScrollState_8())) - as _i6.Future<_i2.ScrollState>); + Invocation.method( + #setDistributeScroll, + [nativeScrollBehavior], + ), + returnValue: _i6.Future<_i2.ScrollState>.value(_FakeScrollState_8( + this, + Invocation.method( + #setDistributeScroll, + [nativeScrollBehavior], + ), + )), + ) as _i6.Future<_i2.ScrollState>); @override - Map getNamespacedAttributes(String? namespace) => (super - .noSuchMethod(Invocation.method(#getNamespacedAttributes, [namespace]), - returnValue: {}) as Map); + Map getNamespacedAttributes(String? namespace) => + (super.noSuchMethod( + Invocation.method( + #getNamespacedAttributes, + [namespace], + ), + returnValue: {}, + ) as Map); @override _i2.CssStyleDeclaration getComputedStyle([String? pseudoElement]) => - (super.noSuchMethod(Invocation.method(#getComputedStyle, [pseudoElement]), - returnValue: _FakeCssStyleDeclaration_5()) - as _i2.CssStyleDeclaration); - @override - void appendText(String? text) => - super.noSuchMethod(Invocation.method(#appendText, [text]), - returnValueForMissingStub: null); - @override - void appendHtml(String? text, - {_i2.NodeValidator? validator, - _i2.NodeTreeSanitizer? treeSanitizer}) => + (super.noSuchMethod( + Invocation.method( + #getComputedStyle, + [pseudoElement], + ), + returnValue: _FakeCssStyleDeclaration_5( + this, + Invocation.method( + #getComputedStyle, + [pseudoElement], + ), + ), + ) as _i2.CssStyleDeclaration); + @override + void appendText(String? text) => super.noSuchMethod( + Invocation.method( + #appendText, + [text], + ), + returnValueForMissingStub: null, + ); + @override + void appendHtml( + String? text, { + _i2.NodeValidator? validator, + _i2.NodeTreeSanitizer? treeSanitizer, + }) => super.noSuchMethod( - Invocation.method(#appendHtml, [text], - {#validator: validator, #treeSanitizer: treeSanitizer}), - returnValueForMissingStub: null); - @override - void attached() => super.noSuchMethod(Invocation.method(#attached, []), - returnValueForMissingStub: null); - @override - void detached() => super.noSuchMethod(Invocation.method(#detached, []), - returnValueForMissingStub: null); - @override - void enteredView() => super.noSuchMethod(Invocation.method(#enteredView, []), - returnValueForMissingStub: null); - @override - List<_i3.Rectangle> getClientRects() => - (super.noSuchMethod(Invocation.method(#getClientRects, []), - returnValue: <_i3.Rectangle>[]) as List<_i3.Rectangle>); - @override - void leftView() => super.noSuchMethod(Invocation.method(#leftView, []), - returnValueForMissingStub: null); - @override - _i2.Animation animate(Iterable>? frames, - [dynamic timing]) => - (super.noSuchMethod(Invocation.method(#animate, [frames, timing]), - returnValue: _FakeAnimation_9()) as _i2.Animation); - @override - void attributeChanged(String? name, String? oldValue, String? newValue) => + Invocation.method( + #appendHtml, + [text], + { + #validator: validator, + #treeSanitizer: treeSanitizer, + }, + ), + returnValueForMissingStub: null, + ); + @override + void attached() => super.noSuchMethod( + Invocation.method( + #attached, + [], + ), + returnValueForMissingStub: null, + ); + @override + void detached() => super.noSuchMethod( + Invocation.method( + #detached, + [], + ), + returnValueForMissingStub: null, + ); + @override + void enteredView() => super.noSuchMethod( + Invocation.method( + #enteredView, + [], + ), + returnValueForMissingStub: null, + ); + @override + List<_i3.Rectangle> getClientRects() => (super.noSuchMethod( + Invocation.method( + #getClientRects, + [], + ), + returnValue: <_i3.Rectangle>[], + ) as List<_i3.Rectangle>); + @override + void leftView() => super.noSuchMethod( + Invocation.method( + #leftView, + [], + ), + returnValueForMissingStub: null, + ); + @override + _i2.Animation animate( + Iterable>? frames, [ + dynamic timing, + ]) => + (super.noSuchMethod( + Invocation.method( + #animate, + [ + frames, + timing, + ], + ), + returnValue: _FakeAnimation_9( + this, + Invocation.method( + #animate, + [ + frames, + timing, + ], + ), + ), + ) as _i2.Animation); + @override + void attributeChanged( + String? name, + String? oldValue, + String? newValue, + ) => super.noSuchMethod( - Invocation.method(#attributeChanged, [name, oldValue, newValue]), - returnValueForMissingStub: null); - @override - String toString() => super.toString(); - @override - void scrollIntoView([_i2.ScrollAlignment? alignment]) => - super.noSuchMethod(Invocation.method(#scrollIntoView, [alignment]), - returnValueForMissingStub: null); - @override - void insertAdjacentText(String? where, String? text) => - super.noSuchMethod(Invocation.method(#insertAdjacentText, [where, text]), - returnValueForMissingStub: null); - @override - void insertAdjacentHtml(String? where, String? html, - {_i2.NodeValidator? validator, - _i2.NodeTreeSanitizer? treeSanitizer}) => + Invocation.method( + #attributeChanged, + [ + name, + oldValue, + newValue, + ], + ), + returnValueForMissingStub: null, + ); + @override + void scrollIntoView([_i2.ScrollAlignment? alignment]) => super.noSuchMethod( + Invocation.method( + #scrollIntoView, + [alignment], + ), + returnValueForMissingStub: null, + ); + @override + void insertAdjacentText( + String? where, + String? text, + ) => super.noSuchMethod( - Invocation.method(#insertAdjacentHtml, [where, html], - {#validator: validator, #treeSanitizer: treeSanitizer}), - returnValueForMissingStub: null); - @override - _i2.Element insertAdjacentElement(String? where, _i2.Element? element) => + Invocation.method( + #insertAdjacentText, + [ + where, + text, + ], + ), + returnValueForMissingStub: null, + ); + @override + void insertAdjacentHtml( + String? where, + String? html, { + _i2.NodeValidator? validator, + _i2.NodeTreeSanitizer? treeSanitizer, + }) => + super.noSuchMethod( + Invocation.method( + #insertAdjacentHtml, + [ + where, + html, + ], + { + #validator: validator, + #treeSanitizer: treeSanitizer, + }, + ), + returnValueForMissingStub: null, + ); + @override + _i2.Element insertAdjacentElement( + String? where, + _i2.Element? element, + ) => (super.noSuchMethod( - Invocation.method(#insertAdjacentElement, [where, element]), - returnValue: _FakeElement_10()) as _i2.Element); - @override - bool matches(String? selectors) => - (super.noSuchMethod(Invocation.method(#matches, [selectors]), - returnValue: false) as bool); - @override - bool matchesWithAncestors(String? selectors) => - (super.noSuchMethod(Invocation.method(#matchesWithAncestors, [selectors]), - returnValue: false) as bool); - @override - _i2.ShadowRoot createShadowRoot() => - (super.noSuchMethod(Invocation.method(#createShadowRoot, []), - returnValue: _FakeShadowRoot_11()) as _i2.ShadowRoot); - @override - _i3.Point offsetTo(_i2.Element? parent) => - (super.noSuchMethod(Invocation.method(#offsetTo, [parent]), - returnValue: _FakePoint_3()) as _i3.Point); - @override - _i2.DocumentFragment createFragment(String? html, - {_i2.NodeValidator? validator, - _i2.NodeTreeSanitizer? treeSanitizer}) => + Invocation.method( + #insertAdjacentElement, + [ + where, + element, + ], + ), + returnValue: _FakeElement_10( + this, + Invocation.method( + #insertAdjacentElement, + [ + where, + element, + ], + ), + ), + ) as _i2.Element); + @override + bool matches(String? selectors) => (super.noSuchMethod( + Invocation.method( + #matches, + [selectors], + ), + returnValue: false, + ) as bool); + @override + bool matchesWithAncestors(String? selectors) => (super.noSuchMethod( + Invocation.method( + #matchesWithAncestors, + [selectors], + ), + returnValue: false, + ) as bool); + @override + _i2.ShadowRoot createShadowRoot() => (super.noSuchMethod( + Invocation.method( + #createShadowRoot, + [], + ), + returnValue: _FakeShadowRoot_11( + this, + Invocation.method( + #createShadowRoot, + [], + ), + ), + ) as _i2.ShadowRoot); + @override + _i3.Point offsetTo(_i2.Element? parent) => (super.noSuchMethod( + Invocation.method( + #offsetTo, + [parent], + ), + returnValue: _FakePoint_3( + this, + Invocation.method( + #offsetTo, + [parent], + ), + ), + ) as _i3.Point); + @override + _i2.DocumentFragment createFragment( + String? html, { + _i2.NodeValidator? validator, + _i2.NodeTreeSanitizer? treeSanitizer, + }) => (super.noSuchMethod( - Invocation.method(#createFragment, [html], - {#validator: validator, #treeSanitizer: treeSanitizer}), - returnValue: _FakeDocumentFragment_12()) as _i2.DocumentFragment); - @override - void setInnerHtml(String? html, - {_i2.NodeValidator? validator, - _i2.NodeTreeSanitizer? treeSanitizer}) => + Invocation.method( + #createFragment, + [html], + { + #validator: validator, + #treeSanitizer: treeSanitizer, + }, + ), + returnValue: _FakeDocumentFragment_12( + this, + Invocation.method( + #createFragment, + [html], + { + #validator: validator, + #treeSanitizer: treeSanitizer, + }, + ), + ), + ) as _i2.DocumentFragment); + @override + void setInnerHtml( + String? html, { + _i2.NodeValidator? validator, + _i2.NodeTreeSanitizer? treeSanitizer, + }) => super.noSuchMethod( - Invocation.method(#setInnerHtml, [html], - {#validator: validator, #treeSanitizer: treeSanitizer}), - returnValueForMissingStub: null); - @override - void blur() => super.noSuchMethod(Invocation.method(#blur, []), - returnValueForMissingStub: null); - @override - void click() => super.noSuchMethod(Invocation.method(#click, []), - returnValueForMissingStub: null); - @override - void focus() => super.noSuchMethod(Invocation.method(#focus, []), - returnValueForMissingStub: null); + Invocation.method( + #setInnerHtml, + [html], + { + #validator: validator, + #treeSanitizer: treeSanitizer, + }, + ), + returnValueForMissingStub: null, + ); + @override + _i6.Future requestFullscreen([Map? options]) => + (super.noSuchMethod( + Invocation.method( + #requestFullscreen, + [options], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + @override + void blur() => super.noSuchMethod( + Invocation.method( + #blur, + [], + ), + returnValueForMissingStub: null, + ); + @override + void click() => super.noSuchMethod( + Invocation.method( + #click, + [], + ), + returnValueForMissingStub: null, + ); + @override + void focus() => super.noSuchMethod( + Invocation.method( + #focus, + [], + ), + returnValueForMissingStub: null, + ); @override _i2.ShadowRoot attachShadow(Map? shadowRootInitDict) => (super.noSuchMethod( - Invocation.method(#attachShadow, [shadowRootInitDict]), - returnValue: _FakeShadowRoot_11()) as _i2.ShadowRoot); + Invocation.method( + #attachShadow, + [shadowRootInitDict], + ), + returnValue: _FakeShadowRoot_11( + this, + Invocation.method( + #attachShadow, + [shadowRootInitDict], + ), + ), + ) as _i2.ShadowRoot); @override _i2.Element? closest(String? selectors) => - (super.noSuchMethod(Invocation.method(#closest, [selectors])) - as _i2.Element?); - @override - List<_i2.Animation> getAnimations() => - (super.noSuchMethod(Invocation.method(#getAnimations, []), - returnValue: <_i2.Animation>[]) as List<_i2.Animation>); - @override - List getAttributeNames() => - (super.noSuchMethod(Invocation.method(#getAttributeNames, []), - returnValue: []) as List); - @override - _i3.Rectangle getBoundingClientRect() => - (super.noSuchMethod(Invocation.method(#getBoundingClientRect, []), - returnValue: _FakeRectangle_1()) as _i3.Rectangle); - @override - List<_i2.Node> getDestinationInsertionPoints() => - (super.noSuchMethod(Invocation.method(#getDestinationInsertionPoints, []), - returnValue: <_i2.Node>[]) as List<_i2.Node>); - @override - List<_i2.Node> getElementsByClassName(String? classNames) => (super - .noSuchMethod(Invocation.method(#getElementsByClassName, [classNames]), - returnValue: <_i2.Node>[]) as List<_i2.Node>); - @override - bool hasPointerCapture(int? pointerId) => - (super.noSuchMethod(Invocation.method(#hasPointerCapture, [pointerId]), - returnValue: false) as bool); - @override - void releasePointerCapture(int? pointerId) => - super.noSuchMethod(Invocation.method(#releasePointerCapture, [pointerId]), - returnValueForMissingStub: null); - @override - void requestPointerLock() => - super.noSuchMethod(Invocation.method(#requestPointerLock, []), - returnValueForMissingStub: null); - @override - void scroll([dynamic options_OR_x, num? y]) => - super.noSuchMethod(Invocation.method(#scroll, [options_OR_x, y]), - returnValueForMissingStub: null); - @override - void scrollBy([dynamic options_OR_x, num? y]) => - super.noSuchMethod(Invocation.method(#scrollBy, [options_OR_x, y]), - returnValueForMissingStub: null); - @override - void scrollTo([dynamic options_OR_x, num? y]) => - super.noSuchMethod(Invocation.method(#scrollTo, [options_OR_x, y]), - returnValueForMissingStub: null); - @override - void setPointerCapture(int? pointerId) => - super.noSuchMethod(Invocation.method(#setPointerCapture, [pointerId]), - returnValueForMissingStub: null); - // TODO(ditman): Undo this manual change when the return type change to - // Future has propagated to stable. - /*@override - void requestFullscreen() => - super.noSuchMethod(Invocation.method(#requestFullscreen, []), - returnValueForMissingStub: null);*/ - @override - void after(Object? nodes) => - super.noSuchMethod(Invocation.method(#after, [nodes]), - returnValueForMissingStub: null); - @override - void before(Object? nodes) => - super.noSuchMethod(Invocation.method(#before, [nodes]), - returnValueForMissingStub: null); + (super.noSuchMethod(Invocation.method( + #closest, + [selectors], + )) as _i2.Element?); + @override + List<_i2.Animation> getAnimations() => (super.noSuchMethod( + Invocation.method( + #getAnimations, + [], + ), + returnValue: <_i2.Animation>[], + ) as List<_i2.Animation>); + @override + List getAttributeNames() => (super.noSuchMethod( + Invocation.method( + #getAttributeNames, + [], + ), + returnValue: [], + ) as List); + @override + _i3.Rectangle getBoundingClientRect() => (super.noSuchMethod( + Invocation.method( + #getBoundingClientRect, + [], + ), + returnValue: _FakeRectangle_1( + this, + Invocation.method( + #getBoundingClientRect, + [], + ), + ), + ) as _i3.Rectangle); + @override + List<_i2.Node> getDestinationInsertionPoints() => (super.noSuchMethod( + Invocation.method( + #getDestinationInsertionPoints, + [], + ), + returnValue: <_i2.Node>[], + ) as List<_i2.Node>); + @override + List<_i2.Node> getElementsByClassName(String? classNames) => + (super.noSuchMethod( + Invocation.method( + #getElementsByClassName, + [classNames], + ), + returnValue: <_i2.Node>[], + ) as List<_i2.Node>); + @override + bool hasPointerCapture(int? pointerId) => (super.noSuchMethod( + Invocation.method( + #hasPointerCapture, + [pointerId], + ), + returnValue: false, + ) as bool); + @override + void releasePointerCapture(int? pointerId) => super.noSuchMethod( + Invocation.method( + #releasePointerCapture, + [pointerId], + ), + returnValueForMissingStub: null, + ); + @override + void requestPointerLock() => super.noSuchMethod( + Invocation.method( + #requestPointerLock, + [], + ), + returnValueForMissingStub: null, + ); + @override + void scroll([ + dynamic options_OR_x, + num? y, + ]) => + super.noSuchMethod( + Invocation.method( + #scroll, + [ + options_OR_x, + y, + ], + ), + returnValueForMissingStub: null, + ); + @override + void scrollBy([ + dynamic options_OR_x, + num? y, + ]) => + super.noSuchMethod( + Invocation.method( + #scrollBy, + [ + options_OR_x, + y, + ], + ), + returnValueForMissingStub: null, + ); + @override + void scrollIntoViewIfNeeded([bool? centerIfNeeded]) => super.noSuchMethod( + Invocation.method( + #scrollIntoViewIfNeeded, + [centerIfNeeded], + ), + returnValueForMissingStub: null, + ); + @override + void scrollTo([ + dynamic options_OR_x, + num? y, + ]) => + super.noSuchMethod( + Invocation.method( + #scrollTo, + [ + options_OR_x, + y, + ], + ), + returnValueForMissingStub: null, + ); + @override + void setPointerCapture(int? pointerId) => super.noSuchMethod( + Invocation.method( + #setPointerCapture, + [pointerId], + ), + returnValueForMissingStub: null, + ); + @override + void after(Object? nodes) => super.noSuchMethod( + Invocation.method( + #after, + [nodes], + ), + returnValueForMissingStub: null, + ); + @override + void before(Object? nodes) => super.noSuchMethod( + Invocation.method( + #before, + [nodes], + ), + returnValueForMissingStub: null, + ); @override _i2.Element? querySelector(String? selectors) => - (super.noSuchMethod(Invocation.method(#querySelector, [selectors])) - as _i2.Element?); - @override - void remove() => super.noSuchMethod(Invocation.method(#remove, []), - returnValueForMissingStub: null); - @override - _i2.Node replaceWith(_i2.Node? otherNode) => - (super.noSuchMethod(Invocation.method(#replaceWith, [otherNode]), - returnValue: _FakeNode_13()) as _i2.Node); - @override - void insertAllBefore(Iterable<_i2.Node>? newNodes, _i2.Node? refChild) => + (super.noSuchMethod(Invocation.method( + #querySelector, + [selectors], + )) as _i2.Element?); + @override + void remove() => super.noSuchMethod( + Invocation.method( + #remove, + [], + ), + returnValueForMissingStub: null, + ); + @override + _i2.Node replaceWith(_i2.Node? otherNode) => (super.noSuchMethod( + Invocation.method( + #replaceWith, + [otherNode], + ), + returnValue: _FakeNode_13( + this, + Invocation.method( + #replaceWith, + [otherNode], + ), + ), + ) as _i2.Node); + @override + void insertAllBefore( + Iterable<_i2.Node>? newNodes, + _i2.Node? child, + ) => super.noSuchMethod( - Invocation.method(#insertAllBefore, [newNodes, refChild]), - returnValueForMissingStub: null); - @override - _i2.Node append(_i2.Node? node) => - (super.noSuchMethod(Invocation.method(#append, [node]), - returnValue: _FakeNode_13()) as _i2.Node); - @override - _i2.Node clone(bool? deep) => - (super.noSuchMethod(Invocation.method(#clone, [deep]), - returnValue: _FakeNode_13()) as _i2.Node); - @override - bool contains(_i2.Node? other) => - (super.noSuchMethod(Invocation.method(#contains, [other]), - returnValue: false) as bool); - @override - _i2.Node getRootNode([Map? options]) => - (super.noSuchMethod(Invocation.method(#getRootNode, [options]), - returnValue: _FakeNode_13()) as _i2.Node); - @override - bool hasChildNodes() => - (super.noSuchMethod(Invocation.method(#hasChildNodes, []), - returnValue: false) as bool); - @override - _i2.Node insertBefore(_i2.Node? node, _i2.Node? child) => - (super.noSuchMethod(Invocation.method(#insertBefore, [node, child]), - returnValue: _FakeNode_13()) as _i2.Node); - @override - void addEventListener(String? type, _i2.EventListener? listener, - [bool? useCapture]) => + Invocation.method( + #insertAllBefore, + [ + newNodes, + child, + ], + ), + returnValueForMissingStub: null, + ); + @override + _i2.Node append(_i2.Node? node) => (super.noSuchMethod( + Invocation.method( + #append, + [node], + ), + returnValue: _FakeNode_13( + this, + Invocation.method( + #append, + [node], + ), + ), + ) as _i2.Node); + @override + _i2.Node clone(bool? deep) => (super.noSuchMethod( + Invocation.method( + #clone, + [deep], + ), + returnValue: _FakeNode_13( + this, + Invocation.method( + #clone, + [deep], + ), + ), + ) as _i2.Node); + @override + bool contains(_i2.Node? other) => (super.noSuchMethod( + Invocation.method( + #contains, + [other], + ), + returnValue: false, + ) as bool); + @override + _i2.Node getRootNode([Map? options]) => (super.noSuchMethod( + Invocation.method( + #getRootNode, + [options], + ), + returnValue: _FakeNode_13( + this, + Invocation.method( + #getRootNode, + [options], + ), + ), + ) as _i2.Node); + @override + bool hasChildNodes() => (super.noSuchMethod( + Invocation.method( + #hasChildNodes, + [], + ), + returnValue: false, + ) as bool); + @override + _i2.Node insertBefore( + _i2.Node? node, + _i2.Node? child, + ) => + (super.noSuchMethod( + Invocation.method( + #insertBefore, + [ + node, + child, + ], + ), + returnValue: _FakeNode_13( + this, + Invocation.method( + #insertBefore, + [ + node, + child, + ], + ), + ), + ) as _i2.Node); + @override + void addEventListener( + String? type, + _i2.EventListener? listener, [ + bool? useCapture, + ]) => super.noSuchMethod( - Invocation.method(#addEventListener, [type, listener, useCapture]), - returnValueForMissingStub: null); - @override - void removeEventListener(String? type, _i2.EventListener? listener, - [bool? useCapture]) => + Invocation.method( + #addEventListener, + [ + type, + listener, + useCapture, + ], + ), + returnValueForMissingStub: null, + ); + @override + void removeEventListener( + String? type, + _i2.EventListener? listener, [ + bool? useCapture, + ]) => super.noSuchMethod( - Invocation.method(#removeEventListener, [type, listener, useCapture]), - returnValueForMissingStub: null); - @override - bool dispatchEvent(_i2.Event? event) => - (super.noSuchMethod(Invocation.method(#dispatchEvent, [event]), - returnValue: false) as bool); + Invocation.method( + #removeEventListener, + [ + type, + listener, + useCapture, + ], + ), + returnValueForMissingStub: null, + ); + @override + bool dispatchEvent(_i2.Event? event) => (super.noSuchMethod( + Invocation.method( + #dispatchEvent, + [event], + ), + returnValue: false, + ) as bool); } /// A class which mocks [BuildContext]. @@ -1010,80 +2109,162 @@ class MockBuildContext extends _i1.Mock implements _i4.BuildContext { } @override - _i4.Widget get widget => (super.noSuchMethod(Invocation.getter(#widget), - returnValue: _FakeWidget_14()) as _i4.Widget); - @override - bool get debugDoingBuild => (super - .noSuchMethod(Invocation.getter(#debugDoingBuild), returnValue: false) - as bool); - @override - _i4.InheritedWidget dependOnInheritedElement(_i4.InheritedElement? ancestor, - {Object? aspect}) => + _i4.Widget get widget => (super.noSuchMethod( + Invocation.getter(#widget), + returnValue: _FakeWidget_14( + this, + Invocation.getter(#widget), + ), + ) as _i4.Widget); + @override + bool get mounted => (super.noSuchMethod( + Invocation.getter(#mounted), + returnValue: false, + ) as bool); + @override + bool get debugDoingBuild => (super.noSuchMethod( + Invocation.getter(#debugDoingBuild), + returnValue: false, + ) as bool); + @override + _i4.InheritedWidget dependOnInheritedElement( + _i4.InheritedElement? ancestor, { + Object? aspect, + }) => (super.noSuchMethod( + Invocation.method( + #dependOnInheritedElement, + [ancestor], + {#aspect: aspect}, + ), + returnValue: _FakeInheritedWidget_15( + this, Invocation.method( - #dependOnInheritedElement, [ancestor], {#aspect: aspect}), - returnValue: _FakeInheritedWidget_15()) as _i4.InheritedWidget); + #dependOnInheritedElement, + [ancestor], + {#aspect: aspect}, + ), + ), + ) as _i4.InheritedWidget); @override void visitAncestorElements(bool Function(_i4.Element)? visitor) => - super.noSuchMethod(Invocation.method(#visitAncestorElements, [visitor]), - returnValueForMissingStub: null); - @override - void visitChildElements(_i4.ElementVisitor? visitor) => - super.noSuchMethod(Invocation.method(#visitChildElements, [visitor]), - returnValueForMissingStub: null); - @override - _i5.DiagnosticsNode describeElement(String? name, - {_i5.DiagnosticsTreeStyle? style = - _i5.DiagnosticsTreeStyle.errorProperty}) => + super.noSuchMethod( + Invocation.method( + #visitAncestorElements, + [visitor], + ), + returnValueForMissingStub: null, + ); + @override + void visitChildElements(_i4.ElementVisitor? visitor) => super.noSuchMethod( + Invocation.method( + #visitChildElements, + [visitor], + ), + returnValueForMissingStub: null, + ); + @override + void dispatchNotification(_i7.Notification? notification) => + super.noSuchMethod( + Invocation.method( + #dispatchNotification, + [notification], + ), + returnValueForMissingStub: null, + ); + @override + _i5.DiagnosticsNode describeElement( + String? name, { + _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, + }) => (super.noSuchMethod( - Invocation.method(#describeElement, [name], {#style: style}), - returnValue: _FakeDiagnosticsNode_16()) as _i5.DiagnosticsNode); - @override - _i5.DiagnosticsNode describeWidget(String? name, - {_i5.DiagnosticsTreeStyle? style = - _i5.DiagnosticsTreeStyle.errorProperty}) => + Invocation.method( + #describeElement, + [name], + {#style: style}, + ), + returnValue: _FakeDiagnosticsNode_16( + this, + Invocation.method( + #describeElement, + [name], + {#style: style}, + ), + ), + ) as _i5.DiagnosticsNode); + @override + _i5.DiagnosticsNode describeWidget( + String? name, { + _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, + }) => (super.noSuchMethod( - Invocation.method(#describeWidget, [name], {#style: style}), - returnValue: _FakeDiagnosticsNode_16()) as _i5.DiagnosticsNode); + Invocation.method( + #describeWidget, + [name], + {#style: style}, + ), + returnValue: _FakeDiagnosticsNode_16( + this, + Invocation.method( + #describeWidget, + [name], + {#style: style}, + ), + ), + ) as _i5.DiagnosticsNode); @override List<_i5.DiagnosticsNode> describeMissingAncestor( - {Type? expectedAncestorType}) => + {required Type? expectedAncestorType}) => (super.noSuchMethod( - Invocation.method(#describeMissingAncestor, [], - {#expectedAncestorType: expectedAncestorType}), - returnValue: <_i5.DiagnosticsNode>[]) as List<_i5.DiagnosticsNode>); + Invocation.method( + #describeMissingAncestor, + [], + {#expectedAncestorType: expectedAncestorType}, + ), + returnValue: <_i5.DiagnosticsNode>[], + ) as List<_i5.DiagnosticsNode>); @override _i5.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod(Invocation.method(#describeOwnershipChain, [name]), - returnValue: _FakeDiagnosticsNode_16()) as _i5.DiagnosticsNode); - @override - String toString() => super.toString(); + (super.noSuchMethod( + Invocation.method( + #describeOwnershipChain, + [name], + ), + returnValue: _FakeDiagnosticsNode_16( + this, + Invocation.method( + #describeOwnershipChain, + [name], + ), + ), + ) as _i5.DiagnosticsNode); } /// A class which mocks [CreationParams]. /// /// See the documentation for Mockito's code generation for more information. -class MockCreationParams extends _i1.Mock implements _i7.CreationParams { +class MockCreationParams extends _i1.Mock implements _i8.CreationParams { MockCreationParams() { _i1.throwOnMissingStub(this); } @override - Set get javascriptChannelNames => - (super.noSuchMethod(Invocation.getter(#javascriptChannelNames), - returnValue: {}) as Set); + Set get javascriptChannelNames => (super.noSuchMethod( + Invocation.getter(#javascriptChannelNames), + returnValue: {}, + ) as Set); @override _i8.AutoMediaPlaybackPolicy get autoMediaPlaybackPolicy => - (super.noSuchMethod(Invocation.getter(#autoMediaPlaybackPolicy), - returnValue: _i8.AutoMediaPlaybackPolicy - .require_user_action_for_all_media_types) - as _i8.AutoMediaPlaybackPolicy); - @override - List<_i7.WebViewCookie> get cookies => - (super.noSuchMethod(Invocation.getter(#cookies), - returnValue: <_i7.WebViewCookie>[]) as List<_i7.WebViewCookie>); - @override - String toString() => super.toString(); + (super.noSuchMethod( + Invocation.getter(#autoMediaPlaybackPolicy), + returnValue: + _i8.AutoMediaPlaybackPolicy.require_user_action_for_all_media_types, + ) as _i8.AutoMediaPlaybackPolicy); + @override + List<_i8.WebViewCookie> get cookies => (super.noSuchMethod( + Invocation.getter(#cookies), + returnValue: <_i8.WebViewCookie>[], + ) as List<_i8.WebViewCookie>); } /// A class which mocks [WebViewPlatformCallbacksHandler]. @@ -1096,29 +2277,53 @@ class MockWebViewPlatformCallbacksHandler extends _i1.Mock } @override - _i6.FutureOr onNavigationRequest({String? url, bool? isForMainFrame}) => + _i6.FutureOr onNavigationRequest({ + required String? url, + required bool? isForMainFrame, + }) => (super.noSuchMethod( - Invocation.method(#onNavigationRequest, [], - {#url: url, #isForMainFrame: isForMainFrame}), - returnValue: Future.value(false)) as _i6.FutureOr); - @override - void onPageStarted(String? url) => - super.noSuchMethod(Invocation.method(#onPageStarted, [url]), - returnValueForMissingStub: null); - @override - void onPageFinished(String? url) => - super.noSuchMethod(Invocation.method(#onPageFinished, [url]), - returnValueForMissingStub: null); - @override - void onProgress(int? progress) => - super.noSuchMethod(Invocation.method(#onProgress, [progress]), - returnValueForMissingStub: null); - @override - void onWebResourceError(_i7.WebResourceError? error) => - super.noSuchMethod(Invocation.method(#onWebResourceError, [error]), - returnValueForMissingStub: null); - @override - String toString() => super.toString(); + Invocation.method( + #onNavigationRequest, + [], + { + #url: url, + #isForMainFrame: isForMainFrame, + }, + ), + returnValue: _i6.Future.value(false), + ) as _i6.FutureOr); + @override + void onPageStarted(String? url) => super.noSuchMethod( + Invocation.method( + #onPageStarted, + [url], + ), + returnValueForMissingStub: null, + ); + @override + void onPageFinished(String? url) => super.noSuchMethod( + Invocation.method( + #onPageFinished, + [url], + ), + returnValueForMissingStub: null, + ); + @override + void onProgress(int? progress) => super.noSuchMethod( + Invocation.method( + #onProgress, + [progress], + ), + returnValueForMissingStub: null, + ); + @override + void onWebResourceError(_i8.WebResourceError? error) => super.noSuchMethod( + Invocation.method( + #onWebResourceError, + [error], + ), + returnValueForMissingStub: null, + ); } /// A class which mocks [HttpRequestFactory]. @@ -1131,30 +2336,47 @@ class MockHttpRequestFactory extends _i1.Mock } @override - _i6.Future<_i2.HttpRequest> request(String? url, - {String? method, - bool? withCredentials, - String? responseType, - String? mimeType, - Map? requestHeaders, - dynamic sendData, - void Function(_i2.ProgressEvent)? onProgress}) => + _i6.Future<_i2.HttpRequest> request( + String? url, { + String? method, + bool? withCredentials, + String? responseType, + String? mimeType, + Map? requestHeaders, + dynamic sendData, + void Function(_i2.ProgressEvent)? onProgress, + }) => (super.noSuchMethod( - Invocation.method(#request, [ - url - ], { - #method: method, - #withCredentials: withCredentials, - #responseType: responseType, - #mimeType: mimeType, - #requestHeaders: requestHeaders, - #sendData: sendData, - #onProgress: onProgress - }), - returnValue: Future<_i2.HttpRequest>.value(_FakeHttpRequest_17())) - as _i6.Future<_i2.HttpRequest>); - @override - String toString() => super.toString(); + Invocation.method( + #request, + [url], + { + #method: method, + #withCredentials: withCredentials, + #responseType: responseType, + #mimeType: mimeType, + #requestHeaders: requestHeaders, + #sendData: sendData, + #onProgress: onProgress, + }, + ), + returnValue: _i6.Future<_i2.HttpRequest>.value(_FakeHttpRequest_17( + this, + Invocation.method( + #request, + [url], + { + #method: method, + #withCredentials: withCredentials, + #responseType: responseType, + #mimeType: mimeType, + #requestHeaders: requestHeaders, + #sendData: sendData, + #onProgress: onProgress, + }, + ), + )), + ) as _i6.Future<_i2.HttpRequest>); } /// A class which mocks [HttpRequest]. @@ -1166,122 +2388,216 @@ class MockHttpRequest extends _i1.Mock implements _i2.HttpRequest { } @override - Map get responseHeaders => - (super.noSuchMethod(Invocation.getter(#responseHeaders), - returnValue: {}) as Map); - @override - int get readyState => - (super.noSuchMethod(Invocation.getter(#readyState), returnValue: 0) - as int); - @override - String get responseType => - (super.noSuchMethod(Invocation.getter(#responseType), returnValue: '') - as String); - @override - set responseType(String? value) => - super.noSuchMethod(Invocation.setter(#responseType, value), - returnValueForMissingStub: null); - @override - set timeout(int? value) => - super.noSuchMethod(Invocation.setter(#timeout, value), - returnValueForMissingStub: null); - @override - _i2.HttpRequestUpload get upload => - (super.noSuchMethod(Invocation.getter(#upload), - returnValue: _FakeHttpRequestUpload_18()) as _i2.HttpRequestUpload); - @override - set withCredentials(bool? value) => - super.noSuchMethod(Invocation.setter(#withCredentials, value), - returnValueForMissingStub: null); - @override - _i6.Stream<_i2.Event> get onReadyStateChange => - (super.noSuchMethod(Invocation.getter(#onReadyStateChange), - returnValue: Stream<_i2.Event>.empty()) as _i6.Stream<_i2.Event>); - @override - _i6.Stream<_i2.ProgressEvent> get onAbort => - (super.noSuchMethod(Invocation.getter(#onAbort), - returnValue: Stream<_i2.ProgressEvent>.empty()) - as _i6.Stream<_i2.ProgressEvent>); - @override - _i6.Stream<_i2.ProgressEvent> get onError => - (super.noSuchMethod(Invocation.getter(#onError), - returnValue: Stream<_i2.ProgressEvent>.empty()) - as _i6.Stream<_i2.ProgressEvent>); - @override - _i6.Stream<_i2.ProgressEvent> get onLoad => - (super.noSuchMethod(Invocation.getter(#onLoad), - returnValue: Stream<_i2.ProgressEvent>.empty()) - as _i6.Stream<_i2.ProgressEvent>); - @override - _i6.Stream<_i2.ProgressEvent> get onLoadEnd => - (super.noSuchMethod(Invocation.getter(#onLoadEnd), - returnValue: Stream<_i2.ProgressEvent>.empty()) - as _i6.Stream<_i2.ProgressEvent>); - @override - _i6.Stream<_i2.ProgressEvent> get onLoadStart => - (super.noSuchMethod(Invocation.getter(#onLoadStart), - returnValue: Stream<_i2.ProgressEvent>.empty()) - as _i6.Stream<_i2.ProgressEvent>); - @override - _i6.Stream<_i2.ProgressEvent> get onProgress => - (super.noSuchMethod(Invocation.getter(#onProgress), - returnValue: Stream<_i2.ProgressEvent>.empty()) - as _i6.Stream<_i2.ProgressEvent>); - @override - _i6.Stream<_i2.ProgressEvent> get onTimeout => - (super.noSuchMethod(Invocation.getter(#onTimeout), - returnValue: Stream<_i2.ProgressEvent>.empty()) - as _i6.Stream<_i2.ProgressEvent>); - @override - _i2.Events get on => - (super.noSuchMethod(Invocation.getter(#on), returnValue: _FakeEvents_19()) - as _i2.Events); - @override - void open(String? method, String? url, - {bool? async, String? user, String? password}) => + Map get responseHeaders => (super.noSuchMethod( + Invocation.getter(#responseHeaders), + returnValue: {}, + ) as Map); + @override + int get readyState => (super.noSuchMethod( + Invocation.getter(#readyState), + returnValue: 0, + ) as int); + @override + String get responseType => (super.noSuchMethod( + Invocation.getter(#responseType), + returnValue: '', + ) as String); + @override + set responseType(String? value) => super.noSuchMethod( + Invocation.setter( + #responseType, + value, + ), + returnValueForMissingStub: null, + ); + @override + set timeout(int? value) => super.noSuchMethod( + Invocation.setter( + #timeout, + value, + ), + returnValueForMissingStub: null, + ); + @override + _i2.HttpRequestUpload get upload => (super.noSuchMethod( + Invocation.getter(#upload), + returnValue: _FakeHttpRequestUpload_18( + this, + Invocation.getter(#upload), + ), + ) as _i2.HttpRequestUpload); + @override + set withCredentials(bool? value) => super.noSuchMethod( + Invocation.setter( + #withCredentials, + value, + ), + returnValueForMissingStub: null, + ); + @override + _i6.Stream<_i2.Event> get onReadyStateChange => (super.noSuchMethod( + Invocation.getter(#onReadyStateChange), + returnValue: _i6.Stream<_i2.Event>.empty(), + ) as _i6.Stream<_i2.Event>); + @override + _i6.Stream<_i2.ProgressEvent> get onAbort => (super.noSuchMethod( + Invocation.getter(#onAbort), + returnValue: _i6.Stream<_i2.ProgressEvent>.empty(), + ) as _i6.Stream<_i2.ProgressEvent>); + @override + _i6.Stream<_i2.ProgressEvent> get onError => (super.noSuchMethod( + Invocation.getter(#onError), + returnValue: _i6.Stream<_i2.ProgressEvent>.empty(), + ) as _i6.Stream<_i2.ProgressEvent>); + @override + _i6.Stream<_i2.ProgressEvent> get onLoad => (super.noSuchMethod( + Invocation.getter(#onLoad), + returnValue: _i6.Stream<_i2.ProgressEvent>.empty(), + ) as _i6.Stream<_i2.ProgressEvent>); + @override + _i6.Stream<_i2.ProgressEvent> get onLoadEnd => (super.noSuchMethod( + Invocation.getter(#onLoadEnd), + returnValue: _i6.Stream<_i2.ProgressEvent>.empty(), + ) as _i6.Stream<_i2.ProgressEvent>); + @override + _i6.Stream<_i2.ProgressEvent> get onLoadStart => (super.noSuchMethod( + Invocation.getter(#onLoadStart), + returnValue: _i6.Stream<_i2.ProgressEvent>.empty(), + ) as _i6.Stream<_i2.ProgressEvent>); + @override + _i6.Stream<_i2.ProgressEvent> get onProgress => (super.noSuchMethod( + Invocation.getter(#onProgress), + returnValue: _i6.Stream<_i2.ProgressEvent>.empty(), + ) as _i6.Stream<_i2.ProgressEvent>); + @override + _i6.Stream<_i2.ProgressEvent> get onTimeout => (super.noSuchMethod( + Invocation.getter(#onTimeout), + returnValue: _i6.Stream<_i2.ProgressEvent>.empty(), + ) as _i6.Stream<_i2.ProgressEvent>); + @override + _i2.Events get on => (super.noSuchMethod( + Invocation.getter(#on), + returnValue: _FakeEvents_19( + this, + Invocation.getter(#on), + ), + ) as _i2.Events); + @override + void open( + String? method, + String? url, { + bool? async, + String? user, + String? password, + }) => super.noSuchMethod( - Invocation.method(#open, [method, url], - {#async: async, #user: user, #password: password}), - returnValueForMissingStub: null); - @override - void abort() => super.noSuchMethod(Invocation.method(#abort, []), - returnValueForMissingStub: null); - @override - String getAllResponseHeaders() => - (super.noSuchMethod(Invocation.method(#getAllResponseHeaders, []), - returnValue: '') as String); + Invocation.method( + #open, + [ + method, + url, + ], + { + #async: async, + #user: user, + #password: password, + }, + ), + returnValueForMissingStub: null, + ); + @override + void abort() => super.noSuchMethod( + Invocation.method( + #abort, + [], + ), + returnValueForMissingStub: null, + ); + @override + String getAllResponseHeaders() => (super.noSuchMethod( + Invocation.method( + #getAllResponseHeaders, + [], + ), + returnValue: '', + ) as String); @override String? getResponseHeader(String? name) => - (super.noSuchMethod(Invocation.method(#getResponseHeader, [name])) - as String?); - @override - void overrideMimeType(String? mime) => - super.noSuchMethod(Invocation.method(#overrideMimeType, [mime]), - returnValueForMissingStub: null); - @override - void send([dynamic body_OR_data]) => - super.noSuchMethod(Invocation.method(#send, [body_OR_data]), - returnValueForMissingStub: null); - @override - void setRequestHeader(String? name, String? value) => - super.noSuchMethod(Invocation.method(#setRequestHeader, [name, value]), - returnValueForMissingStub: null); - @override - void addEventListener(String? type, _i2.EventListener? listener, - [bool? useCapture]) => + (super.noSuchMethod(Invocation.method( + #getResponseHeader, + [name], + )) as String?); + @override + void overrideMimeType(String? mime) => super.noSuchMethod( + Invocation.method( + #overrideMimeType, + [mime], + ), + returnValueForMissingStub: null, + ); + @override + void send([dynamic body_OR_data]) => super.noSuchMethod( + Invocation.method( + #send, + [body_OR_data], + ), + returnValueForMissingStub: null, + ); + @override + void setRequestHeader( + String? name, + String? value, + ) => super.noSuchMethod( - Invocation.method(#addEventListener, [type, listener, useCapture]), - returnValueForMissingStub: null); - @override - void removeEventListener(String? type, _i2.EventListener? listener, - [bool? useCapture]) => + Invocation.method( + #setRequestHeader, + [ + name, + value, + ], + ), + returnValueForMissingStub: null, + ); + @override + void addEventListener( + String? type, + _i2.EventListener? listener, [ + bool? useCapture, + ]) => super.noSuchMethod( - Invocation.method(#removeEventListener, [type, listener, useCapture]), - returnValueForMissingStub: null); - @override - bool dispatchEvent(_i2.Event? event) => - (super.noSuchMethod(Invocation.method(#dispatchEvent, [event]), - returnValue: false) as bool); - @override - String toString() => super.toString(); + Invocation.method( + #addEventListener, + [ + type, + listener, + useCapture, + ], + ), + returnValueForMissingStub: null, + ); + @override + void removeEventListener( + String? type, + _i2.EventListener? listener, [ + bool? useCapture, + ]) => + super.noSuchMethod( + Invocation.method( + #removeEventListener, + [ + type, + listener, + useCapture, + ], + ), + returnValueForMissingStub: null, + ); + @override + bool dispatchEvent(_i2.Event? event) => (super.noSuchMethod( + Invocation.method( + #dispatchEvent, + [event], + ), + returnValue: false, + ) as bool); } From 09a4a096d1a55f8cb4378e192202ffc5092ee618 Mon Sep 17 00:00:00 2001 From: Nils Reichardt Date: Thu, 20 Oct 2022 20:04:19 +0200 Subject: [PATCH 078/133] [camera] Remove usage of `_ambiguate` method in example (#6555) --- packages/camera/camera/CHANGELOG.md | 5 +++++ packages/camera/camera/example/lib/main.dart | 13 +++---------- packages/camera/camera/example/pubspec.yaml | 2 +- packages/camera/camera/pubspec.yaml | 4 ++-- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 30bb098f8fd4..127da4561bc3 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.10.0+4 + +* Removes usage of `_ambiguate` method in example. +* Updates minimum Flutter version to 3.0. + ## 0.10.0+3 * Updates code for `no_leading_underscores_for_local_identifiers` lint. diff --git a/packages/camera/camera/example/lib/main.dart b/packages/camera/camera/example/lib/main.dart index c5804e7d0624..860263edf2d3 100644 --- a/packages/camera/camera/example/lib/main.dart +++ b/packages/camera/camera/example/lib/main.dart @@ -72,7 +72,7 @@ class _CameraExampleHomeState extends State @override void initState() { super.initState(); - _ambiguate(WidgetsBinding.instance)?.addObserver(this); + WidgetsBinding.instance.addObserver(this); _flashModeControlRowAnimationController = AnimationController( duration: const Duration(milliseconds: 300), @@ -102,7 +102,7 @@ class _CameraExampleHomeState extends State @override void dispose() { - _ambiguate(WidgetsBinding.instance)?.removeObserver(this); + WidgetsBinding.instance.removeObserver(this); _flashModeControlRowAnimationController.dispose(); _exposureModeControlRowAnimationController.dispose(); super.dispose(); @@ -585,7 +585,7 @@ class _CameraExampleHomeState extends State } if (_cameras.isEmpty) { - _ambiguate(SchedulerBinding.instance)?.addPostFrameCallback((_) async { + SchedulerBinding.instance.addPostFrameCallback((_) async { showInSnackBar('No camera found.'); }); return const Text('None'); @@ -1079,10 +1079,3 @@ Future main() async { } runApp(const CameraApp()); } - -/// This allows a value of type T or T? to be treated as a value of type T?. -/// -/// We use this so that APIs that have become non-nullable can still be used -/// with `!` and `?` on the stable branch. -// TODO(ianh): Remove this once we roll stable in late 2021. -T? _ambiguate(T? value) => value; diff --git a/packages/camera/camera/example/pubspec.yaml b/packages/camera/camera/example/pubspec.yaml index 22e275e633fe..e63024076fef 100644 --- a/packages/camera/camera/example/pubspec.yaml +++ b/packages/camera/camera/example/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: none environment: sdk: ">=2.14.0 <3.0.0" - flutter: ">=2.10.0" + flutter: ">=3.0.0" dependencies: camera: diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index 1190989a63b7..0f75d10c36cd 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -4,11 +4,11 @@ description: A Flutter plugin for controlling the camera. Supports previewing Dart. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.0+3 +version: 0.10.0+4 environment: sdk: ">=2.14.0 <3.0.0" - flutter: ">=2.10.0" + flutter: ">=3.0.0" flutter: plugin: From 3a03925ecb29adbb3285132d2adfd661d32823b1 Mon Sep 17 00:00:00 2001 From: David Iglesias Date: Thu, 20 Oct 2022 16:47:37 -0700 Subject: [PATCH 079/133] [tool] Get dependencies in package examples before publish check. (#6596) --- script/tool/CHANGELOG.md | 5 ++ .../tool/lib/src/publish_check_command.dart | 16 ++++++ script/tool/pubspec.yaml | 2 +- .../tool/test/publish_check_command_test.dart | 57 +++++++++++++++++-- 4 files changed, 75 insertions(+), 5 deletions(-) diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index b7864c9c0501..c492dc00905e 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.12.1 + +* Modifies `publish_check_command.dart` to do a `dart pub get` in all examples + of the package being checked. Workaround for [dart-lang/pub#3618](https://github.com/dart-lang/pub/issues/3618). + ## 0.12.0 * Changes the behavior of `--packages-for-branch` on main/master to run for diff --git a/script/tool/lib/src/publish_check_command.dart b/script/tool/lib/src/publish_check_command.dart index 38e1b7bdebbb..14b240dc04c2 100644 --- a/script/tool/lib/src/publish_check_command.dart +++ b/script/tool/lib/src/publish_check_command.dart @@ -130,7 +130,23 @@ class PublishCheckCommand extends PackageLoopingCommand { } } + // Run `dart pub get` on the examples of [package]. + Future _fetchExampleDeps(RepositoryPackage package) async { + for (final RepositoryPackage example in package.getExamples()) { + await processRunner.runAndStream( + 'dart', + ['pub', 'get'], + workingDir: example.directory, + ); + } + } + Future _hasValidPublishCheckRun(RepositoryPackage package) async { + // `pub publish` does not do `dart pub get` inside `example` directories + // of a package (but they're part of the analysis output!). + // Issue: https://github.com/flutter/flutter/issues/113788 + await _fetchExampleDeps(package); + print('Running pub publish --dry-run:'); final io.Process process = await processRunner.start( flutterCommand, diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml index 9e767ad724c0..eecff3703b4c 100644 --- a/script/tool/pubspec.yaml +++ b/script/tool/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_plugin_tools description: Productivity utils for flutter/plugins and flutter/packages repository: https://github.com/flutter/plugins/tree/main/script/tool -version: 0.12.0 +version: 0.12.1 dependencies: args: ^2.1.0 diff --git a/script/tool/test/publish_check_command_test.dart b/script/tool/test/publish_check_command_test.dart index e6c5b9cdebc5..575f8509fd25 100644 --- a/script/tool/test/publish_check_command_test.dart +++ b/script/tool/test/publish_check_command_test.dart @@ -44,10 +44,16 @@ void main() { }); test('publish check all packages', () async { - final RepositoryPackage plugin1 = - createFakePlugin('plugin_tools_test_package_a', packagesDir); - final RepositoryPackage plugin2 = - createFakePlugin('plugin_tools_test_package_b', packagesDir); + final RepositoryPackage plugin1 = createFakePlugin( + 'plugin_tools_test_package_a', + packagesDir, + examples: [], + ); + final RepositoryPackage plugin2 = createFakePlugin( + 'plugin_tools_test_package_b', + packagesDir, + examples: [], + ); await runCapturingPrint(runner, ['publish-check']); @@ -65,6 +71,49 @@ void main() { ])); }); + test('publish prepares dependencies of examples (when present)', () async { + final RepositoryPackage plugin1 = createFakePlugin( + 'plugin_tools_test_package_a', + packagesDir, + examples: ['example1', 'example2'], + ); + final RepositoryPackage plugin2 = createFakePlugin( + 'plugin_tools_test_package_b', + packagesDir, + examples: [], + ); + + await runCapturingPrint(runner, ['publish-check']); + + // For plugin1, these are the expected pub get calls that will happen + final Iterable pubGetCalls = + plugin1.getExamples().map((RepositoryPackage example) { + return ProcessCall( + 'dart', + const ['pub', 'get'], + example.path, + ); + }); + + expect(pubGetCalls, hasLength(2)); + expect( + processRunner.recordedCalls, + orderedEquals([ + // plugin1 has 2 examples, so there's some 'dart pub get' calls. + ...pubGetCalls, + ProcessCall( + 'flutter', + const ['pub', 'publish', '--', '--dry-run'], + plugin1.path), + // plugin2 has no examples, so there's no extra 'dart pub get' calls. + ProcessCall( + 'flutter', + const ['pub', 'publish', '--', '--dry-run'], + plugin2.path), + ]), + ); + }); + test('fail on negative test', () async { createFakePlugin('plugin_tools_test_package_a', packagesDir); From 7a7480a5f392561702ab86acff2fcb73b1b7eb99 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 21 Oct 2022 10:42:18 -0400 Subject: [PATCH 080/133] [in_app_purchase] Bumps `in_app_purchase_android` minimum version to 0.2.3 (#6595) --- packages/in_app_purchase/in_app_purchase/CHANGELOG.md | 3 ++- packages/in_app_purchase/in_app_purchase/pubspec.yaml | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase/CHANGELOG.md index 902c4377e9d6..f38fe18a25d4 100644 --- a/packages/in_app_purchase/in_app_purchase/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 3.0.8 * Updates minimum Flutter version to 2.10. +* Bumps minimum in_app_purchase_android to 0.2.3. ## 3.0.7 diff --git a/packages/in_app_purchase/in_app_purchase/pubspec.yaml b/packages/in_app_purchase/in_app_purchase/pubspec.yaml index 49382c90c01a..40b0ea9a152b 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 @@ name: in_app_purchase 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.0.7 +version: 3.0.8 environment: sdk: ">=2.12.0 <3.0.0" @@ -19,7 +19,7 @@ flutter: dependencies: flutter: sdk: flutter - in_app_purchase_android: ^0.2.1 + in_app_purchase_android: ^0.2.3 in_app_purchase_platform_interface: ^1.0.0 in_app_purchase_storekit: ^0.3.0+1 From f55c7ffc6984c75e6b2b6a72a02b48064e0b5bc1 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 21 Oct 2022 11:44:09 -0400 Subject: [PATCH 081/133] Roll Flutter from 637e5bce662f to 59d26c481acc (17 revisions) (#6599) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index cb8fe40cd622..4362c020c5ba 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -637e5bce662fb43459d409e13ba5a7fb2c3fa930 +59d26c481acca4e5b086dc6502b45ca31b273c25 From 84f5ec608be404adcb0afe62446d9093ddabe5fd Mon Sep 17 00:00:00 2001 From: crystalstorm Date: Mon, 24 Oct 2022 17:55:27 +0300 Subject: [PATCH 082/133] [in_app_purchase][iOS] fix iOS promotional offers (SKPaymentDiscountWrapper was not used properly) (#6541) --- .../in_app_purchase_storekit/CHANGELOG.md | 5 +++ .../example/ios/RunnerTests/TranslatorTests.m | 23 +++++++++++++ .../ios/Classes/FIAObjectTranslator.m | 2 +- .../ios/Classes/InAppPurchasePlugin.m | 12 +++++-- .../in_app_purchase_storekit_platform.dart | 5 ++- .../sk_payment_queue_wrapper.dart | 3 +- .../src/types/app_store_purchase_param.dart | 4 +++ .../in_app_purchase_storekit/pubspec.yaml | 2 +- .../test/fakes/fake_storekit_platform.dart | 14 ++++++++ ...n_app_purchase_storekit_platform_test.dart | 32 +++++++++++++++++++ .../store_kit_wrappers/sk_product_test.dart | 15 +++++++++ .../sk_test_stub_objects.dart | 18 +++++++++++ 12 files changed, 128 insertions(+), 7 deletions(-) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md index 52f59efacd6a..324e0608b7f9 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_storekit/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.3.3 + +* Supports adding discount information to AppStorePurchaseParam. +* Fixes iOS Promotional Offers bug which prevents them from working. + ## 0.3.2+2 * Updates imports for `prefer_relative_imports`. diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/RunnerTests/TranslatorTests.m b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/RunnerTests/TranslatorTests.m index ed302d61d9b0..34d686753762 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/example/ios/RunnerTests/TranslatorTests.m +++ b/packages/in_app_purchase/in_app_purchase_storekit/example/ios/RunnerTests/TranslatorTests.m @@ -390,4 +390,27 @@ - (void)testSKPaymentDiscountFromMapMissingTimestamp { } } +- (void)testSKPaymentDiscountFromMapOverflowingTimestamp { + if (@available(iOS 12.2, *)) { + NSDictionary *discountMap = @{ + @"identifier" : @"payment_discount_identifier", + @"keyIdentifier" : @"payment_discount_key_identifier", + @"nonce" : @"d18981e0-9003-4365-98a2-4b90e3b62c52", + @"signature" : @"this is a encrypted signature", + @"timestamp" : @1665044583595, // timestamp 2022 Oct + }; + NSString *error = nil; + SKPaymentDiscount *paymentDiscount = + [FIAObjectTranslator getSKPaymentDiscountFromMap:discountMap withError:&error]; + XCTAssertNil(error); + XCTAssertNotNil(paymentDiscount); + XCTAssertEqual(paymentDiscount.identifier, discountMap[@"identifier"]); + XCTAssertEqual(paymentDiscount.keyIdentifier, discountMap[@"keyIdentifier"]); + XCTAssertEqualObjects(paymentDiscount.nonce, + [[NSUUID alloc] initWithUUIDString:discountMap[@"nonce"]]); + XCTAssertEqual(paymentDiscount.signature, discountMap[@"signature"]); + XCTAssertEqual(paymentDiscount.timestamp, discountMap[@"timestamp"]); + } +} + @end diff --git a/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m b/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m index d01eb9becf3d..c656b58808b3 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m +++ b/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/FIAObjectTranslator.m @@ -277,7 +277,7 @@ + (SKPaymentDiscount *)getSKPaymentDiscountFromMap:(NSDictionary *)map return nil; } - if (!timestamp || ![timestamp isKindOfClass:NSNumber.class] || [timestamp intValue] <= 0) { + if (!timestamp || ![timestamp isKindOfClass:NSNumber.class] || [timestamp longLongValue] <= 0) { if (error) { *error = @"When specifying a payment discount the 'timestamp' field is mandatory."; } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/InAppPurchasePlugin.m b/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/InAppPurchasePlugin.m index d64c24563b62..bfc90ea43716 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/InAppPurchasePlugin.m +++ b/packages/in_app_purchase/in_app_purchase_storekit/ios/Classes/InAppPurchasePlugin.m @@ -200,10 +200,11 @@ - (void)addPayment:(FlutterMethodCall *)call result:(FlutterResult)result { : [simulatesAskToBuyInSandbox boolValue]; if (@available(iOS 12.2, *)) { + NSDictionary *paymentDiscountMap = [self getNonNullValueFromDictionary:paymentMap + forKey:@"paymentDiscount"]; NSString *error = nil; - SKPaymentDiscount *paymentDiscount = [FIAObjectTranslator - getSKPaymentDiscountFromMap:[paymentMap objectForKey:@"paymentDiscount"] - withError:&error]; + SKPaymentDiscount *paymentDiscount = + [FIAObjectTranslator getSKPaymentDiscountFromMap:paymentDiscountMap withError:&error]; if (error) { result([FlutterError @@ -367,6 +368,11 @@ - (void)showPriceConsentIfNeeded:(FlutterResult)result { result(nil); } +- (id)getNonNullValueFromDictionary:(NSDictionary *)dictionary forKey:(NSString *)key { + id value = dictionary[key]; + return [value isKindOfClass:[NSNull class]] ? nil : value; +} + #pragma mark - transaction observer: - (void)handleTransactionsUpdated:(NSArray *)transactions { diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart index c03f15f8ce48..0e5e420ece85 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/in_app_purchase_storekit_platform.dart @@ -75,7 +75,10 @@ class InAppPurchaseStoreKitPlatform extends InAppPurchasePlatform { purchaseParam is AppStorePurchaseParam ? purchaseParam.quantity : 1, applicationUsername: purchaseParam.applicationUserName, simulatesAskToBuyInSandbox: purchaseParam is AppStorePurchaseParam && - purchaseParam.simulatesAskToBuyInSandbox)); + purchaseParam.simulatesAskToBuyInSandbox, + paymentDiscount: purchaseParam is AppStorePurchaseParam + ? purchaseParam.discount + : null)); return true; // There's no error feedback from iOS here to return. } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart index 78e16e22416c..d360a2da3fe5 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/store_kit_wrappers/sk_payment_queue_wrapper.dart @@ -405,7 +405,8 @@ class SKPaymentWrapper { 'applicationUsername': applicationUsername, 'requestData': requestData, 'quantity': quantity, - 'simulatesAskToBuyInSandbox': simulatesAskToBuyInSandbox + 'simulatesAskToBuyInSandbox': simulatesAskToBuyInSandbox, + 'paymentDiscount': paymentDiscount?.toMap(), }; } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/types/app_store_purchase_param.dart b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/types/app_store_purchase_param.dart index 168ef5cea5f4..0e7e24166c4d 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/lib/src/types/app_store_purchase_param.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/lib/src/types/app_store_purchase_param.dart @@ -14,6 +14,7 @@ class AppStorePurchaseParam extends PurchaseParam { String? applicationUserName, this.quantity = 1, this.simulatesAskToBuyInSandbox = false, + this.discount, }) : super( productDetails: productDetails, applicationUserName: applicationUserName, @@ -32,4 +33,7 @@ class AppStorePurchaseParam extends PurchaseParam { /// Quantity of the product user requested to buy. final int quantity; + + /// Discount applied to the product. The value is `null` when the product does not have a discount. + final SKPaymentDiscountWrapper? discount; } diff --git a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml index f2193e53b591..0b6e21a26978 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase_storekit/pubspec.yaml @@ -2,7 +2,7 @@ name: in_app_purchase_storekit description: An implementation for the iOS platform of the Flutter `in_app_purchase` plugin. This uses the StoreKit Framework. repository: https://github.com/flutter/plugins/tree/main/packages/in_app_purchase/in_app_purchase_storekit issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+in_app_purchase%22 -version: 0.3.2+2 +version: 0.3.3 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart index 08b9c85961a3..e64876deccba 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart @@ -30,6 +30,7 @@ class FakeStoreKitPlatform { PlatformException? restoreException; SKError? testRestoredError; bool queueIsActive = false; + Map discountReceived = {}; void reset() { transactions = []; @@ -54,6 +55,7 @@ class FakeStoreKitPlatform { restoreException = null; testRestoredError = null; queueIsActive = false; + discountReceived = {}; } SKPaymentTransactionWrapper createPendingTransaction(String id, @@ -169,6 +171,18 @@ class FakeStoreKitPlatform { case '-[InAppPurchasePlugin addPayment:result:]': final String id = call.arguments['productIdentifier'] as String; final int quantity = call.arguments['quantity'] as int; + + // Keep the received paymentDiscount parameter when testing payment with discount. + if (call.arguments['applicationUsername'] == 'userWithDiscount') { + if (call.arguments['paymentDiscount'] != null) { + final Map discountArgument = + call.arguments['paymentDiscount']; + discountReceived = discountArgument.cast(); + } else { + discountReceived = {}; + } + } + final SKPaymentTransactionWrapper transaction = createPendingTransaction(id, quantity: quantity); transactions.add(transaction); diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/in_app_purchase_storekit_platform_test.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/in_app_purchase_storekit_platform_test.dart index 852599ac3670..51ff2c229483 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/in_app_purchase_storekit_platform_test.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/in_app_purchase_storekit_platform_test.dart @@ -489,6 +489,38 @@ void main() { expect( fakeStoreKitPlatform.finishedTransactions.first.payment.quantity, 5); }); + + test( + 'buying non consumable with discount, should get purchase objects in the purchase update callback', + () async { + final List details = []; + final Completer> completer = + Completer>(); + final Stream> stream = + iapStoreKitPlatform.purchaseStream; + + late StreamSubscription> subscription; + subscription = stream.listen((List purchaseDetailsList) { + details.addAll(purchaseDetailsList); + if (purchaseDetailsList.first.status == PurchaseStatus.purchased) { + completer.complete(details); + subscription.cancel(); + } + }); + final AppStorePurchaseParam purchaseParam = AppStorePurchaseParam( + productDetails: + AppStoreProductDetails.fromSKProduct(dummyProductWrapper), + applicationUserName: 'userWithDiscount', + discount: dummyPaymentDiscountWrapper, + ); + await iapStoreKitPlatform.buyNonConsumable(purchaseParam: purchaseParam); + + final List result = await completer.future; + expect(result.length, 2); + expect(result.first.productID, dummyProductWrapper.productIdentifier); + expect(fakeStoreKitPlatform.discountReceived, + dummyPaymentDiscountWrapper.toMap()); + }); }); group('complete purchase', () { diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/store_kit_wrappers/sk_product_test.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/store_kit_wrappers/sk_product_test.dart index de61268e4009..b6de5e035c5e 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/store_kit_wrappers/sk_product_test.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/store_kit_wrappers/sk_product_test.dart @@ -141,6 +141,21 @@ void main() { expect(payment, equals(dummyPayment)); }); + test('SKPaymentWrapper should have propery values consistent with .toMap()', + () { + final Map mapResult = dummyPaymentWithDiscount.toMap(); + expect(mapResult['productIdentifier'], + dummyPaymentWithDiscount.productIdentifier); + expect(mapResult['applicationUsername'], + dummyPaymentWithDiscount.applicationUsername); + expect(mapResult['requestData'], dummyPaymentWithDiscount.requestData); + expect(mapResult['quantity'], dummyPaymentWithDiscount.quantity); + expect(mapResult['simulatesAskToBuyInSandbox'], + dummyPaymentWithDiscount.simulatesAskToBuyInSandbox); + expect(mapResult['paymentDiscount'], + equals(dummyPaymentWithDiscount.paymentDiscount?.toMap())); + }); + test('Should construct correct SKError from json', () { final SKError error = SKError.fromJson(buildErrorMap(dummyError)); expect(error, equals(dummyError)); diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/store_kit_wrappers/sk_test_stub_objects.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/store_kit_wrappers/sk_test_stub_objects.dart index 946fbc81b74c..6601a21c4ee4 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/store_kit_wrappers/sk_test_stub_objects.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/store_kit_wrappers/sk_test_stub_objects.dart @@ -10,6 +10,15 @@ const SKPaymentWrapper dummyPayment = SKPaymentWrapper( requestData: 'fake-data-utf8', quantity: 2, simulatesAskToBuyInSandbox: true); + +final SKPaymentWrapper dummyPaymentWithDiscount = SKPaymentWrapper( + productIdentifier: 'prod-id', + applicationUsername: 'app-user-name', + requestData: 'fake-data-utf8', + quantity: 2, + simulatesAskToBuyInSandbox: true, + paymentDiscount: dummyPaymentDiscountWrapper); + const SKError dummyError = SKError( code: 111, domain: 'dummy-domain', @@ -186,3 +195,12 @@ Map buildTransactionMap( }; return map; } + +final SKPaymentDiscountWrapper dummyPaymentDiscountWrapper = + SKPaymentDiscountWrapper.fromJson(const { + 'identifier': 'dummy-discount-identifier', + 'keyIdentifier': 'KEYIDTEST1', + 'nonce': '00000000-0000-0000-0000-000000000000', + 'signature': 'dummy-signature-string', + 'timestamp': 1231231231, +}); From cb76ba558478a6268a4dd092a25e8dd3a8347d92 Mon Sep 17 00:00:00 2001 From: Camille Simon <43054281+camsim99@users.noreply.github.com> Date: Mon, 24 Oct 2022 15:13:18 -0700 Subject: [PATCH 083/133] [local_auth] Fix device credential only check for API < 30 (#6522) --- .../local_auth_android/CHANGELOG.md | 4 ++ .../local_auth_android/android/build.gradle | 1 + .../plugins/localauth/LocalAuthPlugin.java | 22 ++++++++- .../plugins/localauth/LocalAuthTest.java | 47 ++++++++++++++++++- .../local_auth_android/pubspec.yaml | 2 +- 5 files changed, 71 insertions(+), 5 deletions(-) diff --git a/packages/local_auth/local_auth_android/CHANGELOG.md b/packages/local_auth/local_auth_android/CHANGELOG.md index a26846d5ed01..c9eeed9d01dd 100644 --- a/packages/local_auth/local_auth_android/CHANGELOG.md +++ b/packages/local_auth/local_auth_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.14 + +* Fixes device credential authentication for API versions before R. + ## 1.0.13 * Updates imports for `prefer_relative_imports`. diff --git a/packages/local_auth/local_auth_android/android/build.gradle b/packages/local_auth/local_auth_android/android/build.gradle index 569d7e3564b4..6c9417008d27 100644 --- a/packages/local_auth/local_auth_android/android/build.gradle +++ b/packages/local_auth/local_auth_android/android/build.gradle @@ -56,6 +56,7 @@ dependencies { api "androidx.fragment:fragment:1.5.2" testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:4.7.0' + testImplementation 'org.robolectric:robolectric:4.5' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test:rules:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' diff --git a/packages/local_auth/local_auth_android/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java b/packages/local_auth/local_auth_android/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java index e8632c474030..e545df01e7c0 100644 --- a/packages/local_auth/local_auth_android/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java +++ b/packages/local_auth/local_auth_android/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java @@ -253,11 +253,16 @@ public ArrayList getEnrolledBiometrics() { } @VisibleForTesting - public boolean isDeviceSupported() { + public boolean isDeviceSecure() { if (keyguardManager == null) return false; return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && keyguardManager.isDeviceSecure()); } + @VisibleForTesting + public boolean isDeviceSupported() { + return isDeviceSecure() || canAuthenticateWithBiometrics(); + } + private boolean canAuthenticateWithBiometrics() { if (biometricManager == null) return false; return biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_WEAK) @@ -270,7 +275,15 @@ private boolean hasBiometricHardware() { != BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE; } - private boolean canAuthenticateWithDeviceCredential() { + @VisibleForTesting + public boolean canAuthenticateWithDeviceCredential() { + if (Build.VERSION.SDK_INT < 30) { + // Checking for device credential only authentication via the BiometricManager + // is not allowed before API level 30, so we check for presence of PIN, pattern, + // or password instead. + return isDeviceSecure(); + } + if (biometricManager == null) return false; return biometricManager.canAuthenticate(BiometricManager.Authenticators.DEVICE_CREDENTIAL) == BiometricManager.BIOMETRIC_SUCCESS; @@ -334,4 +347,9 @@ final Activity getActivity() { void setBiometricManager(BiometricManager biometricManager) { this.biometricManager = biometricManager; } + + @VisibleForTesting + void setKeyguardManager(KeyguardManager keyguardManager) { + this.keyguardManager = keyguardManager; + } } diff --git a/packages/local_auth/local_auth_android/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java b/packages/local_auth/local_auth_android/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java index 0eaf31255317..7279a3c49af2 100644 --- a/packages/local_auth/local_auth_android/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java +++ b/packages/local_auth/local_auth_android/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java @@ -17,6 +17,7 @@ import static org.mockito.Mockito.when; import android.app.Activity; +import android.app.KeyguardManager; import android.app.NativeActivity; import android.content.Context; import androidx.biometric.BiometricManager; @@ -34,8 +35,12 @@ import java.util.Collections; import java.util.HashMap; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; +@RunWith(RobolectricTestRunner.class) public class LocalAuthTest { @Test public void authenticate_returnsErrorWhenAuthInProgress() { @@ -107,14 +112,13 @@ public void authenticate_properlyConfiguresBiometricOnlyAuthenticationRequest() } @Test + @Config(sdk = 30) public void authenticate_properlyConfiguresBiometricAndDeviceCredentialAuthenticationRequest() { final LocalAuthPlugin plugin = spy(new LocalAuthPlugin()); setPluginActivity(plugin, buildMockActivityWithContext(mock(FragmentActivity.class))); when(plugin.isDeviceSupported()).thenReturn(true); final BiometricManager mockBiometricManager = mock(BiometricManager.class); - when(mockBiometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_WEAK)) - .thenReturn(BiometricManager.BIOMETRIC_SUCCESS); when(mockBiometricManager.canAuthenticate(BiometricManager.Authenticators.DEVICE_CREDENTIAL)) .thenReturn(BiometricManager.BIOMETRIC_SUCCESS); plugin.setBiometricManager(mockBiometricManager); @@ -135,6 +139,7 @@ public void authenticate_properlyConfiguresBiometricAndDeviceCredentialAuthentic } @Test + @Config(sdk = 30) public void authenticate_properlyConfiguresDeviceCredentialOnlyAuthenticationRequest() { final LocalAuthPlugin plugin = spy(new LocalAuthPlugin()); setPluginActivity(plugin, buildMockActivityWithContext(mock(FragmentActivity.class))); @@ -343,6 +348,44 @@ public void getEnrolledBiometrics_shouldAddStrongBiometrics() { }); } + @Test + @Config(sdk = 22) + public void isDeviceSecure_returnsFalseOnBelowApi23() { + final LocalAuthPlugin plugin = new LocalAuthPlugin(); + assertFalse(plugin.isDeviceSecure()); + } + + @Test + @Config(sdk = 23) + public void isDeviceSecure_returnsTrueIfDeviceIsSecure() { + final LocalAuthPlugin plugin = new LocalAuthPlugin(); + KeyguardManager mockKeyguardManager = mock(KeyguardManager.class); + plugin.setKeyguardManager(mockKeyguardManager); + + when(mockKeyguardManager.isDeviceSecure()).thenReturn(true); + assertTrue(plugin.isDeviceSecure()); + + when(mockKeyguardManager.isDeviceSecure()).thenReturn(false); + assertFalse(plugin.isDeviceSecure()); + } + + @Test + @Config(sdk = 30) + public void + canAuthenticateWithDeviceCredential_returnsTrueIfHasBiometricManagerSupportAboveApi30() { + final LocalAuthPlugin plugin = new LocalAuthPlugin(); + final BiometricManager mockBiometricManager = mock(BiometricManager.class); + plugin.setBiometricManager(mockBiometricManager); + + when(mockBiometricManager.canAuthenticate(BiometricManager.Authenticators.DEVICE_CREDENTIAL)) + .thenReturn(BiometricManager.BIOMETRIC_SUCCESS); + assertTrue(plugin.canAuthenticateWithDeviceCredential()); + + when(mockBiometricManager.canAuthenticate(BiometricManager.Authenticators.DEVICE_CREDENTIAL)) + .thenReturn(BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED); + assertFalse(plugin.canAuthenticateWithDeviceCredential()); + } + private Activity buildMockActivityWithContext(Activity mockActivity) { final Context mockContext = mock(Context.class); when(mockActivity.getBaseContext()).thenReturn(mockContext); diff --git a/packages/local_auth/local_auth_android/pubspec.yaml b/packages/local_auth/local_auth_android/pubspec.yaml index 35c2d3af983c..99e9e2c547cc 100644 --- a/packages/local_auth/local_auth_android/pubspec.yaml +++ b/packages/local_auth/local_auth_android/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_android description: Android implementation of the local_auth plugin. repository: https://github.com/flutter/plugins/tree/main/packages/local_auth/local_auth_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 1.0.13 +version: 1.0.14 environment: sdk: ">=2.14.0 <3.0.0" From fed91041ddd9b44ac90015a3f0a1bc77e6404414 Mon Sep 17 00:00:00 2001 From: Julius Bredemeyer <48645716+IVLIVS-III@users.noreply.github.com> Date: Tue, 25 Oct 2022 17:04:05 +0200 Subject: [PATCH 084/133] [in_app_purchase_storekit] Fixup iOS integration test placeholder and remove exclusion (#6604) --- .../example/test_driver/{test => }/integration_test.dart | 0 script/configs/exclude_integration_ios.yaml | 2 -- 2 files changed, 2 deletions(-) rename packages/in_app_purchase/in_app_purchase_storekit/example/test_driver/{test => }/integration_test.dart (100%) diff --git a/packages/in_app_purchase/in_app_purchase_storekit/example/test_driver/test/integration_test.dart b/packages/in_app_purchase/in_app_purchase_storekit/example/test_driver/integration_test.dart similarity index 100% rename from packages/in_app_purchase/in_app_purchase_storekit/example/test_driver/test/integration_test.dart rename to packages/in_app_purchase/in_app_purchase_storekit/example/test_driver/integration_test.dart diff --git a/script/configs/exclude_integration_ios.yaml b/script/configs/exclude_integration_ios.yaml index 19dfdb0350dc..2d535cd4f0dc 100644 --- a/script/configs/exclude_integration_ios.yaml +++ b/script/configs/exclude_integration_ios.yaml @@ -1,5 +1,3 @@ -# Currently missing: https://github.com/flutter/flutter/issues/81695 -- in_app_purchase_storekit # Currently missing: https://github.com/flutter/flutter/issues/82208 - ios_platform_images # Can't use Flutter integration tests due to native modal UI. From 6c025ff15278a91992324c66125838ab5cd15ba4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 17:40:18 +0000 Subject: [PATCH 085/133] [camera]: Bump annotation from 1.1.0 to 1.5.0 in /packages/camera/camera_android/android (#6492) --- packages/camera/camera_android/CHANGELOG.md | 4 ++++ packages/camera/camera_android/android/build.gradle | 2 +- packages/camera/camera_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index af871474f68b..a62d3169e409 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.10.0+4 + +* Upgrades `androidx.annotation` version to 1.5.0. + ## 0.10.0+3 * Updates code for `no_leading_underscores_for_local_identifiers` lint. diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle index b371f2b5d8b7..4fbb2270b556 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle @@ -61,7 +61,7 @@ android { } dependencies { - compileOnly 'androidx.annotation:annotation:1.1.0' + implementation 'androidx.annotation:annotation:1.5.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:4.7.0' testImplementation 'androidx.test:core:1.4.0' diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index a464759c3c46..6f1b667670e8 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android description: Android implementation of the camera plugin. repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.10.0+3 +version: 0.10.0+4 environment: sdk: ">=2.14.0 <3.0.0" From e9975010ce7a4cef29d39cf0597ed4e9363996e5 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 25 Oct 2022 14:29:09 -0400 Subject: [PATCH 086/133] [camera_platform_interface][flutter roll] Fix hashCode tests and manual roll (#6618) --- .ci/flutter_master.version | 2 +- .../test/events/camera_event_test.dart | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 4362c020c5ba..7f1873fb9f55 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -59d26c481acca4e5b086dc6502b45ca31b273c25 +29397c2c7dbb9195c142279ed56dabf5fc9e7b85 diff --git a/packages/camera/camera_platform_interface/test/events/camera_event_test.dart b/packages/camera/camera_platform_interface/test/events/camera_event_test.dart index 3914859d44b0..074f203bea21 100644 --- a/packages/camera/camera_platform_interface/test/events/camera_event_test.dart +++ b/packages/camera/camera_platform_interface/test/events/camera_event_test.dart @@ -136,7 +136,7 @@ void main() { const CameraInitializedEvent event = CameraInitializedEvent( 1, 1024, 640, ExposureMode.auto, true, FocusMode.auto, true); final int expectedHashCode = Object.hash( - event.cameraId, + event.cameraId.hashCode, event.previewWidth, event.previewHeight, event.exposureMode, @@ -222,8 +222,11 @@ void main() { test('hashCode should match hashCode of all properties', () { const CameraResolutionChangedEvent event = CameraResolutionChangedEvent(1, 1024, 640); - final int expectedHashCode = - Object.hash(event.cameraId, event.captureWidth, event.captureHeight); + final int expectedHashCode = Object.hash( + event.cameraId.hashCode, + event.captureWidth, + event.captureHeight, + ); expect(event.hashCode, expectedHashCode); }); @@ -326,7 +329,7 @@ void main() { test('hashCode should match hashCode of all properties', () { const CameraErrorEvent event = CameraErrorEvent(1, 'Error'); final int expectedHashCode = - Object.hash(event.cameraId, event.description); + Object.hash(event.cameraId.hashCode, event.description); expect(event.hashCode, expectedHashCode); }); From 44978fec046c2106281872f3a7fb1d8812e5db4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 19:31:13 +0000 Subject: [PATCH 087/133] [in_app_pur]: Bump gradle from 4.1.0 to 7.3.1 in /packages/in_app_purchase/in_app_purchase_android/android (#6581) --- packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md | 4 ++++ .../in_app_purchase_android/android/build.gradle | 2 +- packages/in_app_purchase/in_app_purchase_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) 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 6540fdfedafe..b595d7e148d9 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+6 + +* Updates android gradle plugin to 7.3.1. + ## 0.2.3+5 * Updates imports for `prefer_relative_imports`. diff --git a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle index 2375acdc856f..84579ce26c43 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.3.1' } } 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 8c57a982937b..555773a47910 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 @@ name: in_app_purchase_android 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+5 +version: 0.2.3+6 environment: sdk: ">=2.14.0 <3.0.0" From e17f931e216d9d390b0cd6ab1c97f4efe3291713 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 19:59:05 +0000 Subject: [PATCH 088/133] [url_launcher]: Bump gradle from 3.4.2 to 4.2.0 in /packages/url_launcher/url_launcher_android/android (#6580) --- packages/url_launcher/url_launcher_android/CHANGELOG.md | 4 ++++ .../url_launcher/url_launcher_android/android/build.gradle | 2 +- packages/url_launcher/url_launcher_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/url_launcher/url_launcher_android/CHANGELOG.md b/packages/url_launcher/url_launcher_android/CHANGELOG.md index c75e93e821a1..7662c69e1b54 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.20 + +* Updates android gradle plugin to 4.2.0. + ## 6.0.19 * Revert gradle back to 3.4.2. diff --git a/packages/url_launcher/url_launcher_android/android/build.gradle b/packages/url_launcher/url_launcher_android/android/build.gradle index 0353973b4ffe..e72288bae582 100644 --- a/packages/url_launcher/url_launcher_android/android/build.gradle +++ b/packages/url_launcher/url_launcher_android/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.4.2' + classpath 'com.android.tools.build:gradle:4.2.0' } } diff --git a/packages/url_launcher/url_launcher_android/pubspec.yaml b/packages/url_launcher/url_launcher_android/pubspec.yaml index db2bddcc54c3..70c47e2abd2c 100644 --- a/packages/url_launcher/url_launcher_android/pubspec.yaml +++ b/packages/url_launcher/url_launcher_android/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher_android 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.19 +version: 6.0.20 environment: sdk: ">=2.14.0 <3.0.0" From 42f55ed93b6feda084c5349633abbe5111ac1700 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Tue, 25 Oct 2022 16:23:14 -0400 Subject: [PATCH 089/133] [various] Update Gradle in examples (#6614) --- .cirrus.yml | 20 ------------------- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 31 files changed, 30 insertions(+), 50 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 89e1405a901e..4a7ec5bb1598 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -247,35 +247,15 @@ task: MAPS_API_KEY: ENCRYPTED[596a9f6bca436694625ac50851dc5da6b4d34cba8025f7db5bc9465142e8cd44e15f69e3507787753accebfc4910d550] GCLOUD_FIREBASE_TESTLAB_KEY: ENCRYPTED[30e6cf7189e3ff3868edc25d2e638ef2aec70546456427064bbc74b297d36145364f49f9d26b327787a59df149d69262] build_script: - # Unsetting CIRRUS_CHANGE_MESSAGE and CIRRUS_COMMIT_MESSAGE as they - # might include non-ASCII characters which makes Gradle crash. - # TODO(stuartmorgan): See https://github.com/flutter/flutter/issues/24935 - - export CIRRUS_CHANGE_MESSAGE="" - - export CIRRUS_COMMIT_MESSAGE="" - ./script/tool_runner.sh build-examples --apk lint_script: - # Unsetting CIRRUS_CHANGE_MESSAGE and CIRRUS_COMMIT_MESSAGE as they - # might include non-ASCII characters which makes Gradle crash. - # TODO(stuartmorgan): See https://github.com/flutter/flutter/issues/24935 - - export CIRRUS_CHANGE_MESSAGE="" - - export CIRRUS_COMMIT_MESSAGE="" - ./script/tool_runner.sh lint-android # must come after build-examples native_unit_test_script: - # Unsetting CIRRUS_CHANGE_MESSAGE and CIRRUS_COMMIT_MESSAGE as they - # might include non-ASCII characters which makes Gradle crash. - # TODO(stuartmorgan): See https://github.com/flutter/flutter/issues/24935 - - export CIRRUS_CHANGE_MESSAGE="" - - export CIRRUS_COMMIT_MESSAGE="" # Native integration tests are handled by firebase-test-lab below, so # only run unit tests. # Must come after build-examples. - ./script/tool_runner.sh native-test --android --no-integration --exclude script/configs/exclude_native_unit_android.yaml firebase_test_lab_script: - # Unsetting CIRRUS_CHANGE_MESSAGE and CIRRUS_COMMIT_MESSAGE as they - # might include non-ASCII characters which makes Gradle crash. - # TODO(stuartmorgan): See https://github.com/flutter/flutter/issues/24935 - - export CIRRUS_CHANGE_MESSAGE="" - - export CIRRUS_COMMIT_MESSAGE="" - if [[ -n "$GCLOUD_FIREBASE_TESTLAB_KEY" ]]; then - echo $GCLOUD_FIREBASE_TESTLAB_KEY > ${HOME}/gcloud-service-key.json - ./script/tool_runner.sh firebase-test-lab --device model=redfin,version=30 --device model=starqlteue,version=26 --exclude=script/configs/exclude_integration_android.yaml diff --git a/packages/camera/camera/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/camera/camera/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/camera/camera/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/camera/camera/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/camera/camera_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/camera/camera_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/camera/camera_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/camera/camera_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_maps_flutter/google_maps_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_maps_flutter/google_maps_flutter/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter/example/android/gradle/wrapper/gradle-wrapper.properties index 9ec7236c631e..296b146b7318 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties index 9ec7236c631e..296b146b7318 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/google_sign_in/google_sign_in/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/google_sign_in/google_sign_in/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_sign_in/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties index 019065d1d650..01a286e96a21 100644 --- a/packages/google_sign_in/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/google_sign_in/google_sign_in_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties index 019065d1d650..01a286e96a21 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/image_picker/image_picker/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/image_picker/image_picker/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/image_picker/image_picker/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/image_picker/image_picker/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/image_picker/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/image_picker/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties index 019065d1d650..01a286e96a21 100644 --- a/packages/image_picker/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/image_picker/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/image_picker/image_picker_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/image_picker/image_picker_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/image_picker/image_picker_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/image_picker/image_picker_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/in_app_purchase/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/in_app_purchase/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/in_app_purchase/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/path_provider/path_provider/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/path_provider/path_provider/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/path_provider/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties index caf54fa2801c..01a286e96a21 100644 --- a/packages/path_provider/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/path_provider/path_provider_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/path_provider/path_provider_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties index caf54fa2801c..01a286e96a21 100644 --- a/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/quick_actions/quick_actions/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/quick_actions/quick_actions/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/quick_actions/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties index 019065d1d650..01a286e96a21 100644 --- a/packages/quick_actions/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/quick_actions/quick_actions_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/quick_actions/quick_actions_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties index 019065d1d650..01a286e96a21 100644 --- a/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/url_launcher/url_launcher/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/url_launcher/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/url_launcher/url_launcher/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/url_launcher/url_launcher/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/url_launcher/url_launcher_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/url_launcher_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/url_launcher/url_launcher_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/url_launcher/url_launcher_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/video_player/video_player_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/video_player/video_player_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/video_player/video_player_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/webview_flutter/webview_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/webview_flutter/webview_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/webview_flutter/webview_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/webview_flutter/webview_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/webview_flutter/webview_flutter/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/webview_flutter/webview_flutter/example/android/gradle/wrapper/gradle-wrapper.properties index 2819f022f1fd..296b146b7318 100644 --- a/packages/webview_flutter/webview_flutter/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/webview_flutter/webview_flutter/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/packages/webview_flutter/webview_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/webview_flutter/webview_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 9a4163a4f5ee..ca9d62814a25 100644 --- a/packages/webview_flutter/webview_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/webview_flutter/webview_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From f5d2d300a82c09ff369936e19bd6ea907f79402c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 21:25:05 +0000 Subject: [PATCH 090/133] [espresso]: Bump gradle from 3.5.0 to 7.3.1 in /packages/espresso/android (#6579) --- packages/espresso/CHANGELOG.md | 4 ++++ packages/espresso/android/build.gradle | 2 +- packages/espresso/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/espresso/CHANGELOG.md b/packages/espresso/CHANGELOG.md index bd04ecde59b6..38726df01fa6 100644 --- a/packages/espresso/CHANGELOG.md +++ b/packages/espresso/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.0+5 + +* Updates android gradle plugin to 7.3.1. + ## 0.2.0+4 * Updates minimum Flutter version to 2.10. diff --git a/packages/espresso/android/build.gradle b/packages/espresso/android/build.gradle index a83e9cce859f..ce461b1ebe55 100644 --- a/packages/espresso/android/build.gradle +++ b/packages/espresso/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:7.3.1' } } diff --git a/packages/espresso/pubspec.yaml b/packages/espresso/pubspec.yaml index c0068ec9883c..16fcbfb3aa2c 100644 --- a/packages/espresso/pubspec.yaml +++ b/packages/espresso/pubspec.yaml @@ -3,7 +3,7 @@ description: Java classes for testing Flutter apps using Espresso. Allows driving Flutter widgets from a native Espresso test. repository: https://github.com/flutter/plugins/tree/main/packages/espresso issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+espresso%22 -version: 0.2.0+4 +version: 0.2.0+5 environment: sdk: ">=2.12.0 <3.0.0" From 5d4c57ad6fc3a582b46c190c52b9fd6401586ae8 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 25 Oct 2022 18:07:08 -0400 Subject: [PATCH 091/133] Roll Flutter from 29397c2c7dbb to 0fe29f585791 (30 revisions) (#6621) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 7f1873fb9f55..dba16e0386bf 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -29397c2c7dbb9195c142279ed56dabf5fc9e7b85 +0fe29f585791e78212c2ba3239e85caa8f2014d9 From 8e8726a5183404b3b6f5e7087345f888c6ff052b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 22:07:10 +0000 Subject: [PATCH 092/133] [google_maps]: Bump gradle from 3.5.4 to 7.3.1 in /packages/google_maps_flutter/google_maps_flutter_android/android (#6582) --- .../google_maps_flutter_android/CHANGELOG.md | 4 ++++ .../google_maps_flutter_android/android/build.gradle | 2 +- .../google_maps_flutter_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) 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 6fbd8d7e0b17..9bc8b195f6e2 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 @@ +## 2.3.3 + +* Update android gradle plugin to 7.3.1. + ## 2.3.2 * Update `com.google.android.gms:play-services-maps` to 18.1.0. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle index 44ad60be4f55..2d507c6cc9fa 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.4' + classpath 'com.android.tools.build:gradle:7.3.1' } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index 798380b5854d..d20322bc6ee1 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.3.2 +version: 2.3.3 environment: sdk: ">=2.14.0 <3.0.0" From cd8bb0a20753182d43bc6244d229770edb09cfbe Mon Sep 17 00:00:00 2001 From: Kevin Moore Date: Wed, 26 Oct 2022 08:14:01 -0700 Subject: [PATCH 093/133] Fix strict language checks (#6622) --- analysis_options.yaml | 2 +- .../google_sign_in_web/lib/src/generated/gapiauth2.dart | 2 +- .../test/fakes/fake_storekit_platform.dart | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 98352af415de..b12af6cf11e6 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -22,7 +22,7 @@ # repository. analyzer: - strong-mode: + language: strict-casts: true strict-raw-types: true errors: diff --git a/packages/google_sign_in/google_sign_in_web/lib/src/generated/gapiauth2.dart b/packages/google_sign_in/google_sign_in_web/lib/src/generated/gapiauth2.dart index e1721668f41f..f474e0d00f69 100644 --- a/packages/google_sign_in/google_sign_in_web/lib/src/generated/gapiauth2.dart +++ b/packages/google_sign_in/google_sign_in_web/lib/src/generated/gapiauth2.dart @@ -12,7 +12,7 @@ // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/gapi.auth2 -// ignore_for_file: public_member_api_docs, unused_element, non_constant_identifier_names, sort_constructors_first, always_specify_types +// ignore_for_file: public_member_api_docs, unused_element, non_constant_identifier_names, sort_constructors_first, always_specify_types, strict_raw_type @JS() library gapiauth2; diff --git a/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart b/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart index e64876deccba..e6b9696c8cb1 100644 --- a/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart +++ b/packages/in_app_purchase/in_app_purchase_storekit/test/fakes/fake_storekit_platform.dart @@ -176,7 +176,7 @@ class FakeStoreKitPlatform { if (call.arguments['applicationUsername'] == 'userWithDiscount') { if (call.arguments['paymentDiscount'] != null) { final Map discountArgument = - call.arguments['paymentDiscount']; + call.arguments['paymentDiscount'] as Map; discountReceived = discountArgument.cast(); } else { discountReceived = {}; From 145976792029a768e8ef20730e314ed463169bfb Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 26 Oct 2022 12:01:14 -0400 Subject: [PATCH 094/133] [various] Remove unused Gradle files (#6623) --- .../android/gradle/wrapper/gradle-wrapper.properties | 6 ------ .../android/gradle/wrapper/gradle-wrapper.properties | 5 ----- .../android/gradle/wrapper/gradle-wrapper.properties | 6 ------ .../android/gradle/wrapper/gradle-wrapper.properties | 5 ----- .../android/gradle/wrapper/gradle-wrapper.properties | 6 ------ 5 files changed, 28 deletions(-) delete mode 100644 packages/espresso/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 packages/flutter_plugin_android_lifecycle/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 packages/in_app_purchase/in_app_purchase_android/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 packages/shared_preferences/shared_preferences_android/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 packages/video_player/video_player_android/android/gradle/wrapper/gradle-wrapper.properties diff --git a/packages/espresso/android/gradle/wrapper/gradle-wrapper.properties b/packages/espresso/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 4751774dd352..000000000000 --- a/packages/espresso/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Tue Nov 26 13:04:21 PST 2019 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/packages/flutter_plugin_android_lifecycle/android/gradle/wrapper/gradle-wrapper.properties b/packages/flutter_plugin_android_lifecycle/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index d757f3d33fcc..000000000000 --- a/packages/flutter_plugin_android_lifecycle/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/packages/in_app_purchase/in_app_purchase_android/android/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase_android/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index baf2285f8c53..000000000000 --- a/packages/in_app_purchase/in_app_purchase_android/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Mon Oct 29 10:30:44 PDT 2018 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/packages/shared_preferences/shared_preferences_android/android/gradle/wrapper/gradle-wrapper.properties b/packages/shared_preferences/shared_preferences_android/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 3c9d0852bfa5..000000000000 --- a/packages/shared_preferences/shared_preferences_android/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/packages/video_player/video_player_android/android/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player_android/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 9f96ce648a03..000000000000 --- a/packages/video_player/video_player_android/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Wed Oct 17 09:04:56 PDT 2018 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip From 98bced009c315f223f1ded1c56b120bc47eb3c21 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 26 Oct 2022 12:21:12 -0400 Subject: [PATCH 095/133] Roll Flutter from 0fe29f585791 to 8b36497946f6 (28 revisions) (#6624) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index dba16e0386bf..8ee8bd4dc03a 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -0fe29f585791e78212c2ba3239e85caa8f2014d9 +8b36497946f601c8199068f19b67ab429e8af9cb From db127f06ef7d8078ec854cc158d770a8a9da69d5 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 26 Oct 2022 14:57:46 -0400 Subject: [PATCH 096/133] Roll Flutter (stable) from d9111f640213 to 6928314d505d (1 revision) (#6626) --- .ci/flutter_stable.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index cc156ea76c97..55a6a928f5b9 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -d9111f64021372856901a1fd5bfbc386cade3318 +6928314d505d2bb4777be05e45d7808a5aa91d2a From 91122ec54c62079507776a5202ca5bb238d494ea Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 26 Oct 2022 15:42:05 -0400 Subject: [PATCH 097/133] Update Gradle and AGP in examples to 7.0 (#6625) --- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../camera/camera/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../camera_android/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- packages/espresso/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../google_maps_flutter/example/pubspec.yaml | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/pubspec.yaml | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../google_sign_in/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../google_sign_in/example/pubspec.yaml | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../google_sign_in_android/example/pubspec.yaml | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../image_picker/example/android/build.gradle | 2 +- .../example/android/gradle.properties | 1 - .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../in_app_purchase/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../local_auth/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../path_provider/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../quick_actions/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../quick_actions/example/pubspec.yaml | 2 +- .../example/android/app/build.gradle | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../quick_actions_android/example/pubspec.yaml | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../url_launcher/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../example/android/app/build.gradle | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../webview_flutter/example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../webview_flutter/example/pubspec.yaml | 2 +- .../app/gradle/wrapper/gradle-wrapper.properties | 2 +- .../webview_flutter_web/example/pubspec.yaml | 1 - .../example/pubspec.yaml | 1 - .../tool/lib/src/common/package_state_utils.dart | 15 +++++++++++++++ .../test/common/package_state_utils_test.dart | 16 ++++++++++++++-- 76 files changed, 100 insertions(+), 76 deletions(-) diff --git a/packages/camera/camera/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/camera/camera/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/camera/camera/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/camera/camera/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/camera/camera/example/android/build.gradle b/packages/camera/camera/example/android/build.gradle index 456d020f6e2c..c21bff8e0a2f 100644 --- a/packages/camera/camera/example/android/build.gradle +++ b/packages/camera/camera/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/camera/camera/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/camera/camera/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/camera/camera/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/camera/camera/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/camera/camera_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/camera/camera_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/camera/camera_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/camera/camera_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/camera/camera_android/example/android/build.gradle b/packages/camera/camera_android/example/android/build.gradle index 456d020f6e2c..c21bff8e0a2f 100644 --- a/packages/camera/camera_android/example/android/build.gradle +++ b/packages/camera/camera_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/camera/camera_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/camera/camera_android/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/camera/camera_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/camera/camera_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/espresso/example/android/build.gradle b/packages/espresso/example/android/build.gradle index 456d020f6e2c..c21bff8e0a2f 100644 --- a/packages/espresso/example/android/build.gradle +++ b/packages/espresso/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/espresso/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/espresso/example/android/gradle/wrapper/gradle-wrapper.properties index 296b146b7318..b8793d3c0d69 100644 --- a/packages/espresso/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/espresso/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/flutter_plugin_android_lifecycle/example/android/build.gradle b/packages/flutter_plugin_android_lifecycle/example/android/build.gradle index 456d020f6e2c..c21bff8e0a2f 100644 --- a/packages/flutter_plugin_android_lifecycle/example/android/build.gradle +++ b/packages/flutter_plugin_android_lifecycle/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/flutter_plugin_android_lifecycle/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/flutter_plugin_android_lifecycle/example/android/gradle/wrapper/gradle-wrapper.properties index 296b146b7318..b8793d3c0d69 100644 --- a/packages/flutter_plugin_android_lifecycle/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/flutter_plugin_android_lifecycle/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/google_maps_flutter/google_maps_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_maps_flutter/google_maps_flutter/example/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter/example/android/build.gradle index 4d8d45d13a0b..c21bff8e0a2f 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.4' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/google_maps_flutter/google_maps_flutter/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter/example/android/gradle/wrapper/gradle-wrapper.properties index 296b146b7318..b8793d3c0d69 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml index ad1ff2cad0a7..b86f05f3360a 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: google_maps_flutter_platform_interface: ^2.2.1 dev_dependencies: - espresso: ^0.1.0+2 + espresso: ^0.2.0 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/example/android/build.gradle index 4d8d45d13a0b..c21bff8e0a2f 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.4' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties index 296b146b7318..b8793d3c0d69 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml index bc9a4dd03657..07decea39920 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: dev_dependencies: build_runner: ^2.1.10 - espresso: ^0.1.0+2 + espresso: ^0.2.0 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/google_sign_in/google_sign_in/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/google_sign_in/google_sign_in/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_sign_in/google_sign_in/example/android/build.gradle b/packages/google_sign_in/google_sign_in/example/android/build.gradle index e101ac08df55..c21bff8e0a2f 100644 --- a/packages/google_sign_in/google_sign_in/example/android/build.gradle +++ b/packages/google_sign_in/google_sign_in/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/google_sign_in/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/google_sign_in/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/google_sign_in/google_sign_in/example/pubspec.yaml b/packages/google_sign_in/google_sign_in/example/pubspec.yaml index b836ffea4664..fbf8f7cf0591 100644 --- a/packages/google_sign_in/google_sign_in/example/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in/example/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: http: ^0.13.0 dev_dependencies: - espresso: ^0.1.0+2 + espresso: ^0.2.0 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/google_sign_in/google_sign_in_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/google_sign_in/google_sign_in_android/example/android/build.gradle b/packages/google_sign_in/google_sign_in_android/example/android/build.gradle index e101ac08df55..c21bff8e0a2f 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/build.gradle +++ b/packages/google_sign_in/google_sign_in_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml index f81df99b7d28..5ac2240cbba1 100644 --- a/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: http: ^0.13.0 dev_dependencies: - espresso: ^0.1.0+2 + espresso: ^0.2.0 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/image_picker/image_picker/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/image_picker/image_picker/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/image_picker/image_picker/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/image_picker/image_picker/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/image_picker/image_picker/example/android/build.gradle b/packages/image_picker/image_picker/example/android/build.gradle index e101ac08df55..c21bff8e0a2f 100755 --- a/packages/image_picker/image_picker/example/android/build.gradle +++ b/packages/image_picker/image_picker/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/image_picker/image_picker/example/android/gradle.properties b/packages/image_picker/image_picker/example/android/gradle.properties index 6effed032590..38c8d4544ff1 100755 --- a/packages/image_picker/image_picker/example/android/gradle.properties +++ b/packages/image_picker/image_picker/example/android/gradle.properties @@ -2,4 +2,3 @@ org.gradle.jvmargs=-Xmx1536M android.enableR8=true android.useAndroidX=true android.enableJetifier=true -android.enableUnitTestBinaryResources=true diff --git a/packages/image_picker/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/image_picker/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/image_picker/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/image_picker/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/image_picker/image_picker_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/image_picker/image_picker_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/image_picker/image_picker_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/image_picker/image_picker_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/in_app_purchase/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/in_app_purchase/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/in_app_purchase/in_app_purchase/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/in_app_purchase/in_app_purchase/example/android/build.gradle b/packages/in_app_purchase/in_app_purchase/example/android/build.gradle index 0b4cf534e0aa..c21bff8e0a2f 100644 --- a/packages/in_app_purchase/in_app_purchase/example/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/in_app_purchase/in_app_purchase/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase/example/android/gradle/wrapper/gradle-wrapper.properties index bc6a58afdda2..b8793d3c0d69 100644 --- a/packages/in_app_purchase/in_app_purchase/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/in_app_purchase/in_app_purchase/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle index 0b4cf534e0aa..c21bff8e0a2f 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties index bc6a58afdda2..b8793d3c0d69 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/local_auth/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties index 186b71557c50..29e413457635 100644 --- a/packages/local_auth/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/local_auth/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/local_auth/local_auth/example/android/build.gradle b/packages/local_auth/local_auth/example/android/build.gradle index 54c943621de5..c21bff8e0a2f 100644 --- a/packages/local_auth/local_auth/example/android/build.gradle +++ b/packages/local_auth/local_auth/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/local_auth/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties index cd9fe1c68282..3f383641d7c3 100644 --- a/packages/local_auth/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/local_auth/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/local_auth/local_auth_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index 186b71557c50..29e413457635 100644 --- a/packages/local_auth/local_auth_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/local_auth/local_auth_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/local_auth/local_auth_android/example/android/build.gradle b/packages/local_auth/local_auth_android/example/android/build.gradle index 54c943621de5..c21bff8e0a2f 100644 --- a/packages/local_auth/local_auth_android/example/android/build.gradle +++ b/packages/local_auth/local_auth_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties index cd9fe1c68282..3f383641d7c3 100644 --- a/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/path_provider/path_provider/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/path_provider/path_provider/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/path_provider/path_provider/example/android/build.gradle b/packages/path_provider/path_provider/example/android/build.gradle index e101ac08df55..c21bff8e0a2f 100644 --- a/packages/path_provider/path_provider/example/android/build.gradle +++ b/packages/path_provider/path_provider/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/path_provider/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/path_provider/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/path_provider/path_provider_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/path_provider/path_provider_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/path_provider/path_provider_android/example/android/build.gradle b/packages/path_provider/path_provider_android/example/android/build.gradle index e101ac08df55..c21bff8e0a2f 100644 --- a/packages/path_provider/path_provider_android/example/android/build.gradle +++ b/packages/path_provider/path_provider_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/quick_actions/quick_actions/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/quick_actions/quick_actions/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/quick_actions/quick_actions/example/android/build.gradle b/packages/quick_actions/quick_actions/example/android/build.gradle index e101ac08df55..c21bff8e0a2f 100644 --- a/packages/quick_actions/quick_actions/example/android/build.gradle +++ b/packages/quick_actions/quick_actions/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/quick_actions/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/quick_actions/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/quick_actions/quick_actions/example/pubspec.yaml b/packages/quick_actions/quick_actions/example/pubspec.yaml index 46be008390d8..1a10a653db06 100644 --- a/packages/quick_actions/quick_actions/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions/example/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: path: ../ dev_dependencies: - espresso: ^0.1.0+2 + espresso: ^0.2.0 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/quick_actions/quick_actions_android/example/android/app/build.gradle b/packages/quick_actions/quick_actions_android/example/android/app/build.gradle index d01dce6dab26..666194bc11b0 100644 --- a/packages/quick_actions/quick_actions_android/example/android/app/build.gradle +++ b/packages/quick_actions/quick_actions_android/example/android/app/build.gradle @@ -27,7 +27,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" def androidXTestVersion = '1.2.0' android { - compileSdkVersion 31 + compileSdkVersion 32 lintOptions { disable 'InvalidPackage' diff --git a/packages/quick_actions/quick_actions_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/quick_actions/quick_actions_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/quick_actions/quick_actions_android/example/android/build.gradle b/packages/quick_actions/quick_actions_android/example/android/build.gradle index e101ac08df55..c21bff8e0a2f 100644 --- a/packages/quick_actions/quick_actions_android/example/android/build.gradle +++ b/packages/quick_actions/quick_actions_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties index 01a286e96a21..297f2fec363f 100644 --- a/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/quick_actions/quick_actions_android/example/pubspec.yaml b/packages/quick_actions/quick_actions_android/example/pubspec.yaml index 17d50f5d0829..c560d4dd5f1e 100644 --- a/packages/quick_actions/quick_actions_android/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/example/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: path: ../ dev_dependencies: - espresso: ^0.1.0+2 + espresso: ^0.2.0 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/url_launcher/url_launcher/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/url_launcher/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/url_launcher/url_launcher/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/url_launcher/url_launcher/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/url_launcher/url_launcher/example/android/build.gradle b/packages/url_launcher/url_launcher/example/android/build.gradle index 328175bb6ac5..c21bff8e0a2f 100644 --- a/packages/url_launcher/url_launcher/example/android/build.gradle +++ b/packages/url_launcher/url_launcher/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/url_launcher/url_launcher/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/url_launcher/example/android/gradle/wrapper/gradle-wrapper.properties index 4ae10e927b38..e7c709db2454 100644 --- a/packages/url_launcher/url_launcher/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/url_launcher/url_launcher/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/url_launcher/url_launcher_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/url_launcher_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/url_launcher/url_launcher_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/url_launcher/url_launcher_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/url_launcher/url_launcher_android/example/android/build.gradle b/packages/url_launcher/url_launcher_android/example/android/build.gradle index 328175bb6ac5..c21bff8e0a2f 100644 --- a/packages/url_launcher/url_launcher_android/example/android/build.gradle +++ b/packages/url_launcher/url_launcher_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties index 4ae10e927b38..e7c709db2454 100644 --- a/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/video_player/video_player_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/video_player/video_player_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/video_player/video_player_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/webview_flutter/webview_flutter/example/android/app/build.gradle b/packages/webview_flutter/webview_flutter/example/android/app/build.gradle index 8548d5b30ddd..968eed6cad85 100644 --- a/packages/webview_flutter/webview_flutter/example/android/app/build.gradle +++ b/packages/webview_flutter/webview_flutter/example/android/app/build.gradle @@ -25,7 +25,7 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 31 + compileSdkVersion 32 lintOptions { disable 'InvalidPackage' diff --git a/packages/webview_flutter/webview_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/webview_flutter/webview_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/webview_flutter/webview_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/webview_flutter/webview_flutter/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/webview_flutter/webview_flutter/example/android/build.gradle b/packages/webview_flutter/webview_flutter/example/android/build.gradle index e101ac08df55..c21bff8e0a2f 100644 --- a/packages/webview_flutter/webview_flutter/example/android/build.gradle +++ b/packages/webview_flutter/webview_flutter/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.0.1' } } diff --git a/packages/webview_flutter/webview_flutter/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/webview_flutter/webview_flutter/example/android/gradle/wrapper/gradle-wrapper.properties index 296b146b7318..b8793d3c0d69 100644 --- a/packages/webview_flutter/webview_flutter/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/webview_flutter/webview_flutter/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/packages/webview_flutter/webview_flutter/example/pubspec.yaml b/packages/webview_flutter/webview_flutter/example/pubspec.yaml index 7af8b2f9dcc4..6b01b53ee4a3 100644 --- a/packages/webview_flutter/webview_flutter/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/example/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: path: ../ dev_dependencies: - espresso: ^0.1.0+2 + espresso: ^0.2.0 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/webview_flutter/webview_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/webview_flutter/webview_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties index ca9d62814a25..29e413457635 100644 --- a/packages/webview_flutter/webview_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties +++ b/packages/webview_flutter/webview_flutter_android/example/android/app/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml b/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml index 7ceb586a9316..e2e0796e7ea3 100644 --- a/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml @@ -20,7 +20,6 @@ dependencies: path: ../ dev_dependencies: - espresso: ^0.1.0+2 flutter_driver: sdk: flutter flutter_test: diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/example/pubspec.yaml index 495f5aeb87e6..a3f65b861944 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/pubspec.yaml @@ -19,7 +19,6 @@ dependencies: path: ../ dev_dependencies: - espresso: ^0.1.0+2 flutter_driver: sdk: flutter flutter_test: diff --git a/script/tool/lib/src/common/package_state_utils.dart b/script/tool/lib/src/common/package_state_utils.dart index a0c82400e1db..65f311974f3a 100644 --- a/script/tool/lib/src/common/package_state_utils.dart +++ b/script/tool/lib/src/common/package_state_utils.dart @@ -173,10 +173,25 @@ Future _isDevChange(List pathComponents, pathComponents.first == 'run_tests.sh' || // Ignoring lints doesn't affect clients. pathComponents.contains('lint-baseline.xml') || + // Example build files are very unlikely to be interesting to clients. + _isExampleBuildFile(pathComponents) || + // Test-only gradle depenedencies don't affect clients. await _isGradleTestDependencyChange(pathComponents, git: git, repoPath: repoPath); } +bool _isExampleBuildFile(List pathComponents) { + if (!pathComponents.contains('example')) { + return false; + } + return pathComponents.contains('gradle-wrapper.properties') || + pathComponents.contains('gradle.properties') || + pathComponents.contains('build.gradle') || + pathComponents.contains('Runner.xcodeproj') || + pathComponents.contains('CMakeLists.txt') || + pathComponents.contains('pubspec.yaml'); +} + Future _isGradleTestDependencyChange(List pathComponents, {GitVersionFinder? git, String? repoPath}) async { if (git == null) { diff --git a/script/tool/test/common/package_state_utils_test.dart b/script/tool/test/common/package_state_utils_test.dart index c20951876e39..c9ae5ba4c742 100644 --- a/script/tool/test/common/package_state_utils_test.dart +++ b/script/tool/test/common/package_state_utils_test.dart @@ -61,13 +61,25 @@ void main() { createFakePlugin('a_plugin', packagesDir); const List changedFiles = [ + 'packages/a_plugin/CHANGELOG.md', + // Analysis. 'packages/a_plugin/example/android/lint-baseline.xml', + // Tests. 'packages/a_plugin/example/android/src/androidTest/foo/bar/FooTest.java', 'packages/a_plugin/example/ios/RunnerTests/Foo.m', 'packages/a_plugin/example/ios/RunnerUITests/info.plist', - 'packages/a_plugin/tool/a_development_tool.dart', + // Test scripts. 'packages/a_plugin/run_tests.sh', - 'packages/a_plugin/CHANGELOG.md', + // Tools. + 'packages/a_plugin/tool/a_development_tool.dart', + // Example build files. + 'packages/a_plugin/example/android/build.gradle', + 'packages/a_plugin/example/android/gradle/wrapper/gradle-wrapper.properties', + 'packages/a_plugin/example/ios/Runner.xcodeproj/project.pbxproj', + 'packages/a_plugin/example/linux/flutter/CMakeLists.txt', + 'packages/a_plugin/example/macos/Runner.xcodeproj/project.pbxproj', + 'packages/a_plugin/example/windows/CMakeLists.txt', + 'packages/a_plugin/example/pubspec.yaml', ]; final PackageChangeState state = await checkPackageChangeState(package, From 655599b9222c8322cd0c0e36ade25e2033892fcf Mon Sep 17 00:00:00 2001 From: Vanesa Oshiro <64811191+VanesaOshiro@users.noreply.github.com> Date: Wed, 26 Oct 2022 17:35:04 -0300 Subject: [PATCH 098/133] [file_selector] Include the missing GetDirectoryPath method example and table of supported platforms (#6454) --- .../file_selector/file_selector/CHANGELOG.md | 3 +- .../file_selector/file_selector/README.md | 29 +++++++++++++++++-- .../lib/readme_standalone_excerpts.dart | 10 +++++++ .../file_selector/file_selector/pubspec.yaml | 2 +- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/packages/file_selector/file_selector/CHANGELOG.md b/packages/file_selector/file_selector/CHANGELOG.md index 06d01090edc0..7983aa57561f 100644 --- a/packages/file_selector/file_selector/CHANGELOG.md +++ b/packages/file_selector/file_selector/CHANGELOG.md @@ -1,5 +1,6 @@ -## 0.9.2+1 +## 0.9.2+2 +* Improves API docs and examples. * Changes XTypeGroup initialization from final to const. * Updates minimum Flutter version to 2.10. diff --git a/packages/file_selector/file_selector/README.md b/packages/file_selector/file_selector/README.md index 97433584b87a..938e796b879c 100644 --- a/packages/file_selector/file_selector/README.md +++ b/packages/file_selector/file_selector/README.md @@ -11,6 +11,7 @@ A Flutter plugin that manages files and interactions with file dialogs. | **Support** | iOS 9+ | Any | 10.11+ | Any | Windows 10+ | ## Usage + To use this plugin, add `file_selector` as a [dependency in your pubspec.yaml file](https://flutter.dev/platform-plugins/). ### macOS @@ -28,10 +29,12 @@ or read/write access: depending on your use case. ### Examples + Here are small examples that show you how to use the API. Please also take a look at our [example][example] app. #### Open a single file + ``` dart const XTypeGroup typeGroup = XTypeGroup( @@ -43,6 +46,7 @@ final XFile? file = ``` #### Open multiple files at once + ``` dart const XTypeGroup jpgsTypeGroup = XTypeGroup( @@ -59,7 +63,8 @@ final List files = await openFiles(acceptedTypeGroups: [ ]); ``` -#### Saving a file +#### Save a file + ```dart const String fileName = 'suggested_name.txt'; @@ -76,6 +81,17 @@ final XFile textFile = await textFile.saveTo(path); ``` +#### Get a directory path + + +```dart +final String? directoryPath = await getDirectoryPath(); +if (directoryPath == null) { + // Operation was canceled by the user. + return; +} +``` + ### Filtering by file types Different platforms support different type group filter options. To avoid @@ -92,5 +108,14 @@ pass different `XTypeGroup`s based on `Platform`. † `mimeTypes` are not supported on version of macOS earlier than 11 (Big Sur). +### Features supported by platform + +| Feature | Description | iOS | Linux | macOS | Windows | Web | +| ---------------------- |----------------------------------- |--------- | ---------- | -------- | ------------ | ----------- | +| Choose a single file | Pick a file/image | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| Choose multiple files | Pick multiple files/images | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| Choose a save location | Pick a directory to save a file in | ❌ | ✔️ | ✔️ | ✔️ | ❌ | +| Choose a directory | Pick a folder and get its path | ❌ | ✔️ | ✔️ | ✔️ | ❌ | + [example]:./example -[entitlement]: https://docs.flutter.dev/desktop#entitlements-and-the-app-sandbox +[entitlement]: https://docs.flutter.dev/desktop#entitlements-and-the-app-sandbox \ No newline at end of file diff --git a/packages/file_selector/file_selector/example/lib/readme_standalone_excerpts.dart b/packages/file_selector/file_selector/example/lib/readme_standalone_excerpts.dart index c67c93fa63f2..f8126045019a 100644 --- a/packages/file_selector/file_selector/example/lib/readme_standalone_excerpts.dart +++ b/packages/file_selector/file_selector/example/lib/readme_standalone_excerpts.dart @@ -54,4 +54,14 @@ class _MyAppState extends State { await textFile.saveTo(path); // #enddocregion Save } + + Future directoryPath() async { + // #docregion GetDirectory + final String? directoryPath = await getDirectoryPath(); + if (directoryPath == null) { + // Operation was canceled by the user. + return; + } + // #enddocregion GetDirectory + } } diff --git a/packages/file_selector/file_selector/pubspec.yaml b/packages/file_selector/file_selector/pubspec.yaml index cae08e47eeb1..ad187d6f446a 100644 --- a/packages/file_selector/file_selector/pubspec.yaml +++ b/packages/file_selector/file_selector/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for opening and saving files, or selecting directories, using native file selection UI. repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.2+1 +version: 0.9.2+2 environment: sdk: ">=2.12.0 <3.0.0" From efef3ab28eb4a9fa4f1aa36e82becf1699bdc968 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Oct 2022 16:42:02 +0000 Subject: [PATCH 099/133] [gh_actions]: Bump actions/upload-artifact from 3.1.0 to 3.1.1 (#6608) --- .github/workflows/scorecards-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 22a0c413d8bc..55fa7f14591e 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -42,7 +42,7 @@ jobs: # Upload the results as artifacts (optional). - name: "Upload artifact" - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 + uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb with: name: SARIF file path: results.sarif From 27dcab189e438cb0321337aa30e031183790efc2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Oct 2022 20:15:29 +0000 Subject: [PATCH 100/133] [in_app_pur]: Bump json from 20220320 to 20220924 in /packages/in_app_purchase/in_app_purchase_android/android (#6490) --- .../in_app_purchase_android/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle index 84579ce26c43..704ab36c253b 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle @@ -57,7 +57,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.3.0' implementation 'com.android.billingclient:billing:5.0.0' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.json:json:20220320' + testImplementation 'org.json:json:20220924' testImplementation 'org.mockito:mockito-core:4.7.0' androidTestImplementation 'androidx.test:runner:1.4.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' From 204724a646bc20baa7c447502917d5f0bd24db59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Oct 2022 20:15:31 +0000 Subject: [PATCH 101/133] [in_app_pur]: Bump json from 20180813 to 20220924 in /packages/in_app_purchase/in_app_purchase_android/example/android/app (#6482) --- .../in_app_purchase_android/example/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle b/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle index e2ec6af97c7a..281f349989be 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/app/build.gradle @@ -109,7 +109,7 @@ dependencies { implementation 'com.android.billingclient:billing:5.0.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:4.7.0' - testImplementation 'org.json:json:20180813' + testImplementation 'org.json:json:20220924' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } From 2eb9a1b8372fcffc97966d11271d463d6cca970f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Oct 2022 12:41:25 +0000 Subject: [PATCH 102/133] [gh_actions]: Bump lewagon/wait-on-check-action from 1.1.2 to 1.2.0 (#6611) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7008ebfa8966..292db55dede7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,7 +36,7 @@ jobs: # This workflow should be the last to run. So wait for all the other tests to succeed. - name: Wait on all tests - uses: lewagon/wait-on-check-action@e2558238c09778af25867eb5de5a3ce4bbae3dcd + uses: lewagon/wait-on-check-action@3a563271c3f8d1611ed7352809303617ee7e54ac with: ref: ${{ github.sha }} running-workflow-name: 'release' From 6f911222751604b579db7937254da648e00d6e7e Mon Sep 17 00:00:00 2001 From: Julius Bredemeyer <48645716+IVLIVS-III@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:09:30 +0200 Subject: [PATCH 103/133] [tool] Update tool to set macOS deployment target to 10.15. (#6605) --- .../src/create_all_plugins_app_command.dart | 87 +++++++++++++++++- .../create_all_plugins_app_command_test.dart | 90 +++++++++++++++++++ 2 files changed, 175 insertions(+), 2 deletions(-) diff --git a/script/tool/lib/src/create_all_plugins_app_command.dart b/script/tool/lib/src/create_all_plugins_app_command.dart index a23dc83d98f3..ea7d5a5c4388 100644 --- a/script/tool/lib/src/create_all_plugins_app_command.dart +++ b/script/tool/lib/src/create_all_plugins_app_command.dart @@ -6,22 +6,30 @@ import 'dart:io' as io; import 'package:file/file.dart'; import 'package:path/path.dart' as p; +import 'package:platform/platform.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:pubspec_parse/pubspec_parse.dart'; import 'common/core.dart'; import 'common/package_command.dart'; +import 'common/process_runner.dart'; import 'common/repository_package.dart'; const String _outputDirectoryFlag = 'output-dir'; +const int _exitUpdateMacosPodfileFailed = 3; +const int _exitUpdateMacosPbxprojFailed = 4; +const int _exitGenNativeBuildFilesFailed = 5; + /// A command to create an application that builds all in a single application. class CreateAllPluginsAppCommand extends PackageCommand { /// Creates an instance of the builder command. CreateAllPluginsAppCommand( Directory packagesDir, { + ProcessRunner processRunner = const ProcessRunner(), Directory? pluginsRoot, - }) : super(packagesDir) { + Platform platform = const LocalPlatform(), + }) : super(packagesDir, processRunner: processRunner, platform: platform) { final Directory defaultDir = pluginsRoot ?? packagesDir.fileSystem.currentDirectory; argParser.addOption(_outputDirectoryFlag, @@ -61,10 +69,28 @@ class CreateAllPluginsAppCommand extends PackageCommand { print(''); } + await _genPubspecWithAllPlugins(); + + // Run `flutter pub get` to generate all native build files. + // TODO(stuartmorgan): This hangs on Windows for some reason. Since it's + // currently not needed on Windows, skip it there, but we should investigate + // further and/or implement https://github.com/flutter/flutter/issues/93407, + // and remove the need for this conditional. + if (!platform.isWindows) { + if (!await _genNativeBuildFiles()) { + printError( + "Failed to generate native build files via 'flutter pub get'"); + throw ToolExit(_exitGenNativeBuildFilesFailed); + } + } + await Future.wait(>[ - _genPubspecWithAllPlugins(), _updateAppGradle(), _updateManifest(), + _updateMacosPbxproj(), + // This step requires the native file generation triggered by + // flutter pub get above, so can't currently be run on Windows. + if (!platform.isWindows) _updateMacosPodfile(), ]); } @@ -259,4 +285,61 @@ dev_dependencies:${_pubspecMapString(pubspec.devDependencies)} return buffer.toString(); } + + Future _genNativeBuildFiles() async { + final int exitCode = await processRunner.runAndStream( + flutterCommand, + ['pub', 'get'], + workingDir: _appDirectory, + ); + return exitCode == 0; + } + + Future _updateMacosPodfile() async { + /// Only change the macOS deployment target if the host platform is macOS. + /// The Podfile is not generated on other platforms. + if (!platform.isMacOS) { + return; + } + + final File podfileFile = + app.platformDirectory(FlutterPlatform.macos).childFile('Podfile'); + if (!podfileFile.existsSync()) { + printError("Can't find Podfile for macOS"); + throw ToolExit(_exitUpdateMacosPodfileFailed); + } + + final StringBuffer newPodfile = StringBuffer(); + for (final String line in podfileFile.readAsLinesSync()) { + if (line.contains('platform :osx')) { + // macOS 10.15 is required by in_app_purchase. + newPodfile.writeln("platform :osx, '10.15'"); + } else { + newPodfile.writeln(line); + } + } + podfileFile.writeAsStringSync(newPodfile.toString()); + } + + Future _updateMacosPbxproj() async { + final File pbxprojFile = app + .platformDirectory(FlutterPlatform.macos) + .childDirectory('Runner.xcodeproj') + .childFile('project.pbxproj'); + if (!pbxprojFile.existsSync()) { + printError("Can't find project.pbxproj for macOS"); + throw ToolExit(_exitUpdateMacosPbxprojFailed); + } + + final StringBuffer newPbxproj = StringBuffer(); + for (final String line in pbxprojFile.readAsLinesSync()) { + if (line.contains('MACOSX_DEPLOYMENT_TARGET')) { + // macOS 10.15 is required by in_app_purchase. + newPbxproj.writeln(' MACOSX_DEPLOYMENT_TARGET = 10.15;'); + } else { + newPbxproj.writeln(line); + } + } + pbxprojFile.writeAsStringSync(newPbxproj.toString()); + } } diff --git a/script/tool/test/create_all_plugins_app_command_test.dart b/script/tool/test/create_all_plugins_app_command_test.dart index 830dd59a8d42..cb2347fe9cc8 100644 --- a/script/tool/test/create_all_plugins_app_command_test.dart +++ b/script/tool/test/create_all_plugins_app_command_test.dart @@ -7,10 +7,12 @@ import 'dart:io' as io; import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:file/local.dart'; +import 'package:flutter_plugin_tools/src/common/core.dart'; import 'package:flutter_plugin_tools/src/create_all_plugins_app_command.dart'; import 'package:platform/platform.dart'; import 'package:test/test.dart'; +import 'mocks.dart'; import 'util.dart'; void main() { @@ -20,6 +22,7 @@ void main() { late FileSystem fileSystem; late Directory testRoot; late Directory packagesDir; + late RecordingProcessRunner processRunner; setUp(() { // Since the core of this command is a call to 'flutter create', the test @@ -28,9 +31,11 @@ void main() { fileSystem = const LocalFileSystem(); testRoot = fileSystem.systemTempDirectory.createTempSync(); packagesDir = testRoot.childDirectory('packages'); + processRunner = RecordingProcessRunner(); command = CreateAllPluginsAppCommand( packagesDir, + processRunner: processRunner, pluginsRoot: testRoot, ); runner = CommandRunner( @@ -103,6 +108,91 @@ void main() { baselinePubspec.environment?[dartSdkKey]); }); + test('macOS deployment target is modified in Podfile', () async { + createFakePlugin('plugina', packagesDir); + + final File podfileFile = command.packagesDir.parent + .childDirectory('all_plugins') + .childDirectory('macos') + .childFile('Podfile'); + podfileFile.createSync(recursive: true); + podfileFile.writeAsStringSync(""" +platform :osx, '10.11' +# some other line +"""); + + await runCapturingPrint(runner, ['all-plugins-app']); + final List podfile = command.app + .platformDirectory(FlutterPlatform.macos) + .childFile('Podfile') + .readAsLinesSync(); + + expect( + podfile, + everyElement((String line) => + !line.contains('platform :osx') || line.contains("'10.15'"))); + }, + // Podfile is only generated (and thus only edited) on macOS. + skip: !io.Platform.isMacOS); + + test('macOS deployment target is modified in pbxproj', () async { + createFakePlugin('plugina', packagesDir); + + await runCapturingPrint(runner, ['all-plugins-app']); + final List pbxproj = command.app + .platformDirectory(FlutterPlatform.macos) + .childDirectory('Runner.xcodeproj') + .childFile('project.pbxproj') + .readAsLinesSync(); + + expect( + pbxproj, + everyElement((String line) => + !line.contains('MACOSX_DEPLOYMENT_TARGET') || + line.contains('10.15'))); + }); + + test('calls flutter pub get', () async { + createFakePlugin('plugina', packagesDir); + + await runCapturingPrint(runner, ['all-plugins-app']); + + expect( + processRunner.recordedCalls, + orderedEquals([ + ProcessCall( + getFlutterCommand(const LocalPlatform()), + const ['pub', 'get'], + testRoot.childDirectory('all_plugins').path), + ])); + }, + // See comment about Windows in create_all_plugins_app_command.dart + skip: io.Platform.isWindows); + + test('fails if flutter pub get fails', () async { + createFakePlugin('plugina', packagesDir); + + processRunner.mockProcessesForExecutable[ + getFlutterCommand(const LocalPlatform())] = [ + MockProcess(exitCode: 1) + ]; + Error? commandError; + final List output = await runCapturingPrint( + runner, ['all-plugins-app'], errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains( + "Failed to generate native build files via 'flutter pub get'"), + ])); + }, + // See comment about Windows in create_all_plugins_app_command.dart + skip: io.Platform.isWindows); + test('handles --output-dir', () async { createFakePlugin('plugina', packagesDir); From def545731a453d88ec6a30d22b8ccec8844d6c2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:47:14 +0000 Subject: [PATCH 104/133] [url_launcher]: Bump annotation from 1.0.0 to 1.5.0 in /packages/url_launcher/url_launcher_android/android (#6487) --- packages/url_launcher/url_launcher_android/CHANGELOG.md | 4 ++++ .../url_launcher/url_launcher_android/android/build.gradle | 4 ++-- packages/url_launcher/url_launcher_android/pubspec.yaml | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/url_launcher/url_launcher_android/CHANGELOG.md b/packages/url_launcher/url_launcher_android/CHANGELOG.md index 7662c69e1b54..934d8da556b7 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.21 + +* Updates androidx.annotation to 1.2.0. + ## 6.0.20 * Updates android gradle plugin to 4.2.0. diff --git a/packages/url_launcher/url_launcher_android/android/build.gradle b/packages/url_launcher/url_launcher_android/android/build.gradle index e72288bae582..dbd68d99c1a2 100644 --- a/packages/url_launcher/url_launcher_android/android/build.gradle +++ b/packages/url_launcher/url_launcher_android/android/build.gradle @@ -22,7 +22,7 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { minSdkVersion 16 @@ -49,7 +49,7 @@ android { } dependencies { - compileOnly 'androidx.annotation:annotation:1.0.0' + compileOnly 'androidx.annotation:annotation:1.2.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:4.8.0' testImplementation 'androidx.test:core:1.0.0' diff --git a/packages/url_launcher/url_launcher_android/pubspec.yaml b/packages/url_launcher/url_launcher_android/pubspec.yaml index 70c47e2abd2c..e97fde31b2e0 100644 --- a/packages/url_launcher/url_launcher_android/pubspec.yaml +++ b/packages/url_launcher/url_launcher_android/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher_android 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.20 +version: 6.0.21 environment: sdk: ">=2.14.0 <3.0.0" From 91d7fe59ab03882708e8c4cecc358554d46eae85 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 28 Oct 2022 15:19:25 -0400 Subject: [PATCH 105/133] [quick_actions_android] Manual roll to ignore failing `appShortcutLaunchActivityAfterStarting` test (#6633) --- .ci/flutter_master.version | 2 +- .../flutter/plugins/quickactionsexample/QuickActionsTest.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 8ee8bd4dc03a..68543c61125f 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -8b36497946f601c8199068f19b67ab429e8af9cb +ea0ddc94ccc63cec77bcac3ef02832806adcd667 diff --git a/packages/quick_actions/quick_actions_android/example/android/app/src/androidTest/java/io/flutter/plugins/quickactionsexample/QuickActionsTest.java b/packages/quick_actions/quick_actions_android/example/android/app/src/androidTest/java/io/flutter/plugins/quickactionsexample/QuickActionsTest.java index 8b50fd7a90eb..cfcef3e1c76f 100644 --- a/packages/quick_actions/quick_actions_android/example/android/app/src/androidTest/java/io/flutter/plugins/quickactionsexample/QuickActionsTest.java +++ b/packages/quick_actions/quick_actions_android/example/android/app/src/androidTest/java/io/flutter/plugins/quickactionsexample/QuickActionsTest.java @@ -28,6 +28,7 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -85,6 +86,9 @@ public void appShortcutsAreCreated() { } } + // TODO(bparrishMines): The test is ignored because it fails when ran on Firebase Test Lab. See + // https://github.com/flutter/flutter/issues/114246. + @Ignore @Test public void appShortcutLaunchActivityAfterStarting() { // Arrange From be3e32870ef66749a825799f07cc1c26b11af186 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 16:52:09 +0000 Subject: [PATCH 106/133] [path_provider]: Bump gradle from 3.3.0 to 7.3.1 in /packages/path_provider/path_provider_android/android (#6578) --- packages/path_provider/path_provider_android/CHANGELOG.md | 4 +++- .../path_provider/path_provider_android/android/build.gradle | 4 ++-- packages/path_provider/path_provider_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/path_provider/path_provider_android/CHANGELOG.md b/packages/path_provider/path_provider_android/CHANGELOG.md index c36a771d3340..ebd656816ead 100644 --- a/packages/path_provider/path_provider_android/CHANGELOG.md +++ b/packages/path_provider/path_provider_android/CHANGELOG.md @@ -1,7 +1,9 @@ -## NEXT +## 2.0.21 * Updates code for `no_leading_underscores_for_local_identifiers` lint. * Updates minimum Flutter version to 2.10. +* Upgrades `androidx.annotation` version to 1.5.0. +* Upgrades Android Gradle plugin version to 7.3.1. ## 2.0.20 diff --git a/packages/path_provider/path_provider_android/android/build.gradle b/packages/path_provider/path_provider_android/android/build.gradle index 32c046bf235f..9661390dbc80 100644 --- a/packages/path_provider/path_provider_android/android/build.gradle +++ b/packages/path_provider/path_provider_android/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:7.3.1' } } @@ -54,7 +54,7 @@ android { } dependencies { - implementation 'androidx.annotation:annotation:1.1.0' + implementation 'androidx.annotation:annotation:1.5.0' implementation 'com.google.guava:guava:28.1-android' testImplementation 'junit:junit:4.13.2' } diff --git a/packages/path_provider/path_provider_android/pubspec.yaml b/packages/path_provider/path_provider_android/pubspec.yaml index fba4c32506fe..5d1e6c7b2db6 100644 --- a/packages/path_provider/path_provider_android/pubspec.yaml +++ b/packages/path_provider/path_provider_android/pubspec.yaml @@ -2,7 +2,7 @@ name: path_provider_android description: Android implementation of the path_provider plugin. repository: https://github.com/flutter/plugins/tree/main/packages/path_provider/path_provider_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+path_provider%22 -version: 2.0.20 +version: 2.0.21 environment: sdk: ">=2.14.0 <3.0.0" From f6f648110797ec08367a4dd1631423f67668f432 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Mon, 31 Oct 2022 10:42:58 -0700 Subject: [PATCH 107/133] [tool] Rename all-plugins-app command (#6600) --- .ci/scripts/build_all_plugins.sh | 2 +- .ci/scripts/create_all_plugins_app.sh | 2 +- .cirrus.yml | 6 +- script/tool/CHANGELOG.md | 6 + ...t => create_all_packages_app_command.dart} | 23 +-- script/tool/lib/src/main.dart | 4 +- script/tool/pubspec.yaml | 2 +- ...create_all_packages_app_command_test.dart} | 159 +++++++++++------- 8 files changed, 122 insertions(+), 82 deletions(-) rename script/tool/lib/src/{create_all_plugins_app_command.dart => create_all_packages_app_command.dart} (95%) rename script/tool/test/{create_all_plugins_app_command_test.dart => create_all_packages_app_command_test.dart} (63%) diff --git a/.ci/scripts/build_all_plugins.sh b/.ci/scripts/build_all_plugins.sh index 008dea7c5e13..734194615673 100644 --- a/.ci/scripts/build_all_plugins.sh +++ b/.ci/scripts/build_all_plugins.sh @@ -3,6 +3,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -cd all_plugins +cd all_packages flutter build windows --debug flutter build windows --release diff --git a/.ci/scripts/create_all_plugins_app.sh b/.ci/scripts/create_all_plugins_app.sh index 196fef9b06c9..100e8aca804a 100644 --- a/.ci/scripts/create_all_plugins_app.sh +++ b/.ci/scripts/create_all_plugins_app.sh @@ -3,5 +3,5 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -dart ./script/tool/bin/flutter_plugin_tools.dart all-plugins-app \ +dart ./script/tool/bin/flutter_plugin_tools.dart create-all-packages-app \ --output-dir=. --exclude script/configs/exclude_all_plugins_app.yaml diff --git a/.cirrus.yml b/.cirrus.yml index 4a7ec5bb1598..96b0c8382c54 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -52,16 +52,16 @@ flutter_upgrade_template: &FLUTTER_UPGRADE_TEMPLATE build_all_plugins_app_template: &BUILD_ALL_PLUGINS_APP_TEMPLATE create_all_plugins_app_script: - - $PLUGIN_TOOL_COMMAND all-plugins-app --output-dir=. --exclude script/configs/exclude_all_plugins_app.yaml + - $PLUGIN_TOOL_COMMAND create-all-packages-app --output-dir=. --exclude script/configs/exclude_all_plugins_app.yaml build_all_plugins_debug_script: - - cd all_plugins + - cd all_packages - if [[ "$BUILD_ALL_ARGS" == "web" ]]; then - echo "Skipping; web does not support debug builds" - else - flutter build $BUILD_ALL_ARGS --debug - fi build_all_plugins_release_script: - - cd all_plugins + - cd all_packages - flutter build $BUILD_ALL_ARGS --release # Light-workload Linux tasks. diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index c492dc00905e..e5ad322aeea7 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.13.0 + +* Renames `all-plugins-app` to `create-all-packages-app` to clarify what it + actually does. Also renames the project directory it creates from + `all_plugins` to `all_packages`. + ## 0.12.1 * Modifies `publish_check_command.dart` to do a `dart pub get` in all examples diff --git a/script/tool/lib/src/create_all_plugins_app_command.dart b/script/tool/lib/src/create_all_packages_app_command.dart similarity index 95% rename from script/tool/lib/src/create_all_plugins_app_command.dart rename to script/tool/lib/src/create_all_packages_app_command.dart index ea7d5a5c4388..142a992972ca 100644 --- a/script/tool/lib/src/create_all_plugins_app_command.dart +++ b/script/tool/lib/src/create_all_packages_app_command.dart @@ -17,14 +17,16 @@ import 'common/repository_package.dart'; const String _outputDirectoryFlag = 'output-dir'; +const String _projectName = 'all_packages'; + const int _exitUpdateMacosPodfileFailed = 3; const int _exitUpdateMacosPbxprojFailed = 4; const int _exitGenNativeBuildFilesFailed = 5; /// A command to create an application that builds all in a single application. -class CreateAllPluginsAppCommand extends PackageCommand { +class CreateAllPackagesAppCommand extends PackageCommand { /// Creates an instance of the builder command. - CreateAllPluginsAppCommand( + CreateAllPackagesAppCommand( Directory packagesDir, { ProcessRunner processRunner = const ProcessRunner(), Directory? pluginsRoot, @@ -34,24 +36,25 @@ class CreateAllPluginsAppCommand extends PackageCommand { pluginsRoot ?? packagesDir.fileSystem.currentDirectory; argParser.addOption(_outputDirectoryFlag, defaultsTo: defaultDir.path, - help: 'The path the directory to create the "all_plugins" project in.\n' + help: + 'The path the directory to create the "$_projectName" project in.\n' 'Defaults to the repository root.'); } /// The location to create the synthesized app project. Directory get _appDirectory => packagesDir.fileSystem .directory(getStringArg(_outputDirectoryFlag)) - .childDirectory('all_plugins'); + .childDirectory(_projectName); /// The synthesized app project. RepositoryPackage get app => RepositoryPackage(_appDirectory); @override String get description => - 'Generate Flutter app that includes all plugins in packages.'; + 'Generate Flutter app that includes all target packagas.'; @override - String get name => 'all-plugins-app'; + String get name => 'create-all-packages-app'; @override Future run() async { @@ -100,7 +103,7 @@ class CreateAllPluginsAppCommand extends PackageCommand { [ 'create', '--template=app', - '--project-name=all_plugins', + '--project-name=$_projectName', '--android-language=java', _appDirectory.path, ], @@ -160,9 +163,9 @@ class CreateAllPluginsAppCommand extends PackageCommand { final StringBuffer newManifest = StringBuffer(); for (final String line in manifestFile.readAsLinesSync()) { - if (line.contains('package="com.example.all_plugins"')) { + if (line.contains('package="com.example.$_projectName"')) { newManifest - ..writeln('package="com.example.all_plugins"') + ..writeln('package="com.example.$_projectName"') ..writeln('xmlns:tools="http://schemas.android.com/tools">') ..writeln() ..writeln( @@ -191,7 +194,7 @@ class CreateAllPluginsAppCommand extends PackageCommand { final Map pluginDeps = await _getValidPathDependencies(); final Pubspec pubspec = Pubspec( - 'all_plugins', + _projectName, description: 'Flutter app containing all 1st party plugins.', version: Version.parse('1.0.0+1'), environment: { diff --git a/script/tool/lib/src/main.dart b/script/tool/lib/src/main.dart index 414ca7f303c0..2d48f079b306 100644 --- a/script/tool/lib/src/main.dart +++ b/script/tool/lib/src/main.dart @@ -11,7 +11,7 @@ import 'package:file/local.dart'; import 'analyze_command.dart'; import 'build_examples_command.dart'; import 'common/core.dart'; -import 'create_all_plugins_app_command.dart'; +import 'create_all_packages_app_command.dart'; import 'custom_test_command.dart'; import 'dependabot_check_command.dart'; import 'drive_examples_command.dart'; @@ -56,7 +56,7 @@ void main(List args) { 'Productivity utils for hosting multiple plugins within one repository.') ..addCommand(AnalyzeCommand(packagesDir)) ..addCommand(BuildExamplesCommand(packagesDir)) - ..addCommand(CreateAllPluginsAppCommand(packagesDir)) + ..addCommand(CreateAllPackagesAppCommand(packagesDir)) ..addCommand(CustomTestCommand(packagesDir)) ..addCommand(DependabotCheckCommand(packagesDir)) ..addCommand(DriveExamplesCommand(packagesDir)) diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml index eecff3703b4c..fb1bbfe5978e 100644 --- a/script/tool/pubspec.yaml +++ b/script/tool/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_plugin_tools description: Productivity utils for flutter/plugins and flutter/packages repository: https://github.com/flutter/plugins/tree/main/script/tool -version: 0.12.1 +version: 0.13.0 dependencies: args: ^2.1.0 diff --git a/script/tool/test/create_all_plugins_app_command_test.dart b/script/tool/test/create_all_packages_app_command_test.dart similarity index 63% rename from script/tool/test/create_all_plugins_app_command_test.dart rename to script/tool/test/create_all_packages_app_command_test.dart index cb2347fe9cc8..54551cbc3712 100644 --- a/script/tool/test/create_all_plugins_app_command_test.dart +++ b/script/tool/test/create_all_packages_app_command_test.dart @@ -8,7 +8,7 @@ import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:file/local.dart'; import 'package:flutter_plugin_tools/src/common/core.dart'; -import 'package:flutter_plugin_tools/src/create_all_plugins_app_command.dart'; +import 'package:flutter_plugin_tools/src/create_all_packages_app_command.dart'; import 'package:platform/platform.dart'; import 'package:test/test.dart'; @@ -16,43 +16,58 @@ import 'mocks.dart'; import 'util.dart'; void main() { - group('$CreateAllPluginsAppCommand', () { - late CommandRunner runner; - late CreateAllPluginsAppCommand command; - late FileSystem fileSystem; - late Directory testRoot; - late Directory packagesDir; - late RecordingProcessRunner processRunner; + late CommandRunner runner; + late CreateAllPackagesAppCommand command; + late FileSystem fileSystem; + late Directory testRoot; + late Directory packagesDir; + late RecordingProcessRunner processRunner; + + setUp(() { + // Since the core of this command is a call to 'flutter create', the test + // has to use the real filesystem. Put everything possible in a unique + // temporary to minimize effect on the host system. + fileSystem = const LocalFileSystem(); + testRoot = fileSystem.systemTempDirectory.createTempSync(); + packagesDir = testRoot.childDirectory('packages'); + processRunner = RecordingProcessRunner(); + + command = CreateAllPackagesAppCommand( + packagesDir, + processRunner: processRunner, + pluginsRoot: testRoot, + ); + runner = CommandRunner( + 'create_all_test', 'Test for $CreateAllPackagesAppCommand'); + runner.addCommand(command); + }); + + tearDown(() { + testRoot.deleteSync(recursive: true); + }); + group('non-macOS host', () { setUp(() { - // Since the core of this command is a call to 'flutter create', the test - // has to use the real filesystem. Put everything possible in a unique - // temporary to minimize effect on the host system. - fileSystem = const LocalFileSystem(); - testRoot = fileSystem.systemTempDirectory.createTempSync(); - packagesDir = testRoot.childDirectory('packages'); - processRunner = RecordingProcessRunner(); - - command = CreateAllPluginsAppCommand( + command = CreateAllPackagesAppCommand( packagesDir, processRunner: processRunner, + // Set isWindows or not based on the actual host, so that + // `flutterCommand` works, since these tests actually call 'flutter'. + // The important thing is that isMacOS always returns false. + platform: MockPlatform(isWindows: const LocalPlatform().isWindows), pluginsRoot: testRoot, ); runner = CommandRunner( - 'create_all_test', 'Test for $CreateAllPluginsAppCommand'); + 'create_all_test', 'Test for $CreateAllPackagesAppCommand'); runner.addCommand(command); }); - tearDown(() { - testRoot.deleteSync(recursive: true); - }); - test('pubspec includes all plugins', () async { createFakePlugin('plugina', packagesDir); createFakePlugin('pluginb', packagesDir); createFakePlugin('pluginc', packagesDir); - await runCapturingPrint(runner, ['all-plugins-app']); + await runCapturingPrint(runner, ['create-all-packages-app']); final List pubspec = command.app.pubspecFile.readAsLinesSync(); expect( @@ -69,7 +84,7 @@ void main() { createFakePlugin('pluginb', packagesDir); createFakePlugin('pluginc', packagesDir); - await runCapturingPrint(runner, ['all-plugins-app']); + await runCapturingPrint(runner, ['create-all-packages-app']); final List pubspec = command.app.pubspecFile.readAsLinesSync(); expect( @@ -100,7 +115,7 @@ void main() { createFakePlugin('plugina', packagesDir); - await runCapturingPrint(runner, ['all-plugins-app']); + await runCapturingPrint(runner, ['create-all-packages-app']); final Pubspec generatedPubspec = command.app.parsePubspec(); const String dartSdkKey = 'sdk'; @@ -108,37 +123,10 @@ void main() { baselinePubspec.environment?[dartSdkKey]); }); - test('macOS deployment target is modified in Podfile', () async { - createFakePlugin('plugina', packagesDir); - - final File podfileFile = command.packagesDir.parent - .childDirectory('all_plugins') - .childDirectory('macos') - .childFile('Podfile'); - podfileFile.createSync(recursive: true); - podfileFile.writeAsStringSync(""" -platform :osx, '10.11' -# some other line -"""); - - await runCapturingPrint(runner, ['all-plugins-app']); - final List podfile = command.app - .platformDirectory(FlutterPlatform.macos) - .childFile('Podfile') - .readAsLinesSync(); - - expect( - podfile, - everyElement((String line) => - !line.contains('platform :osx') || line.contains("'10.15'"))); - }, - // Podfile is only generated (and thus only edited) on macOS. - skip: !io.Platform.isMacOS); - test('macOS deployment target is modified in pbxproj', () async { createFakePlugin('plugina', packagesDir); - await runCapturingPrint(runner, ['all-plugins-app']); + await runCapturingPrint(runner, ['create-all-packages-app']); final List pbxproj = command.app .platformDirectory(FlutterPlatform.macos) .childDirectory('Runner.xcodeproj') @@ -155,7 +143,7 @@ platform :osx, '10.11' test('calls flutter pub get', () async { createFakePlugin('plugina', packagesDir); - await runCapturingPrint(runner, ['all-plugins-app']); + await runCapturingPrint(runner, ['create-all-packages-app']); expect( processRunner.recordedCalls, @@ -163,10 +151,10 @@ platform :osx, '10.11' ProcessCall( getFlutterCommand(const LocalPlatform()), const ['pub', 'get'], - testRoot.childDirectory('all_plugins').path), + testRoot.childDirectory('all_packages').path), ])); }, - // See comment about Windows in create_all_plugins_app_command.dart + // See comment about Windows in create_all_packages_app_command.dart skip: io.Platform.isWindows); test('fails if flutter pub get fails', () async { @@ -178,7 +166,7 @@ platform :osx, '10.11' ]; Error? commandError; final List output = await runCapturingPrint( - runner, ['all-plugins-app'], errorHandler: (Error e) { + runner, ['create-all-packages-app'], errorHandler: (Error e) { commandError = e; }); @@ -190,7 +178,7 @@ platform :osx, '10.11' "Failed to generate native build files via 'flutter pub get'"), ])); }, - // See comment about Windows in create_all_plugins_app_command.dart + // See comment about Windows in create_all_packages_app_command.dart skip: io.Platform.isWindows); test('handles --output-dir', () async { @@ -198,11 +186,13 @@ platform :osx, '10.11' final Directory customOutputDir = fileSystem.systemTempDirectory.createTempSync(); - await runCapturingPrint(runner, - ['all-plugins-app', '--output-dir=${customOutputDir.path}']); + await runCapturingPrint(runner, [ + 'create-all-packages-app', + '--output-dir=${customOutputDir.path}' + ]); - expect( - command.app.path, customOutputDir.childDirectory('all_plugins').path); + expect(command.app.path, + customOutputDir.childDirectory('all_packages').path); }); test('logs exclusions', () async { @@ -210,8 +200,8 @@ platform :osx, '10.11' createFakePlugin('pluginb', packagesDir); createFakePlugin('pluginc', packagesDir); - final List output = await runCapturingPrint( - runner, ['all-plugins-app', '--exclude=pluginb,pluginc']); + final List output = await runCapturingPrint(runner, + ['create-all-packages-app', '--exclude=pluginb,pluginc']); expect( output, @@ -222,4 +212,45 @@ platform :osx, '10.11' ])); }); }); + + group('macOS host', () { + setUp(() { + command = CreateAllPackagesAppCommand( + packagesDir, + processRunner: processRunner, + platform: MockPlatform(isMacOS: true), + pluginsRoot: testRoot, + ); + runner = CommandRunner( + 'create_all_test', 'Test for $CreateAllPackagesAppCommand'); + runner.addCommand(command); + }); + + test('macOS deployment target is modified in Podfile', () async { + createFakePlugin('plugina', packagesDir); + + final File podfileFile = RepositoryPackage( + command.packagesDir.parent.childDirectory('all_packages')) + .platformDirectory(FlutterPlatform.macos) + .childFile('Podfile'); + podfileFile.createSync(recursive: true); + podfileFile.writeAsStringSync(""" +platform :osx, '10.11' +# some other line +"""); + + await runCapturingPrint(runner, ['create-all-packages-app']); + final List podfile = command.app + .platformDirectory(FlutterPlatform.macos) + .childFile('Podfile') + .readAsLinesSync(); + + expect( + podfile, + everyElement((String line) => + !line.contains('platform :osx') || line.contains("'10.15'"))); + }, + // Podfile is only generated (and thus only edited) on macOS. + skip: !io.Platform.isMacOS); + }); } From 9e0e9663990d96dc32cbecab163a16e900afcc14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 18:28:24 +0000 Subject: [PATCH 108/133] [local_auth]: Bump fragment from 1.5.2 to 1.5.4 in /packages/local_auth/local_auth_android/android (#6645) --- packages/local_auth/local_auth_android/CHANGELOG.md | 4 ++++ packages/local_auth/local_auth_android/android/build.gradle | 2 +- packages/local_auth/local_auth_android/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/local_auth/local_auth_android/CHANGELOG.md b/packages/local_auth/local_auth_android/CHANGELOG.md index c9eeed9d01dd..bb3235b49c88 100644 --- a/packages/local_auth/local_auth_android/CHANGELOG.md +++ b/packages/local_auth/local_auth_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.15 + +* Updates androidx.fragment version to 1.5.4. + ## 1.0.14 * Fixes device credential authentication for API versions before R. diff --git a/packages/local_auth/local_auth_android/android/build.gradle b/packages/local_auth/local_auth_android/android/build.gradle index 6c9417008d27..913ea6f33fc0 100644 --- a/packages/local_auth/local_auth_android/android/build.gradle +++ b/packages/local_auth/local_auth_android/android/build.gradle @@ -53,7 +53,7 @@ android { dependencies { api "androidx.core:core:1.8.0" api "androidx.biometric:biometric:1.1.0" - api "androidx.fragment:fragment:1.5.2" + api "androidx.fragment:fragment:1.5.4" testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:4.7.0' testImplementation 'org.robolectric:robolectric:4.5' diff --git a/packages/local_auth/local_auth_android/pubspec.yaml b/packages/local_auth/local_auth_android/pubspec.yaml index 99e9e2c547cc..0cddc94051c3 100644 --- a/packages/local_auth/local_auth_android/pubspec.yaml +++ b/packages/local_auth/local_auth_android/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_android description: Android implementation of the local_auth plugin. repository: https://github.com/flutter/plugins/tree/main/packages/local_auth/local_auth_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 1.0.14 +version: 1.0.15 environment: sdk: ">=2.14.0 <3.0.0" From 054b890b90bf3a212ce4a7b3f5acdc36cd00c360 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 20:05:58 +0000 Subject: [PATCH 109/133] [camera]: Bump camerax_version from 1.2.0-beta02 to 1.2.0-rc01 in /packages/camera/camera_android_camerax/android (#6647) --- packages/camera/camera_android_camerax/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index d20643f70268..bbc06317a23e 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -56,7 +56,7 @@ android { dependencies { // CameraX core library using the camera2 implementation must use same version number. - def camerax_version = "1.2.0-beta02" + def camerax_version = "1.2.0-rc01" implementation "androidx.camera:camera-core:${camerax_version}" implementation "androidx.camera:camera-camera2:${camerax_version}" implementation "androidx.camera:camera-lifecycle:${camerax_version}" From 4cbb77142560f3e0089c40dc485d44848555f68d Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 31 Oct 2022 17:06:26 -0400 Subject: [PATCH 110/133] Roll Flutter from ea0ddc94ccc6 to 8f0c35d4869e (17 revisions) (#6639) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 68543c61125f..73b0220ef5c9 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -ea0ddc94ccc63cec77bcac3ef02832806adcd667 +8f0c35d4869e2a88ce64466ef491a8f8a41d0951 From f68f83bc224a71f97a6963b30d18a4c877b283ec Mon Sep 17 00:00:00 2001 From: adam-harwood <45190361+adam-harwood@users.noreply.github.com> Date: Tue, 1 Nov 2022 11:44:23 +1000 Subject: [PATCH 111/133] [camera] Interface method to allow concurrent recording and streaming of video (#6550) --- .../camera_platform_interface/CHANGELOG.md | 4 ++ .../platform_interface/camera_platform.dart | 12 ++++ .../lib/src/types/video_capture_options.dart | 55 +++++++++++++++++++ .../camera_platform_interface/pubspec.yaml | 2 +- 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 packages/camera/camera_platform_interface/lib/src/types/video_capture_options.dart diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index d410304970cf..3bfc56f3f6e2 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.0 + +* Adds new capture method for a camera to allow concurrent streaming and recording. + ## 2.2.2 * Updates code for `no_leading_underscores_for_local_identifiers` lint. diff --git a/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart b/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart index b086dc87851f..d8f8f9ca4cc9 100644 --- a/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart +++ b/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart @@ -11,6 +11,7 @@ import 'package:plugin_platform_interface/plugin_platform_interface.dart'; import '../../camera_platform_interface.dart'; import '../method_channel/method_channel_camera.dart'; +import '../types/video_capture_options.dart'; /// The interface that implementations of camera must implement. /// @@ -131,10 +132,21 @@ abstract class CameraPlatform extends PlatformInterface { /// meaning the recording will continue until manually stopped. /// With [maxVideoDuration] set the video is returned in a [VideoRecordedEvent] /// through the [onVideoRecordedEvent] stream when the set duration is reached. + /// + /// This method is deprecated in favour of [startVideoCapturing]. Future startVideoRecording(int cameraId, {Duration? maxVideoDuration}) { throw UnimplementedError('startVideoRecording() is not implemented.'); } + /// Starts a video recording and/or streaming session. + /// + /// Please see [VideoCaptureOptions] for documentation on the + /// configuration options. + Future startVideoCapturing(VideoCaptureOptions options) { + return startVideoRecording(options.cameraId, + maxVideoDuration: options.maxDuration); + } + /// Stops the video recording and returns the file where it was saved. Future stopVideoRecording(int cameraId) { throw UnimplementedError('stopVideoRecording() is not implemented.'); diff --git a/packages/camera/camera_platform_interface/lib/src/types/video_capture_options.dart b/packages/camera/camera_platform_interface/lib/src/types/video_capture_options.dart new file mode 100644 index 000000000000..9fcb7fa95379 --- /dev/null +++ b/packages/camera/camera_platform_interface/lib/src/types/video_capture_options.dart @@ -0,0 +1,55 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/foundation.dart'; + +import 'camera_image_data.dart'; + +/// Options wrapper for [CameraPlatform.startVideoCapturing] parameters. +@immutable +class VideoCaptureOptions { + /// Constructs a new instance. + const VideoCaptureOptions( + this.cameraId, { + this.maxDuration, + this.streamCallback, + this.streamOptions, + }) : assert( + streamOptions == null || streamCallback != null, + 'Must specify streamCallback if providing streamOptions.', + ); + + /// The ID of the camera to use for capturing. + final int cameraId; + + /// The maximum time to perform capturing for. + /// + /// By default there is no maximum on the capture time. + final Duration? maxDuration; + + /// An optional callback to enable streaming. + /// + /// If set, then each image captured by the camera will be + /// passed to this callback. + final Function(CameraImageData image)? streamCallback; + + /// Configuration options for streaming. + /// + /// Should only be set if a streamCallback is also present. + final CameraImageStreamOptions? streamOptions; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is VideoCaptureOptions && + runtimeType == other.runtimeType && + cameraId == other.cameraId && + maxDuration == other.maxDuration && + streamCallback == other.streamCallback && + streamOptions == other.streamOptions; + + @override + int get hashCode => + Object.hash(cameraId, maxDuration, streamCallback, streamOptions); +} diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index e87679261c5a..7ddc6d561aa4 100644 --- a/packages/camera/camera_platform_interface/pubspec.yaml +++ b/packages/camera/camera_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.2 +version: 2.3.0 environment: sdk: '>=2.12.0 <3.0.0' From 5c11747ae1435eb41018845f02effc4a3e9f9c05 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 1 Nov 2022 11:45:05 -0400 Subject: [PATCH 112/133] Roll Flutter from 8f0c35d4869e to 0e98194681fd (30 revisions) (#6648) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 73b0220ef5c9..d517f5ada567 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -8f0c35d4869e2a88ce64466ef491a8f8a41d0951 +0e98194681fdd83ee1c0a90b8b5b176df121bf1e From f8122dc89ad3e76e8018d113c40b3cb3ccdb3e51 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 2 Nov 2022 12:47:00 -0700 Subject: [PATCH 113/133] [ci]Temporarily disable starqlteue on firebase device lab (#6657) --- .cirrus.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.cirrus.yml b/.cirrus.yml index 96b0c8382c54..a12c12d1fdbf 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -258,7 +258,9 @@ task: firebase_test_lab_script: - if [[ -n "$GCLOUD_FIREBASE_TESTLAB_KEY" ]]; then - echo $GCLOUD_FIREBASE_TESTLAB_KEY > ${HOME}/gcloud-service-key.json - - ./script/tool_runner.sh firebase-test-lab --device model=redfin,version=30 --device model=starqlteue,version=26 --exclude=script/configs/exclude_integration_android.yaml + # (TODO)cyanglaz: add --device model=starqlteue,version=26 back when the device issue is fixed in FTL. + # https://github.com/flutter/flutter/issues/114535 + - ./script/tool_runner.sh firebase-test-lab --device model=redfin,version=30 --exclude=script/configs/exclude_integration_android.yaml - else - echo "This user does not have permission to run Firebase Test Lab tests." - fi From 38c93242a59a467fd003fd753c1e3ebca2fc6a01 Mon Sep 17 00:00:00 2001 From: hellohuanlin <41930132+hellohuanlin@users.noreply.github.com> Date: Wed, 2 Nov 2022 19:35:26 -0700 Subject: [PATCH 114/133] [video_player]add integration test for inverted aspect ratio bug (#6662) --- .../video_player_avfoundation/CHANGELOG.md | 4 ++++ .../integration_test/video_player_test.dart | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index ed2f345784bd..da5e6ae74fa4 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Adds an integration test for a bug where the aspect ratios of some HLS videos are incorrectly inverted. + ## 2.3.7 * Fixes a bug where the aspect ratio of some HLS videos are incorrectly inverted. diff --git a/packages/video_player/video_player_avfoundation/example/integration_test/video_player_test.dart b/packages/video_player/video_player_avfoundation/example/integration_test/video_player_test.dart index 5027973a660d..408eebbbc730 100644 --- a/packages/video_player/video_player_avfoundation/example/integration_test/video_player_test.dart +++ b/packages/video_player/video_player_avfoundation/example/integration_test/video_player_test.dart @@ -177,5 +177,19 @@ void main() { expect(livestreamController.value.duration, (Duration duration) => duration != Duration.zero); }); + + testWidgets('rotated m3u8 has correct aspect ratio', + (WidgetTester tester) async { + // Some m3u8 files contain rotation data that may incorrectly invert the aspect ratio. + // More info [here](https://github.com/flutter/flutter/issues/109116). + final MiniController livestreamController = MiniController.network( + 'https://flutter.github.io/assets-for-api-docs/assets/videos/hls/rotated_nail_manifest.m3u8', + ); + await livestreamController.initialize(); + + expect(livestreamController.value.isInitialized, true); + expect(livestreamController.value.size.width, + lessThan(livestreamController.value.size.height)); + }); }); } From dd8245e32e4fd6d9f2461898f7bfdb4b459524f5 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 3 Nov 2022 11:46:24 -0400 Subject: [PATCH 115/133] Roll Flutter (stable) from 6928314d505d to e99c9c7cd9f6 (2 revisions) (#6667) * 85369313b [CP] Remove exclamation marks (#107683) (flutter/flutter#113553) * e99c9c7cd Update Engine revision to 857bd6b74c5eb56151bfafe91e7fa6a82b6fee25 for stable release 3.3.7 (flutter/flutter#114456) --- .ci/flutter_stable.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index 55a6a928f5b9..8afcd6e91f44 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -6928314d505d2bb4777be05e45d7808a5aa91d2a +e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 From 8cfa2652c936e95760e077137563603cdb53d082 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 3 Nov 2022 12:38:13 -0400 Subject: [PATCH 116/133] Roll Flutter from 0e98194681fd to e6300da2c39f (46 revisions) (#6668) * 210a2aa37 Revert "Add Material 3 support for BottomAppBar" (flutter/flutter#114421) * 2bf666c17 Roll Flutter Engine from f721db653dd1 to 78ca5609d1cb (2 revisions) (flutter/flutter#114396) * d2ad439c0 Roll Flutter Engine from 78ca5609d1cb to 31a21c75d016 (1 revision) (flutter/flutter#114426) * b03a7b5df Roll Plugins from 91d7fe59ab03 to 5c11747ae143 (7 revisions) (flutter/flutter#114427) * 70a95d57c Mark `Linux_android new_gallery__transition_perf` flaky (flutter/flutter#114429) * 0d65b630f Roll Flutter Engine from 31a21c75d016 to e013908440cd (1 revision) (flutter/flutter#114430) * 8a8b36177 Use hintText's TextStyle overflow (flutter/flutter#114378) * e6b429694 Roll Flutter Engine from e013908440cd to a98c82a5e583 (1 revision) (flutter/flutter#114438) * d0afbd72a Revert "Overlay always applies clip (#113770)" (flutter/flutter#114442) * 93b004255 Handle dragging improvements (flutter/flutter#114042) * dc1cedd60 Roll Flutter Engine from a98c82a5e583 to c1e1a089fa16 (4 revisions) (flutter/flutter#114444) * 8fe872877 Roll Flutter Engine from c1e1a089fa16 to f4da34f1f6a8 (4 revisions) (flutter/flutter#114449) * eadda3c39 Add Material 3 Popup Menu example and update existing example (flutter/flutter#114228) * fb9065fe0 `Layer ... was previously used as oldLayer` assertion error in debug mode, and page being blank in release mode, caused by LeaderLayer addToScene bug (flutter/flutter#113998) * e37ab48bc Introduce debugWithActiveLayoutCleared to avoid duplicated code (flutter/flutter#114003) * c23b5ca7d Fix `addToScene` documentation (flutter/flutter#113987) * 61deaef5d Fix bug that`timeDilation` is not reset, causing subsequent test errors, and add verifications to ensure such problem does not exist in the future (flutter/flutter#113830) * 17ec3b1d1 [flutter_tools] Introducing arg option for specifying the output directory for web (flutter/flutter#113076) * 17df76ba8 Roll Flutter Engine from f4da34f1f6a8 to e95a7ae83097 (1 revision) (flutter/flutter#114453) * f10021b37 Roll Flutter Engine from e95a7ae83097 to 81f5c30b23f3 (6 revisions) (flutter/flutter#114464) * 97d0247d5 Add Material 3 support for `Slider` - Part 1 (flutter/flutter#114079) * 0b0e348e0 Roll Flutter Engine from 81f5c30b23f3 to 85c23bc12c56 (3 revisions) (flutter/flutter#114471) * 6c87d7303 Roll Flutter Engine from 85c23bc12c56 to c05c8a8834ca (1 revision) (flutter/flutter#114476) * dbc612380 Roll Flutter Engine from c05c8a8834ca to 32faadb330fc (2 revisions) (flutter/flutter#114479) * 4b3147386 Roll Flutter Engine from 32faadb330fc to f9abfc5964c9 (1 revision) (flutter/flutter#114480) * b2d9f9e16 Roll Flutter Engine from f9abfc5964c9 to 9a741295e793 (2 revisions) (flutter/flutter#114487) * 9d9b0e509 Roll Flutter Engine from 9a741295e793 to 03d5b933164c (1 revision) (flutter/flutter#114489) * 1a150ff46 Roll Flutter Engine from 03d5b933164c to 9ef5c9b0107b (2 revisions) (flutter/flutter#114492) * 6a66aa282 Add Material 3 support for BottomAppBar (reland #106525) (flutter/flutter#114439) * dca6f10a6 Roll Flutter Engine from 9ef5c9b0107b to f5eb26e3f763 (1 revision) (flutter/flutter#114494) * 45c3b028c Roll Flutter Engine from f5eb26e3f763 to fed311918037 (2 revisions) (flutter/flutter#114501) * 9f2339173 [web] Changes to web keyboard selection shortcuts for more consistent behavior (flutter/flutter#114264) * db381d75b Roll Flutter Engine from fed311918037 to cdfd9d0ad69b (2 revisions) (flutter/flutter#114513) * 1cfdac4b2 Always invoke impeller ios shader target (flutter/flutter#114451) * 0e70a97e2 Refactor Animated[List, Grid, SliverList, SliverGrid] to share common code (flutter/flutter#113793) * 1f7bacff4 Marks Linux build_tests_2_3 to be unflaky (flutter/flutter#114527) * 307987339 [flutter_tools/dap] Map org-dartlang-sdk URIs to the location of the source files found by the analyzer (flutter/flutter#114369) * 78dbe6661 Roll Flutter Engine from cdfd9d0ad69b to 4d1d7a41ebd2 (1 revision) (flutter/flutter#114532) * 3b0f8335e [flutter_tools/dap] Add a base Flutter adapter class to avoid duplication between adapters (flutter/flutter#114533) * 0211df9cf [flutter_tools] provide --timeout option to flutter drive (flutter/flutter#114458) * 475ccd4ed Roll Flutter Engine from 4d1d7a41ebd2 to edb049257b52 (2 revisions) (flutter/flutter#114534) * 89418ef85 Added tokens for Snackbar widget. (flutter/flutter#114466) * b23c7809f Roll Flutter Engine from edb049257b52 to e43555ad3b94 (1 revision) (flutter/flutter#114540) * 15867a612 Roll gallery to b6728704a6441ac37a21e433a1e43c990780d47b (flutter/flutter#114537) * 92a66683a Roll Flutter Engine from e43555ad3b94 to 840a7b346216 (4 revisions) (flutter/flutter#114546) * e6300da2c [tools]validation basic Xcode settings for build ipa (flutter/flutter#113412) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index d517f5ada567..0e8fdde7fc19 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -0e98194681fdd83ee1c0a90b8b5b176df121bf1e +e6300da2c39ff230d943eeccb80ba3ccfa1e3759 From 897ec59cd73da1f8d4aff5d2bccb5a813aa62cba Mon Sep 17 00:00:00 2001 From: Phil Quitslund Date: Fri, 4 Nov 2022 06:31:18 -0700 Subject: [PATCH 117/133] [ci] Removes unnecessary overrides. (#6669) * remove unnecessary overrides * Update mock so tools_tests checks pass. * Update CHANGELOG NEXT entries. * Pin git to 2.0.x Co-authored-by: David Iglesias Teixeira --- .../video_player_android/CHANGELOG.md | 1 + .../example/lib/mini_controller.dart | 5 - .../video_player_avfoundation/CHANGELOG.md | 1 + .../example/lib/mini_controller.dart | 5 - script/tool/CHANGELOG.md | 6 + script/tool/pubspec.yaml | 3 +- .../common/package_command_test.mocks.dart | 313 +++++++++++++----- 7 files changed, 238 insertions(+), 96 deletions(-) diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md index 7298bacf4f78..4d3f72da6fbd 100644 --- a/packages/video_player/video_player_android/CHANGELOG.md +++ b/packages/video_player/video_player_android/CHANGELOG.md @@ -3,6 +3,7 @@ * 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. +* Removes an unnecessary override in example code. ## 2.3.9 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 24a9e0297df2..61959efe1e10 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 @@ -341,11 +341,6 @@ class MiniController extends ValueNotifier { void _updatePosition(Duration position) { value = value.copyWith(position: position); } - - @override - void removeListener(VoidCallback listener) { - super.removeListener(listener); - } } /// Widget that displays the video controlled by [controller]. diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index da5e6ae74fa4..b1cc1ce13927 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,6 +1,7 @@ ## NEXT * 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. ## 2.3.7 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 24a9e0297df2..61959efe1e10 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 @@ -341,11 +341,6 @@ class MiniController extends ValueNotifier { void _updatePosition(Duration position) { value = value.copyWith(position: position); } - - @override - void removeListener(VoidCallback listener) { - super.removeListener(listener); - } } /// Widget that displays the video controlled by [controller]. diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md index e5ad322aeea7..a346ac093c68 100644 --- a/script/tool/CHANGELOG.md +++ b/script/tool/CHANGELOG.md @@ -1,3 +1,9 @@ +## NEXT + +* Pins `package:git` dependency to `2.0.x` until `dart >=2.18.0` becomes our + oldest legacy. +* Updates test mocks. + ## 0.13.0 * Renames `all-plugins-app` to `create-all-packages-app` to clarify what it diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml index fb1bbfe5978e..e450a1114e87 100644 --- a/script/tool/pubspec.yaml +++ b/script/tool/pubspec.yaml @@ -9,7 +9,8 @@ dependencies: collection: ^1.15.0 colorize: ^3.0.0 file: ^6.1.0 - git: ^2.0.0 + # Pin git to 2.0.x until dart >=2.18 is legacy + git: '>=2.0.0 <2.1.0' http: ^0.13.3 http_multi_server: ^3.0.1 meta: ^1.3.0 diff --git a/script/tool/test/common/package_command_test.mocks.dart b/script/tool/test/common/package_command_test.mocks.dart index b7f7807b3b05..79c5d4df1a8c 100644 --- a/script/tool/test/common/package_command_test.mocks.dart +++ b/script/tool/test/common/package_command_test.mocks.dart @@ -1,7 +1,8 @@ -// Mocks generated by Mockito 5.0.7 from annotations -// in flutter_plugin_tools/test/common_test.dart. +// Mocks generated by Mockito 5.3.2 from annotations +// in flutter_plugin_tools/test/common/package_command_test.dart. // Do not manually edit this file. +// ignore_for_file: no_leading_underscores_for_library_prefixes import 'dart:async' as _i6; import 'dart:io' as _i4; @@ -13,18 +14,47 @@ import 'package:git/src/tag.dart' as _i7; import 'package:git/src/tree_entry.dart' as _i9; import 'package:mockito/mockito.dart' as _i1; +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters // ignore_for_file: comment_references -// ignore_for_file: unnecessary_parenthesis - +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member // ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class -// ignore_for_file: avoid_redundant_argument_values - -class _FakeCommit extends _i1.Fake implements _i2.Commit {} +class _FakeCommit_0 extends _i1.SmartFake implements _i2.Commit { + _FakeCommit_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeBranchReference extends _i1.Fake implements _i3.BranchReference {} +class _FakeBranchReference_1 extends _i1.SmartFake + implements _i3.BranchReference { + _FakeBranchReference_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeProcessResult extends _i1.Fake implements _i4.ProcessResult {} +class _FakeProcessResult_2 extends _i1.SmartFake implements _i4.ProcessResult { + _FakeProcessResult_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} /// A class which mocks [GitDir]. /// @@ -35,109 +65,222 @@ class MockGitDir extends _i1.Mock implements _i5.GitDir { } @override - String get path => - (super.noSuchMethod(Invocation.getter(#path), returnValue: '') as String); + String get path => (super.noSuchMethod( + Invocation.getter(#path), + returnValue: '', + ) as String); @override _i6.Future commitCount([String? branchName = r'HEAD']) => - (super.noSuchMethod(Invocation.method(#commitCount, [branchName]), - returnValue: Future.value(0)) as _i6.Future); + (super.noSuchMethod( + Invocation.method( + #commitCount, + [branchName], + ), + returnValue: _i6.Future.value(0), + ) as _i6.Future); @override _i6.Future<_i2.Commit> commitFromRevision(String? revision) => - (super.noSuchMethod(Invocation.method(#commitFromRevision, [revision]), - returnValue: Future<_i2.Commit>.value(_FakeCommit())) - as _i6.Future<_i2.Commit>); + (super.noSuchMethod( + Invocation.method( + #commitFromRevision, + [revision], + ), + returnValue: _i6.Future<_i2.Commit>.value(_FakeCommit_0( + this, + Invocation.method( + #commitFromRevision, + [revision], + ), + )), + ) as _i6.Future<_i2.Commit>); @override _i6.Future> commits([String? branchName = r'HEAD']) => - (super.noSuchMethod(Invocation.method(#commits, [branchName]), - returnValue: - Future>.value({})) - as _i6.Future>); + (super.noSuchMethod( + Invocation.method( + #commits, + [branchName], + ), + returnValue: + _i6.Future>.value({}), + ) as _i6.Future>); @override _i6.Future<_i3.BranchReference?> branchReference(String? branchName) => - (super.noSuchMethod(Invocation.method(#branchReference, [branchName]), - returnValue: - Future<_i3.BranchReference?>.value(_FakeBranchReference())) - as _i6.Future<_i3.BranchReference?>); + (super.noSuchMethod( + Invocation.method( + #branchReference, + [branchName], + ), + returnValue: _i6.Future<_i3.BranchReference?>.value(), + ) as _i6.Future<_i3.BranchReference?>); @override _i6.Future> branches() => (super.noSuchMethod( - Invocation.method(#branches, []), - returnValue: - Future>.value(<_i3.BranchReference>[])) - as _i6.Future>); + Invocation.method( + #branches, + [], + ), + returnValue: _i6.Future>.value( + <_i3.BranchReference>[]), + ) as _i6.Future>); @override - _i6.Stream<_i7.Tag> tags() => - (super.noSuchMethod(Invocation.method(#tags, []), - returnValue: Stream<_i7.Tag>.empty()) as _i6.Stream<_i7.Tag>); + _i6.Stream<_i7.Tag> tags() => (super.noSuchMethod( + Invocation.method( + #tags, + [], + ), + returnValue: _i6.Stream<_i7.Tag>.empty(), + ) as _i6.Stream<_i7.Tag>); @override - _i6.Future> showRef( - {bool? heads = false, bool? tags = false}) => + _i6.Future> showRef({ + bool? heads = false, + bool? tags = false, + }) => (super.noSuchMethod( - Invocation.method(#showRef, [], {#heads: heads, #tags: tags}), - returnValue: Future>.value( - <_i8.CommitReference>[])) - as _i6.Future>); - @override - _i6.Future<_i3.BranchReference> currentBranch() => - (super.noSuchMethod(Invocation.method(#currentBranch, []), - returnValue: - Future<_i3.BranchReference>.value(_FakeBranchReference())) - as _i6.Future<_i3.BranchReference>); - @override - _i6.Future> lsTree(String? treeish, - {bool? subTreesOnly = false, String? path}) => + Invocation.method( + #showRef, + [], + { + #heads: heads, + #tags: tags, + }, + ), + returnValue: _i6.Future>.value( + <_i8.CommitReference>[]), + ) as _i6.Future>); + @override + _i6.Future<_i3.BranchReference> currentBranch() => (super.noSuchMethod( + Invocation.method( + #currentBranch, + [], + ), + returnValue: + _i6.Future<_i3.BranchReference>.value(_FakeBranchReference_1( + this, + Invocation.method( + #currentBranch, + [], + ), + )), + ) as _i6.Future<_i3.BranchReference>); + @override + _i6.Future> lsTree( + String? treeish, { + bool? subTreesOnly = false, + String? path, + }) => (super.noSuchMethod( - Invocation.method(#lsTree, [treeish], - {#subTreesOnly: subTreesOnly, #path: path}), - returnValue: Future>.value(<_i9.TreeEntry>[])) - as _i6.Future>); + Invocation.method( + #lsTree, + [treeish], + { + #subTreesOnly: subTreesOnly, + #path: path, + }, + ), + returnValue: _i6.Future>.value(<_i9.TreeEntry>[]), + ) as _i6.Future>); @override _i6.Future createOrUpdateBranch( - String? branchName, String? treeSha, String? commitMessage) => + String? branchName, + String? treeSha, + String? commitMessage, + ) => (super.noSuchMethod( - Invocation.method( - #createOrUpdateBranch, [branchName, treeSha, commitMessage]), - returnValue: Future.value('')) as _i6.Future); + Invocation.method( + #createOrUpdateBranch, + [ + branchName, + treeSha, + commitMessage, + ], + ), + returnValue: _i6.Future.value(), + ) as _i6.Future); @override - _i6.Future commitTree(String? treeSha, String? commitMessage, - {List? parentCommitShas}) => + _i6.Future commitTree( + String? treeSha, + String? commitMessage, { + List? parentCommitShas, + }) => (super.noSuchMethod( - Invocation.method(#commitTree, [treeSha, commitMessage], - {#parentCommitShas: parentCommitShas}), - returnValue: Future.value('')) as _i6.Future); + Invocation.method( + #commitTree, + [ + treeSha, + commitMessage, + ], + {#parentCommitShas: parentCommitShas}, + ), + returnValue: _i6.Future.value(''), + ) as _i6.Future); @override _i6.Future> writeObjects(List? paths) => - (super.noSuchMethod(Invocation.method(#writeObjects, [paths]), - returnValue: - Future>.value({})) - as _i6.Future>); + (super.noSuchMethod( + Invocation.method( + #writeObjects, + [paths], + ), + returnValue: _i6.Future>.value({}), + ) as _i6.Future>); @override - _i6.Future<_i4.ProcessResult> runCommand(Iterable? args, - {bool? throwOnError = true}) => + _i6.Future<_i4.ProcessResult> runCommand( + Iterable? args, { + bool? throwOnError = true, + }) => (super.noSuchMethod( - Invocation.method(#runCommand, [args], {#throwOnError: throwOnError}), - returnValue: - Future<_i4.ProcessResult>.value(_FakeProcessResult())) as _i6 - .Future<_i4.ProcessResult>); + Invocation.method( + #runCommand, + [args], + {#throwOnError: throwOnError}, + ), + returnValue: _i6.Future<_i4.ProcessResult>.value(_FakeProcessResult_2( + this, + Invocation.method( + #runCommand, + [args], + {#throwOnError: throwOnError}, + ), + )), + ) as _i6.Future<_i4.ProcessResult>); @override - _i6.Future isWorkingTreeClean() => - (super.noSuchMethod(Invocation.method(#isWorkingTreeClean, []), - returnValue: Future.value(false)) as _i6.Future); + _i6.Future isWorkingTreeClean() => (super.noSuchMethod( + Invocation.method( + #isWorkingTreeClean, + [], + ), + returnValue: _i6.Future.value(false), + ) as _i6.Future); @override _i6.Future<_i2.Commit?> updateBranch( - String? branchName, - _i6.Future Function(_i4.Directory)? populater, - String? commitMessage) => + String? branchName, + _i6.Future Function(_i4.Directory)? populater, + String? commitMessage, + ) => (super.noSuchMethod( - Invocation.method( - #updateBranch, [branchName, populater, commitMessage]), - returnValue: Future<_i2.Commit?>.value(_FakeCommit())) - as _i6.Future<_i2.Commit?>); + Invocation.method( + #updateBranch, + [ + branchName, + populater, + commitMessage, + ], + ), + returnValue: _i6.Future<_i2.Commit?>.value(), + ) as _i6.Future<_i2.Commit?>); @override - _i6.Future<_i2.Commit?> updateBranchWithDirectoryContents(String? branchName, - String? sourceDirectoryPath, String? commitMessage) => + _i6.Future<_i2.Commit?> updateBranchWithDirectoryContents( + String? branchName, + String? sourceDirectoryPath, + String? commitMessage, + ) => (super.noSuchMethod( - Invocation.method(#updateBranchWithDirectoryContents, - [branchName, sourceDirectoryPath, commitMessage]), - returnValue: Future<_i2.Commit?>.value(_FakeCommit())) - as _i6.Future<_i2.Commit?>); + Invocation.method( + #updateBranchWithDirectoryContents, + [ + branchName, + sourceDirectoryPath, + commitMessage, + ], + ), + returnValue: _i6.Future<_i2.Commit?>.value(), + ) as _i6.Future<_i2.Commit?>); } From a279b9dd839a6537de740a06ba749cb68a1b418a Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 4 Nov 2022 11:42:50 -0400 Subject: [PATCH 118/133] Roll Flutter from e6300da2c39f to 55e8cd178621 (17 revisions) (#6670) * 0943693e8 Revert "[tools]validation basic Xcode settings for build ipa (#113412)" (flutter/flutter#114615) * a440c4689 Do not assume that pub is the first command run by "flutter create" (flutter/flutter#114621) * 33b81ed95 fixes for incoming linter (flutter/flutter#113794) * 0186b1496 Fix the path where footer is written. (flutter/flutter#114469) * 44ecbbcc5 Roll Flutter Engine from 840a7b346216 to 66b244d9fa0a (25 revisions) (flutter/flutter#114640) * 2ce62b3a0 Roll Flutter Engine from 66b244d9fa0a to e3c51631a9b5 (2 revisions) (flutter/flutter#114643) * 8a9ddade9 [tools]validation basic Xcode settings for build ipa (#113412) (flutter/flutter#114634) * 009fa69f3 Revert "Scribble mixin (#104128)" (flutter/flutter#114647) * 125b9a769 Roll Flutter Engine from e3c51631a9b5 to ed31c3d76df5 (2 revisions) (flutter/flutter#114648) * 9f6090c9a Revert "Fix text field label animation duration and curve" (flutter/flutter#114646) * 44b6cd2ec Roll Flutter Engine from ed31c3d76df5 to fb7cde697062 (2 revisions) (flutter/flutter#114651) * fca260a15 Roll Flutter Engine from fb7cde697062 to 69a275300a28 (7 revisions) (flutter/flutter#114667) * 7bee6e8af 4b970fca0 Roll Dart SDK from c6e0307f3849 to 35b0cc8ac48b (2 revisions) (flutter/engine#37308) (flutter/flutter#114668) * 43606d136 0a2d451b3 Roll Skia from b8209dce9a48 to 7eac7e7547e7 (1 revision) (flutter/engine#37309) (flutter/flutter#114670) * 55fac571b 2f90bda40 Merge AccessibilityBridge and AccessibilityBridgeDelegate (flutter/engine#36597) (flutter/flutter#114674) * 4b7106c5b c5cc559db Roll Fuchsia Linux SDK from -0Xq1c-TncmWBWzqg... to 7e3H7isxOF6vqMDTT... (flutter/engine#37311) (flutter/flutter#114678) * 55e8cd178 449fcc8b8 Roll Skia from 7eac7e7547e7 to c901cb6ae66f (1 revision) (flutter/engine#37313) (flutter/flutter#114683) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 0e8fdde7fc19..49d3be8386ac 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -e6300da2c39ff230d943eeccb80ba3ccfa1e3759 +55e8cd1786211af87a7c660292c8f449c6072924 From 3ec3cc1e22dde037e42414ea97c6d1274d685392 Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Fri, 4 Nov 2022 09:35:11 -0700 Subject: [PATCH 119/133] Add `Mac_x64 darwin_lint_podspecs` to LUCI (#6637) * add darwin_lint_podspecs * update target file * add args * update path * update script * args list * bringup: true * TODO & Name changes --- .ci.yaml | 24 ++++++++++++++++++++++++ .ci/targets/mac_lint_podspecs.yaml | 6 ++++++ 2 files changed, 30 insertions(+) create mode 100644 .ci/targets/mac_lint_podspecs.yaml diff --git a/.ci.yaml b/.ci.yaml index bc1feca37966..18525998967e 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -25,8 +25,32 @@ platform_properties: ] device_type: none os: Windows + mac_x64: + properties: + dependencies: >- + [ + {"dependency": "xcode", "version": "14a5294e"}, + {"dependency": "gems", "version": "v3.3.14"} + ] + os: Mac-12 + device_type: none + cpu: x86 + xcode: 14a5294e # xcode 14.0 beta 5 + targets: + # TODO(stuartmorgan): Move this to ARM once google_maps_flutter has ARM + # support. `pod lint` makes a synthetic target that doesn't respect the + # pod's arch exclusions, so fails to build. + - name: Mac_x64 lint_podspecs + recipe: plugins/plugins + bringup: true # New target: https://github.com/flutter/plugins/pull/6637 + timeout: 30 + properties: + add_recipes_cq: "true" + version_file: flutter_master.version + target_file: mac_lint_podspecs.yaml + - name: Windows win32-platform_tests master recipe: plugins/plugins timeout: 30 diff --git a/.ci/targets/mac_lint_podspecs.yaml b/.ci/targets/mac_lint_podspecs.yaml new file mode 100644 index 000000000000..02a904ee3d85 --- /dev/null +++ b/.ci/targets/mac_lint_podspecs.yaml @@ -0,0 +1,6 @@ +tasks: + - name: prepare tool + script: .ci/scripts/prepare_tool.sh + - name: lint iOS and macOS podspecs + script: script/tool_runner.sh + args: ["podspecs"] From 0e5e90f6ca925cdf9baf793dd35d07e901915d24 Mon Sep 17 00:00:00 2001 From: fzyzcjy <5236035+fzyzcjy@users.noreply.github.com> Date: Sat, 5 Nov 2022 05:10:00 +0800 Subject: [PATCH 120/133] [webview_flutter] Fix typo (#6650) * Update webview.dart * Update CHANGELOG.md * Update CHANGELOG.md --- packages/webview_flutter/webview_flutter/CHANGELOG.md | 1 + packages/webview_flutter/webview_flutter/lib/src/webview.dart | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index d5559f9ca7f7..f278cf9f9d5b 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -5,6 +5,7 @@ * Fixes avoid_redundant_argument_values lint warnings and minor typos. * Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/104231). * Updates references to the obsolete master branch. +* Fixes typo from lowercase to uppercase. ## 3.0.4 diff --git a/packages/webview_flutter/webview_flutter/lib/src/webview.dart b/packages/webview_flutter/webview_flutter/lib/src/webview.dart index 697eb487b953..7de8e281711b 100644 --- a/packages/webview_flutter/webview_flutter/lib/src/webview.dart +++ b/packages/webview_flutter/webview_flutter/lib/src/webview.dart @@ -316,7 +316,7 @@ class _WebViewState extends State { webViewPlatformCallbacksHandler: _platformCallbacksHandler, javascriptChannelRegistry: _javascriptChannelRegistry, gestureRecognizers: widget.gestureRecognizers, - creationParams: _creationParamsfromWidget(widget), + creationParams: _creationParamsFromWidget(widget), ); } @@ -361,7 +361,7 @@ class _WebViewState extends State { } } -CreationParams _creationParamsfromWidget(WebView widget) { +CreationParams _creationParamsFromWidget(WebView widget) { return CreationParams( initialUrl: widget.initialUrl, webSettings: _webSettingsFromWidget(widget), From f04ef7309f63ce925eacda89a9c4b26351469f0e Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 5 Nov 2022 11:51:07 -0400 Subject: [PATCH 121/133] Roll Flutter from 55e8cd178621 to e0e7027b6263 (20 revisions) (#6673) * 77d6ecb83 805b145d7 [web] Improve line breaker test exceptions (flutter/engine#37244) (flutter/flutter#114688) * 5233fd922 Roll Plugins from 5c11747ae143 to a279b9dd839a (6 revisions) (flutter/flutter#114689) * e1166e43f 287a3ab59 Roll Skia from c901cb6ae66f to 1272b520c082 (1 revision) (flutter/engine#37314) (flutter/flutter#114691) * 48457d736 WidgetController.startGesture trackpad support (flutter/flutter#114631) * c1d2b854e Change some required nullable parameters in tool to non-null (flutter/flutter#114115) * cfb2f158d Roll Flutter Engine from 287a3ab59269 to e947833ceb5b (2 revisions) (flutter/flutter#114696) * 80bf35519 Support keyboard selection in SelectabledRegion (flutter/flutter#112584) * be83c98ed 5117e858e Fix typo in overlay platform view iOS test (flutter/engine#37262) (flutter/flutter#114705) * 6ea01e6ae Roll Flutter Engine from 5117e858ed1e to 6950689ed775 (3 revisions) (flutter/flutter#114710) * b187bc474 Switch the way we retrieve the vm_service_port from /hub to iquery, on device. (flutter/flutter#114637) * 01507bab5 Revert "Switch the way we retrieve the vm_service_port from /hub to iquery, on device. (#114637)" (flutter/flutter#114715) * 91a56cf15 roll packages (flutter/flutter#114366) * d68af26ae Roll Flutter Engine from 6950689ed775 to 0933ca485a07 (3 revisions) (flutter/flutter#114714) * 4fd0a9253 Remove auto_cleanup of xcode caches. (flutter/flutter#114719) * 96f9ca830 Roll Flutter Engine from 0933ca485a07 to 28e1ea0cc5b1 (4 revisions) (flutter/flutter#114720) * 1aada6fc5 [New Feature]Support mouse wheel event on the scrollbar widget (flutter/flutter#109659) * 6265610b0 Roll Flutter Engine from 28e1ea0cc5b1 to ba390f2a7b7d (3 revisions) (flutter/flutter#114728) * 140a57e96 Roll Flutter Engine from ba390f2a7b7d to 223a485ceb02 (3 revisions) (flutter/flutter#114732) * 06ded49f7 Roll Flutter Engine from 223a485ceb02 to cf56eb5565e2 (3 revisions) (flutter/flutter#114735) * e0e7027b6 9c45b0ebe Roll Fuchsia Mac SDK from jAKH68TYoKUA5HNS2... to Ua8Jtf8Zka9uxIVdl... (flutter/engine#37345) (flutter/flutter#114746) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 49d3be8386ac..0ee2d8e53c30 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -55e8cd1786211af87a7c660292c8f449c6072924 +e0e7027b6263cf3c1f9a5b8d74d911ced0a079a1 From 3ca34103db0f12e2449370a95deb026f6fb7bb96 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sun, 6 Nov 2022 10:45:22 -0500 Subject: [PATCH 122/133] Roll Flutter from e0e7027b6263 to 5ea5a5330169 (7 revisions) (#6675) * cef4c2aac ICU Message Syntax Parser (flutter/flutter#112390) * 07d3a64b5 0886c7d0b Narrow the scope of the Windows Android arm hack (flutter/engine#37125) (flutter/flutter#114751) * cf0cd067a Mark new_gallery__transition_perf as non-flaky (flutter/flutter#114694) * 5bc50c136 Fix macOS migration nothing-to-upgrade test (flutter/flutter#114703) * b1509ed64 36cfa9e68 Apply the Windows friendly path solution in remaining spots (flutter/engine#37344) (flutter/flutter#114759) * b45e62859 b8218eacc Roll Fuchsia Mac SDK from Ua8Jtf8Zka9uxIVdl... to sNXsQVxntMX8f42LE... (flutter/engine#37352) (flutter/flutter#114760) * 5ea5a5330 6f3018a72 Roll Skia from a34882309d04 to c3c31be8729b (1 revision) (flutter/engine#37358) (flutter/flutter#114765) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 0ee2d8e53c30..4209cedf3687 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -e0e7027b6263cf3c1f9a5b8d74d911ced0a079a1 +5ea5a53301692716d2cbdd5cd18fbe2f8e8b76da From 79d62f7260aa6f9cabb929ce9e378652b232ae73 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Mon, 7 Nov 2022 11:00:37 -0500 Subject: [PATCH 123/133] Roll Flutter from 5ea5a5330169 to a1289a41358d (7 revisions) (#6677) * 528013588 ecd3c4857 Roll Fuchsia Mac SDK from sNXsQVxntMX8f42LE... to 9Jb1-3tRPQ2ZhpTQC... (flutter/engine#37363) (flutter/flutter#114772) * a6da1042a Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (flutter/flutter#114560) * 19c5fc50d 0cbdf464c Add Matrix::LookAt (flutter/engine#37361) (flutter/flutter#114786) * c551fe3de 4e45cfb4a Roll Fuchsia Mac SDK from 9Jb1-3tRPQ2ZhpTQC... to 5XOj9l5e2wkSpMKT1... (flutter/engine#37369) (flutter/flutter#114789) * a54a46df4 6b57fddd1 Bump github/codeql-action from 2.1.29 to 2.1.31 (flutter/engine#37374) (flutter/flutter#114798) * 3c9288c6d Increase minimum supported macOS version from 10.13 to 10.14 (flutter/flutter#114713) * a1289a413 891d4a357 Roll Skia from c3c31be8729b to 513f0fd34590 (2 revisions) (flutter/engine#37377) (flutter/flutter#114802) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 4209cedf3687..4dfd6103ad91 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -5ea5a53301692716d2cbdd5cd18fbe2f8e8b76da +a1289a41358d84496d1b29b54ff60bb10f2bf699 From 910b61d1bf4cd89fd7c2db59659cfa2047f4859e Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Tue, 8 Nov 2022 10:47:23 -0500 Subject: [PATCH 124/133] Roll Flutter from a1289a41358d to a1432a9c5da2 (23 revisions) (#6681) * 04d6fd2a0 Roll Plugins from a279b9dd839a to 3ca34103db0f (4 revisions) (flutter/flutter#114813) * 151c83191 92d9ad27f Roll Skia from 513f0fd34590 to da9fad017aee (2 revisions) (flutter/engine#37379) (flutter/flutter#114816) * d6a8e92cd Revert "Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (#114560)" (flutter/flutter#114819) * 7de60bbce 334549704 Roll buildroot to d13d64086f5e301bd0415eede895b34af220ef42 (flutter/engine#37380) (flutter/flutter#114821) * 496cf627e Delegate TestWindow.updateSemantics to the wrapped SingletonFlutterWindow (flutter/flutter#114733) * 497a52809 Fix TextField/CupertinoTextField hint style overflow not work. (flutter/flutter#114335) * 7e36cf17e Mac Page Up / Page Down in text fields (flutter/flutter#105497) * 77c06c2ca 0075e10bc Move gclient var property to ci.yaml (flutter/engine#37351) (flutter/flutter#114828) * 378387b13 when getting xcworkspace, exclude hidden files (flutter/flutter#114099) * e90183233 4e03d059d [Android] Speed up the method 'FlutterRenderer.getBitmap' (flutter/engine#37342) (flutter/flutter#114833) * 3cde69e8d Revert "Revert "Scribble mixin (#104128)" (#114647)" (flutter/flutter#114698) * e1adc96d5 feat: provide a way to set the initial child's alignment (flutter/flutter#114745) * fe5eb2db7 ee48c0392 Roll Fuchsia Mac SDK from 5XOj9l5e2wkSpMKT1... to sa5bVGimNo3JwLV27... (flutter/engine#37386) (flutter/flutter#114836) * 5628ebf66 [RawKeyboard] Allow inconsistent modifiers for Web (flutter/flutter#114499) * f1cdfa289 Use AppBar.systemOverlayStyle to style system navigation bar (flutter/flutter#104827) * e4e902dce [flutter_tools] add compilation failure tests for new cases added in impellerc (flutter/flutter#114757) * 7640f315d a81a715ce Revert "Remove deprecated calls to updateSemantics in `PlatformDispatcher` (#36673)" (flutter/engine#37388) (flutter/flutter#114842) * 585d4457d Roll Flutter Engine from a81a715ce6b2 to df602070ac4b (3 revisions) (flutter/flutter#114847) * 1ca2e0b5b Fix `CastError` in `StadiumBorder.lerpTo` and `StadiumBorder.lerpFrom` when using `BorderRadiusDirectional` (flutter/flutter#114826) * 2e85e745d 004a30516 [fuchsia] embedding-flutter test (flutter/engine#37052) (flutter/flutter#114854) * 139b8f458 Roll Flutter Engine from 004a305166d5 to e7d7edab98ad (2 revisions) (flutter/flutter#114855) * 53e687622 Allow Flutter golden file tests to be flaky (flutter/flutter#114450) * a1432a9c5 Refactor fix_data.yaml (flutter/flutter#114192) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 4dfd6103ad91..fe25fb32511e 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -a1289a41358d84496d1b29b54ff60bb10f2bf699 +a1432a9c5da2f2fef9241d9f6d3f6b3a69bc918b From 58579201ed4b41c3a9b061457e46be832324537b Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Wed, 9 Nov 2022 10:43:08 -0500 Subject: [PATCH 125/133] Roll Flutter from a1432a9c5da2 to d3dcd7d532b6 (8 revisions) (#6684) * a84e369bd Revert "Allow Flutter golden file tests to be flaky (#114450)" (flutter/flutter#114902) * 1725a26e2 Switch the way we retrieve the vm_service_port from /hub to iquery, on device. (flutter/flutter#114834) * 7020f59ac [tool] Support `--flavor` option for `flutter install`. (flutter/flutter#114048) * 9797d5f1c [macOS] Refactor the `flutter run` macOS console output test (flutter/flutter#114645) * 530324d23 Build command dependency injection (flutter/flutter#114383) * 69a542dad Apply multidex config in kotlin dsl gradle file (flutter/flutter#114660) * 92f10ed71 match error statements without relying on volatile human-readable descriptions (flutter/flutter#114922) * d3dcd7d53 Update `CircleAvatar` to support Material 3 (flutter/flutter#114812) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index fe25fb32511e..e8ed6b6b7236 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -a1432a9c5da2f2fef9241d9f6d3f6b3a69bc918b +d3dcd7d532b61f43118ab8031bf732aea4a7a9f5 From 6da73be000464845b9b6fc685326d09e9c4aae28 Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Wed, 9 Nov 2022 10:27:13 -0800 Subject: [PATCH 126/133] Enable `Mac build_all_plugins` (#6671) * general build_all_plugins * add separate macos * add arg for windows * add targets * udpate version file * platform & build_mode args * map docs from cirrus --- .ci.yaml | 24 ++++++++++++++++++++++++ .ci/scripts/build_all_plugins.sh | 5 +++-- .ci/targets/build_all_plugins.yaml | 6 +++++- .ci/targets/mac_build_all_plugins.yaml | 11 +++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 .ci/targets/mac_build_all_plugins.yaml diff --git a/.ci.yaml b/.ci.yaml index 18525998967e..e48175acc6a2 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -39,6 +39,7 @@ platform_properties: targets: + ### iOS+macOS tasks *** # TODO(stuartmorgan): Move this to ARM once google_maps_flutter has ARM # support. `pod lint` makes a synthetic target that doesn't respect the # pod's arch exclusions, so fails to build. @@ -51,6 +52,29 @@ targets: version_file: flutter_master.version target_file: mac_lint_podspecs.yaml + ### macOS desktop tasks ### + # macos-platform_tests builds all the plugins on M1, so this build is run + # on Intel to give us build coverage of both host types. + - name: Mac_x64 build_all_plugins master + recipe: plugins/plugins + bringup: true # New target: https://github.com/flutter/plugins/pull/6671 + timeout: 30 + properties: + add_recipes_cq: "true" + version_file: flutter_master.version + target_file: mac_build_all_plugins.yaml + channel: master + + - name: Mac_x64 build_all_plugins stable + recipe: plugins/plugins + bringup: true # New target: https://github.com/flutter/plugins/pull/6671 + timeout: 30 + properties: + add_recipes_cq: "true" + version_file: flutter_stable.version + target_file: mac_build_all_plugins.yaml + channel: stable + - name: Windows win32-platform_tests master recipe: plugins/plugins timeout: 30 diff --git a/.ci/scripts/build_all_plugins.sh b/.ci/scripts/build_all_plugins.sh index 734194615673..89dab629fd52 100644 --- a/.ci/scripts/build_all_plugins.sh +++ b/.ci/scripts/build_all_plugins.sh @@ -3,6 +3,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +platform="$1" +build_mode="$2" cd all_packages -flutter build windows --debug -flutter build windows --release +flutter build "$platform" --"$build_mode" diff --git a/.ci/targets/build_all_plugins.yaml b/.ci/targets/build_all_plugins.yaml index b51a5b18dfd9..0ffbdfcce376 100644 --- a/.ci/targets/build_all_plugins.yaml +++ b/.ci/targets/build_all_plugins.yaml @@ -3,5 +3,9 @@ tasks: script: .ci/scripts/prepare_tool.sh - name: create all_plugins app script: .ci/scripts/create_all_plugins_app.sh - - name: build all_plugins + - name: build all_plugins debug script: .ci/scripts/build_all_plugins.sh + args: ["windows", "debug"] + - name: build all_plugins release + script: .ci/scripts/build_all_plugins.sh + args: ["windows", "release"] diff --git a/.ci/targets/mac_build_all_plugins.yaml b/.ci/targets/mac_build_all_plugins.yaml new file mode 100644 index 000000000000..4dd324e8b3f0 --- /dev/null +++ b/.ci/targets/mac_build_all_plugins.yaml @@ -0,0 +1,11 @@ +tasks: + - name: prepare tool + script: .ci/scripts/prepare_tool.sh + - name: create all_plugins app + script: .ci/scripts/create_all_plugins_app.sh + - name: build all_plugins debug + script: .ci/scripts/build_all_plugins.sh + args: ["macos", "debug"] + - name: build all_plugins release + script: .ci/scripts/build_all_plugins.sh + args: ["macos", "release"] From cc4ffaebd74b90dd1fb2c5c8888fde1cb2395108 Mon Sep 17 00:00:00 2001 From: Ricardo Amador <32242716+ricardoamador@users.noreply.github.com> Date: Wed, 9 Nov 2022 15:13:06 -0800 Subject: [PATCH 127/133] Update flutter cirrus key (#6687) * Update flutter cirrus key * Update the firebase lab test key --- .cirrus.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index a12c12d1fdbf..5ff275e4c053 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,4 +1,4 @@ -gcp_credentials: ENCRYPTED[!f1177d1ddb5330ffaa9ea11c9c9e8e0c542185e895c36071f18cec923dd31c50ece6d18da89c2f6f1cd2d1a98d0c2eea!] +gcp_credentials: ENCRYPTED[!9e38557f08108136b3625b7e62c64cc9eccc50365ffeaaa55c6be52f1d8fd6225af5badc69983ca08484274f02f34424!] # Run on PRs and main branch post submit only. Don't run tests when tagging. only_if: $CIRRUS_TAG == '' && ($CIRRUS_PR != '' || $CIRRUS_BRANCH == 'main') @@ -245,7 +245,7 @@ task: CHANNEL: "master" CHANNEL: "stable" MAPS_API_KEY: ENCRYPTED[596a9f6bca436694625ac50851dc5da6b4d34cba8025f7db5bc9465142e8cd44e15f69e3507787753accebfc4910d550] - GCLOUD_FIREBASE_TESTLAB_KEY: ENCRYPTED[30e6cf7189e3ff3868edc25d2e638ef2aec70546456427064bbc74b297d36145364f49f9d26b327787a59df149d69262] + GCLOUD_FIREBASE_TESTLAB_KEY: ENCRYPTED[4457646586de940f49e054de7d82e60078b205ac627f11a89d077e63f639c9ba1002541d9209a9ee7777e159e97b43d0] build_script: - ./script/tool_runner.sh build-examples --apk lint_script: From f35c16930bb5d058041e2c454ea45fffca063e25 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Thu, 10 Nov 2022 10:45:15 -0500 Subject: [PATCH 128/133] Roll Flutter from d3dcd7d532b6 to c7d11549a51e (13 revisions) (#6689) * 3a656b16c Add more supported simulator debugging options and improve tests (flutter/flutter#114628) * 51c517c03 [flutter_tools/dap] Add support for forwarding `flutter run --machine` exposeUrl requests to the DAP client (flutter/flutter#114539) * 8e5439c89 Roll Flutter Engine from e7d7edab98ad to c76035429c36 (14 revisions) (flutter/flutter#115008) * a479718b0 Update cirrus key (flutter/flutter#115006) * dccc761e5 Roll Flutter Engine from c76035429c36 to aa4b3ea2f733 (27 revisions) (flutter/flutter#115025) * d0491dcf1 Add the `channel` parameter to the Dartpad samples (flutter/flutter#115018) * befd8b66c 722414a26 Implemented threadsafe platform channel replies on windows (flutter/engine#36909) (flutter/flutter#115033) * 154ae0f11 `updateSemantics` in TestWindow should always be implemented. (flutter/flutter#114857) * 008ac174f remove unnecessary brace in string interpolation (flutter/flutter#115032) * 8926d9ef2 a9fbf6af5 Roll Fuchsia Linux SDK from mDzQK4ZUk_Y4wfZa_... to RNSA2Wp1MObtc7OHy... (flutter/engine#37485) (flutter/flutter#115045) * e6fb12469 Roll Flutter Engine from a9fbf6af52c9 to b42ed6933cef (2 revisions) (flutter/flutter#115048) * ff7545185 a42b2d9b9 Fix a race in the EmbedderA11yTest.A11yTreeIsConsistent tests (flutter/engine#37488) (flutter/flutter#115060) * c7d11549a a71c0c6c3 [Impeller] Support access the descriptor of PipelineFuture directly (flutter/engine#37415) (flutter/flutter#115063) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index e8ed6b6b7236..9379c41a4cb3 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -d3dcd7d532b61f43118ab8031bf732aea4a7a9f5 +c7d11549a51eb37807604bdfd1141a82be8fac4b From 553dac8b27169f67bdb25cb39823ad970595ccf7 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 11 Nov 2022 13:09:19 -0500 Subject: [PATCH 129/133] Roll Flutter from c7d11549a51e to 098aac7ffeef (24 revisions) (#6692) * bdcacbf8e 1c1ad0e72 Roll Fuchsia Linux SDK from RNSA2Wp1MObtc7OHy... to mduclAELKkftJ-fwI... (flutter/engine#37495) (flutter/flutter#115088) * ca6165244 Roll ios-deploy iOS artifact (flutter/flutter#115042) * b31b9dc05 057c53a05 [Impeller] Remove duplicate code in 'TiledTextureContents' (flutter/engine#37492) (flutter/flutter#115093) * 19b351b07 f467eee51 Turned on performance-move-const-arg everywhere. (flutter/engine#37482) (flutter/flutter#115095) * 5a600456b Reland: Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (#114560) (flutter/flutter#115002) * 09a4f2346 Prevent tests from producing dill files alongside the test file (flutter/flutter#115075) * 1f891a0f3 Fix `RangeSlider` semantics node size (flutter/flutter#114999) * c1ceda41e Include stdout in codesign failure output (flutter/flutter#115115) * 2e432ec16 chore: enable Flutter Android workflow on aarch64 (flutter/flutter#113829) * ad72a452b 12dabe83d Felt analyze (flutter/engine#37481) (flutter/flutter#115102) * 4e7dbefd9 Explicitly call out documentation links in "flutter create" (flutter/flutter#114181) * d41308179 Fix shrinkwrap on animated list (flutter/flutter#115104) * bd00a932c Roll Flutter Engine from 12dabe83da19 to 4cb9c1e00a84 (5 revisions) (flutter/flutter#115118) * 8858c1764 Roll Flutter Engine from 4cb9c1e00a84 to 30e2cedfa2ac (2 revisions) (flutter/flutter#115122) * 0f2f4b860 Roll Flutter Engine from 30e2cedfa2ac to cae1716611a4 (2 revisions) (flutter/flutter#115124) * c6561e60a 53cfb94c5 Roll Skia from 65b60707772d to b50a2f714837 (46 revisions) (flutter/engine#37501) (flutter/flutter#115128) * 6e89042d9 0721c860e [Impeller] null check samplers (flutter/engine#37489) (flutter/flutter#115132) * 88e49ed27 Load assets in flutter_test without turning event loop. (flutter/flutter#115123) * f9972818f Roll Flutter Engine from 0721c860e2c3 to cb78576e5fec (3 revisions) (flutter/flutter#115134) * 0d081f9c2 Roll Flutter Engine from cb78576e5fec to a41712cec63a (2 revisions) (flutter/flutter#115135) * 83cda7e52 19ead2834 Roll Fuchsia Linux SDK from mduclAELKkftJ-fwI... to R3L54Ma3VT2TQ6RpI... (flutter/engine#37513) (flutter/flutter#115139) * c021d9177 [flutter_tools] support github reporter (flutter/flutter#115137) * 413bb21df e32fc0044 Roll Skia from b50f741ef341 to 77620568f467 (5 revisions) (flutter/engine#37514) (flutter/flutter#115142) * 098aac7ff 7326e5b33 Roll Dart SDK from 3a022103e91d to 1e37edb1f6c1 (1 revision) (flutter/engine#37515) (flutter/flutter#115145) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 9379c41a4cb3..dda1206ec031 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -c7d11549a51eb37807604bdfd1141a82be8fac4b +098aac7ffeef2a1846eb3a7f14788520c8400a14 From 11cb483665ff1e7a373974ede9663995dc94540d Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Fri, 11 Nov 2022 16:08:09 -0500 Subject: [PATCH 130/133] Roll Flutter (stable) from e99c9c7cd9f6 to 52b3dc25f647 (4 revisions) (#6690) * 7fb1d47b6 [releases] Handle privatecommand messages that pass no data #112590 (flutter/flutter#114461) * 013ada8cf [release] Do not assume that pub is the first command run by "flutter create" (#114621) (flutter/flutter#114945) * a1b297691 CP: Fix the path where footer is written. (flutter/flutter#114947) * 52b3dc25f [CP] Fix a type casting error in text_input.dart (#109635) (flutter/flutter#114806) --- .ci/flutter_stable.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index 8afcd6e91f44..b19aa25587e7 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 +52b3dc25f6471c27b2144594abb11c741cb88f57 From b1c457fc99a5f560f1ef2e1d9ed60393ebad5c15 Mon Sep 17 00:00:00 2001 From: engine-flutter-autoroll Date: Sat, 12 Nov 2022 10:43:20 -0500 Subject: [PATCH 131/133] Roll Flutter from 098aac7ffeef to 61e927d22fe6 (16 revisions) (#6694) * 338841afd Revert "Revert "Revert "Scribble mixin (#104128)" (#114647)" (#114698)" (flutter/flutter#115146) * 229b39eda [flutter_tools] Fix so that the value set by `--dart-define-from-file` can be passed to Gradle (flutter/flutter#114297) * 3895786f9 Revert "Load assets in flutter_test without turning event loop. (#115123)" (flutter/flutter#115156) * a6e3ec8fa mark firebase test lab test flaky because of upstream infra issues (flutter/flutter#115178) * 8d808b5f9 Roll Flutter Engine from 7326e5b3354b to 329900fc85d6 (7 revisions) (flutter/flutter#115185) * 10dc56643 Add drone_dimensions to devicelab_build_test. (flutter/flutter#115183) * 0a5b531cc b6e45ae35 extend const_finder to allow skipping particular classes (flutter/engine#37257) (flutter/flutter#115189) * 0e9ee3679 [web] Add `--local-web-sdk` flag and use precompiled platform kernels for dart2js and ddc (flutter/flutter#114639) * 9e314ff74 Make FutureBuilder handle SynchronousFuture correctly, reland SynchronousFuture usage in test assets (flutter/flutter#115173) * 673fd973b 17d428e68 Roll Dart SDK from 2b6909ba35e5 to 190040da0bc8 (2 revisions) (flutter/engine#37536) (flutter/flutter#115191) * edcdb0046 Roll Flutter Engine from 17d428e688a9 to 38c4f1d78630 (2 revisions) (flutter/flutter#115192) * 877276812 Roll Flutter Engine from 38c4f1d78630 to 1f0dd2c0f5bb (2 revisions) (flutter/flutter#115194) * 6ec2bd0a8 M3 Segmented Button widget (flutter/flutter#113723) * b7b6758d5 f3dfdf4cc Roll Skia from 3bbdd5bc54f2 to a727f7ac8a98 (1 revision) (flutter/engine#37544) (flutter/flutter#115196) * 94e753d0f Roll Flutter Engine from f3dfdf4ccf38 to e3b3950f0fab (3 revisions) (flutter/flutter#115200) * 61e927d22 e63c9443b [Impeller] Include the new primitive type in the pipeline hash (flutter/engine#37546) (flutter/flutter#115201) --- .ci/flutter_master.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index dda1206ec031..3fbdedb3a1d3 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -098aac7ffeef2a1846eb3a7f14788520c8400a14 +61e927d22fe6d82c94c368d62aa81f733bd9218d From e500884c758c2d516baf7d5ab30639c81dd6b849 Mon Sep 17 00:00:00 2001 From: keyonghan <54558023+keyonghan@users.noreply.github.com> Date: Mon, 14 Nov 2022 16:09:20 -0800 Subject: [PATCH 132/133] Enable Mac ios_platform_tests tests (#6682) * add 0_4 master * typo fix * update args * fix args * ios runtime update * name change & variables * platform name fix --- .ci.yaml | 93 +++++++++++++++++++++++++ .ci/scripts/create_simulator.sh | 10 +++ .ci/targets/mac_ios_platform_tests.yaml | 22 ++++++ 3 files changed, 125 insertions(+) create mode 100644 .ci/scripts/create_simulator.sh create mode 100644 .ci/targets/mac_ios_platform_tests.yaml diff --git a/.ci.yaml b/.ci.yaml index e48175acc6a2..dffc7364e65a 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -75,6 +75,99 @@ targets: target_file: mac_build_all_plugins.yaml channel: stable + ### iOS tasks ### + # TODO(stuartmorgan): Swap this and ios-build_all_plugins once simulator + # tests are reliable on the ARM infrastructure. See discussion at + # https://github.com/flutter/plugins/pull/5693#issuecomment-1126011089 + - name: Mac_x64 ios_platform_tests_1_of_4 master + recipe: plugins/plugins + bringup: true # New target: https://github.com/flutter/plugins/pull/6682 + timeout: 30 + properties: + add_recipes_cq: "true" + version_file: flutter_master.version + target_file: mac_ios_platform_tests.yaml + package_sharding: "--shardIndex 0 --shardCount 4" + + - name: Mac_x64 ios_platform_tests_2_of_4 master + recipe: plugins/plugins + bringup: true # New target: https://github.com/flutter/plugins/pull/6682 + timeout: 30 + properties: + add_recipes_cq: "true" + version_file: flutter_master.version + target_file: mac_ios_platform_tests.yaml + package_sharding: "--shardIndex 1 --shardCount 4" + + - name: Mac_x64 ios_platform_tests_3_of_4 master + recipe: plugins/plugins + bringup: true # New target: https://github.com/flutter/plugins/pull/6682 + timeout: 30 + properties: + add_recipes_cq: "true" + version_file: flutter_master.version + target_file: mac_ios_platform_tests.yaml + package_sharding: "--shardIndex 2 --shardCount 4" + + - name: Mac_x64 ios_platform_tests_4_of_4 master + recipe: plugins/plugins + bringup: true # New target: https://github.com/flutter/plugins/pull/6682 + timeout: 30 + properties: + add_recipes_cq: "true" + version_file: flutter_master.version + target_file: mac_ios_platform_tests.yaml + package_sharding: "--shardIndex 3 --shardCount 4" + + # Don't run full platform tests on both channels in pre-submit. + - name: Mac_x64 ios_platform_tests_1_of_4 stable + recipe: plugins/plugins + presubmit: false + bringup: true # New target: https://github.com/flutter/plugins/pull/6682 + timeout: 30 + properties: + channel: stable + add_recipes_cq: "true" + version_file: flutter_stable.version + target_file: mac_ios_platform_tests.yaml + package_sharding: "--shardIndex 0 --shardCount 4" + + - name: Mac_x64 ios_platform_tests_2_of_4 stable + recipe: plugins/plugins + presubmit: false + bringup: true # New target: https://github.com/flutter/plugins/pull/6682 + timeout: 30 + properties: + channel: stable + add_recipes_cq: "true" + version_file: flutter_stable.version + target_file: mac_ios_platform_tests.yaml + package_sharding: "--shardIndex 1 --shardCount 4" + + - name: Mac_x64 ios_platform_tests_3_of_4 stable + recipe: plugins/plugins + presubmit: false + bringup: true # New target: https://github.com/flutter/plugins/pull/6682 + timeout: 30 + properties: + channel: stable + add_recipes_cq: "true" + version_file: flutter_stable.version + target_file: mac_ios_platform_tests.yaml + package_sharding: "--shardIndex 2 --shardCount 4" + + - name: Mac_x64 ios_platform_tests_4_of_4 stable + recipe: plugins/plugins + presubmit: false + bringup: true # New target: https://github.com/flutter/plugins/pull/6682 + timeout: 30 + properties: + channel: stable + add_recipes_cq: "true" + version_file: flutter_stable.version + target_file: mac_ios_platform_tests.yaml + package_sharding: "--shardIndex 3 --shardCount 4" + - name: Windows win32-platform_tests master recipe: plugins/plugins timeout: 30 diff --git a/.ci/scripts/create_simulator.sh b/.ci/scripts/create_simulator.sh new file mode 100644 index 000000000000..3d86739051f1 --- /dev/null +++ b/.ci/scripts/create_simulator.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# Copyright 2013 The Flutter Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +device=com.apple.CoreSimulator.SimDeviceType.iPhone-11 +os=com.apple.CoreSimulator.SimRuntime.iOS-16-0 + +xcrun simctl list +xcrun simctl create Flutter-iPhone "$device" "$os" | xargs xcrun simctl boot diff --git a/.ci/targets/mac_ios_platform_tests.yaml b/.ci/targets/mac_ios_platform_tests.yaml new file mode 100644 index 000000000000..ed63f226eaec --- /dev/null +++ b/.ci/targets/mac_ios_platform_tests.yaml @@ -0,0 +1,22 @@ +tasks: + - name: create simulator + script: .ci/scripts/create_simulator.sh + - name: build examples + script: script/tool_runner.sh + args: ["build-examples", "--ios"] + - name: xcode analyze + script: script/tool_runner.sh + args: ["xcode-analyze", "--ios"] + - name: xcode analyze deprecation + # Ensure we don't accidentally introduce deprecated code. + script: script/tool_runner.sh + args: ["xcode-analyze", "--ios", "--ios-min-version=13.0"] + - name: native test + script: script/tool_runner.sh + args: ["native-test", "--ios", "--ios-destination", "platform=iOS Simulator,name=iPhone 11,OS=latest"] + - name: drive examples + # `drive-examples` contains integration tests, which changes the UI of the application. + # This UI change sometimes affects `xctest`. + # So we run `drive-examples` after `native-test`; changing the order will result ci failure. + script: script/tool_runner.sh + args: ["drive-examples", "--ios", "--exclude=script/configs/exclude_integration_ios.yaml"] From c24c92d3286bd2736f43e3829ed1badb61116b53 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 17 Nov 2022 10:48:03 -0500 Subject: [PATCH 133/133] fix merge conflicts --- .ci/flutter_master.version | 4 ---- .ci/flutter_stable.version | 4 ---- .ci/scripts/build_all_plugins.sh | 6 ------ .../video_player/video_player_avfoundation/CHANGELOG.md | 5 +---- 4 files changed, 1 insertion(+), 18 deletions(-) diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index e1cb9e98c362..3fbdedb3a1d3 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1,5 +1 @@ -<<<<<<< HEAD -0e98194681fdd83ee1c0a90b8b5b176df121bf1e -======= 61e927d22fe6d82c94c368d62aa81f733bd9218d ->>>>>>> e500884c758c2d516baf7d5ab30639c81dd6b849 diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index 37a46de2b400..b19aa25587e7 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1,5 +1 @@ -<<<<<<< HEAD -6928314d505d2bb4777be05e45d7808a5aa91d2a -======= 52b3dc25f6471c27b2144594abb11c741cb88f57 ->>>>>>> e500884c758c2d516baf7d5ab30639c81dd6b849 diff --git a/.ci/scripts/build_all_plugins.sh b/.ci/scripts/build_all_plugins.sh index 1df0982f0db6..89dab629fd52 100644 --- a/.ci/scripts/build_all_plugins.sh +++ b/.ci/scripts/build_all_plugins.sh @@ -3,13 +3,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -<<<<<<< HEAD -cd all_packages -flutter build windows --debug -flutter build windows --release -======= platform="$1" build_mode="$2" cd all_packages flutter build "$platform" --"$build_mode" ->>>>>>> e500884c758c2d516baf7d5ab30639c81dd6b849 diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 9e060df87e58..b1cc1ce13927 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,13 +1,10 @@ -## 2.3.7 +## NEXT -<<<<<<< HEAD -======= * 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. ## 2.3.7 ->>>>>>> e500884c758c2d516baf7d5ab30639c81dd6b849 * Fixes a bug where the aspect ratio of some HLS videos are incorrectly inverted. * Updates code for `no_leading_underscores_for_local_identifiers` lint.