Repository navigation
Comparing changes
Open a pull request
base repository: flutter/packages
base: a8549ae8080b
head repository: flutter/packages
compare: 13d38e0d97a8
- 9 commits
- 28 files changed
- 8 contributors
Commits on Oct 27, 2026
-
[material_ui] Refactor
typography.dartandtext_theme.dartin pre……paration for M3E (#13371) This PR is a no-op refactor of `typography.dart` and `text_theme.dart` to prepare for the Material 3 Expressive text styles. These changes were split out from my larger M3E typography changes to prevent that PR from being too big. Specifically, this PR: - uses dartdoc templates in the `TextTheme` documentation to reduce documentation duplication - uses a helper method inside `apply` to reduce code duplication (helpful since we will be adding 15 new text styles with M3E) - adds a similar helper method inside `merge` to reduce code duplication - adds a `_withM3Colors` factory constructor to `Typography`. Currently this is only used once for M3, but it will also be used for M3E. The tests in this PR are purely to increase coverage since these changes are all no-ops. They are not regression tests. Fixes flutter/flutter#195011 ## Pre-Review Checklist **Version and changelog exemption:** Purely a refactor, no user-noticeable changes. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
Configuration menu - View commit details
-
Copy full SHA for 727c73e - Browse repository at this point
Copy the full SHA 727c73eView commit details -
[in_app_purchase_storekit} Fix more test flakes (#13279)
Fixes flutter/flutter#194285 (hopefully) The main cause of flutter/flutter#194285 (where `Product.products(for:)` returned `[]` across StoreKit 2 tests on the iOS 27 simulator) was fixed in #13213 by preventing the example app from calling StoreKit APIs before `SKTestSession` initialized. However, `testGetProductsWithStoreKitError` and `testFailedNetworkErrorPurchase` remains fragile in iOS 26.2+ This is still because product caching in `StoreKitTest` is still 1. Opaque 2. unable to be manually cleared - the product cache sticks around even after calling `resetToDefaultState()`. Thus, the state of the cache depends on the order that the tests will run. :/ So, if a test that purchases a product succeeds, if we later hit `setSimulatedError(..., forAPI: .loadProducts)`, the cached product will be returned, causing the test to fail. This is an issue that RevenueCat also ran into as shown here: RevenueCat/purchases-ios#6088, where they skip tests using `.loadProduct` for anything above ios 26. Instead of keeping dead tests around, I think its fair to just remove them and avoid just keeping dead code around till the end of time. Additionally, the code paths tested by the removed tests are already being hit by `testFailedProductUnavilablePurchase`, so we arent really losing coverage. Additionally in this PR I fix up some leaky states between tests. ## Pre-Review Checklist
Configuration menu - View commit details
-
Copy full SHA for 559aeed - Browse repository at this point
Copy the full SHA 559aeedView commit details -
[camera] Add support for zero-shutter-lag capture (#12374)
Combines the interface and both implementations in one PR per the [federated plugin process](https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins); splits into an interface-first PR once the direction is approved. The API shape is a proposal for flutter/flutter#190598 — happy to reshape it however you prefer. Adds explicit **zero-shutter-lag** control: an opt-in on Android, where the default capture mode leaves it off, and an opt-out on iOS, where the OS enables it automatically when the session supports it. ## What's added `camera_platform_interface` — two methods on `CameraPlatform`, modeled on the existing `setJpegImageQuality` / `getSupportedVideoStabilizationModes` patterns. Defaults are `false` / no-op, so nothing changes for platforms or apps that don't opt in: ```dart Future<bool> isZeroShutterLagSupported(int cameraId); Future<void> setZeroShutterLagEnabled(int cameraId, bool enabled); ``` `camera_android_camerax` — [`CameraInfo.isZslSupported()`](https://developer.android.com/reference/androidx/camera/core/CameraInfo#isZslSupported()) and [`ImageCapture.Builder.setCaptureMode(CAPTURE_MODE_ZERO_SHUTTER_LAG)`](https://developer.android.com/reference/androidx/camera/core/ImageCapture.Builder#setCaptureMode(int)). The capture mode is construction-only, so the use case is recreated — the approach `setJpegImageQuality` already uses for the same constraint, now sharing one helper so the two settings can't drop each other. `camera_avfoundation` — [`isZeroShutterLagSupported`](https://developer.apple.com/documentation/avfoundation/avcapturephotooutput/iszeroshutterlagsupported) / [`isZeroShutterLagEnabled`](https://developer.apple.com/documentation/avfoundation/avcapturephotooutput/iszeroshutterlagenabled) (iOS 17+). Enabling is guarded on the support query (setting it while unsupported throws `NSInvalidArgumentException`) and wrapped in `beginConfiguration`/`commitConfiguration`. The requested state is reapplied after camera switches, which silently reset it. Apps that never call the setter are left untouched, so iOS keeps its automatic behavior on upgrade. ## Notes for reviewers - **Platform defaults differ**: Android leaves ZSL off by default, iOS 17+ turns it on automatically when supported — so the same call is an opt-in on Android and an opt-out on iOS. Measurements below. - **Experimental API**: `CAPTURE_MODE_ZERO_SHUTTER_LAG` is `@ExperimentalZeroShutterLag`, handled with per-declaration `@OptIn` like this plugin's existing `ExperimentalCamera2Interop` / `ExperimentalLensFacing` / `ExperimentalPersistentRecording`. `gradlew lint` is clean. - **Unsupported cases need no app handling**: CameraX falls back on its own; iOS is guarded by the support query. - **Generated files**: regenerating with pigeon 26.1.5 also reverts two pre-existing hand-edits from #11616 (a redundant `Int32` cast and a missing doc comment). - **CI**: the publish check is red by design — the last commit holds the `make-deps-path-based` overrides and is reverted before landing. <details><summary>On-device measurements</summary> **Android** — Galaxy S21 (SM-G991N), 5 captures per mode, shutter fired via `adb shell input tap`. A running millisecond stopwatch was photographed; the time visible in each saved photo shows how far behind the shutter tap the captured frame is. | | Captured frame | Shutter → file saved | |---|---|---| | `MINIMIZE_LATENCY` (current) | baseline | 912 ms | | `ZERO_SHUTTER_LAG` | **629 ms earlier** | 639 ms | **iOS** — iPhone (iOS 26.5), `ResolutionPreset.max`, 5 captures per mode after discarding one warm-up capture. Compares `AVCapturePhoto.timestamp` against the host-clock time of the `capturePhoto` call, so a negative value means the saved frame predates the call. | | Frame vs. shutter call | Shutter → delegate | |---|---|---| | ZSL off | +279 ms | 941 ms | | ZSL on | **−74 ms** | 689 ms | With ZSL on, every captured frame predated the capture call. Support is session-dependent rather than device-wide: the same device reports supported at `ResolutionPreset.max` and unsupported at `medium`. Since iOS enables this automatically, these numbers describe what the toggle controls — not an improvement this PR delivers on iOS. </details> Part of flutter/flutter#190598 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
Configuration menu - View commit details
-
Copy full SHA for 4a1f3c5 - Browse repository at this point
Copy the full SHA 4a1f3c5View commit details -
[camera_web] Skip video input devices that cannot be started in avail…
…ableCameras (#13196) `availableCameras` opens every video input device to read its facing mode. If one device cannot be started (for example the OBS Virtual Camera on Windows while OBS is not running), `getUserMedia` rejects with `NotReadableError` and the whole call throws `cameraNotReadable`, so the cameras that work are not returned either. This PR skips a device whose stream cannot be started and continues with the remaining devices. If no camera is available and a device failed, the first device error is still thrown, so a single broken camera keeps reporting its error instead of returning an empty list. The platform interface documents that `availableCameras` returns an empty list when no cameras are available. `availableCameras` already throws today when a device cannot be started, and this PR keeps that behavior when no device can be started at all, so a single busy or broken camera still reports why it failed. I'm happy to return an empty list instead if that is preferred. Fixes flutter/flutter#194184 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
Configuration menu - View commit details
-
Copy full SHA for 65b6fab - Browse repository at this point
Copy the full SHA 65b6fabView commit details -
[material_ui] Decouple disabled CheckboxListTile state in a11y_assess…
…ments (#13177) Decouples the disabled `CheckboxListTile` (`enabled: false`) in `a11y_assessments`'s `/check-box-list-tile` use case from the enabled tile's mutable `_checked` state so toggling the first checkbox does not also flip the disabled checkbox to checked (the other 5 use cases originally in this branch landed in #13159 and #13243). Only the `a11y_assessments` test app changes, so no package version or CHANGELOG update is needed. Fixes flutter/flutter#194905 ## Pre-Review Checklist **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
Configuration menu - View commit details
-
Copy full SHA for d9885d7 - Browse repository at this point
Copy the full SHA d9885d7View commit details -
[material_ui] Unskip web tests that pass on CanvasKit and Skwasm: dat…
…a_table_test, floating_action_button_test, text_field_cursor_test (#13460) Removes web skips from three `material_ui` test files whose tests now pass on Chrome under both web renderers used in CI (CanvasKit/dart2js and Skwasm/dart2wasm). Keeping the skips hides web regressions in these widgets. - `data_table_test.dart`: removes the file-level `@TestOn('!chrome')`. The column/cell padding finders now use `'${6.0}'` instead of `'6.0'`, so they match the text on dart2js (JS prints doubles with no fractional part as `6`, not `6.0`). Only the M3 `InkSparkle` press test stays skipped on web (flutter/flutter#100587). - `floating_action_button_test.dart`: removes the file-level `@TestOn('!chrome')`, which turns 43 tests back on for web. The two ink splash clipping tests stay skipped on web (flutter/flutter#20483). - `text_field_cursor_test.dart`: removes the file-level `@TestOn('!chrome')`. All 9 cursor animation, timing, and platform radius variants pass on web. Verified locally with `flutter test --platform chrome` and `flutter test --platform chrome --wasm` for each file. Part of flutter/flutter#100587 Part of flutter/flutter#20483 ## Pre-Review Checklist This PR only changes tests, so it is exempt from version/CHANGELOG updates and from the new-test requirement. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
Configuration menu - View commit details
-
Copy full SHA for 2066e32 - Browse repository at this point
Copy the full SHA 2066e32View commit details -
manually roll flutter and fix flaky video player test that is prevent…
…ing roll from landing (#13465) roll flutter and fix flake!
Configuration menu - View commit details
-
Copy full SHA for 9919dfd - Browse repository at this point
Copy the full SHA 9919dfdView commit details
Commits on Oct 28, 2026
-
[google_maps_flutter_ios, pigeon, webview_flutter_wkwebview] Migrate …
…remaining example apps to uiscene (#13280) Fixes flutter/flutter#194284 (+ a bonus extra special migration for `pigeon/example/native_interop_app`!! Wow!) These four example apps got missed out in the original round of migrations. - `webview_flutter_wkwebview/example` - In the initial example migration [sweep](#12182), `webview_flutter/webview_flutter/example` was migrated while `webview_flutter_wkwebview/example` was missed which is understandable - `google_maps_flutter_ios_sdk9/example` & `google_maps_flutter_ios_sdk10/example` - when I [migrated](#11001) `AppDelegate.swift` in `google_maps_flutter_ios_shared_code`, the sync script copied `AppDelegate.swift` into sdk9 and sdk10. But `Info.plist `isn't in shared_code, so the script didn't copy `Info.plist` - `pigeon/example/native_interop_app` - This was landed post the round of example migrations. Its `AppDelegate.swift` already adopts `FlutterImplicitEngineDelegate`, so it only needed `UIApplicationSceneManifest` in `Info.plist`. ## Pre-Review Checklist - [] I added new tests to check the change I am making, or I have commented below to indicate which [test exemption] this PR falls under[^1].
Configuration menu - View commit details
-
Copy full SHA for 8cdc6e5 - Browse repository at this point
Copy the full SHA 8cdc6e5View commit details -
[material_ui] Unskip long press drag test on web (#13358)
Follow-up to flutter/flutter#194877. `long press drag extends the selection to the word under the drag and shows toolbar on lift on non-Apple platforms` is skipped on the web, but the only thing that actually breaks there is the drag geometry: `textOffsetToPosition` nudges the position by 1px on web, so `moveBy(const Offset(-200, 0))` lands exactly on the glyph boundary between `Peel` and the following space, and `getWordAtOffset` resolves to the whitespace instead of the word. `_expectMaterialToolbarForPartialSelection()` already handles `isContextMenuProvidedByPlatform`, so the skip is not needed once the drag targets are fixed. This PR drags to the middle of each target word instead of relative offsets, drops the skip, and tags the test with `reduced-web-test-set` so it runs on the web shards. Verified with `flutter test`, `flutter test --platform chrome`, and `flutter test --platform chrome --wasm`. Test-only change, so no version bump or CHANGELOG entry is needed.
Configuration menu - View commit details
-
Copy full SHA for 13d38e0 - Browse repository at this point
Copy the full SHA 13d38e0View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff a8549ae8080b...13d38e0d97a8