diff --git a/.ci.yaml b/.ci.yaml index c2eff748599..dc7cb54690e 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -44,7 +44,18 @@ platform_properties: xcode: 14e222b targets: - ### iOS+macOS tasks *** + ### Linux tasks ### + - name: Linux repo_tools_tests + bringup: true # New target + recipe: packages/packages + timeout: 30 + properties: + add_recipes_cq: "true" + target_file: repo_tools_tests.yaml + channel: master + version_file: flutter_master.version + + ### 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. @@ -324,6 +335,7 @@ targets: ] - name: Windows repo_tools_tests + bringup: true # https://github.com/flutter/flutter/issues/126750 recipe: packages/packages timeout: 30 properties: diff --git a/.ci/Dockerfile b/.ci/Dockerfile index 224b9d72de9..d1ddf61c921 100644 --- a/.ci/Dockerfile +++ b/.ci/Dockerfile @@ -23,7 +23,7 @@ RUN apt-get install -y clang-format # - build tools. RUN apt-get install -y clang cmake ninja-build file pkg-config # - libraries. -RUN apt-get install -y libgtk-3-dev libblkid-dev liblzma-dev libgcrypt20-dev +RUN apt-get install -y libgtk-3-dev # - xvfb to allow running headless. RUN apt-get install -y xvfb libegl1-mesa diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index 3d7315d89da..68d3a6d9f76 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -8c5a1ea7281ae3beea50d75a8e51cfe35e03e791 +a76dbe44b99ef54515169a48c70a8ba8db1cb0e1 diff --git a/.ci/flutter_stable.version b/.ci/flutter_stable.version index f88f99fd464..146c21cc78b 100644 --- a/.ci/flutter_stable.version +++ b/.ci/flutter_stable.version @@ -1 +1 @@ -f72efea43c3013323d1b95cff571f3c1caa37583 +84a1e904f44f9b0e9c4510138010edcc653163f8 diff --git a/.ci/scripts/build_all_packages_app.sh b/.ci/scripts/build_all_packages_app.sh index c22b9832ff2..7b381acc4e9 100755 --- a/.ci/scripts/build_all_packages_app.sh +++ b/.ci/scripts/build_all_packages_app.sh @@ -2,6 +2,7 @@ # 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. +set -e platform="$1" build_mode="$2" diff --git a/.ci/scripts/build_examples_win32.sh b/.ci/scripts/build_examples_win32.sh index bcf57a4b311..8d87a2e660e 100755 --- a/.ci/scripts/build_examples_win32.sh +++ b/.ci/scripts/build_examples_win32.sh @@ -2,6 +2,7 @@ # 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. +set -e dart ./script/tool/bin/flutter_plugin_tools.dart build-examples --windows \ --packages-for-branch --log-timing diff --git a/.ci/scripts/create_all_packages_app.sh b/.ci/scripts/create_all_packages_app.sh index 8399e5e38a3..4440dfe2608 100755 --- a/.ci/scripts/create_all_packages_app.sh +++ b/.ci/scripts/create_all_packages_app.sh @@ -2,6 +2,7 @@ # 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. +set -e dart ./script/tool/bin/flutter_plugin_tools.dart create-all-packages-app \ --output-dir=. --exclude script/configs/exclude_all_packages_app.yaml diff --git a/.ci/scripts/create_simulator.sh b/.ci/scripts/create_simulator.sh index 41f6a1146db..04d8fd1e9cd 100755 --- a/.ci/scripts/create_simulator.sh +++ b/.ci/scripts/create_simulator.sh @@ -2,6 +2,9 @@ # 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. +set -e +# Ensure that the create/boot pipeline fails if `create` fails +set -o pipefail # The name here must match remove_simulator.sh readonly DEVICE_NAME=Flutter-iPhone diff --git a/.ci/scripts/custom_package_tests.sh b/.ci/scripts/custom_package_tests.sh index 6b37bfbf1a9..c6473b267dc 100755 --- a/.ci/scripts/custom_package_tests.sh +++ b/.ci/scripts/custom_package_tests.sh @@ -2,6 +2,7 @@ # 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. +set -e # Exclusions # diff --git a/.ci/scripts/dart_unit_tests_win32.sh b/.ci/scripts/dart_unit_tests_win32.sh index bd1ba77b591..5fbe4764f6b 100755 --- a/.ci/scripts/dart_unit_tests_win32.sh +++ b/.ci/scripts/dart_unit_tests_win32.sh @@ -2,6 +2,7 @@ # 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. +set -e dart ./script/tool/bin/flutter_plugin_tools.dart test \ --exclude=script/configs/windows_unit_tests_exceptions.yaml \ diff --git a/.ci/scripts/drive_examples_win32.sh b/.ci/scripts/drive_examples_win32.sh index c3e2e7bc544..671330179e2 100755 --- a/.ci/scripts/drive_examples_win32.sh +++ b/.ci/scripts/drive_examples_win32.sh @@ -2,6 +2,7 @@ # 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. +set -e dart ./script/tool/bin/flutter_plugin_tools.dart drive-examples --windows \ --exclude=script/configs/exclude_integration_win32.yaml --packages-for-branch --log-timing diff --git a/.ci/scripts/native_test_win32.sh b/.ci/scripts/native_test_win32.sh index 37cf54e55c5..0c86d3601e6 100755 --- a/.ci/scripts/native_test_win32.sh +++ b/.ci/scripts/native_test_win32.sh @@ -2,6 +2,7 @@ # 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. +set -e dart ./script/tool/bin/flutter_plugin_tools.dart native-test --windows \ --no-integration --packages-for-branch --log-timing diff --git a/.ci/scripts/plugin_tools_tests.sh b/.ci/scripts/plugin_tools_tests.sh index 96eec4349f0..574a5fe51e4 100755 --- a/.ci/scripts/plugin_tools_tests.sh +++ b/.ci/scripts/plugin_tools_tests.sh @@ -2,6 +2,7 @@ # 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. +set -e cd script/tool dart pub run test diff --git a/.ci/scripts/prepare_tool.sh b/.ci/scripts/prepare_tool.sh index f93694bf1ff..6c178170f50 100755 --- a/.ci/scripts/prepare_tool.sh +++ b/.ci/scripts/prepare_tool.sh @@ -2,6 +2,7 @@ # 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. +set -e # To set FETCH_HEAD for "git merge-base" to work git fetch origin main diff --git a/.ci/scripts/remove_simulator.sh b/.ci/scripts/remove_simulator.sh index e15354e600b..a129e52fd81 100755 --- a/.ci/scripts/remove_simulator.sh +++ b/.ci/scripts/remove_simulator.sh @@ -2,6 +2,7 @@ # 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. +set -e # The name here must match create_simulator.sh readonly DEVICE_NAME=Flutter-iPhone diff --git a/.ci/targets/plugin_tools_tests.yaml b/.ci/targets/plugin_tools_tests.yaml deleted file mode 100644 index 265e74bdd06..00000000000 --- a/.ci/targets/plugin_tools_tests.yaml +++ /dev/null @@ -1,5 +0,0 @@ -tasks: - - name: prepare tool - script: .ci/scripts/prepare_tool.sh - - name: tool unit tests - script: .ci/scripts/plugin_tools_tests.sh diff --git a/.ci/targets/repo_tools_tests.yaml b/.ci/targets/repo_tools_tests.yaml index a73053e3452..265e74bdd06 100644 --- a/.ci/targets/repo_tools_tests.yaml +++ b/.ci/targets/repo_tools_tests.yaml @@ -1,4 +1,5 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh - # TODO(stuartmorgan): Add actual tests here when moving the repo tooling. + - name: tool unit tests + script: .ci/scripts/plugin_tools_tests.sh diff --git a/.cirrus.yml b/.cirrus.yml index b13dbef9a92..23797ff8a29 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -97,7 +97,7 @@ task: license_script: $PLUGIN_TOOL_COMMAND license-check # The major and minor version here should match the lowest version # analyzed in legacy_version_analyze. - pubspec_script: ./script/tool_runner.sh pubspec-check --min-min-flutter-version=3.0.0 --allow-dependencies=script/configs/allowed_unpinned_deps.yaml --allow-pinned-dependencies=script/configs/allowed_pinned_deps.yaml + pubspec_script: ./script/tool_runner.sh pubspec-check --min-min-flutter-version=3.3.0 --allow-dependencies=script/configs/allowed_unpinned_deps.yaml --allow-pinned-dependencies=script/configs/allowed_pinned_deps.yaml readme_script: - ./script/tool_runner.sh readme-check # Re-run with --require-excerpts, skipping packages that still need @@ -163,7 +163,7 @@ task: matrix: # Change the arguments to pubspec-check when changing these values. env: - CHANNEL: "3.0.5" + CHANNEL: "3.7.12" DART_VERSION: "2.17.6" env: CHANNEL: "3.3.10" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8ac6d0e71b3..9eb0b6fb7b0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,9 +20,18 @@ jobs: # Github Actions don't support templates so it is hard to share this snippet with another action # If we eventually need to use this in more workflow, we could create a shell script that contains this # snippet. + # + # This uses a pinned version of Flutter rather than `stable` so that it is + # not subject to out-of-band failures when new releases happen. It does + # not use the auto-rolled pin because there's no way for the autoroller + # to test the actual release flow, so changes would still show up in + # post-submit. A manually-rolled pin means that any changes here must be + # made deliberately, so that the person updating it knows to watch the + # next actual auto-release to ensure that it works, and knows to revert + # the change if it doesn't. run: | cd $HOME - git clone https://github.com/flutter/flutter.git --depth 1 -b stable _flutter + git clone https://github.com/flutter/flutter.git --depth 1 -b 3.10.0 _flutter echo "$HOME/_flutter/bin" >> $GITHUB_PATH cd $GITHUB_WORKSPACE # Checks out a copy of the repo. diff --git a/packages/animations/CHANGELOG.md b/packages/animations/CHANGELOG.md index a6733e2416c..65cbb350dbf 100644 --- a/packages/animations/CHANGELOG.md +++ b/packages/animations/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 2.0.7 diff --git a/packages/animations/example/android/build.gradle b/packages/animations/example/android/build.gradle index 4b30292ebe1..ce647a433bd 100644 --- a/packages/animations/example/android/build.gradle +++ b/packages/animations/example/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.21' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/animations/example/pubspec.yaml b/packages/animations/example/pubspec.yaml index 5339c3ca062..6a1c151615b 100644 --- a/packages/animations/example/pubspec.yaml +++ b/packages/animations/example/pubspec.yaml @@ -6,8 +6,8 @@ publish_to: none version: 0.0.1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: animations: diff --git a/packages/animations/pubspec.yaml b/packages/animations/pubspec.yaml index 2633ec49488..559bd2d4627 100644 --- a/packages/animations/pubspec.yaml +++ b/packages/animations/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.0.7 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 4adba0df515..49387767d2f 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.10.8 * Updates gradle, AGP and fixes some lint errors. diff --git a/packages/camera/camera_android/example/pubspec.yaml b/packages/camera/camera_android/example/pubspec.yaml index 98aa4a6d4f2..bee460e92fa 100644 --- a/packages/camera/camera_android/example/pubspec.yaml +++ b/packages/camera/camera_android/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the camera plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: camera_android: diff --git a/packages/camera/camera_android/pubspec.yaml b/packages/camera/camera_android/pubspec.yaml index deef7ee6a7c..d5b68897d34 100644 --- a/packages/camera/camera_android/pubspec.yaml +++ b/packages/camera/camera_android/pubspec.yaml @@ -6,8 +6,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.10.8 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 5b030f315f9..13d2f18fb92 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.5.0+2 + +* Adds a dependency on kotlin-bom to align versions of Kotlin transitive dependencies. +* Removes note in `README.md` regarding duplicate Kotlin classes issue. + +## 0.5.0+1 + +* Update `README.md` to include known duplicate Kotlin classes issue. + ## 0.5.0 * Initial release of this `camera` implementation that supports: diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index 64bf1177417..837ab1b1f0b 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -72,4 +72,8 @@ dependencies { testImplementation 'org.mockito:mockito-inline:5.0.0' testImplementation 'androidx.test:core:1.4.0' testImplementation 'org.robolectric:robolectric:4.8' + + // org.jetbrains.kotlin:kotlin-bom artifact purpose is to align kotlin stdlib and related code versions. + // See: https://youtrack.jetbrains.com/issue/KT-55297/kotlin-stdlib-should-declare-constraints-on-kotlin-stdlib-jdk8-and-kotlin-stdlib-jdk7 + implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.10")) } diff --git a/packages/camera/camera_android_camerax/example/android/build.gradle b/packages/camera/camera_android_camerax/example/android/build.gradle index ff7e7df1891..702f1d28064 100644 --- a/packages/camera/camera_android_camerax/example/android/build.gradle +++ b/packages/camera/camera_android_camerax/example/android/build.gradle @@ -1,5 +1,8 @@ buildscript { - ext.kotlin_version = '1.8.0' + // This version should intentionally be a 1.7.* version and lower than the + // version of kotlin-bom defined in packages/camera/camera_android_camerax/android/build.gradle. + // This tests that the kotlin version resolution continues to work. + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index d25a18b40e2..7c577666323 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the camera plugin using the CameraX libra repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.5.0 +version: 0.5.0+2 environment: sdk: ">=2.19.0 <4.0.0" diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md index a3e714fc33d..bee2ab3d59c 100644 --- a/packages/camera/camera_avfoundation/CHANGELOG.md +++ b/packages/camera/camera_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.9.13+1 * Clarifies explanation of endorsement in README. diff --git a/packages/camera/camera_avfoundation/example/pubspec.yaml b/packages/camera/camera_avfoundation/example/pubspec.yaml index 3879cff7558..8468012b851 100644 --- a/packages/camera/camera_avfoundation/example/pubspec.yaml +++ b/packages/camera/camera_avfoundation/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the camera plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: camera_avfoundation: diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index e0736cac6a0..a889b6f8cd9 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.5.0 * Adds NV21 as an image stream format (suitable for Android). diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index 7c3da2d4fc8..0b0d0a950fe 100644 --- a/packages/camera/camera_platform_interface/pubspec.yaml +++ b/packages/camera/camera_platform_interface/pubspec.yaml @@ -7,8 +7,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.5.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cross_file: ^0.3.1 diff --git a/packages/camera/camera_web/CHANGELOG.md b/packages/camera/camera_web/CHANGELOG.md index 5645d129157..004488a4f40 100644 --- a/packages/camera/camera_web/CHANGELOG.md +++ b/packages/camera/camera_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.3.1+3 * Clarifies explanation of endorsement in README. diff --git a/packages/camera/camera_web/example/pubspec.yaml b/packages/camera/camera_web/example/pubspec.yaml index 222ba25cf5a..f608af109c2 100644 --- a/packages/camera/camera_web/example/pubspec.yaml +++ b/packages/camera/camera_web/example/pubspec.yaml @@ -2,8 +2,8 @@ name: camera_web_integration_tests publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/camera/camera_web/pubspec.yaml b/packages/camera/camera_web/pubspec.yaml index 9d6739d7ccb..ade36cda8c1 100644 --- a/packages/camera/camera_web/pubspec.yaml +++ b/packages/camera/camera_web/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.3.1+3 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/camera/camera_windows/CHANGELOG.md b/packages/camera/camera_windows/CHANGELOG.md index 591bec68743..65777d3c40f 100644 --- a/packages/camera/camera_windows/CHANGELOG.md +++ b/packages/camera/camera_windows/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.2.1+6 * Sets a cmake_policy compatibility version to fix build warnings. diff --git a/packages/camera/camera_windows/example/pubspec.yaml b/packages/camera/camera_windows/example/pubspec.yaml index 5dc3a68a381..6eb50aafd75 100644 --- a/packages/camera/camera_windows/example/pubspec.yaml +++ b/packages/camera/camera_windows/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the camera_windows plugin. publish_to: 'none' environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: camera_platform_interface: ^2.1.2 diff --git a/packages/camera/camera_windows/pubspec.yaml b/packages/camera/camera_windows/pubspec.yaml index 81622a2b9a9..c62cd5d4914 100644 --- a/packages/camera/camera_windows/pubspec.yaml +++ b/packages/camera/camera_windows/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.2.1+6 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/cross_file/CHANGELOG.md b/packages/cross_file/CHANGELOG.md index fb2efd3f1c1..8e519f7c91c 100644 --- a/packages/cross_file/CHANGELOG.md +++ b/packages/cross_file/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.3.3+4 * Reverts an accidental change in a constructor argument's nullability. diff --git a/packages/cross_file/pubspec.yaml b/packages/cross_file/pubspec.yaml index 45a81f71dd7..51a4e442f1b 100644 --- a/packages/cross_file/pubspec.yaml +++ b/packages/cross_file/pubspec.yaml @@ -5,7 +5,7 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.3.3+4 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: js: ^0.6.3 diff --git a/packages/css_colors/CHANGELOG.md b/packages/css_colors/CHANGELOG.md index 8d87d6361de..c8d9f278223 100644 --- a/packages/css_colors/CHANGELOG.md +++ b/packages/css_colors/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +- Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. - Aligns Dart and Flutter SDK constraints. - Updates minimum Flutter version to 3.0. - Updates package description. diff --git a/packages/css_colors/pubspec.yaml b/packages/css_colors/pubspec.yaml index eb32864bf14..a2eca725ebb 100644 --- a/packages/css_colors/pubspec.yaml +++ b/packages/css_colors/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 1.1.1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/dynamic_layouts/CHANGELOG.md b/packages/dynamic_layouts/CHANGELOG.md index 77830d1bdf2..908eb54fb5d 100644 --- a/packages/dynamic_layouts/CHANGELOG.md +++ b/packages/dynamic_layouts/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. * Updates minimum Flutter version to 3.0. diff --git a/packages/dynamic_layouts/example/android/build.gradle b/packages/dynamic_layouts/example/android/build.gradle index 4b30292ebe1..ce647a433bd 100644 --- a/packages/dynamic_layouts/example/android/build.gradle +++ b/packages/dynamic_layouts/example/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.21' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/dynamic_layouts/example/pubspec.yaml b/packages/dynamic_layouts/example/pubspec.yaml index 20c5cea3cef..51b340eea0a 100644 --- a/packages/dynamic_layouts/example/pubspec.yaml +++ b/packages/dynamic_layouts/example/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ">=2.17.3 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: cupertino_icons: ^1.0.5 diff --git a/packages/dynamic_layouts/pubspec.yaml b/packages/dynamic_layouts/pubspec.yaml index 8772b265942..99989e965fc 100644 --- a/packages/dynamic_layouts/pubspec.yaml +++ b/packages/dynamic_layouts/pubspec.yaml @@ -7,8 +7,8 @@ repository: https://github.com/flutter/packages/tree/main/packages/dynamic_layou publish_to: none environment: - sdk: ">=2.17.6 <4.0.0" - flutter: ">=3.0.5" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/espresso/CHANGELOG.md b/packages/espresso/CHANGELOG.md index af45fb87c88..7d9ade9f947 100644 --- a/packages/espresso/CHANGELOG.md +++ b/packages/espresso/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.3.0+4 * Fixes compatibility with AGP versions older than 4.2. diff --git a/packages/espresso/example/pubspec.yaml b/packages/espresso/example/pubspec.yaml index b192a804de6..70407a49f5e 100644 --- a/packages/espresso/example/pubspec.yaml +++ b/packages/espresso/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the espresso plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/espresso/pubspec.yaml b/packages/espresso/pubspec.yaml index 0dffbdb5a1e..fb0d63632e3 100644 --- a/packages/espresso/pubspec.yaml +++ b/packages/espresso/pubspec.yaml @@ -6,8 +6,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.3.0+4 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/extension_google_sign_in_as_googleapis_auth/CHANGELOG.md b/packages/extension_google_sign_in_as_googleapis_auth/CHANGELOG.md index a28cc66839e..f396a1ef67a 100644 --- a/packages/extension_google_sign_in_as_googleapis_auth/CHANGELOG.md +++ b/packages/extension_google_sign_in_as_googleapis_auth/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 2.0.9 diff --git a/packages/extension_google_sign_in_as_googleapis_auth/example/pubspec.yaml b/packages/extension_google_sign_in_as_googleapis_auth/example/pubspec.yaml index 7ddbaa1be22..f75884ca599 100644 --- a/packages/extension_google_sign_in_as_googleapis_auth/example/pubspec.yaml +++ b/packages/extension_google_sign_in_as_googleapis_auth/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Example of Google Sign-In plugin and googleapis. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: extension_google_sign_in_as_googleapis_auth: diff --git a/packages/extension_google_sign_in_as_googleapis_auth/pubspec.yaml b/packages/extension_google_sign_in_as_googleapis_auth/pubspec.yaml index b48adf541fe..05cd7c58a99 100644 --- a/packages/extension_google_sign_in_as_googleapis_auth/pubspec.yaml +++ b/packages/extension_google_sign_in_as_googleapis_auth/pubspec.yaml @@ -11,8 +11,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.0.9 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/file_selector/file_selector/CHANGELOG.md b/packages/file_selector/file_selector/CHANGELOG.md index 0111f0d03c9..77e22e723fc 100644 --- a/packages/file_selector/file_selector/CHANGELOG.md +++ b/packages/file_selector/file_selector/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.9.3 * Adds `getDirectoryPaths` for selecting multiple directories. diff --git a/packages/file_selector/file_selector/example/pubspec.yaml b/packages/file_selector/file_selector/example/pubspec.yaml index fc9852ae614..f4de9cbc743 100644 --- a/packages/file_selector/file_selector/example/pubspec.yaml +++ b/packages/file_selector/file_selector/example/pubspec.yaml @@ -5,8 +5,8 @@ publish_to: none version: 1.0.0+1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: file_selector: diff --git a/packages/file_selector/file_selector_linux/CHANGELOG.md b/packages/file_selector/file_selector_linux/CHANGELOG.md index 262c418f5dd..88886301d3a 100644 --- a/packages/file_selector/file_selector_linux/CHANGELOG.md +++ b/packages/file_selector/file_selector_linux/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.9.1+3 * Sets a cmake_policy compatibility version to fix build warnings. diff --git a/packages/file_selector/file_selector_linux/example/pubspec.yaml b/packages/file_selector/file_selector_linux/example/pubspec.yaml index 84362a684d9..1596eb3f769 100644 --- a/packages/file_selector/file_selector_linux/example/pubspec.yaml +++ b/packages/file_selector/file_selector_linux/example/pubspec.yaml @@ -4,8 +4,8 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: file_selector_linux: diff --git a/packages/file_selector/file_selector_linux/pubspec.yaml b/packages/file_selector/file_selector_linux/pubspec.yaml index 8064e68d358..238e0aef741 100644 --- a/packages/file_selector/file_selector_linux/pubspec.yaml +++ b/packages/file_selector/file_selector_linux/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.9.1+3 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md index 756e8ccf94c..0ede4ddd8d6 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 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.5.0 * Deprecates `macUTIs` in favor of `uniformTypeIdentifiers`. diff --git a/packages/file_selector/file_selector_platform_interface/pubspec.yaml b/packages/file_selector/file_selector_platform_interface/pubspec.yaml index c0ecf524fb2..94023c96809 100644 --- a/packages/file_selector/file_selector_platform_interface/pubspec.yaml +++ b/packages/file_selector/file_selector_platform_interface/pubspec.yaml @@ -7,8 +7,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.5.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cross_file: ^0.3.0 diff --git a/packages/file_selector/file_selector_web/CHANGELOG.md b/packages/file_selector/file_selector_web/CHANGELOG.md index d456e13f97e..43ad4962f04 100644 --- a/packages/file_selector/file_selector_web/CHANGELOG.md +++ b/packages/file_selector/file_selector_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.9.0+4 * Clarifies explanation of endorsement in README. diff --git a/packages/file_selector/file_selector_web/example/pubspec.yaml b/packages/file_selector/file_selector_web/example/pubspec.yaml index 9773e230608..bc8b984e367 100644 --- a/packages/file_selector/file_selector_web/example/pubspec.yaml +++ b/packages/file_selector/file_selector_web/example/pubspec.yaml @@ -2,8 +2,8 @@ name: file_selector_web_integration_tests publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: file_selector_platform_interface: ^2.2.0 diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml index 478c9b6bba7..8a601cbb366 100644 --- a/packages/file_selector/file_selector_web/pubspec.yaml +++ b/packages/file_selector/file_selector_web/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.9.0+4 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/flutter_image/CHANGELOG.md b/packages/flutter_image/CHANGELOG.md index 8db895a71bd..a4b65bb1775 100644 --- a/packages/flutter_image/CHANGELOG.md +++ b/packages/flutter_image/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 4.1.5 diff --git a/packages/flutter_image/pubspec.yaml b/packages/flutter_image/pubspec.yaml index 539576a3494..1021c8a1ba9 100644 --- a/packages/flutter_image/pubspec.yaml +++ b/packages/flutter_image/pubspec.yaml @@ -6,8 +6,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 4.1.5 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/flutter_lints/CHANGELOG.md b/packages/flutter_lints/CHANGELOG.md index f94b1beff1b..4af34c1727f 100644 --- a/packages/flutter_lints/CHANGELOG.md +++ b/packages/flutter_lints/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.0.1 * Updated readme to document suggestion process for new lints diff --git a/packages/flutter_lints/example/pubspec.yaml b/packages/flutter_lints/example/pubspec.yaml index 2ed661fe2dc..1f474eb1a5b 100644 --- a/packages/flutter_lints/example/pubspec.yaml +++ b/packages/flutter_lints/example/pubspec.yaml @@ -4,7 +4,7 @@ description: A project that showcases how to enable the recommended lints for Fl publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" # Add the latest version of `package:flutter_lints` as a dev_dependency. The # lint set provided by this package is activated in the `analysis_options.yaml` diff --git a/packages/flutter_lints/pubspec.yaml b/packages/flutter_lints/pubspec.yaml index 69ae368abd1..0f7505d6f0d 100644 --- a/packages/flutter_lints/pubspec.yaml +++ b/packages/flutter_lints/pubspec.yaml @@ -5,7 +5,7 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.0.1 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: lints: ^2.0.0 diff --git a/packages/flutter_markdown/example/android/build.gradle b/packages/flutter_markdown/example/android/build.gradle index 4b30292ebe1..ce647a433bd 100644 --- a/packages/flutter_markdown/example/android/build.gradle +++ b/packages/flutter_markdown/example/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.21' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/flutter_plugin_android_lifecycle/CHANGELOG.md b/packages/flutter_plugin_android_lifecycle/CHANGELOG.md index 3555a0f99e5..f14b855196f 100644 --- a/packages/flutter_plugin_android_lifecycle/CHANGELOG.md +++ b/packages/flutter_plugin_android_lifecycle/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.0.14 * Fixes compatibility with ActivityPluginBinding. diff --git a/packages/flutter_plugin_android_lifecycle/example/pubspec.yaml b/packages/flutter_plugin_android_lifecycle/example/pubspec.yaml index abb0c2b9a6c..c012f3890b1 100644 --- a/packages/flutter_plugin_android_lifecycle/example/pubspec.yaml +++ b/packages/flutter_plugin_android_lifecycle/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the flutter_plugin_android_lifecycle plugin publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/flutter_plugin_android_lifecycle/pubspec.yaml b/packages/flutter_plugin_android_lifecycle/pubspec.yaml index 0c4bc7d45d1..e56ccf583db 100644 --- a/packages/flutter_plugin_android_lifecycle/pubspec.yaml +++ b/packages/flutter_plugin_android_lifecycle/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.0.14 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/flutter_template_images/CHANGELOG.md b/packages/flutter_template_images/CHANGELOG.md index 8c49d1fba04..2e17699eed8 100644 --- a/packages/flutter_template_images/CHANGELOG.md +++ b/packages/flutter_template_images/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Updates minimum SDK version to Flutter 3.0. ## 4.2.0 diff --git a/packages/flutter_template_images/pubspec.yaml b/packages/flutter_template_images/pubspec.yaml index f5d4abbf803..d1bebb83a5e 100644 --- a/packages/flutter_template_images/pubspec.yaml +++ b/packages/flutter_template_images/pubspec.yaml @@ -5,4 +5,4 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 4.2.0 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index d46e9de8c32..ca33cc8a570 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,3 +1,7 @@ +## 7.0.1 + +- Adds a workaround for the `dart fix --apply` issue, https://github.com/dart-lang/sdk/issues/52233. + ## 7.0.0 - **BREAKING CHANGE**: diff --git a/packages/go_router/example/android/build.gradle b/packages/go_router/example/android/build.gradle index 96e940b06ea..586557f0afc 100644 --- a/packages/go_router/example/android/build.gradle +++ b/packages/go_router/example/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.21' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/go_router/lib/fix_data.yaml b/packages/go_router/lib/fix_data.yaml index 99f978243a0..fb73a4fd743 100644 --- a/packages/go_router/lib/fix_data.yaml +++ b/packages/go_router/lib/fix_data.yaml @@ -21,7 +21,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] method: 'replaceNamed' inClass: 'GoRouter' changes: @@ -35,7 +36,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] method: 'pushReplacementNamed' inClass: 'GoRouter' changes: @@ -50,7 +52,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] method: 'pushNamed' inClass: 'GoRouter' changes: @@ -65,7 +68,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] method: 'goNamed' inClass: 'GoRouter' changes: @@ -80,7 +84,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] method: 'namedLocation' inClass: 'GoRouter' changes: @@ -95,7 +100,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] method: 'namedLocation' inClass: 'GoRouterState' changes: @@ -110,7 +116,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] field: 'queryParams' inClass: 'GoRouterState' changes: @@ -121,7 +128,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] field: 'fullpath' inClass: 'GoRouterState' changes: @@ -132,7 +140,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] field: 'params' inClass: 'GoRouterState' changes: @@ -143,7 +152,8 @@ transforms: date: 2023-04-24 bulkApply: true element: - uris: [ 'go_router.dart' ] + # TODO(ahmednfwela): Workaround for https://github.com/dart-lang/sdk/issues/52233 + uris: [ 'go_router.dart', 'package:go_router/go_router.dart' ] field: 'subloc' inClass: 'GoRouterState' changes: diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 4d1cb1fda84..0104fca6eaf 100644 --- a/packages/go_router/pubspec.yaml +++ b/packages/go_router/pubspec.yaml @@ -1,7 +1,7 @@ name: go_router description: A declarative router for Flutter based on Navigation 2 supporting deep linking, data-driven routes and more -version: 7.0.0 +version: 7.0.1 repository: https://github.com/flutter/packages/tree/main/packages/go_router issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router%22 @@ -21,4 +21,5 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + io: ^1.0.4 path: ^1.8.2 diff --git a/packages/go_router/tool/run_tests.dart b/packages/go_router/tool/run_tests.dart index 39fe8cc0361..58c689bf942 100644 --- a/packages/go_router/tool/run_tests.dart +++ b/packages/go_router/tool/run_tests.dart @@ -9,25 +9,92 @@ // ignore_for_file: avoid_print import 'dart:io'; +import 'package:io/io.dart' as io; import 'package:path/path.dart' as p; +// This test runner simulates a consumption of go_router that checks if +// the dart fixes are applied correctly. +// This is done by copying the `test_fixes/` directory to a temp directory +// that references `go_router`, and running `dart fix --compare-to-golden` +// on the temp directory. Future main(List args) async { - if (!Platform.isMacOS) { - print('This test can only be run on macOS.'); - exit(0); + final Directory goRouterPackageRoot = + File.fromUri(Platform.script).parent.parent; + + final Directory testTempDir = await Directory.systemTemp.createTemp(); + + // Cleans up the temp directory and exits with a given statusCode. + Future cleanUpAndExit(int statusCode) async { + await testTempDir.delete(recursive: true); + exit(statusCode); } - final Directory packageRoot = - Directory(p.dirname(Platform.script.path)).parent; - final int status = await _runProcess( + + // Copy the test_fixes folder to the temporary testFixesTargetDir. + // + // This also creates the proper pubspec.yaml in the temp directory. + await _prepareTemplate( + packageRoot: goRouterPackageRoot, + testTempDir: testTempDir, + ); + + // Run dart pub get in the temp directory to set it up. + final int pubGetStatusCode = await _runProcess( + 'dart', + [ + 'pub', + 'get', + ], + workingDirectory: testTempDir.path, + ); + + if (pubGetStatusCode != 0) { + await cleanUpAndExit(pubGetStatusCode); + } + + // Run dart fix --compare-to-golden in the temp directory. + final int dartFixStatusCode = await _runProcess( 'dart', [ 'fix', '--compare-to-golden', ], - workingDirectory: p.join(packageRoot.path, 'test_fixes'), + workingDirectory: testTempDir.path, ); - exit(status); + await cleanUpAndExit(dartFixStatusCode); +} + +Future _prepareTemplate({ + required Directory packageRoot, + required Directory testTempDir, +}) async { + // The src test_fixes directory. + final Directory testFixesSrcDir = + Directory(p.join(packageRoot.path, 'test_fixes')); + + // Copy from src `test_fixes/` to the temp directory. + await io.copyPath(testFixesSrcDir.path, testTempDir.path); + + // The pubspec.yaml file to create. + final File targetPubspecFile = File(p.join(testTempDir.path, 'pubspec.yaml')); + + final String targetYaml = ''' +name: test_fixes +publish_to: "none" +version: 1.0.0 + +environment: + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" + +dependencies: + flutter: + sdk: flutter + go_router: + path: ${packageRoot.path} +'''; + + await targetPubspecFile.writeAsString(targetYaml); } Future _streamOutput(Future processFuture) async { diff --git a/packages/go_router_builder/CHANGELOG.md b/packages/go_router_builder/CHANGELOG.md index a1c74c7a639..bdab45ea957 100644 --- a/packages/go_router_builder/CHANGELOG.md +++ b/packages/go_router_builder/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.0.1 * Supports name parameter for `TypedGoRoute`. diff --git a/packages/go_router_builder/example/pubspec.yaml b/packages/go_router_builder/example/pubspec.yaml index 6942a4fa3af..766952e4ca9 100644 --- a/packages/go_router_builder/example/pubspec.yaml +++ b/packages/go_router_builder/example/pubspec.yaml @@ -3,7 +3,7 @@ description: go_router_builder examples publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: flutter: diff --git a/packages/google_identity_services_web/CHANGELOG.md b/packages/google_identity_services_web/CHANGELOG.md index 966e8125719..4ece505495b 100644 --- a/packages/google_identity_services_web/CHANGELOG.md +++ b/packages/google_identity_services_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.2.1 * Relaxes the `renderButton` API so any JS-Interop Object can be its `target`. diff --git a/packages/google_identity_services_web/example/pubspec.yaml b/packages/google_identity_services_web/example/pubspec.yaml index b305694d5c7..3244341b54f 100644 --- a/packages/google_identity_services_web/example/pubspec.yaml +++ b/packages/google_identity_services_web/example/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.0.1 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: flutter: diff --git a/packages/google_identity_services_web/pubspec.yaml b/packages/google_identity_services_web/pubspec.yaml index 8d4b6c53eb5..47d69e0fe35 100644 --- a/packages/google_identity_services_web/pubspec.yaml +++ b/packages/google_identity_services_web/pubspec.yaml @@ -5,7 +5,7 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.2.1 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: js: ^0.6.4 diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md index 28ada3ebf68..dce753c4806 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 minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.2.6 * Aligns Dart and Flutter SDK constraints. 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 da09f88a355..9c0ab999ddb 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the google_maps_flutter plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cupertino_icons: ^1.0.5 diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index 40fa1f8a1cc..46911bc48fe 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.2.6 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: 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 2e5b776db12..4f9339999eb 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.4.14 * Updates gradle, AGP and fixes some lint errors. 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 259462c1465..2fafe6eacd9 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 @@ -3,8 +3,8 @@ description: Demonstrates how to use the google_maps_flutter plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cupertino_icons: ^1.0.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 931f70b1ccd..726ad025de8 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.4.14 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: 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 47ef1848046..5913424b933 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.2.2 * Sets an upper bound on the `GoogleMaps` SDK version that can be used, to diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios11/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios11/pubspec.yaml index f34109a26fd..f9a7ee1dc47 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios11/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios11/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the google_maps_flutter plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cupertino_icons: ^1.0.5 diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios12/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios12/pubspec.yaml index f34109a26fd..f9a7ee1dc47 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios12/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios12/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the google_maps_flutter plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cupertino_icons: ^1.0.5 diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios13/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios13/pubspec.yaml index f34109a26fd..f9a7ee1dc47 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/ios13/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/ios13/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the google_maps_flutter plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cupertino_icons: ^1.0.5 diff --git a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/pubspec.yaml index 29640b926d8..e20bdb9a5af 100644 --- a/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_ios/example/shared/maps_example_dart/pubspec.yaml @@ -3,8 +3,8 @@ description: Shared Dart code for the example apps. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cupertino_icons: ^1.0.5 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 7aeafc1a0f0..dbb6a8ab0a4 100644 --- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 6.1.14 * Fixes compatibility with AGP versions older than 4.2. 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 1887a2f3a1e..63068640558 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 @@ -3,8 +3,8 @@ description: Example of Google Sign-In plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/google_sign_in/google_sign_in_android/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/pubspec.yaml index 73904741a40..516f09cc3b5 100644 --- a/packages/google_sign_in/google_sign_in_android/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_android/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 6.1.14 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md b/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md index 843a9e8d60e..566a29a36c9 100644 --- a/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 5.6.2 * Updates functions without a prototype to avoid deprecation warning. 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 c0672912808..ba9c8b1bbd3 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 @@ -3,8 +3,8 @@ description: Example of Google Sign-In plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 117f6af6cff..f1e09f50b51 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.7+5 + +* Fixes `BuildContext` handling in example. + ## 0.8.7+4 * Updates README to mention usage of `launchMode: singleInstance` for Android. diff --git a/packages/image_picker/image_picker/example/lib/main.dart b/packages/image_picker/image_picker/example/lib/main.dart index 247c0a937a8..4a96ce194ef 100755 --- a/packages/image_picker/image_picker/example/lib/main.dart +++ b/packages/image_picker/image_picker/example/lib/main.dart @@ -81,51 +81,53 @@ class _MyHomePageState extends State { } Future _onImageButtonPressed(ImageSource source, - {BuildContext? context, bool isMultiImage = false}) async { + {required BuildContext context, bool isMultiImage = false}) async { if (_controller != null) { await _controller!.setVolume(0.0); } - if (isVideo) { - final XFile? file = await _picker.pickVideo( - source: source, maxDuration: const Duration(seconds: 10)); - await _playVideo(file); - } else if (isMultiImage) { - await _displayPickImageDialog(context!, - (double? maxWidth, double? maxHeight, int? quality) async { - try { - final List pickedFileList = await _picker.pickMultiImage( - maxWidth: maxWidth, - maxHeight: maxHeight, - imageQuality: quality, - ); - setState(() { - _imageFileList = pickedFileList; - }); - } catch (e) { - setState(() { - _pickImageError = e; - }); - } - }); - } else { - await _displayPickImageDialog(context!, - (double? maxWidth, double? maxHeight, int? quality) async { - try { - final XFile? pickedFile = await _picker.pickImage( - source: source, - maxWidth: maxWidth, - maxHeight: maxHeight, - imageQuality: quality, - ); - setState(() { - _setImageFileListFromFile(pickedFile); - }); - } catch (e) { - setState(() { - _pickImageError = e; - }); - } - }); + if (context.mounted) { + if (isVideo) { + final XFile? file = await _picker.pickVideo( + source: source, maxDuration: const Duration(seconds: 10)); + await _playVideo(file); + } else if (isMultiImage) { + await _displayPickImageDialog(context, + (double? maxWidth, double? maxHeight, int? quality) async { + try { + final List pickedFileList = await _picker.pickMultiImage( + maxWidth: maxWidth, + maxHeight: maxHeight, + imageQuality: quality, + ); + setState(() { + _imageFileList = pickedFileList; + }); + } catch (e) { + setState(() { + _pickImageError = e; + }); + } + }); + } else { + await _displayPickImageDialog(context, + (double? maxWidth, double? maxHeight, int? quality) async { + try { + final XFile? pickedFile = await _picker.pickImage( + source: source, + maxWidth: maxWidth, + maxHeight: maxHeight, + imageQuality: quality, + ); + setState(() { + _setImageFileListFromFile(pickedFile); + }); + } catch (e) { + setState(() { + _pickImageError = e; + }); + } + }); + } } } @@ -332,7 +334,7 @@ class _MyHomePageState extends State { backgroundColor: Colors.red, onPressed: () { isVideo = true; - _onImageButtonPressed(ImageSource.gallery); + _onImageButtonPressed(ImageSource.gallery, context: context); }, heroTag: 'video0', tooltip: 'Pick Video from gallery', @@ -345,7 +347,7 @@ class _MyHomePageState extends State { backgroundColor: Colors.red, onPressed: () { isVideo = true; - _onImageButtonPressed(ImageSource.camera); + _onImageButtonPressed(ImageSource.camera, context: context); }, heroTag: 'video1', tooltip: 'Take a Video', diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index c1bb2225d42..530cf5a7703 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/packages/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.7+4 +version: 0.8.7+5 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/image_picker/image_picker_android/AUTHORS b/packages/image_picker/image_picker_android/AUTHORS index 493a0b4ef9c..57d4f75a1d3 100644 --- a/packages/image_picker/image_picker_android/AUTHORS +++ b/packages/image_picker/image_picker_android/AUTHORS @@ -64,3 +64,4 @@ Aleksandr Yurkovskiy Anton Borries Alex Li Rahul Raj <64.rahulraj@gmail.com> +André Sousa diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index 6f586c7eec0..b0a583f2784 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,3 +1,15 @@ +## 0.8.6+14 + +* Fixes Java warnings. + +## 0.8.6+13 + +* Fixes `BuildContext` handling in example. + +## 0.8.6+12 + +* Improves image resizing performance by decoding Bitmap only when needed. + ## 0.8.6+11 * Updates gradle to 7.6.1. diff --git a/packages/image_picker/image_picker_android/android/build.gradle b/packages/image_picker/image_picker_android/android/build.gradle index 08b4bb3b4d0..367aa853247 100644 --- a/packages/image_picker/image_picker_android/android/build.gradle +++ b/packages/image_picker/image_picker_android/android/build.gradle @@ -36,7 +36,6 @@ android { checkAllWarnings true warningsAsErrors true disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency' - baseline file("lint-baseline.xml") } dependencies { implementation 'androidx.core:core:1.9.0' diff --git a/packages/image_picker/image_picker_android/android/lint-baseline.xml b/packages/image_picker/image_picker_android/android/lint-baseline.xml deleted file mode 100644 index 765a6ca914b..00000000000 --- a/packages/image_picker/image_picker_android/android/lint-baseline.xml +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java index 6aa1181ce90..42308859053 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java @@ -95,7 +95,7 @@ private static class PendingCallState { public final @Nullable VideoSelectionOptions videoOptions; public final @NonNull Messages.Result> result; - private PendingCallState( + PendingCallState( @Nullable ImageSelectionOptions imageOptions, @Nullable VideoSelectionOptions videoOptions, @NonNull Messages.Result> result) { @@ -107,10 +107,10 @@ private PendingCallState( @VisibleForTesting final String fileProviderName; - private final Activity activity; - @VisibleForTesting final File externalFilesDirectory; - private final ImageResizer imageResizer; - private final ImagePickerCache cache; + private final @NonNull Activity activity; + @VisibleForTesting final @NonNull File externalFilesDirectory; + private final @NonNull ImageResizer imageResizer; + private final @NonNull ImagePickerCache cache; private final PermissionManager permissionManager; private final FileUriResolver fileUriResolver; private final FileUtils fileUtils; @@ -140,10 +140,10 @@ interface OnPathReadyListener { private final Object pendingCallStateLock = new Object(); public ImagePickerDelegate( - final Activity activity, - final File externalFilesDirectory, - final ImageResizer imageResizer, - final ImagePickerCache cache) { + final @NonNull Activity activity, + final @NonNull File externalFilesDirectory, + final @NonNull ImageResizer imageResizer, + final @NonNull ImagePickerCache cache) { this( activity, externalFilesDirectory, @@ -181,12 +181,7 @@ public void getFullImagePath(final Uri imageUri, final OnPathReadyListener liste activity, new String[] {(imageUri != null) ? imageUri.getPath() : ""}, null, - new MediaScannerConnection.OnScanCompletedListener() { - @Override - public void onScanCompleted(String path, Uri uri) { - listener.onPathReady(path); - } - }); + (path, uri) -> listener.onPathReady(path)); } }, new FileUtils(), @@ -199,13 +194,13 @@ public void onScanCompleted(String path, Uri uri) { */ @VisibleForTesting ImagePickerDelegate( - final Activity activity, - final File externalFilesDirectory, - final ImageResizer imageResizer, + final @NonNull Activity activity, + final @NonNull File externalFilesDirectory, + final @NonNull ImageResizer imageResizer, final @Nullable ImageSelectionOptions pendingImageOptions, final @Nullable VideoSelectionOptions pendingVideoOptions, final @Nullable Messages.Result> result, - final ImagePickerCache cache, + final @NonNull ImagePickerCache cache, final PermissionManager permissionManager, final FileUriResolver fileUriResolver, final FileUtils fileUtils, @@ -290,7 +285,9 @@ Messages.CacheRetrievalResult retrieveLostImage() { } public void chooseVideoFromGallery( - VideoSelectionOptions options, boolean usePhotoPicker, Messages.Result> result) { + @NonNull VideoSelectionOptions options, + boolean usePhotoPicker, + @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(null, options, result)) { finishWithAlreadyActiveError(result); return; @@ -318,7 +315,7 @@ private void launchPickVideoFromGalleryIntent(Boolean useAndroidPhotoPicker) { } public void takeVideoWithCamera( - VideoSelectionOptions options, Messages.Result> result) { + @NonNull VideoSelectionOptions options, @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(null, options, result)) { finishWithAlreadyActiveError(result); return; @@ -376,7 +373,7 @@ private void launchTakeVideoWithCameraIntent() { public void chooseImageFromGallery( @NonNull ImageSelectionOptions options, boolean usePhotoPicker, - Messages.Result> result) { + @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(options, null, result)) { finishWithAlreadyActiveError(result); return; @@ -388,7 +385,7 @@ public void chooseImageFromGallery( public void chooseMultiImageFromGallery( @NonNull ImageSelectionOptions options, boolean usePhotoPicker, - Messages.Result> result) { + @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(options, null, result)) { finishWithAlreadyActiveError(result); return; @@ -436,7 +433,7 @@ private void launchMultiPickImageFromGalleryIntent(Boolean useAndroidPhotoPicker } public void takeImageWithCamera( - @NonNull ImageSelectionOptions options, Messages.Result> result) { + @NonNull ImageSelectionOptions options, @NonNull Messages.Result> result) { if (!setPendingOptionsAndResult(options, null, result)) { finishWithAlreadyActiveError(result); return; @@ -556,7 +553,8 @@ public boolean onRequestPermissionsResult( } @Override - public boolean onActivityResult(final int requestCode, final int resultCode, final Intent data) { + public boolean onActivityResult( + final int requestCode, final int resultCode, final @Nullable Intent data) { Runnable handlerRunnable; switch (requestCode) { @@ -605,7 +603,7 @@ private void handleChooseMultiImageResult(int resultCode, Intent intent) { } else { paths.add(fileUtils.getPathFromUri(activity, intent.getData())); } - handleMultiImageResult(paths, false); + handleMultiImageResult(paths); return; } @@ -632,12 +630,7 @@ private void handleCaptureImageResult(int resultCode) { localPendingCameraMediaUri != null ? localPendingCameraMediaUri : Uri.parse(cache.retrievePendingCameraMediaUriPath()), - new OnPathReadyListener() { - @Override - public void onPathReady(String path) { - handleImageResult(path, true); - } - }); + path -> handleImageResult(path, true)); return; } @@ -652,12 +645,7 @@ private void handleCaptureVideoResult(int resultCode) { localPendingCameraMediaUrl != null ? localPendingCameraMediaUrl : Uri.parse(cache.retrievePendingCameraMediaUriPath()), - new OnPathReadyListener() { - @Override - public void onPathReady(String path) { - handleVideoResult(path); - } - }); + this::handleVideoResult); return; } @@ -665,8 +653,7 @@ public void onPathReady(String path) { finishWithSuccess(null); } - private void handleMultiImageResult( - ArrayList paths, boolean shouldDeleteOriginalIfScaled) { + private void handleMultiImageResult(ArrayList paths) { ImageSelectionOptions localImageOptions = null; synchronized (pendingCallStateLock) { if (pendingCallState != null) { @@ -678,13 +665,6 @@ private void handleMultiImageResult( ArrayList finalPath = new ArrayList<>(); for (int i = 0; i < paths.size(); i++) { String finalImagePath = getResizedImagePath(paths.get(i), localImageOptions); - - //delete original file if scaled - if (finalImagePath != null - && !finalImagePath.equals(paths.get(i)) - && shouldDeleteOriginalIfScaled) { - new File(paths.get(i)).delete(); - } finalPath.add(i, finalImagePath); } finishWithListSuccess(finalPath); @@ -693,7 +673,7 @@ private void handleMultiImageResult( } } - private void handleImageResult(String path, boolean shouldDeleteOriginalIfScaled) { + void handleImageResult(String path, boolean shouldDeleteOriginalIfScaled) { ImageSelectionOptions localImageOptions = null; synchronized (pendingCallStateLock) { if (pendingCallState != null) { @@ -721,7 +701,7 @@ private String getResizedImagePath(String path, @NonNull ImageSelectionOptions o outputOptions.getQuality().intValue()); } - private void handleVideoResult(String path) { + void handleVideoResult(String path) { finishWithSuccess(path); } diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java index cbf52bd0778..33075920838 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java @@ -176,20 +176,18 @@ ImagePickerDelegate getDelegate() { } private FlutterPluginBinding pluginBinding; - private ActivityState activityState; + ActivityState activityState; @SuppressWarnings("deprecation") - public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) { + public static void registerWith( + @NonNull io.flutter.plugin.common.PluginRegistry.Registrar registrar) { if (registrar.activity() == null) { // If a background flutter view tries to register the plugin, there will be no activity from the registrar, // we stop the registering process immediately because the ImagePicker requires an activity. return; } Activity activity = registrar.activity(); - Application application = null; - if (registrar.context() != null) { - application = (Application) (registrar.context().getApplicationContext()); - } + Application application = (Application) (registrar.context().getApplicationContext()); ImagePickerPlugin plugin = new ImagePickerPlugin(); plugin.setup(registrar.messenger(), application, activity, registrar, null); } @@ -305,7 +303,7 @@ public void pickImages( @NonNull Messages.ImageSelectionOptions options, @NonNull Boolean allowMultiple, @NonNull Boolean usePhotoPicker, - Result> result) { + @NonNull Result> result) { ImagePickerDelegate delegate = getImagePickerDelegate(); if (delegate == null) { result.error( @@ -335,7 +333,7 @@ public void pickVideos( @NonNull Messages.VideoSelectionOptions options, @NonNull Boolean allowMultiple, @NonNull Boolean usePhotoPicker, - Result> result) { + @NonNull Result> result) { ImagePickerDelegate delegate = getImagePickerDelegate(); if (delegate == null) { result.error( diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImageResizer.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImageResizer.java index 5d0d5d8938d..9ec4c0aa3ba 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImageResizer.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImageResizer.java @@ -7,7 +7,9 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.util.SizeFCompat; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; @@ -30,8 +32,8 @@ class ImageResizer { */ String resizeImageIfNeeded( String imagePath, @Nullable Double maxWidth, @Nullable Double maxHeight, int imageQuality) { - Bitmap bmp = decodeFile(imagePath); - if (bmp == null) { + SizeFCompat originalSize = readFileDimensions(imagePath); + if (originalSize.getWidth() == -1 || originalSize.getHeight() == -1) { return imagePath; } boolean shouldScale = maxWidth != null || maxHeight != null || imageQuality < 100; @@ -41,7 +43,26 @@ String resizeImageIfNeeded( try { String[] pathParts = imagePath.split("/"); String imageName = pathParts[pathParts.length - 1]; - File file = resizedImage(bmp, maxWidth, maxHeight, imageQuality, imageName); + SizeFCompat targetSize = + calculateTargetSize( + (double) originalSize.getWidth(), + (double) originalSize.getHeight(), + maxWidth, + maxHeight); + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize = + calculateSampleSize(options, (int) targetSize.getWidth(), (int) targetSize.getHeight()); + Bitmap bmp = decodeFile(imagePath, options); + if (bmp == null) { + return imagePath; + } + File file = + resizedImage( + bmp, + (double) targetSize.getWidth(), + (double) targetSize.getHeight(), + imageQuality, + imageName); copyExif(imagePath, file.getPath()); return file.getPath(); } catch (IOException e) { @@ -50,10 +71,19 @@ String resizeImageIfNeeded( } private File resizedImage( - Bitmap bmp, Double maxWidth, Double maxHeight, int imageQuality, String outputImageName) + Bitmap bmp, Double width, Double height, int imageQuality, String outputImageName) throws IOException { - double originalWidth = bmp.getWidth() * 1.0; - double originalHeight = bmp.getHeight() * 1.0; + Bitmap scaledBmp = createScaledBitmap(bmp, width.intValue(), height.intValue(), false); + File file = + createImageOnExternalDirectory("/scaled_" + outputImageName, scaledBmp, imageQuality); + return file; + } + + private SizeFCompat calculateTargetSize( + @NonNull Double originalWidth, + @NonNull Double originalHeight, + @Nullable Double maxWidth, + @Nullable Double maxHeight) { boolean hasMaxWidth = maxWidth != null; boolean hasMaxHeight = maxHeight != null; @@ -90,10 +120,7 @@ private File resizedImage( } } - Bitmap scaledBmp = createScaledBitmap(bmp, width.intValue(), height.intValue(), false); - File file = - createImageOnExternalDirectory("/scaled_" + outputImageName, scaledBmp, imageQuality); - return file; + return new SizeFCompat(width.floatValue(), height.floatValue()); } private File createFile(File externalFilesDirectory, String child) { @@ -112,14 +139,47 @@ private void copyExif(String filePathOri, String filePathDest) { exifDataCopier.copyExif(filePathOri, filePathDest); } - private Bitmap decodeFile(String path) { - return BitmapFactory.decodeFile(path); + private SizeFCompat readFileDimensions(String path) { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + decodeFile(path, options); + return new SizeFCompat(options.outWidth, options.outHeight); + } + + private Bitmap decodeFile(String path, @Nullable BitmapFactory.Options opts) { + return BitmapFactory.decodeFile(path, opts); } private Bitmap createScaledBitmap(Bitmap bmp, int width, int height, boolean filter) { return Bitmap.createScaledBitmap(bmp, width, height, filter); } + /** + * Calculates the largest sample size value that is a power of two based on a target width and + * height. + * + *

This value is necessary to tell the Bitmap decoder to subsample the original image, + * returning a smaller image to save memory. + * + * @see + * Loading Large Bitmaps Efficiently + */ + private int calculateSampleSize( + BitmapFactory.Options options, int targetWidth, int targetHeight) { + final int height = options.outHeight; + final int width = options.outWidth; + int sampleSize = 1; + if (height > targetHeight || width > targetWidth) { + final int halfHeight = height / 2; + final int halfWidth = width / 2; + while ((halfHeight / sampleSize) >= targetHeight && (halfWidth / sampleSize) >= targetWidth) { + sampleSize *= 2; + } + } + return sampleSize; + } + private File createImageOnExternalDirectory(String name, Bitmap bitmap, int imageQuality) throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/Messages.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/Messages.java index af98078c673..accf64b7e73 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/Messages.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/Messages.java @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v9.1.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.5), do not edit directly. // See also: https://pub.dev/packages/pigeon package io.flutter.plugins.imagepicker; @@ -39,7 +39,7 @@ public FlutterError(@NonNull String code, @Nullable String message, @Nullable Ob } @NonNull - private static ArrayList wrapError(@NonNull Throwable exception) { + protected static ArrayList wrapError(@NonNull Throwable exception) { ArrayList errorList = new ArrayList(3); if (exception instanceof FlutterError) { FlutterError error = (FlutterError) exception; @@ -59,7 +59,7 @@ public enum SourceCamera { REAR(0), FRONT(1); - private final int index; + final int index; private SourceCamera(final int index) { this.index = index; @@ -70,7 +70,7 @@ public enum SourceType { CAMERA(0), GALLERY(1); - private final int index; + final int index; private SourceType(final int index) { this.index = index; @@ -81,7 +81,7 @@ public enum CacheRetrievalType { IMAGE(0), VIDEO(1); - private final int index; + final int index; private CacheRetrievalType(final int index) { this.index = index; @@ -134,8 +134,8 @@ public void setQuality(@NonNull Long setterArg) { this.quality = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private ImageSelectionOptions() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + ImageSelectionOptions() {} public static final class Builder { @@ -275,8 +275,8 @@ public void setCamera(@Nullable SourceCamera setterArg) { this.camera = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private SourceSpecification() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + SourceSpecification() {} public static final class Builder { @@ -351,8 +351,8 @@ public void setMessage(@Nullable String setterArg) { this.message = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private CacheRetrievalError() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + CacheRetrievalError() {} public static final class Builder { @@ -446,8 +446,8 @@ public void setPaths(@NonNull List setterArg) { this.paths = setterArg; } - /** Constructor is private to enforce null safety; use Builder. */ - private CacheRetrievalResult() {} + /** Constructor is non-public to enforce null safety; use Builder. */ + CacheRetrievalResult() {} public static final class Builder { @@ -504,9 +504,10 @@ ArrayList toList() { } public interface Result { + @SuppressWarnings("UnknownNullness") void success(T result); - void error(Throwable error); + void error(@NonNull Throwable error); } private static class ImagePickerApiCodec extends StandardMessageCodec { @@ -568,7 +569,7 @@ void pickImages( @NonNull ImageSelectionOptions options, @NonNull Boolean allowMultiple, @NonNull Boolean usePhotoPicker, - Result> result); + @NonNull Result> result); /** * Selects video and returns their paths. * @@ -580,17 +581,17 @@ void pickVideos( @NonNull VideoSelectionOptions options, @NonNull Boolean allowMultiple, @NonNull Boolean usePhotoPicker, - Result> result); + @NonNull Result> result); /** Returns results from a previous app session, if any. */ @Nullable CacheRetrievalResult retrieveLostResults(); /** The codec used by ImagePickerApi. */ - static MessageCodec getCodec() { + static @NonNull MessageCodec getCodec() { return ImagePickerApiCodec.INSTANCE; } /** Sets up an instance of `ImagePickerApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, ImagePickerApi api) { + static void setup(@NonNull BinaryMessenger binaryMessenger, @Nullable ImagePickerApi api) { { BasicMessageChannel channel = new BasicMessageChannel<>( diff --git a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImageResizerTest.java b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImageResizerTest.java index 45b2a45e8ee..a2f742f2334 100644 --- a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImageResizerTest.java +++ b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/ImageResizerTest.java @@ -6,17 +6,24 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.times; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.File; import java.io.IOException; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @@ -102,4 +109,32 @@ public void onResizeImageIfNeeded_whenImagePathIsNotBitmap_shouldReturnPathAndNo assertThat(resizedImagePath, equalTo(nonBitmapImagePath)); } } + + @Test + public void onResizeImageIfNeeded_whenResizeIsNotNecessary_shouldOnlyQueryBitmapDimensions() { + try (MockedStatic mockBitmapFactory = + mockStatic(BitmapFactory.class, Mockito.CALLS_REAL_METHODS)) { + String outputFile = resizer.resizeImageIfNeeded(imageFile.getPath(), null, null, 100); + ArgumentCaptor argument = + ArgumentCaptor.forClass(BitmapFactory.Options.class); + mockBitmapFactory.verify(() -> BitmapFactory.decodeFile(anyString(), argument.capture())); + BitmapFactory.Options capturedOptions = argument.getValue(); + assertTrue(capturedOptions.inJustDecodeBounds); + } + } + + @Test + public void onResizeImageIfNeeded_whenResizeIsNecessary_shouldDecodeBitmapPixels() { + try (MockedStatic mockBitmapFactory = + mockStatic(BitmapFactory.class, Mockito.CALLS_REAL_METHODS)) { + String outputFile = resizer.resizeImageIfNeeded(imageFile.getPath(), 50.0, 50.0, 100); + ArgumentCaptor argument = + ArgumentCaptor.forClass(BitmapFactory.Options.class); + mockBitmapFactory.verify( + () -> BitmapFactory.decodeFile(anyString(), argument.capture()), times(2)); + List capturedOptions = argument.getAllValues(); + assertTrue(capturedOptions.get(0).inJustDecodeBounds); + assertFalse(capturedOptions.get(1).inJustDecodeBounds); + } + } } diff --git a/packages/image_picker/image_picker_android/example/lib/main.dart b/packages/image_picker/image_picker_android/example/lib/main.dart index c456fb98dc1..fa87587857b 100755 --- a/packages/image_picker/image_picker_android/example/lib/main.dart +++ b/packages/image_picker/image_picker_android/example/lib/main.dart @@ -98,55 +98,57 @@ class _MyHomePageState extends State { } Future _onImageButtonPressed( - BuildContext context, { - required ImageSource source, + ImageSource source, { + required BuildContext context, bool isMultiImage = false, }) async { if (_controller != null) { await _controller!.setVolume(0.0); } - if (isVideo) { - final XFile? file = await _picker.getVideo( - source: source, maxDuration: const Duration(seconds: 10)); - if (file != null && context.mounted) { - _showPickedSnackBar(context, [file]); - } - await _playVideo(file); - } else if (isMultiImage && context.mounted) { - await _displayPickImageDialog(context, - (double? maxWidth, double? maxHeight, int? quality) async { - try { - final List? pickedFileList = await _picker.getMultiImage( - maxWidth: maxWidth, - maxHeight: maxHeight, - imageQuality: quality, - ); - if (pickedFileList != null && context.mounted) { - _showPickedSnackBar(context, pickedFileList); - } - setState(() => _imageFileList = pickedFileList); - } catch (e) { - setState(() => _pickImageError = e); + if (context.mounted) { + if (isVideo) { + final XFile? file = await _picker.getVideo( + source: source, maxDuration: const Duration(seconds: 10)); + if (file != null && context.mounted) { + _showPickedSnackBar(context, [file]); } - }); - } else { - await _displayPickImageDialog(context, - (double? maxWidth, double? maxHeight, int? quality) async { - try { - final XFile? pickedFile = await _picker.getImage( - source: source, - maxWidth: maxWidth, - maxHeight: maxHeight, - imageQuality: quality, - ); - if (pickedFile != null && context.mounted) { - _showPickedSnackBar(context, [pickedFile]); + await _playVideo(file); + } else if (isMultiImage) { + await _displayPickImageDialog(context, + (double? maxWidth, double? maxHeight, int? quality) async { + try { + final List? pickedFileList = await _picker.getMultiImage( + maxWidth: maxWidth, + maxHeight: maxHeight, + imageQuality: quality, + ); + if (pickedFileList != null && context.mounted) { + _showPickedSnackBar(context, pickedFileList); + } + setState(() => _imageFileList = pickedFileList); + } catch (e) { + setState(() => _pickImageError = e); } - setState(() => _setImageFileListFromFile(pickedFile)); - } catch (e) { - setState(() => _pickImageError = e); - } - }); + }); + } else { + await _displayPickImageDialog(context, + (double? maxWidth, double? maxHeight, int? quality) async { + try { + final XFile? pickedFile = await _picker.getImage( + source: source, + maxWidth: maxWidth, + maxHeight: maxHeight, + imageQuality: quality, + ); + if (pickedFile != null && context.mounted) { + _showPickedSnackBar(context, [pickedFile]); + } + setState(() => _setImageFileListFromFile(pickedFile)); + } catch (e) { + setState(() => _pickImageError = e); + } + }); + } } } @@ -315,7 +317,7 @@ class _MyHomePageState extends State { key: const Key('image_picker_example_from_gallery'), onPressed: () { isVideo = false; - _onImageButtonPressed(context, source: ImageSource.gallery); + _onImageButtonPressed(ImageSource.gallery, context: context); }, heroTag: 'image0', tooltip: 'Pick Image from gallery', @@ -328,8 +330,8 @@ class _MyHomePageState extends State { onPressed: () { isVideo = false; _onImageButtonPressed( - context, - source: ImageSource.gallery, + ImageSource.gallery, + context: context, isMultiImage: true, ); }, @@ -343,7 +345,7 @@ class _MyHomePageState extends State { child: FloatingActionButton( onPressed: () { isVideo = false; - _onImageButtonPressed(context, source: ImageSource.camera); + _onImageButtonPressed(ImageSource.camera, context: context); }, heroTag: 'image2', tooltip: 'Take a Photo', @@ -356,7 +358,7 @@ class _MyHomePageState extends State { backgroundColor: Colors.red, onPressed: () { isVideo = true; - _onImageButtonPressed(context, source: ImageSource.gallery); + _onImageButtonPressed(ImageSource.gallery, context: context); }, heroTag: 'video0', tooltip: 'Pick Video from gallery', @@ -369,7 +371,7 @@ class _MyHomePageState extends State { backgroundColor: Colors.red, onPressed: () { isVideo = true; - _onImageButtonPressed(context, source: ImageSource.camera); + _onImageButtonPressed(ImageSource.camera, context: context); }, heroTag: 'video1', tooltip: 'Take a Video', diff --git a/packages/image_picker/image_picker_android/lib/src/messages.g.dart b/packages/image_picker/image_picker_android/lib/src/messages.g.dart index c0506ad4dae..a4f15c84755 100644 --- a/packages/image_picker/image_picker_android/lib/src/messages.g.dart +++ b/packages/image_picker/image_picker_android/lib/src/messages.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v9.1.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.5), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index 2e8b6045a7d..b259ab809b6 100755 --- a/packages/image_picker/image_picker_android/pubspec.yaml +++ b/packages/image_picker/image_picker_android/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the image_picker plugin. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.6+11 +version: 0.8.6+14 environment: sdk: ">=2.18.0 <4.0.0" @@ -28,4 +28,4 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.0 - pigeon: ^9.1.0 + pigeon: ^9.2.5 diff --git a/packages/image_picker/image_picker_android/test/test_api.g.dart b/packages/image_picker/image_picker_android/test/test_api.g.dart index aa5c38f52eb..dbb6b143a91 100644 --- a/packages/image_picker/image_picker_android/test/test_api.g.dart +++ b/packages/image_picker/image_picker_android/test/test_api.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v9.1.0), do not edit directly. +// Autogenerated from Pigeon (v9.2.5), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports @@ -57,6 +57,8 @@ class _TestHostImagePickerApiCodec extends StandardMessageCodec { } abstract class TestHostImagePickerApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; static const MessageCodec codec = _TestHostImagePickerApiCodec(); /// Selects images and returns their paths. @@ -83,9 +85,12 @@ abstract class TestHostImagePickerApi { 'dev.flutter.pigeon.ImagePickerApi.pickImages', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImagePickerApi.pickImages was null.'); final List args = (message as List?)!; @@ -114,9 +119,12 @@ abstract class TestHostImagePickerApi { 'dev.flutter.pigeon.ImagePickerApi.pickVideos', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.ImagePickerApi.pickVideos was null.'); final List args = (message as List?)!; @@ -145,9 +153,12 @@ abstract class TestHostImagePickerApi { 'dev.flutter.pigeon.ImagePickerApi.retrieveLostResults', codec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMockMessageHandler(null); + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, null); } else { - channel.setMockMessageHandler((Object? message) async { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(channel, + (Object? message) async { // ignore message final CacheRetrievalResult? output = api.retrieveLostResults(); return [output]; diff --git a/packages/image_picker/image_picker_for_web/CHANGELOG.md b/packages/image_picker/image_picker_for_web/CHANGELOG.md index f8bc98e5245..100a9b0490f 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 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.1.12 * Clarifies explanation of endorsement in README. 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 c150c20e6c4..9c431bd6e90 100644 --- a/packages/image_picker/image_picker_for_web/example/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/example/pubspec.yaml @@ -2,8 +2,8 @@ name: image_picker_for_web_integration_tests publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/image_picker/image_picker_for_web/pubspec.yaml b/packages/image_picker/image_picker_for_web/pubspec.yaml index 3fe4071d25a..06a7093f596 100644 --- a/packages/image_picker/image_picker_for_web/pubspec.yaml +++ b/packages/image_picker/image_picker_for_web/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.1.12 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/image_picker/image_picker_ios/CHANGELOG.md b/packages/image_picker/image_picker_ios/CHANGELOG.md index c03b6462a9c..1173ddf27b7 100644 --- a/packages/image_picker/image_picker_ios/CHANGELOG.md +++ b/packages/image_picker/image_picker_ios/CHANGELOG.md @@ -1,4 +1,5 @@ -## NEXT +## 0.8.7+4 +* Fixes `BuildContext` handling in example. * Updates metadata unit test to work on iOS 16.2. ## 0.8.7+3 diff --git a/packages/image_picker/image_picker_ios/example/lib/main.dart b/packages/image_picker/image_picker_ios/example/lib/main.dart index 7f8956a9f2c..76076a5dbd6 100755 --- a/packages/image_picker/image_picker_ios/example/lib/main.dart +++ b/packages/image_picker/image_picker_ios/example/lib/main.dart @@ -81,58 +81,60 @@ class _MyHomePageState extends State { } Future _onImageButtonPressed(ImageSource source, - {BuildContext? context, bool isMultiImage = false}) async { + {required BuildContext context, bool isMultiImage = false}) async { if (_controller != null) { await _controller!.setVolume(0.0); } - if (isVideo) { - final XFile? file = await _picker.getVideo( - source: source, maxDuration: const Duration(seconds: 10)); - await _playVideo(file); - } else if (isMultiImage) { - await _displayPickImageDialog(context!, - (double? maxWidth, double? maxHeight, int? quality) async { - try { - final List pickedFileList = - await _picker.getMultiImageWithOptions( - options: MultiImagePickerOptions( - imageOptions: ImageOptions( + if (context.mounted) { + if (isVideo) { + final XFile? file = await _picker.getVideo( + source: source, maxDuration: const Duration(seconds: 10)); + await _playVideo(file); + } else if (isMultiImage) { + await _displayPickImageDialog(context, + (double? maxWidth, double? maxHeight, int? quality) async { + try { + final List pickedFileList = + await _picker.getMultiImageWithOptions( + options: MultiImagePickerOptions( + imageOptions: ImageOptions( + maxWidth: maxWidth, + maxHeight: maxHeight, + imageQuality: quality, + ), + ), + ); + setState(() { + _imageFileList = pickedFileList; + }); + } catch (e) { + setState(() { + _pickImageError = e; + }); + } + }); + } else { + await _displayPickImageDialog(context, + (double? maxWidth, double? maxHeight, int? quality) async { + try { + final XFile? pickedFile = await _picker.getImageFromSource( + source: source, + options: ImagePickerOptions( maxWidth: maxWidth, maxHeight: maxHeight, imageQuality: quality, ), - ), - ); - setState(() { - _imageFileList = pickedFileList; - }); - } catch (e) { - setState(() { - _pickImageError = e; - }); - } - }); - } else { - await _displayPickImageDialog(context!, - (double? maxWidth, double? maxHeight, int? quality) async { - try { - final XFile? pickedFile = await _picker.getImageFromSource( - source: source, - options: ImagePickerOptions( - maxWidth: maxWidth, - maxHeight: maxHeight, - imageQuality: quality, - ), - ); - setState(() { - _setImageFileListFromFile(pickedFile); - }); - } catch (e) { - setState(() { - _pickImageError = e; - }); - } - }); + ); + setState(() { + _setImageFileListFromFile(pickedFile); + }); + } catch (e) { + setState(() { + _pickImageError = e; + }); + } + }); + } } } @@ -281,7 +283,7 @@ class _MyHomePageState extends State { backgroundColor: Colors.red, onPressed: () { isVideo = true; - _onImageButtonPressed(ImageSource.gallery); + _onImageButtonPressed(ImageSource.gallery, context: context); }, heroTag: 'video0', tooltip: 'Pick Video from gallery', @@ -294,7 +296,7 @@ class _MyHomePageState extends State { backgroundColor: Colors.red, onPressed: () { isVideo = true; - _onImageButtonPressed(ImageSource.camera); + _onImageButtonPressed(ImageSource.camera, context: context); }, heroTag: 'video1', tooltip: 'Take a Video', diff --git a/packages/image_picker/image_picker_ios/pubspec.yaml b/packages/image_picker/image_picker_ios/pubspec.yaml index 8665e93aca2..99c94fab962 100755 --- a/packages/image_picker/image_picker_ios/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker_ios description: iOS implementation of the image_picker plugin. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.7+3 +version: 0.8.7+4 environment: sdk: ">=2.18.0 <4.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 2977e2921ba..1308001548b 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 +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 2.6.3 diff --git a/packages/image_picker/image_picker_platform_interface/pubspec.yaml b/packages/image_picker/image_picker_platform_interface/pubspec.yaml index e03c59b8d4b..5bc22aecd9e 100644 --- a/packages/image_picker/image_picker_platform_interface/pubspec.yaml +++ b/packages/image_picker/image_picker_platform_interface/pubspec.yaml @@ -7,8 +7,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.6.3 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cross_file: ^0.3.1+1 diff --git a/packages/in_app_purchase/in_app_purchase/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase/CHANGELOG.md index ce33145e2ef..c049d007a91 100644 --- a/packages/in_app_purchase/in_app_purchase/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 3.1.5 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 5ec9ddf7d91..e3c891e822e 100644 --- a/packages/in_app_purchase/in_app_purchase/example/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the in_app_purchase plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/in_app_purchase/in_app_purchase/pubspec.yaml b/packages/in_app_purchase/in_app_purchase/pubspec.yaml index 4b0a2e519ca..d873338e28d 100644 --- a/packages/in_app_purchase/in_app_purchase/pubspec.yaml +++ b/packages/in_app_purchase/in_app_purchase/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 3.1.5 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: 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 5692382fa9e..7f05c0ff8ec 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 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.3.6+3 * Adds a null check, to prevent a new diagnostic. 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 326b4595a64..494e4916159 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 @@ -3,8 +3,8 @@ description: Demonstrates how to use the in_app_purchase_storekit plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/ios_platform_images/CHANGELOG.md b/packages/ios_platform_images/CHANGELOG.md index cb089dacdd9..e54932a4d45 100644 --- a/packages/ios_platform_images/CHANGELOG.md +++ b/packages/ios_platform_images/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 0.2.2+1 diff --git a/packages/ios_platform_images/example/pubspec.yaml b/packages/ios_platform_images/example/pubspec.yaml index 71f253a42f6..0de91494f15 100644 --- a/packages/ios_platform_images/example/pubspec.yaml +++ b/packages/ios_platform_images/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the ios_platform_images plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: cupertino_icons: ^1.0.2 diff --git a/packages/local_auth/local_auth_android/CHANGELOG.md b/packages/local_auth/local_auth_android/CHANGELOG.md index 3ec584686d5..b5747260f82 100644 --- a/packages/local_auth/local_auth_android/CHANGELOG.md +++ b/packages/local_auth/local_auth_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 1.0.28 * Removes unused resources as indicated by Android lint warnings. diff --git a/packages/local_auth/local_auth_android/example/pubspec.yaml b/packages/local_auth/local_auth_android/example/pubspec.yaml index 9a202edade2..d5801103e81 100644 --- a/packages/local_auth/local_auth_android/example/pubspec.yaml +++ b/packages/local_auth/local_auth_android/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the local_auth_android plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/local_auth/local_auth_android/pubspec.yaml b/packages/local_auth/local_auth_android/pubspec.yaml index af8e9689352..ccdb5261add 100644 --- a/packages/local_auth/local_auth_android/pubspec.yaml +++ b/packages/local_auth/local_auth_android/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 1.0.28 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/local_auth/local_auth_ios/CHANGELOG.md b/packages/local_auth/local_auth_ios/CHANGELOG.md index 165a3c668e2..570f8db0b31 100644 --- a/packages/local_auth/local_auth_ios/CHANGELOG.md +++ b/packages/local_auth/local_auth_ios/CHANGELOG.md @@ -1,3 +1,11 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + +## 1.1.2 + +* Internal refactoring for maintainability. + ## 1.1.1 * Clarifies explanation of endorsement in README. diff --git a/packages/local_auth/local_auth_ios/example/ios/RunnerTests/FLTLocalAuthPluginTests.m b/packages/local_auth/local_auth_ios/example/ios/RunnerTests/FLTLocalAuthPluginTests.m index 8ca4c4ecbb7..f6e6c0ad422 100644 --- a/packages/local_auth/local_auth_ios/example/ios/RunnerTests/FLTLocalAuthPluginTests.m +++ b/packages/local_auth/local_auth_ios/example/ios/RunnerTests/FLTLocalAuthPluginTests.m @@ -4,22 +4,41 @@ @import LocalAuthentication; @import XCTest; +@import local_auth_ios; #import -#if __has_include() -#import -#else -@import local_auth_ios; -#endif +// Set a long timeout to avoid flake due to slow CI. +static const NSTimeInterval kTimeout = 30.0; -// Private API needed for tests. -@interface FLTLocalAuthPlugin (Test) -- (void)setAuthContextOverrides:(NSArray *)authContexts; +/** + * A context factory that returns preset contexts. + */ +@interface StubAuthContextFactory : NSObject +@property(copy, nonatomic) NSMutableArray *contexts; +- (instancetype)initWithContexts:(NSArray *)contexts; @end -// Set a long timeout to avoid flake due to slow CI. -static const NSTimeInterval kTimeout = 30.0; +@implementation StubAuthContextFactory + +- (instancetype)initWithContexts:(NSArray *)contexts { + self = [super init]; + if (self) { + _contexts = [contexts mutableCopy]; + } + return self; +} + +- (LAContext *)createAuthContext { + NSAssert(self.contexts.count > 0, @"Insufficient test contexts provided"); + LAContext *context = [self.contexts firstObject]; + [self.contexts removeObjectAtIndex:0]; + return context; +} + +@end + +#pragma mark - @interface FLTLocalAuthPluginTests : XCTestCase @end @@ -31,9 +50,10 @@ - (void)setUp { } - (void)testSuccessfullAuthWithBiometrics { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; NSString *reason = @"a reason"; @@ -70,9 +90,10 @@ - (void)testSuccessfullAuthWithBiometrics { } - (void)testSuccessfullAuthWithoutBiometrics { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthentication; NSString *reason = @"a reason"; @@ -109,9 +130,10 @@ - (void)testSuccessfullAuthWithoutBiometrics { } - (void)testFailedAuthWithBiometrics { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; NSString *reason = @"a reason"; @@ -147,9 +169,10 @@ - (void)testFailedAuthWithBiometrics { } - (void)testFailedWithUnknownErrorCode { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthentication; NSString *reason = @"a reason"; @@ -185,9 +208,10 @@ - (void)testFailedWithUnknownErrorCode { } - (void)testSystemCancelledWithoutStickyAuth { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthentication; NSString *reason = @"a reason"; @@ -225,9 +249,10 @@ - (void)testSystemCancelledWithoutStickyAuth { } - (void)testFailedAuthWithoutBiometrics { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthentication; NSString *reason = @"a reason"; @@ -263,9 +288,10 @@ - (void)testFailedAuthWithoutBiometrics { } - (void)testLocalizedFallbackTitle { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthentication; NSString *reason = @"a reason"; @@ -303,9 +329,10 @@ - (void)testLocalizedFallbackTitle { } - (void)testSkippedLocalizedFallbackTitle { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthentication; NSString *reason = @"a reason"; @@ -340,9 +367,10 @@ - (void)testSkippedLocalizedFallbackTitle { } - (void)testDeviceSupportsBiometrics_withEnrolledHardware { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; OCMStub([mockAuthContext canEvaluatePolicy:policy error:[OCMArg setTo:nil]]).andReturn(YES); @@ -362,9 +390,10 @@ - (void)testDeviceSupportsBiometrics_withEnrolledHardware { } - (void)testDeviceSupportsBiometrics_withNonEnrolledHardware { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) { @@ -396,9 +425,10 @@ - (void)testDeviceSupportsBiometrics_withNonEnrolledHardware { } - (void)testDeviceSupportsBiometrics_withNoBiometricHardware { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) { @@ -430,9 +460,10 @@ - (void)testDeviceSupportsBiometrics_withNoBiometricHardware { } - (void)testGetEnrolledBiometrics_withFaceID { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; OCMStub([mockAuthContext canEvaluatePolicy:policy error:[OCMArg setTo:nil]]).andReturn(YES); @@ -454,9 +485,10 @@ - (void)testGetEnrolledBiometrics_withFaceID { } - (void)testGetEnrolledBiometrics_withTouchID { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; OCMStub([mockAuthContext canEvaluatePolicy:policy error:[OCMArg setTo:nil]]).andReturn(YES); @@ -478,9 +510,10 @@ - (void)testGetEnrolledBiometrics_withTouchID { } - (void)testGetEnrolledBiometrics_withoutEnrolledHardware { - FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init]; id mockAuthContext = OCMClassMock([LAContext class]); - plugin.authContextOverrides = @[ mockAuthContext ]; + FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] + initWithContextFactory:[[StubAuthContextFactory alloc] + initWithContexts:@[ mockAuthContext ]]]; const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) { diff --git a/packages/local_auth/local_auth_ios/example/pubspec.yaml b/packages/local_auth/local_auth_ios/example/pubspec.yaml index a7e79c23317..300f2ff967e 100644 --- a/packages/local_auth/local_auth_ios/example/pubspec.yaml +++ b/packages/local_auth/local_auth_ios/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the local_auth_ios plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m b/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m index 10c1e812fbc..08903d06f19 100644 --- a/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m +++ b/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m @@ -1,22 +1,32 @@ // 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 "FLTLocalAuthPlugin.h" +#import "FLTLocalAuthPlugin_Test.h" + #import -#import "FLTLocalAuthPlugin.h" +/** + * A default context factory that wraps standard LAContext allocation. + */ +@interface FLADefaultAuthContextFactory : NSObject +@end + +@implementation FLADefaultAuthContextFactory +- (LAContext *)createAuthContext { + return [[LAContext alloc] init]; +} +@end + +#pragma mark - @interface FLTLocalAuthPlugin () @property(nonatomic, copy, nullable) NSDictionary *lastCallArgs; @property(nonatomic, nullable) FlutterResult lastResult; -// For unit tests to inject dummy LAContext instances that will be used when a new context would -// normally be created. Each call to createAuthContext will remove the current first element from -// the array. -- (void)setAuthContextOverrides:(NSArray *)authContexts; +@property(nonatomic, strong) NSObject *authContextFactory; @end -@implementation FLTLocalAuthPlugin { - NSMutableArray *_authContextOverrides; -} +@implementation FLTLocalAuthPlugin + (void)registerWithRegistrar:(NSObject *)registrar { FlutterMethodChannel *channel = @@ -27,6 +37,18 @@ + (void)registerWithRegistrar:(NSObject *)registrar { [registrar addApplicationDelegate:instance]; } +- (instancetype)init { + return [self initWithContextFactory:[[FLADefaultAuthContextFactory alloc] init]]; +} + +- (instancetype)initWithContextFactory:(NSObject *)factory { + self = [super init]; + if (self) { + _authContextFactory = factory; + } + return self; +} + - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result { if ([@"authenticate" isEqualToString:call.method]) { bool isBiometricOnly = [call.arguments[@"biometricOnly"] boolValue]; @@ -48,19 +70,6 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result #pragma mark Private Methods -- (void)setAuthContextOverrides:(NSArray *)authContexts { - _authContextOverrides = [authContexts mutableCopy]; -} - -- (LAContext *)createAuthContext { - if ([_authContextOverrides count] > 0) { - LAContext *context = [_authContextOverrides firstObject]; - [_authContextOverrides removeObjectAtIndex:0]; - return context; - } - return [[LAContext alloc] init]; -} - - (void)alertMessage:(NSString *)message firstButton:(NSString *)firstButton flutterResult:(FlutterResult)result @@ -98,7 +107,7 @@ - (void)alertMessage:(NSString *)message } - (void)deviceSupportsBiometrics:(FlutterResult)result { - LAContext *context = self.createAuthContext; + LAContext *context = [self.authContextFactory createAuthContext]; NSError *authError = nil; // Check if authentication with biometrics is possible. if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics @@ -120,7 +129,7 @@ - (void)deviceSupportsBiometrics:(FlutterResult)result { } - (void)getEnrolledBiometrics:(FlutterResult)result { - LAContext *context = self.createAuthContext; + LAContext *context = [self.authContextFactory createAuthContext]; NSError *authError = nil; NSMutableArray *biometrics = [[NSMutableArray alloc] init]; if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics @@ -138,7 +147,7 @@ - (void)getEnrolledBiometrics:(FlutterResult)result { - (void)authenticateWithBiometrics:(NSDictionary *)arguments withFlutterResult:(FlutterResult)result { - LAContext *context = self.createAuthContext; + LAContext *context = [self.authContextFactory createAuthContext]; NSError *authError = nil; self.lastCallArgs = nil; self.lastResult = nil; @@ -164,7 +173,7 @@ - (void)authenticateWithBiometrics:(NSDictionary *)arguments } - (void)authenticate:(NSDictionary *)arguments withFlutterResult:(FlutterResult)result { - LAContext *context = self.createAuthContext; + LAContext *context = [self.authContextFactory createAuthContext]; NSError *authError = nil; _lastCallArgs = nil; _lastResult = nil; diff --git a/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin_Test.h b/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin_Test.h new file mode 100644 index 00000000000..c35322033f9 --- /dev/null +++ b/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin_Test.h @@ -0,0 +1,21 @@ +// 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 + +/** + * Protocol for a source of LAContext instances. Used to allow context injection in unit tests. + */ +@protocol FLAAuthContextFactory +- (LAContext *)createAuthContext; +@end + +@interface FLTLocalAuthPlugin () +/** + * Returns an instance that uses the given factory to create LAContexts. + */ +- (instancetype)initWithContextFactory:(NSObject *)factory + NS_DESIGNATED_INITIALIZER; +@end diff --git a/packages/local_auth/local_auth_ios/pubspec.yaml b/packages/local_auth/local_auth_ios/pubspec.yaml index 544e820c082..79654a0039c 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/packages/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.1.1 +version: 1.1.2 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/local_auth/local_auth_windows/CHANGELOG.md b/packages/local_auth/local_auth_windows/CHANGELOG.md index 5b44b321fd9..d184e5509a7 100644 --- a/packages/local_auth/local_auth_windows/CHANGELOG.md +++ b/packages/local_auth/local_auth_windows/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 1.0.8 * Sets a cmake_policy compatibility version to fix build warnings. diff --git a/packages/local_auth/local_auth_windows/example/pubspec.yaml b/packages/local_auth/local_auth_windows/example/pubspec.yaml index 65be8041c03..2b31020e075 100644 --- a/packages/local_auth/local_auth_windows/example/pubspec.yaml +++ b/packages/local_auth/local_auth_windows/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the local_auth_windows plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/local_auth/local_auth_windows/pubspec.yaml b/packages/local_auth/local_auth_windows/pubspec.yaml index 01a9bdab1ee..f0b97d3a160 100644 --- a/packages/local_auth/local_auth_windows/pubspec.yaml +++ b/packages/local_auth/local_auth_windows/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 1.0.8 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/multicast_dns/CHANGELOG.md b/packages/multicast_dns/CHANGELOG.md index 55ee390df5d..7e8642cd7e8 100644 --- a/packages/multicast_dns/CHANGELOG.md +++ b/packages/multicast_dns/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.3.2+3 * Removes use of `runtimeType.toString()`. diff --git a/packages/multicast_dns/pubspec.yaml b/packages/multicast_dns/pubspec.yaml index c50e0096a00..d0fc19ec3be 100644 --- a/packages/multicast_dns/pubspec.yaml +++ b/packages/multicast_dns/pubspec.yaml @@ -5,7 +5,7 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.3.2+3 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: meta: ^1.3.0 diff --git a/packages/palette_generator/CHANGELOG.md b/packages/palette_generator/CHANGELOG.md index ec6f4e8baf7..7824f212e26 100644 --- a/packages/palette_generator/CHANGELOG.md +++ b/packages/palette_generator/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 0.3.3+2 diff --git a/packages/palette_generator/example/pubspec.yaml b/packages/palette_generator/example/pubspec.yaml index 353f2fe2afb..6eb5e092c60 100644 --- a/packages/palette_generator/example/pubspec.yaml +++ b/packages/palette_generator/example/pubspec.yaml @@ -4,8 +4,8 @@ publish_to: none version: 0.1.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/palette_generator/pubspec.yaml b/packages/palette_generator/pubspec.yaml index a44c21402d2..ad4ed9534a2 100644 --- a/packages/palette_generator/pubspec.yaml +++ b/packages/palette_generator/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.3.3+2 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: collection: ^1.15.0 diff --git a/packages/path_provider/path_provider/CHANGELOG.md b/packages/path_provider/path_provider/CHANGELOG.md index 84363894cd8..a491eb92554 100644 --- a/packages/path_provider/path_provider/CHANGELOG.md +++ b/packages/path_provider/path_provider/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.0.15 * Updates iOS minimum version in README. diff --git a/packages/path_provider/path_provider/example/linux/flutter/CMakeLists.txt b/packages/path_provider/path_provider/example/linux/flutter/CMakeLists.txt index 4f48a7ced5f..94f43ff7fa6 100644 --- a/packages/path_provider/path_provider/example/linux/flutter/CMakeLists.txt +++ b/packages/path_provider/path_provider/example/linux/flutter/CMakeLists.txt @@ -24,7 +24,6 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) -pkg_check_modules(BLKID REQUIRED IMPORTED_TARGET blkid) set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") @@ -66,7 +65,6 @@ target_link_libraries(flutter INTERFACE PkgConfig::GTK PkgConfig::GLIB PkgConfig::GIO - PkgConfig::BLKID ) add_dependencies(flutter flutter_assemble) diff --git a/packages/path_provider/path_provider/example/pubspec.yaml b/packages/path_provider/path_provider/example/pubspec.yaml index 047277874a1..9a67b15f89b 100644 --- a/packages/path_provider/path_provider/example/pubspec.yaml +++ b/packages/path_provider/path_provider/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the path_provider plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/path_provider/path_provider/pubspec.yaml b/packages/path_provider/path_provider/pubspec.yaml index 8ec3e1cce3a..46507ce90a7 100644 --- a/packages/path_provider/path_provider/pubspec.yaml +++ b/packages/path_provider/path_provider/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.0.15 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/path_provider/path_provider_android/CHANGELOG.md b/packages/path_provider/path_provider_android/CHANGELOG.md index 5f551419816..816457564de 100644 --- a/packages/path_provider/path_provider_android/CHANGELOG.md +++ b/packages/path_provider/path_provider_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.0.27 * Fixes compatibility with AGP versions older than 4.2. diff --git a/packages/path_provider/path_provider_android/example/pubspec.yaml b/packages/path_provider/path_provider_android/example/pubspec.yaml index d5e08db83fd..ea9f0877aa2 100644 --- a/packages/path_provider/path_provider_android/example/pubspec.yaml +++ b/packages/path_provider/path_provider_android/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the path_provider plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/path_provider/path_provider_android/pubspec.yaml b/packages/path_provider/path_provider_android/pubspec.yaml index f22706b08a7..2bd685bb640 100644 --- a/packages/path_provider/path_provider_android/pubspec.yaml +++ b/packages/path_provider/path_provider_android/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.0.27 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/path_provider/path_provider_linux/CHANGELOG.md b/packages/path_provider/path_provider_linux/CHANGELOG.md index 0604570ee18..248150a726b 100644 --- a/packages/path_provider/path_provider_linux/CHANGELOG.md +++ b/packages/path_provider/path_provider_linux/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.1.10 * Clarifies explanation of endorsement in README. diff --git a/packages/path_provider/path_provider_linux/example/linux/flutter/CMakeLists.txt b/packages/path_provider/path_provider_linux/example/linux/flutter/CMakeLists.txt index 4f48a7ced5f..94f43ff7fa6 100644 --- a/packages/path_provider/path_provider_linux/example/linux/flutter/CMakeLists.txt +++ b/packages/path_provider/path_provider_linux/example/linux/flutter/CMakeLists.txt @@ -24,7 +24,6 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) -pkg_check_modules(BLKID REQUIRED IMPORTED_TARGET blkid) set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") @@ -66,7 +65,6 @@ target_link_libraries(flutter INTERFACE PkgConfig::GTK PkgConfig::GLIB PkgConfig::GIO - PkgConfig::BLKID ) add_dependencies(flutter flutter_assemble) diff --git a/packages/path_provider/path_provider_linux/example/pubspec.yaml b/packages/path_provider/path_provider_linux/example/pubspec.yaml index 088420d57bf..47ceb172bc0 100644 --- a/packages/path_provider/path_provider_linux/example/pubspec.yaml +++ b/packages/path_provider/path_provider_linux/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the path_provider_linux plugin. publish_to: "none" environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/path_provider/path_provider_linux/pubspec.yaml b/packages/path_provider/path_provider_linux/pubspec.yaml index 89123c090e0..e5b1f8ae32c 100644 --- a/packages/path_provider/path_provider_linux/pubspec.yaml +++ b/packages/path_provider/path_provider_linux/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.1.10 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/path_provider/path_provider_platform_interface/CHANGELOG.md b/packages/path_provider/path_provider_platform_interface/CHANGELOG.md index 7dbca936bc3..f96711be4fd 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 +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 2.0.6 diff --git a/packages/path_provider/path_provider_platform_interface/pubspec.yaml b/packages/path_provider/path_provider_platform_interface/pubspec.yaml index c4c5ca41f8c..193bb85b94a 100644 --- a/packages/path_provider/path_provider_platform_interface/pubspec.yaml +++ b/packages/path_provider/path_provider_platform_interface/pubspec.yaml @@ -7,8 +7,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.0.6 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/path_provider/path_provider_windows/CHANGELOG.md b/packages/path_provider/path_provider_windows/CHANGELOG.md index a9218dea01a..beb6e41d32e 100644 --- a/packages/path_provider/path_provider_windows/CHANGELOG.md +++ b/packages/path_provider/path_provider_windows/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.1.6 * Adds compatibility with `win32` 4.x. diff --git a/packages/path_provider/path_provider_windows/example/pubspec.yaml b/packages/path_provider/path_provider_windows/example/pubspec.yaml index c774bbb2019..5639d5c6fe4 100644 --- a/packages/path_provider/path_provider_windows/example/pubspec.yaml +++ b/packages/path_provider/path_provider_windows/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the path_provider plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/path_provider/path_provider_windows/pubspec.yaml b/packages/path_provider/path_provider_windows/pubspec.yaml index 132612c161e..45f178846ee 100644 --- a/packages/path_provider/path_provider_windows/pubspec.yaml +++ b/packages/path_provider/path_provider_windows/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.1.6 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/pointer_interceptor/CHANGELOG.md b/packages/pointer_interceptor/CHANGELOG.md index 368fd6d6cac..a9a8b55f1d0 100644 --- a/packages/pointer_interceptor/CHANGELOG.md +++ b/packages/pointer_interceptor/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 0.9.3+4 diff --git a/packages/pointer_interceptor/example/pubspec.yaml b/packages/pointer_interceptor/example/pubspec.yaml index bfbd24228d1..3a76753e527 100644 --- a/packages/pointer_interceptor/example/pubspec.yaml +++ b/packages/pointer_interceptor/example/pubspec.yaml @@ -4,8 +4,8 @@ publish_to: 'none' version: 1.0.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/pointer_interceptor/pubspec.yaml b/packages/pointer_interceptor/pubspec.yaml index a8a451da84d..22106a80db7 100644 --- a/packages/pointer_interceptor/pubspec.yaml +++ b/packages/pointer_interceptor/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.9.3+4 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/quick_actions/quick_actions_android/CHANGELOG.md b/packages/quick_actions/quick_actions_android/CHANGELOG.md index 30344bc2fb1..7b64d19f974 100644 --- a/packages/quick_actions/quick_actions_android/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 1.0.5 * Fixes Java warnings. diff --git a/packages/quick_actions/quick_actions_android/example/pubspec.yaml b/packages/quick_actions/quick_actions_android/example/pubspec.yaml index 987df0b9caa..cffc4415d97 100644 --- a/packages/quick_actions/quick_actions_android/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the quick_actions plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/quick_actions/quick_actions_android/pubspec.yaml b/packages/quick_actions/quick_actions_android/pubspec.yaml index 0c821849874..2091c289ee4 100644 --- a/packages/quick_actions/quick_actions_android/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 1.0.5 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/quick_actions/quick_actions_ios/CHANGELOG.md b/packages/quick_actions/quick_actions_ios/CHANGELOG.md index 31bef650d7c..904db78433a 100644 --- a/packages/quick_actions/quick_actions_ios/CHANGELOG.md +++ b/packages/quick_actions/quick_actions_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 1.0.5 * Updates minimum iOS version to 11 and Flutter version to 3.3. diff --git a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml index 5f38af92df1..10fc8496137 100644 --- a/packages/quick_actions/quick_actions_ios/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_ios/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the quick_actions plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/rfw/CHANGELOG.md b/packages/rfw/CHANGELOG.md index 21e198516c5..ff381c21661 100644 --- a/packages/rfw/CHANGELOG.md +++ b/packages/rfw/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. ## 1.0.8 diff --git a/packages/rfw/example/hello/android/build.gradle b/packages/rfw/example/hello/android/build.gradle index ff27ef813e9..586557f0afc 100644 --- a/packages/rfw/example/hello/android/build.gradle +++ b/packages/rfw/example/hello/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.0' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/rfw/example/hello/pubspec.yaml b/packages/rfw/example/hello/pubspec.yaml index aac9a311ff3..6d720d2468a 100644 --- a/packages/rfw/example/hello/pubspec.yaml +++ b/packages/rfw/example/hello/pubspec.yaml @@ -4,8 +4,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/rfw/example/local/android/build.gradle b/packages/rfw/example/local/android/build.gradle index ff27ef813e9..586557f0afc 100644 --- a/packages/rfw/example/local/android/build.gradle +++ b/packages/rfw/example/local/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.0' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/rfw/example/local/pubspec.yaml b/packages/rfw/example/local/pubspec.yaml index b81b031b329..620338a653a 100644 --- a/packages/rfw/example/local/pubspec.yaml +++ b/packages/rfw/example/local/pubspec.yaml @@ -4,8 +4,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/rfw/example/remote/android/build.gradle b/packages/rfw/example/remote/android/build.gradle index ff27ef813e9..586557f0afc 100644 --- a/packages/rfw/example/remote/android/build.gradle +++ b/packages/rfw/example/remote/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.0' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/rfw/example/remote/pubspec.yaml b/packages/rfw/example/remote/pubspec.yaml index cb2c4bdf945..0b744cc987a 100644 --- a/packages/rfw/example/remote/pubspec.yaml +++ b/packages/rfw/example/remote/pubspec.yaml @@ -4,8 +4,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/rfw/example/wasm/pubspec.yaml b/packages/rfw/example/wasm/pubspec.yaml index e72fcfd2689..84fa83b971f 100644 --- a/packages/rfw/example/wasm/pubspec.yaml +++ b/packages/rfw/example/wasm/pubspec.yaml @@ -4,8 +4,8 @@ publish_to: none # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/rfw/pubspec.yaml b/packages/rfw/pubspec.yaml index 47cbe113fac..c3468405d58 100644 --- a/packages/rfw/pubspec.yaml +++ b/packages/rfw/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 1.0.8 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/rfw/test_coverage/pubspec.yaml b/packages/rfw/test_coverage/pubspec.yaml index 908290b5024..a604b39f43a 100644 --- a/packages/rfw/test_coverage/pubspec.yaml +++ b/packages/rfw/test_coverage/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: lcov_parser: 0.1.1 diff --git a/packages/shared_preferences/shared_preferences/CHANGELOG.md b/packages/shared_preferences/shared_preferences/CHANGELOG.md index 1788a085c87..349e8bc17f4 100644 --- a/packages/shared_preferences/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.1.1 * Updates iOS minimum version in README. diff --git a/packages/shared_preferences/shared_preferences/example/android/build.gradle b/packages/shared_preferences/shared_preferences/example/android/build.gradle index 4b30292ebe1..ce647a433bd 100644 --- a/packages/shared_preferences/shared_preferences/example/android/build.gradle +++ b/packages/shared_preferences/shared_preferences/example/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.21' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/shared_preferences/shared_preferences/example/linux/flutter/CMakeLists.txt b/packages/shared_preferences/shared_preferences/example/linux/flutter/CMakeLists.txt index 4f48a7ced5f..94f43ff7fa6 100644 --- a/packages/shared_preferences/shared_preferences/example/linux/flutter/CMakeLists.txt +++ b/packages/shared_preferences/shared_preferences/example/linux/flutter/CMakeLists.txt @@ -24,7 +24,6 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) -pkg_check_modules(BLKID REQUIRED IMPORTED_TARGET blkid) set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") @@ -66,7 +65,6 @@ target_link_libraries(flutter INTERFACE PkgConfig::GTK PkgConfig::GLIB PkgConfig::GIO - PkgConfig::BLKID ) add_dependencies(flutter flutter_assemble) diff --git a/packages/shared_preferences/shared_preferences/example/pubspec.yaml b/packages/shared_preferences/shared_preferences/example/pubspec.yaml index a421ca0cf4b..7523d8201e9 100644 --- a/packages/shared_preferences/shared_preferences/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the shared_preferences plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/shared_preferences/shared_preferences/pubspec.yaml b/packages/shared_preferences/shared_preferences/pubspec.yaml index dc54483d942..02335fe2e7a 100644 --- a/packages/shared_preferences/shared_preferences/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences/pubspec.yaml @@ -6,8 +6,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.1.1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index e901898e942..e5dd9bcd5c3 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 minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.1.4 * Fixes compatibility with AGP versions older than 4.2. diff --git a/packages/shared_preferences/shared_preferences_android/example/android/build.gradle b/packages/shared_preferences/shared_preferences_android/example/android/build.gradle index c11ef06c4e3..f6f6475fb39 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/build.gradle +++ b/packages/shared_preferences/shared_preferences_android/example/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.21' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() diff --git a/packages/shared_preferences/shared_preferences_android/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/example/pubspec.yaml index 663e22959a2..34453450636 100644 --- a/packages/shared_preferences/shared_preferences_android/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the shared_preferences plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index b8d240a7826..36fc4f41d84 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.1.4 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_foundation/CHANGELOG.md b/packages/shared_preferences/shared_preferences_foundation/CHANGELOG.md index 4dae3244064..0ef21a05137 100644 --- a/packages/shared_preferences/shared_preferences_foundation/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_foundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.2.2 * Updates minimum iOS version to 11. diff --git a/packages/shared_preferences/shared_preferences_foundation/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_foundation/example/pubspec.yaml index c07881a7d31..685231d222a 100644 --- a/packages/shared_preferences/shared_preferences_foundation/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_foundation/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Testbed for the shared_preferences_foundation implementation. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/shared_preferences/shared_preferences_foundation/pubspec.yaml b/packages/shared_preferences/shared_preferences_foundation/pubspec.yaml index a3798f33b1b..d2ee5cb6867 100644 --- a/packages/shared_preferences/shared_preferences_foundation/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_foundation/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.2.2 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md b/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md index 4ba0cec9781..be38e8420af 100644 --- a/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.2.0 * Adds `getAllWithPrefix` and `clearWithPrefix` methods. diff --git a/packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml index b077ea13c9c..d67cd698658 100644 --- a/packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_linux/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the shared_preferences_linux plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/shared_preferences/shared_preferences_linux/pubspec.yaml b/packages/shared_preferences/shared_preferences_linux/pubspec.yaml index ff3f6d2b92b..59ca5c4dfa6 100644 --- a/packages/shared_preferences/shared_preferences_linux/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_linux/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.2.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md b/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md index 5f29cb75b63..bf59e87f4fc 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.2.0 * Adds `getAllWithPrefix` and `clearWithPrefix` method. diff --git a/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml b/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml index 15e5e59c1c3..76164d5d249 100644 --- a/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_platform_interface/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.2.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md index b5efabce677..a446c0c721f 100644 --- a/packages/shared_preferences/shared_preferences_web/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.1.0 * Adds `getAllWithPrefix` and `clearWithPrefix` methods. diff --git a/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml index 1afeef8c310..92ace9c6d72 100644 --- a/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/example/pubspec.yaml @@ -2,8 +2,8 @@ name: shared_preferences_web_integration_tests publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/shared_preferences/shared_preferences_web/pubspec.yaml b/packages/shared_preferences/shared_preferences_web/pubspec.yaml index 5c88356b3ef..f7f7903f8ac 100644 --- a/packages/shared_preferences/shared_preferences_web/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_web/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.1.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md index caeabe4e04c..b7c64102771 100644 --- a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.2.0 * Adds `getAllWithPrefix` and `clearWithPrefix` methods. diff --git a/packages/shared_preferences/shared_preferences_windows/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_windows/example/pubspec.yaml index cadf57852ce..f0280cb4d2f 100644 --- a/packages/shared_preferences/shared_preferences_windows/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_windows/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the shared_preferences_windows plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml index ae2246b506c..03e3880b4e5 100644 --- a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.2.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/standard_message_codec/CHANGELOG.md b/packages/standard_message_codec/CHANGELOG.md index 5472fdff173..8d0035626e5 100644 --- a/packages/standard_message_codec/CHANGELOG.md +++ b/packages/standard_message_codec/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.0.1+3 * Minor README updates. diff --git a/packages/standard_message_codec/example/pubspec.yaml b/packages/standard_message_codec/example/pubspec.yaml index c8fa65531b4..1978db746f1 100644 --- a/packages/standard_message_codec/example/pubspec.yaml +++ b/packages/standard_message_codec/example/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: standard_message_codec: diff --git a/packages/standard_message_codec/pubspec.yaml b/packages/standard_message_codec/pubspec.yaml index da969f337cb..fe73da0748f 100644 --- a/packages/standard_message_codec/pubspec.yaml +++ b/packages/standard_message_codec/pubspec.yaml @@ -5,7 +5,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/standard_mess issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3Astandard_message_codec environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dev_dependencies: test: ^1.16.0 diff --git a/packages/url_launcher/url_launcher_android/CHANGELOG.md b/packages/url_launcher/url_launcher_android/CHANGELOG.md index b37a9989cc7..79c9855619f 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.33 + +* Explicitly sets if reciever for close should be exported. + ## 6.0.32 * Updates gradle, AGP and fixes some lint errors. diff --git a/packages/url_launcher/url_launcher_android/android/build.gradle b/packages/url_launcher/url_launcher_android/android/build.gradle index 3344266b6b3..9f9cfeda74c 100644 --- a/packages/url_launcher/url_launcher_android/android/build.gradle +++ b/packages/url_launcher/url_launcher_android/android/build.gradle @@ -59,9 +59,18 @@ android { } dependencies { + def core_version = "1.10.1" + + // Java language implementation + implementation "androidx.core:core:$core_version" + compileOnly 'androidx.annotation:annotation:1.2.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:5.1.1' testImplementation 'androidx.test:core:1.0.0' testImplementation 'org.robolectric:robolectric:4.4.1' + + // org.jetbrains.kotlin:kotlin-bom artifact purpose is to align kotlin stdlib and related code versions. + // See: https://youtrack.jetbrains.com/issue/KT-55297/kotlin-stdlib-should-declare-constraints-on-kotlin-stdlib-jdk8-and-kotlin-stdlib-jdk7 + implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.10")) } diff --git a/packages/url_launcher/url_launcher_android/android/src/main/java/io/flutter/plugins/urllauncher/WebViewActivity.java b/packages/url_launcher/url_launcher_android/android/src/main/java/io/flutter/plugins/urllauncher/WebViewActivity.java index 5371d3e14fe..f9e7ac4c39b 100644 --- a/packages/url_launcher/url_launcher_android/android/src/main/java/io/flutter/plugins/urllauncher/WebViewActivity.java +++ b/packages/url_launcher/url_launcher_android/android/src/main/java/io/flutter/plugins/urllauncher/WebViewActivity.java @@ -23,6 +23,7 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; +import androidx.core.content.ContextCompat; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -143,7 +144,11 @@ public void onCreate(@Nullable Bundle savedInstanceState) { webview.setWebChromeClient(new FlutterWebChromeClient()); // Register receiver that may finish this Activity. - registerReceiver(broadcastReceiver, closeIntentFilter); + ContextCompat.registerReceiver( + this.getApplication(), + broadcastReceiver, + closeIntentFilter, + ContextCompat.RECEIVER_EXPORTED); } @VisibleForTesting diff --git a/packages/url_launcher/url_launcher_android/pubspec.yaml b/packages/url_launcher/url_launcher_android/pubspec.yaml index 6f43020e3f8..87bc23a08bc 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/packages/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.32 +version: 6.0.33 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/url_launcher/url_launcher_linux/CHANGELOG.md b/packages/url_launcher/url_launcher_linux/CHANGELOG.md index 60e7b47447b..5a2beeb0a2a 100644 --- a/packages/url_launcher/url_launcher_linux/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_linux/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 3.0.5 * Sets a cmake_policy compatibility version to fix build warnings. diff --git a/packages/url_launcher/url_launcher_linux/example/pubspec.yaml b/packages/url_launcher/url_launcher_linux/example/pubspec.yaml index cb87799baeb..6dbebd9463e 100644 --- a/packages/url_launcher/url_launcher_linux/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_linux/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the url_launcher plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/url_launcher/url_launcher_linux/pubspec.yaml b/packages/url_launcher/url_launcher_linux/pubspec.yaml index cbae2775f21..1f639cc2d36 100644 --- a/packages/url_launcher/url_launcher_linux/pubspec.yaml +++ b/packages/url_launcher/url_launcher_linux/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 3.0.5 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/url_launcher/url_launcher_macos/CHANGELOG.md b/packages/url_launcher/url_launcher_macos/CHANGELOG.md index f1534e91d74..c6677b670d5 100644 --- a/packages/url_launcher/url_launcher_macos/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_macos/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 3.0.5 * Converts method channel to Pigeon. diff --git a/packages/url_launcher/url_launcher_macos/example/pubspec.yaml b/packages/url_launcher/url_launcher_macos/example/pubspec.yaml index df6a05ce97a..fb342be132b 100644 --- a/packages/url_launcher/url_launcher_macos/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_macos/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the url_launcher plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/url_launcher/url_launcher_macos/pubspec.yaml b/packages/url_launcher/url_launcher_macos/pubspec.yaml index 51b15e98fcb..1c09ae7f43b 100644 --- a/packages/url_launcher/url_launcher_macos/pubspec.yaml +++ b/packages/url_launcher/url_launcher_macos/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 3.0.5 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/url_launcher/url_launcher_windows/CHANGELOG.md b/packages/url_launcher/url_launcher_windows/CHANGELOG.md index 87da9c657a3..5f840cb547c 100644 --- a/packages/url_launcher/url_launcher_windows/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_windows/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 3.0.6 * Sets a cmake_policy compatibility version to fix build warnings. diff --git a/packages/url_launcher/url_launcher_windows/example/pubspec.yaml b/packages/url_launcher/url_launcher_windows/example/pubspec.yaml index da6b4718a0d..93dc8ece0b6 100644 --- a/packages/url_launcher/url_launcher_windows/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher_windows/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates the Windows implementation of the url_launcher plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/url_launcher/url_launcher_windows/pubspec.yaml b/packages/url_launcher/url_launcher_windows/pubspec.yaml index 217947684ce..f91d6294c7a 100644 --- a/packages/url_launcher/url_launcher_windows/pubspec.yaml +++ b/packages/url_launcher/url_launcher_windows/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 3.0.6 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 368af5b1fd5..7f24a73314a 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.6.1 * Synchronizes `VideoPlayerValue.isPlaying` with underlying video player. diff --git a/packages/video_player/video_player/example/pubspec.yaml b/packages/video_player/video_player/example/pubspec.yaml index 9fde956d618..42bd6087522 100644 --- a/packages/video_player/video_player/example/pubspec.yaml +++ b/packages/video_player/video_player/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the video_player plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 91d0a2ca8be..f33a272afe3 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -6,8 +6,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.6.1 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index c4425521fa9..a54aef55877 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,3 +1,11 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + +## 2.4.6 + +* Fixes hang when seeking to end of video. + ## 2.4.5 * Updates functions without a prototype to avoid deprecation warning. 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 ae3cd7e3ea8..d8a73b09d24 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 @@ -71,13 +71,27 @@ void main() { expect(await controller.position, greaterThan(Duration.zero)); }); - testWidgets('can seek', (WidgetTester tester) async { - await controller.initialize(); + testWidgets( + 'can seek', + (WidgetTester tester) async { + 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(controller.value.position, const Duration(seconds: 3)); + }, + ); + + testWidgets( + 'can seek to end', + (WidgetTester tester) async { + await controller.initialize(); + + await controller.seekTo(controller.value.duration); + + expect(controller.value.duration, controller.value.position); + }, + ); testWidgets('can be paused', (WidgetTester tester) async { await controller.initialize(); 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 1ec18e762ae..a9d7eac073d 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 @@ -8,6 +8,7 @@ #import #import +#import @interface FLTVideoPlayer : NSObject @property(readonly, nonatomic) AVPlayer *player; @@ -61,6 +62,46 @@ - (CGAffineTransform)preferredTransform { @interface VideoPlayerTests : XCTestCase @end +@interface StubAVPlayer : AVPlayer +@property(readonly, nonatomic) NSNumber *beforeTolerance; +@property(readonly, nonatomic) NSNumber *afterTolerance; +@end + +@implementation StubAVPlayer + +- (void)seekToTime:(CMTime)time + toleranceBefore:(CMTime)toleranceBefore + toleranceAfter:(CMTime)toleranceAfter + completionHandler:(void (^)(BOOL finished))completionHandler { + _beforeTolerance = [NSNumber numberWithLong:toleranceBefore.value]; + _afterTolerance = [NSNumber numberWithLong:toleranceAfter.value]; + completionHandler(YES); +} + +@end + +@interface StubFVPPlayerFactory : NSObject + +@property(nonatomic, strong) StubAVPlayer *stubAVPlayer; + +- (instancetype)initWithPlayer:(StubAVPlayer *)stubAVPlayer; + +@end + +@implementation StubFVPPlayerFactory + +- (instancetype)initWithPlayer:(StubAVPlayer *)stubAVPlayer { + self = [super init]; + _stubAVPlayer = stubAVPlayer; + return self; +} + +- (AVPlayer *)playerWithPlayerItem:(AVPlayerItem *)playerItem { + return _stubAVPlayer; +} + +@end + @implementation VideoPlayerTests - (void)testBlankVideoBugWithEncryptedVideoStreamAndInvertedAspectRatioBugForSomeVideoStream { @@ -226,6 +267,81 @@ - (void)testTransformFix { [self validateTransformFixForOrientation:UIImageOrientationRightMirrored]; } +- (void)testSeekToleranceWhenNotSeekingToEnd { + NSObject *registry = + (NSObject *)[[UIApplication sharedApplication] delegate]; + NSObject *registrar = [registry registrarForPlugin:@"TestSeekTolerance"]; + + StubAVPlayer *stubAVPlayer = [[StubAVPlayer alloc] init]; + StubFVPPlayerFactory *stubFVPPlayerFactory = + [[StubFVPPlayerFactory alloc] initWithPlayer:stubAVPlayer]; + FLTVideoPlayerPlugin *pluginWithMockAVPlayer = + [[FLTVideoPlayerPlugin alloc] initWithPlayerFactory:stubFVPPlayerFactory registrar:registrar]; + + FlutterError *error; + [pluginWithMockAVPlayer 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 = [pluginWithMockAVPlayer create:create error:&error]; + NSNumber *textureId = textureMessage.textureId; + + XCTestExpectation *initializedExpectation = + [self expectationWithDescription:@"seekTo has zero tolerance when seeking not to end"]; + FLTPositionMessage *message = [FLTPositionMessage makeWithTextureId:textureId position:@1234]; + [pluginWithMockAVPlayer seekTo:message + completion:^(FlutterError *_Nullable error) { + [initializedExpectation fulfill]; + }]; + + [self waitForExpectationsWithTimeout:30.0 handler:nil]; + XCTAssertEqual([stubAVPlayer.beforeTolerance intValue], 0); + XCTAssertEqual([stubAVPlayer.afterTolerance intValue], 0); +} + +- (void)testSeekToleranceWhenSeekingToEnd { + NSObject *registry = + (NSObject *)[[UIApplication sharedApplication] delegate]; + NSObject *registrar = + [registry registrarForPlugin:@"TestSeekToEndTolerance"]; + + StubAVPlayer *stubAVPlayer = [[StubAVPlayer alloc] init]; + StubFVPPlayerFactory *stubFVPPlayerFactory = + [[StubFVPPlayerFactory alloc] initWithPlayer:stubAVPlayer]; + FLTVideoPlayerPlugin *pluginWithMockAVPlayer = + [[FLTVideoPlayerPlugin alloc] initWithPlayerFactory:stubFVPPlayerFactory registrar:registrar]; + + FlutterError *error; + [pluginWithMockAVPlayer 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 = [pluginWithMockAVPlayer create:create error:&error]; + NSNumber *textureId = textureMessage.textureId; + + XCTestExpectation *initializedExpectation = + [self expectationWithDescription:@"seekTo has non-zero tolerance when seeking to end"]; + // The duration of this video is "0" due to the non standard initiliatazion process. + FLTPositionMessage *message = [FLTPositionMessage makeWithTextureId:textureId position:@0]; + [pluginWithMockAVPlayer seekTo:message + completion:^(FlutterError *_Nullable error) { + [initializedExpectation fulfill]; + }]; + [self waitForExpectationsWithTimeout:30.0 handler:nil]; + XCTAssertGreaterThan([stubAVPlayer.beforeTolerance intValue], 0); + XCTAssertGreaterThan([stubAVPlayer.afterTolerance intValue], 0); +} + - (NSDictionary *)testPlugin:(FLTVideoPlayerPlugin *)videoPlayerPlugin uri:(NSString *)uri { FlutterError *error; diff --git a/packages/video_player/video_player_avfoundation/example/pubspec.yaml b/packages/video_player/video_player_avfoundation/example/pubspec.yaml index bffa17d11e1..e77e39a3c6a 100644 --- a/packages/video_player/video_player_avfoundation/example/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the video_player plugin. publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: 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 6c39cb9a4a7..ccece112769 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -3,6 +3,7 @@ // found in the LICENSE file. #import "FLTVideoPlayerPlugin.h" +#import "FLTVideoPlayerPlugin_Test.h" #import #import @@ -33,6 +34,16 @@ - (void)onDisplayLink:(CADisplayLink *)link { } @end +@interface FVPDefaultPlayerFactory : NSObject +@end + +@implementation FVPDefaultPlayerFactory +- (AVPlayer *)playerWithPlayerItem:(AVPlayerItem *)playerItem { + return [AVPlayer playerWithPlayerItem:playerItem]; +} + +@end + @interface FLTVideoPlayer : NSObject @property(readonly, nonatomic) AVPlayer *player; @property(readonly, nonatomic) AVPlayerItemVideoOutput *videoOutput; @@ -52,7 +63,8 @@ @interface FLTVideoPlayer : NSObject @property(nonatomic, readonly) BOOL isInitialized; - (instancetype)initWithURL:(NSURL *)url frameUpdater:(FLTFrameUpdater *)frameUpdater - httpHeaders:(nonnull NSDictionary *)headers; + httpHeaders:(nonnull NSDictionary *)headers + playerFactory:(id)playerFactory; @end static void *timeRangeContext = &timeRangeContext; @@ -65,9 +77,14 @@ - (instancetype)initWithURL:(NSURL *)url static void *rateContext = &rateContext; @implementation FLTVideoPlayer -- (instancetype)initWithAsset:(NSString *)asset frameUpdater:(FLTFrameUpdater *)frameUpdater { +- (instancetype)initWithAsset:(NSString *)asset + frameUpdater:(FLTFrameUpdater *)frameUpdater + playerFactory:(id)playerFactory { NSString *path = [[NSBundle mainBundle] pathForResource:asset ofType:nil]; - return [self initWithURL:[NSURL fileURLWithPath:path] frameUpdater:frameUpdater httpHeaders:@{}]; + return [self initWithURL:[NSURL fileURLWithPath:path] + frameUpdater:frameUpdater + httpHeaders:@{} + playerFactory:playerFactory]; } - (void)addObserversForItem:(AVPlayerItem *)item player:(AVPlayer *)player { @@ -203,18 +220,20 @@ - (void)createVideoOutputAndDisplayLink:(FLTFrameUpdater *)frameUpdater { - (instancetype)initWithURL:(NSURL *)url frameUpdater:(FLTFrameUpdater *)frameUpdater - httpHeaders:(nonnull NSDictionary *)headers { + httpHeaders:(nonnull NSDictionary *)headers + playerFactory:(id)playerFactory { NSDictionary *options = nil; if ([headers count] != 0) { options = @{@"AVURLAssetHTTPHeaderFieldsKey" : headers}; } AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:url options:options]; AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:urlAsset]; - return [self initWithPlayerItem:item frameUpdater:frameUpdater]; + return [self initWithPlayerItem:item frameUpdater:frameUpdater playerFactory:playerFactory]; } - (instancetype)initWithPlayerItem:(AVPlayerItem *)item - frameUpdater:(FLTFrameUpdater *)frameUpdater { + frameUpdater:(FLTFrameUpdater *)frameUpdater + playerFactory:(id)playerFactory { self = [super init]; NSAssert(self, @"super init cannot be nil"); @@ -247,7 +266,7 @@ - (instancetype)initWithPlayerItem:(AVPlayerItem *)item } }; - _player = [AVPlayer playerWithPlayerItem:item]; + _player = [playerFactory playerWithPlayerItem:item]; _player.actionAtItemEnd = AVPlayerActionAtItemEndNone; // This is to fix 2 bugs: 1. blank video for encrypted video streams on iOS 16 @@ -420,9 +439,15 @@ - (int64_t)duration { } - (void)seekTo:(int)location completionHandler:(void (^)(BOOL))completionHandler { - [_player seekToTime:CMTimeMake(location, 1000) - toleranceBefore:kCMTimeZero - toleranceAfter:kCMTimeZero + CMTime locationCMT = CMTimeMake(location, 1000); + CMTimeValue duration = _player.currentItem.asset.duration.value; + // Without adding tolerance when seeking to duration, + // seekToTime will never complete, and this call will hang. + // see issue https://github.com/flutter/flutter/issues/124475. + CMTime tolerance = location == duration ? CMTimeMake(1, 1000) : kCMTimeZero; + [_player seekToTime:locationCMT + toleranceBefore:tolerance + toleranceAfter:tolerance completionHandler:completionHandler]; } @@ -523,6 +548,7 @@ @interface FLTVideoPlayerPlugin () @property(readonly, strong, nonatomic) NSMutableDictionary *playersByTextureId; @property(readonly, strong, nonatomic) NSObject *registrar; +@property(nonatomic, strong) id playerFactory; @end @implementation FLTVideoPlayerPlugin @@ -533,11 +559,17 @@ + (void)registerWithRegistrar:(NSObject *)registrar { } - (instancetype)initWithRegistrar:(NSObject *)registrar { + return [self initWithPlayerFactory:[[FVPDefaultPlayerFactory alloc] init] registrar:registrar]; +} + +- (instancetype)initWithPlayerFactory:(id)playerFactory + registrar:(NSObject *)registrar { self = [super init]; NSAssert(self, @"super init cannot be nil"); _registry = [registrar textures]; _messenger = [registrar messenger]; _registrar = registrar; + _playerFactory = playerFactory; _playersByTextureId = [NSMutableDictionary dictionaryWithCapacity:1]; return self; } @@ -588,12 +620,15 @@ - (FLTTextureMessage *)create:(FLTCreateMessage *)input error:(FlutterError **)e } else { assetPath = [_registrar lookupKeyForAsset:input.asset]; } - player = [[FLTVideoPlayer alloc] initWithAsset:assetPath frameUpdater:frameUpdater]; + player = [[FLTVideoPlayer alloc] initWithAsset:assetPath + frameUpdater:frameUpdater + playerFactory:_playerFactory]; return [self onPlayerSetup:player frameUpdater:frameUpdater]; } else if (input.uri) { player = [[FLTVideoPlayer alloc] initWithURL:[NSURL URLWithString:input.uri] frameUpdater:frameUpdater - httpHeaders:input.httpHeaders]; + httpHeaders:input.httpHeaders + playerFactory:_playerFactory]; return [self onPlayerSetup:player frameUpdater:frameUpdater]; } else { *error = [FlutterError errorWithCode:@"video_player" message:@"not implemented" details:nil]; diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin_Test.h b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin_Test.h new file mode 100644 index 00000000000..4c52ba00f96 --- /dev/null +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin_Test.h @@ -0,0 +1,18 @@ +// 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 "FLTVideoPlayerPlugin.h" + +#import + +// Protocol for an AVPlayer instance factory. Used for injecting players in tests. +@protocol FVPPlayerFactory +- (AVPlayer *)playerWithPlayerItem:(AVPlayerItem *)playerItem; +@end + +@interface FLTVideoPlayerPlugin () + +- (instancetype)initWithPlayerFactory:(id)playerFactory + registrar:(NSObject *)registrar; +@end diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index 53bbe63fce3..093f5ebbb51 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/packages/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.4.5 +version: 2.4.6 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/video_player/video_player_platform_interface/CHANGELOG.md b/packages/video_player/video_player_platform_interface/CHANGELOG.md index 55b3f5cffde..f75c5a10f94 100644 --- a/packages/video_player/video_player_platform_interface/CHANGELOG.md +++ b/packages/video_player/video_player_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 6.1.0 * Aligns Dart and Flutter SDK constraints. diff --git a/packages/video_player/video_player_platform_interface/pubspec.yaml b/packages/video_player/video_player_platform_interface/pubspec.yaml index 82bbdf78251..f266f6eaded 100644 --- a/packages/video_player/video_player_platform_interface/pubspec.yaml +++ b/packages/video_player/video_player_platform_interface/pubspec.yaml @@ -7,8 +7,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 6.1.0 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/video_player/video_player_web/CHANGELOG.md b/packages/video_player/video_player_web/CHANGELOG.md index 19f5bb927f2..1bb8b187f89 100644 --- a/packages/video_player/video_player_web/CHANGELOG.md +++ b/packages/video_player/video_player_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 2.0.16 * Synchronizes `VideoPlayerValue.isPlaying` with `VideoElement`. diff --git a/packages/video_player/video_player_web/example/pubspec.yaml b/packages/video_player/video_player_web/example/pubspec.yaml index 4cb1d4d7fa2..eb29488a243 100644 --- a/packages/video_player/video_player_web/example/pubspec.yaml +++ b/packages/video_player/video_player_web/example/pubspec.yaml @@ -2,8 +2,8 @@ name: video_player_for_web_integration_tests publish_to: none environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/video_player/video_player_web/pubspec.yaml b/packages/video_player/video_player_web/pubspec.yaml index 70434ef882d..d1a5eb61e8b 100644 --- a/packages/video_player/video_player_web/pubspec.yaml +++ b/packages/video_player/video_player_web/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 2.0.16 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" flutter: plugin: diff --git a/packages/web_benchmarks/CHANGELOG.md b/packages/web_benchmarks/CHANGELOG.md index dff0d5a66fc..9fba3a540a9 100644 --- a/packages/web_benchmarks/CHANGELOG.md +++ b/packages/web_benchmarks/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 0.1.0+3 * Migrates from SingletonFlutterWindow to PlatformDispatcher API. diff --git a/packages/web_benchmarks/pubspec.yaml b/packages/web_benchmarks/pubspec.yaml index a95f7dafdfc..3bc83242062 100644 --- a/packages/web_benchmarks/pubspec.yaml +++ b/packages/web_benchmarks/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.1.0+3 environment: - sdk: ">=2.17.0 <4.0.0" - flutter: ">=3.0.0" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: diff --git a/packages/web_benchmarks/testing/test_app/pubspec.yaml b/packages/web_benchmarks/testing/test_app/pubspec.yaml index d3b36783be1..da96462e3cb 100644 --- a/packages/web_benchmarks/testing/test_app/pubspec.yaml +++ b/packages/web_benchmarks/testing/test_app/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" dependencies: cupertino_icons: ^1.0.5 diff --git a/packages/xdg_directories/CHANGELOG.md b/packages/xdg_directories/CHANGELOG.md index 638e74763dc..5c63413ed55 100644 --- a/packages/xdg_directories/CHANGELOG.md +++ b/packages/xdg_directories/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. + ## 1.0.0 * Updates version to 1.0 to reflect the level of API stability. diff --git a/packages/xdg_directories/pubspec.yaml b/packages/xdg_directories/pubspec.yaml index fa2d3de4316..edf6517739f 100644 --- a/packages/xdg_directories/pubspec.yaml +++ b/packages/xdg_directories/pubspec.yaml @@ -5,7 +5,7 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 1.0.0 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" platforms: linux: diff --git a/script/configs/allowed_unpinned_deps.yaml b/script/configs/allowed_unpinned_deps.yaml index 7598a99afed..1cf35c8881e 100644 --- a/script/configs/allowed_unpinned_deps.yaml +++ b/script/configs/allowed_unpinned_deps.yaml @@ -41,6 +41,7 @@ - html - http - intl +- io - js - json_serializable - lints diff --git a/script/tool/lib/src/common/core.dart b/script/tool/lib/src/common/core.dart index 3f30d606dcb..020dd74667d 100644 --- a/script/tool/lib/src/common/core.dart +++ b/script/tool/lib/src/common/core.dart @@ -45,6 +45,7 @@ final Map _dartSdkForFlutterSdk = { Version(3, 0, 5): Version(2, 17, 6), Version(3, 3, 0): Version(2, 18, 0), Version(3, 7, 0): Version(2, 19, 0), + Version(3, 10, 0): Version(3, 0, 0), }; /// Returns the version of the Dart SDK that shipped with the given Flutter diff --git a/script/tool/lib/src/common/gradle.dart b/script/tool/lib/src/common/gradle.dart index 74653607501..8dea4836f17 100644 --- a/script/tool/lib/src/common/gradle.dart +++ b/script/tool/lib/src/common/gradle.dart @@ -44,12 +44,13 @@ class GradleProject { /// Runs a `gradlew` command with the given parameters. Future runCommand( - String target, { + String task, { + List additionalTasks = const [], List arguments = const [], }) { return processRunner.runAndStream( gradleWrapper.path, - [target, ...arguments], + [task, ...additionalTasks, ...arguments], workingDir: androidDirectory, ); } diff --git a/script/tool/lib/src/gradle_check_command.dart b/script/tool/lib/src/gradle_check_command.dart index 09a9d7a55f2..53da6405beb 100644 --- a/script/tool/lib/src/gradle_check_command.dart +++ b/script/tool/lib/src/gradle_check_command.dart @@ -3,12 +3,18 @@ // found in the LICENSE file. import 'package:file/file.dart'; +import 'package:meta/meta.dart'; +import 'package:pub_semver/pub_semver.dart'; import 'common/core.dart'; import 'common/package_looping_command.dart'; import 'common/plugin_utils.dart'; import 'common/repository_package.dart'; +/// The lowest `ext.kotlin_version` that example apps are allowed to use. +@visibleForTesting +final Version minKotlinVersion = Version(1, 7, 10); + /// A command to enforce gradle file conventions and best practices. class GradleCheckCommand extends PackageLoopingCommand { /// Creates an instance of the gradle check command. @@ -125,6 +131,9 @@ class GradleCheckCommand extends PackageLoopingCommand { if (!_validateJavacLintConfig(package, lines)) { succeeded = false; } + if (!_validateKotlinVersion(package, lines)) { + succeeded = false; + } return succeeded; } @@ -347,4 +356,26 @@ gradle.projectsEvaluated { } return true; } + + /// Validates whether the given [example] has its Kotlin version set to at + /// least a minimum value, if it is set at all. + bool _validateKotlinVersion( + RepositoryPackage example, List gradleLines) { + final RegExp kotlinVersionRegex = + RegExp(r"ext\.kotlin_version\s*=\s*'([\d.]+)'"); + RegExpMatch? match; + if (gradleLines.any((String line) { + match = kotlinVersionRegex.firstMatch(line); + return match != null; + })) { + final Version version = Version.parse(match!.group(1)!); + if (version < minKotlinVersion) { + printError('build.gradle sets "ext.kotlin_version" to "$version". The ' + 'minimum Kotlin version that can be specified is ' + '$minKotlinVersion, for compatibility with modern dependencies.'); + return false; + } + } + return true; + } } diff --git a/script/tool/lib/src/native_test_command.dart b/script/tool/lib/src/native_test_command.dart index f9967ca0523..f6eb3c164e2 100644 --- a/script/tool/lib/src/native_test_command.dart +++ b/script/tool/lib/src/native_test_command.dart @@ -268,6 +268,7 @@ this command. } final Iterable examples = plugin.getExamples(); + final String pluginName = plugin.directory.basename; bool ranUnitTests = false; bool ranAnyTests = false; @@ -317,7 +318,15 @@ this command. if (runUnitTests) { print('Running unit tests...'); - final int exitCode = await project.runCommand('testDebugUnitTest'); + const String taskName = 'testDebugUnitTest'; + // Target the unit tests in the app and plugin specifically, to avoid + // transitively running tests in dependencies. If unit tests have + // already run in an earlier example, only run any app-level unit tests. + final List pluginTestTask = [ + if (!ranUnitTests) '$pluginName:$taskName' + ]; + final int exitCode = await project.runCommand('app:$taskName', + additionalTasks: pluginTestTask); if (exitCode != 0) { printError('$exampleName unit tests failed.'); failed = true; diff --git a/script/tool/lib/src/publish_command.dart b/script/tool/lib/src/publish_command.dart index e7b3d110c5f..eb042fb6faa 100644 --- a/script/tool/lib/src/publish_command.dart +++ b/script/tool/lib/src/publish_command.dart @@ -99,6 +99,11 @@ class PublishCommand extends PackageLoopingCommand { // `flutter_plugin_tools-v0.0.24`. static const String _tagFormat = '%PACKAGE%-v%VERSION%'; + /// Returns the correct path where the pub credential is stored. + @visibleForTesting + late final String credentialsPath = + _getCredentialsPath(platform: platform, path: path); + @override final String name = 'publish'; @@ -397,13 +402,12 @@ Safe to ignore if the package is deleted in this commit. } void _ensureValidPubCredential() { - final String credentialsPath = _credentialsPath; final File credentialFile = packagesDir.fileSystem.file(credentialsPath); if (credentialFile.existsSync() && credentialFile.readAsStringSync().isNotEmpty) { return; } - final String? credential = io.Platform.environment[_pubCredentialName]; + final String? credential = platform.environment[_pubCredentialName]; if (credential == null) { printError(''' No pub credential available. Please check if `$credentialsPath` is valid. @@ -411,46 +415,51 @@ If running this command on CI, you can set the pub credential content in the $_p '''); throw ToolExit(1); } + credentialFile.createSync(recursive: true); credentialFile.openSync(mode: FileMode.writeOnlyAppend) ..writeStringSync(credential) ..closeSync(); } - - /// Returns the correct path where the pub credential is stored. - @visibleForTesting - static String getCredentialPath() { - return _credentialsPath; - } } /// The path in which pub expects to find its credentials file. -final String _credentialsPath = () { - // This follows the same logic as pub: - // https://github.com/dart-lang/pub/blob/d99b0d58f4059d7bb4ac4616fd3d54ec00a2b5d4/lib/src/system_cache.dart#L34-L43 - String? cacheDir; - final String? pubCache = io.Platform.environment['PUB_CACHE']; - if (pubCache != null) { - cacheDir = pubCache; - } else if (io.Platform.isWindows) { - final String? appData = io.Platform.environment['APPDATA']; +String _getCredentialsPath( + {required Platform platform, required p.Context path}) { + // See https://github.com/dart-lang/pub/blob/master/doc/cache_layout.md#layout + String? configDir; + if (platform.isLinux) { + String? configHome = platform.environment['XDG_CONFIG_HOME']; + if (configHome == null) { + final String? home = platform.environment['HOME']; + if (home == null) { + printError('"HOME" environment variable is not set.'); + } else { + configHome = path.join(home, '.config'); + } + } + if (configHome != null) { + configDir = path.join(configHome, 'dart'); + } + } else if (platform.isWindows) { + final String? appData = platform.environment['APPDATA']; if (appData == null) { printError('"APPDATA" environment variable is not set.'); } else { - cacheDir = p.join(appData, 'Pub', 'Cache'); + configDir = path.join(appData, 'dart'); } - } else { - final String? home = io.Platform.environment['HOME']; + } else if (platform.isMacOS) { + final String? home = platform.environment['HOME']; if (home == null) { printError('"HOME" environment variable is not set.'); } else { - cacheDir = p.join(home, '.pub-cache'); + configDir = path.join(home, 'Library', 'Application Support', 'dart'); } } - if (cacheDir == null) { - printError('Unable to determine pub cache location'); + if (configDir == null) { + printError('Unable to determine pub con location'); throw ToolExit(1); } - return p.join(cacheDir, 'credentials.json'); -}(); + return path.join(configDir, 'pub-credentials.json'); +} diff --git a/script/tool/test/gradle_check_command_test.dart b/script/tool/test/gradle_check_command_test.dart index 68581c7a639..28603d25cd1 100644 --- a/script/tool/test/gradle_check_command_test.dart +++ b/script/tool/test/gradle_check_command_test.dart @@ -123,6 +123,7 @@ dependencies { RepositoryPackage package, { required String pluginName, required bool warningsConfigured, + String? kotlinVersion, }) { final File buildGradle = package .platformDirectory(FlutterPlatform.android) @@ -140,6 +141,7 @@ gradle.projectsEvaluated { '''; buildGradle.writeAsStringSync(''' buildscript { + ${kotlinVersion == null ? '' : "ext.kotlin_version = '$kotlinVersion'"} repositories { google() mavenCentral() @@ -228,9 +230,12 @@ dependencies { bool includeNamespace = true, bool commentNamespace = false, bool warningsConfigured = true, + String? kotlinVersion, }) { writeFakeExampleTopLevelBuildGradle(package, - pluginName: pluginName, warningsConfigured: warningsConfigured); + pluginName: pluginName, + warningsConfigured: warningsConfigured, + kotlinVersion: kotlinVersion); writeFakeExampleAppBuildGradle(package, includeNamespace: includeNamespace, commentNamespace: commentNamespace); } @@ -644,4 +649,99 @@ dependencies { ], )); }); + + group('Kotlin version check', () { + test('passes if not set', () async { + const String packageName = 'a_package'; + final RepositoryPackage package = + createFakePackage('a_package', packagesDir); + writeFakePluginBuildGradle(package, includeLanguageVersion: true); + writeFakeManifest(package); + final RepositoryPackage example = package.getExamples().first; + writeFakeExampleBuildGradles(example, pluginName: packageName); + writeFakeManifest(example, isApp: true); + + final List output = + await runCapturingPrint(runner, ['gradle-check']); + + expect( + output, + containsAllInOrder([ + contains('Validating android/build.gradle'), + ]), + ); + }); + + test('passes if at the minimum allowed version', () async { + const String packageName = 'a_package'; + final RepositoryPackage package = + createFakePackage('a_package', packagesDir); + writeFakePluginBuildGradle(package, includeLanguageVersion: true); + writeFakeManifest(package); + final RepositoryPackage example = package.getExamples().first; + writeFakeExampleBuildGradles(example, + pluginName: packageName, kotlinVersion: minKotlinVersion.toString()); + writeFakeManifest(example, isApp: true); + + final List output = + await runCapturingPrint(runner, ['gradle-check']); + + expect( + output, + containsAllInOrder([ + contains('Validating android/build.gradle'), + ]), + ); + }); + + test('passes if above the minimum allowed version', () async { + const String packageName = 'a_package'; + final RepositoryPackage package = + createFakePackage('a_package', packagesDir); + writeFakePluginBuildGradle(package, includeLanguageVersion: true); + writeFakeManifest(package); + final RepositoryPackage example = package.getExamples().first; + writeFakeExampleBuildGradles(example, + pluginName: packageName, kotlinVersion: '99.99.0'); + writeFakeManifest(example, isApp: true); + + final List output = + await runCapturingPrint(runner, ['gradle-check']); + + expect( + output, + containsAllInOrder([ + contains('Validating android/build.gradle'), + ]), + ); + }); + + test('fails if below the minimum allowed version', () async { + const String packageName = 'a_package'; + final RepositoryPackage package = + createFakePackage('a_package', packagesDir); + writeFakePluginBuildGradle(package, includeLanguageVersion: true); + writeFakeManifest(package); + final RepositoryPackage example = package.getExamples().first; + writeFakeExampleBuildGradles(example, + pluginName: packageName, kotlinVersion: '1.6.21'); + writeFakeManifest(example, isApp: true); + + Error? commandError; + final List output = await runCapturingPrint( + runner, ['gradle-check'], errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder([ + contains('build.gradle sets "ext.kotlin_version" to "1.6.21". The ' + 'minimum Kotlin version that can be specified is ' + '$minKotlinVersion, for compatibility with modern dependencies.'), + ]), + ); + }); + }); } diff --git a/script/tool/test/native_test_command_test.dart b/script/tool/test/native_test_command_test.dart index 3d327a0e395..b4e06b9b7e3 100644 --- a/script/tool/test/native_test_command_test.dart +++ b/script/tool/test/native_test_command_test.dart @@ -438,7 +438,10 @@ void main() { orderedEquals([ ProcessCall( androidFolder.childFile('gradlew').path, - const ['testDebugUnitTest'], + const [ + 'app:testDebugUnitTest', + 'plugin:testDebugUnitTest', + ], androidFolder.path, ), ]), @@ -470,13 +473,62 @@ void main() { orderedEquals([ ProcessCall( androidFolder.childFile('gradlew').path, - const ['testDebugUnitTest'], + const [ + 'app:testDebugUnitTest', + 'plugin:testDebugUnitTest', + ], androidFolder.path, ), ]), ); }); + test('only runs plugin-level unit tests once', () async { + final RepositoryPackage plugin = createFakePlugin( + 'plugin', + packagesDir, + platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.inline) + }, + examples: ['example1', 'example2'], + extraFiles: [ + 'example/example1/android/gradlew', + 'example/example1/android/app/src/test/example_test.java', + 'example/example2/android/gradlew', + 'example/example2/android/app/src/test/example_test.java', + ], + ); + + await runCapturingPrint(runner, ['native-test', '--android']); + + final List examples = plugin.getExamples().toList(); + final Directory androidFolder1 = + examples[0].platformDirectory(FlutterPlatform.android); + final Directory androidFolder2 = + examples[1].platformDirectory(FlutterPlatform.android); + + expect( + processRunner.recordedCalls, + orderedEquals([ + ProcessCall( + androidFolder1.childFile('gradlew').path, + const [ + 'app:testDebugUnitTest', + 'plugin:testDebugUnitTest', + ], + androidFolder1.path, + ), + ProcessCall( + androidFolder2.childFile('gradlew').path, + const [ + 'app:testDebugUnitTest', + ], + androidFolder2.path, + ), + ]), + ); + }); + test('runs Java integration tests', () async { final RepositoryPackage plugin = createFakePlugin( 'plugin', @@ -629,7 +681,10 @@ public class FlutterActivityTest { orderedEquals([ ProcessCall( androidFolder.childFile('gradlew').path, - const ['testDebugUnitTest'], + const [ + 'app:testDebugUnitTest', + 'plugin:testDebugUnitTest', + ], androidFolder.path, ), ProcessCall( @@ -708,7 +763,10 @@ public class FlutterActivityTest { orderedEquals([ ProcessCall( androidFolder.childFile('gradlew').path, - const ['testDebugUnitTest'], + const [ + 'app:testDebugUnitTest', + 'plugin:testDebugUnitTest', + ], androidFolder.path, ), ]), @@ -854,7 +912,7 @@ public class FlutterActivityTest { processRunner.mockProcessesForExecutable[gradlewPath] = [ FakeProcessInfo( - MockProcess(), ['testDebugUnitTest']), // unit passes + MockProcess(), ['app:testDebugUnitTest']), // unit passes FakeProcessInfo(MockProcess(exitCode: 1), ['app:connectedAndroidTest']), // integration fails ]; @@ -1395,8 +1453,13 @@ public class FlutterActivityTest { expect( processRunner.recordedCalls, orderedEquals([ - ProcessCall(androidFolder.childFile('gradlew').path, - const ['testDebugUnitTest'], androidFolder.path), + ProcessCall( + androidFolder.childFile('gradlew').path, + const [ + 'app:testDebugUnitTest', + 'plugin:testDebugUnitTest', + ], + androidFolder.path), getTargetCheckCall(pluginExampleDirectory, 'ios'), getRunTestCall(pluginExampleDirectory, 'ios', destination: 'foo_destination'), diff --git a/script/tool/test/publish_check_command_test.dart b/script/tool/test/publish_check_command_test.dart index f2120040fc6..b85e56064c9 100644 --- a/script/tool/test/publish_check_command_test.dart +++ b/script/tool/test/publish_check_command_test.dart @@ -283,7 +283,9 @@ void main() { 'Test for publish-check command.', ); runner.addCommand(PublishCheckCommand(packagesDir, - processRunner: processRunner, httpClient: mockClient)); + platform: mockPlatform, + processRunner: processRunner, + httpClient: mockClient)); processRunner.mockProcessesForExecutable['flutter'] = [ FakeProcessInfo(MockProcess(exitCode: 1, stdout: 'Some error from pub'), @@ -339,7 +341,9 @@ void main() { 'Test for publish-check command.', ); runner.addCommand(PublishCheckCommand(packagesDir, - processRunner: processRunner, httpClient: mockClient)); + platform: mockPlatform, + processRunner: processRunner, + httpClient: mockClient)); final List output = await runCapturingPrint(runner, ['publish-check']); diff --git a/script/tool/test/publish_command_test.dart b/script/tool/test/publish_command_test.dart index 94023032ecb..78daf4527d1 100644 --- a/script/tool/test/publish_command_test.dart +++ b/script/tool/test/publish_command_test.dart @@ -24,9 +24,11 @@ import 'util.dart'; void main() { final String flutterCommand = getFlutterCommand(const LocalPlatform()); + late MockPlatform platform; late Directory packagesDir; late MockGitDir gitDir; late TestProcessRunner processRunner; + late PublishCommand command; late CommandRunner commandRunner; late MockStdin mockStdin; late FileSystem fileSystem; @@ -34,13 +36,14 @@ void main() { late Map> mockHttpResponses; void createMockCredentialFile() { - final String credentialPath = PublishCommand.getCredentialPath(); - fileSystem.file(credentialPath) + fileSystem.file(command.credentialsPath) ..createSync(recursive: true) ..writeAsStringSync('some credential'); } setUp(() async { + platform = MockPlatform(isLinux: true); + platform.environment['HOME'] = '/home'; fileSystem = MemoryFileSystem(); packagesDir = createPackagesDirectory(fileSystem: fileSystem); processRunner = TestProcessRunner(); @@ -71,14 +74,15 @@ void main() { }); mockStdin = MockStdin(); - commandRunner = CommandRunner('tester', '') - ..addCommand(PublishCommand( - packagesDir, - processRunner: processRunner, - stdinput: mockStdin, - gitDir: gitDir, - httpClient: mockClient, - )); + command = PublishCommand( + packagesDir, + platform: platform, + processRunner: processRunner, + stdinput: mockStdin, + gitDir: gitDir, + httpClient: mockClient, + ); + commandRunner = CommandRunner('tester', '')..addCommand(command); }); group('Initial validation', () { @@ -259,6 +263,25 @@ void main() { ])); }); + test('creates credential file from envirnoment variable if necessary', + () async { + createFakePlugin('foo', packagesDir, examples: []); + const String credentials = 'some credential'; + platform.environment['PUB_CREDENTIALS'] = credentials; + + await runCapturingPrint(commandRunner, [ + 'publish', + '--packages=foo', + '--skip-confirmation', + '--pub-publish-flags', + '--server=bar' + ]); + + final File credentialFile = fileSystem.file(command.credentialsPath); + expect(credentialFile.existsSync(), true); + expect(credentialFile.readAsStringSync(), credentials); + }); + test('throws if pub publish fails', () async { createFakePlugin('foo', packagesDir, examples: []); @@ -880,6 +903,44 @@ void main() { isNot(contains('git-push'))); }); }); + + group('credential location', () { + test('Linux with XDG', () async { + platform = MockPlatform(isLinux: true); + platform.environment['XDG_CONFIG_HOME'] = '/xdghome/config'; + command = PublishCommand(packagesDir, platform: platform); + + expect( + command.credentialsPath, '/xdghome/config/dart/pub-credentials.json'); + }); + + test('Linux without XDG', () async { + platform = MockPlatform(isLinux: true); + platform.environment['HOME'] = '/home'; + command = PublishCommand(packagesDir, platform: platform); + + expect( + command.credentialsPath, '/home/.config/dart/pub-credentials.json'); + }); + + test('macOS', () async { + platform = MockPlatform(isMacOS: true); + platform.environment['HOME'] = '/Users/someuser'; + command = PublishCommand(packagesDir, platform: platform); + + expect(command.credentialsPath, + '/Users/someuser/Library/Application Support/dart/pub-credentials.json'); + }); + + test('Windows', () async { + platform = MockPlatform(isWindows: true); + platform.environment['APPDATA'] = r'C:\Users\SomeUser\AppData'; + command = PublishCommand(packagesDir, platform: platform); + + expect(command.credentialsPath, + r'C:\Users\SomeUser\AppData\dart\pub-credentials.json'); + }); + }); } /// An extension of [RecordingProcessRunner] that stores 'flutter pub publish' diff --git a/script/tool/test/update_min_sdk_command_test.dart b/script/tool/test/update_min_sdk_command_test.dart index b636c4af075..91387489f35 100644 --- a/script/tool/test/update_min_sdk_command_test.dart +++ b/script/tool/test/update_min_sdk_command_test.dart @@ -91,6 +91,27 @@ void main() { expect(flutterVersion, '>=3.3.0'); }); + test('handles Flutter 3.10.0', () async { + final RepositoryPackage package = createFakePackage( + 'a_package', packagesDir, + isFlutter: true, + dartConstraint: '>=2.12.0 <4.0.0', + flutterConstraint: '>=2.10.0'); + + await runCapturingPrint(runner, [ + 'update-min-sdk', + '--flutter-min', + '3.10.0', // Corresponds to Dart 3.0.0 + ]); + + final String dartVersion = + package.parsePubspec().environment?['sdk'].toString() ?? ''; + final String flutterVersion = + package.parsePubspec().environment?['flutter'].toString() ?? ''; + expect(dartVersion, '>=3.0.0 <4.0.0'); + expect(flutterVersion, '>=3.10.0'); + }); + test('does not update Flutter if it is already higher', () async { final RepositoryPackage package = createFakePackage( 'a_package', packagesDir, diff --git a/third_party/packages/cupertino_icons/CHANGELOG.md b/third_party/packages/cupertino_icons/CHANGELOG.md index 982384b52ad..2d791cf58df 100644 --- a/third_party/packages/cupertino_icons/CHANGELOG.md +++ b/third_party/packages/cupertino_icons/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Aligns Dart and Flutter SDK constraints. * Aligns Dart and Flutter SDK constraints. * Updates minimum SDK version to Flutter 3.0. diff --git a/third_party/packages/cupertino_icons/pubspec.yaml b/third_party/packages/cupertino_icons/pubspec.yaml index 89b8e5460f9..3cc91f09b9d 100644 --- a/third_party/packages/cupertino_icons/pubspec.yaml +++ b/third_party/packages/cupertino_icons/pubspec.yaml @@ -6,7 +6,7 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 1.0.5 environment: - sdk: ">=2.17.0 <4.0.0" + sdk: ">=2.18.0 <4.0.0" flutter: fonts: