[in_app_purchase_storekit] Add Transaction.unfinished API and expose appAccountToken#10439
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces two new features from StoreKit 2: the unfinishedTransactions() API and the exposure of appAccountToken on purchase details. The changes are additive, well-implemented, and follow the existing architecture. The implementation correctly spans native Swift code, pigeon interface updates, and Dart-side wrappers, complete with corresponding unit tests. This is a solid contribution that enhances the plugin's capabilities.
| @MainActor in | ||
| do { | ||
| let transactionsMsgs = await rawUnfinishedTransactions().map { | ||
| $0.convertToPigeon(receipt: nil) | ||
| } | ||
| completion(.success(transactionsMsgs)) | ||
| } |
There was a problem hiding this comment.
The do block is unnecessary here because rawUnfinishedTransactions() is a non-throwing function. While it doesn't cause a bug in this case, it's a good practice to avoid do-catch structures when no errors can be thrown and caught. If rawUnfinishedTransactions were to throw, the lack of a catch block would prevent the completion handler from being called on an error path. Removing the do block simplifies the code and makes it more robust.
@MainActor in
let transactionsMsgs = await rawUnfinishedTransactions().map {
$0.convertToPigeon(receipt: nil)
}
completion(.success(transactionsMsgs))There was a problem hiding this comment.
It's been a while since I last used swift, but I have the same question: why the do block?
|
This also partially solves #165355 |
dabe171 to
fa16cac
Compare
LouiseHsu
left a comment
There was a problem hiding this comment.
This looks good!! Thank you so much for your contribution. I took a look, and the test failures seems to be half swift formatting errors and pigeon files. Could you upgrade pigeon and regenerate the files + fix the swift formatting errors? Otherwise looks good!
fa16cac to
1c0aecc
Compare
|
@LouiseHsu Thanks for the kind words! Problem with updating pigeon to the latest version is that when I run I downgraded pigeon until I found a working version (i.e. version before the introduction of the generation of == method) Here is one of the error logs when running on real device after updating pigeon to the latest version 26.1.0: Generated file that is causing the errorHere is the version that introduced this behavior in the generated code What I am going to do now is pin pigeon to the latest version I found that works (25.2.0) and push the changes. Do you think this works? |
|
A repo-wide update of all packages to Pigeon 26 landed yesterday, FYI. |
|
@stuartmorgan-g I fetched it locally, and ran the pigeon generator, and I am hitting Commands I ran: # Verify pigeon version
cd packages/in_app_purchase/in_app_purchase_storekit
dart pub deps | grep pigeon
# Output: ├── pigeon 26.1.0
# Regenerate pigeon
dart run pigeon --input pigeons/sk2_pigeon.dart
# Check format
cd ../../..
dart run script/tool/bin/flutter_plugin_tools.dart format --packages
in_app_purchase_storekitResult: The weird thing: upstream/main's generated file has the |
|
Sorry, I meant to follow up on that this morning and had forgotten. I filed flutter/flutter#178736 to track the problem; for now you can just manually add those (which is what I did to unblock the roll). (Longer term we need to fix that issue, and/or change the output names of these Pigeon files.) |
|
@stuartmorgan-g ohh I thought claude was hallucinating when it told me the flutter team added them manually😂😂 Thank you for the guidance, will supress them manually then and update the PR🙏🏻 And a suggestion, if this takes some time to fix (the pigeon issue), maybe mention this as a note in the pigeon section so new comers like me know that they are not doing anything wrong in their setup but rather they should supress such errors (to be specified) manually for now. |
1c0aecc to
f8257a4
Compare
Having to make manual changes is extremely rare, and my plan was to resolve this case ASAP; it confuses everyone (not just newcomers). I wouldn't have done it at all except that it was blocking an important change in flutter/flutter for complex reasons. Yesterday I thought this was a quick Pigeon fix that I would do today, but having investigated the cause more I'll probably change the Swift filenames for this package today as the short-term fix. |
|
The remaining failing check as per logs is due to: I don't have an option to rerun the check to try it again. |
This landed as #10465, so the manual change is no longer necessary. |
f8257a4 to
6445537
Compare
|
autosubmit label was removed for flutter/packages/10439, because This PR has not met approval requirements for merging. The PR author is not a member of flutter-hackers and needs 1 more review(s) in order to merge this PR.
|
|
(sorry for the delay, taking a look tomorrow) |
| @MainActor in | ||
| do { | ||
| let transactionsMsgs = await rawUnfinishedTransactions().map { | ||
| $0.convertToPigeon(receipt: nil) | ||
| } | ||
| completion(.success(transactionsMsgs)) | ||
| } |
There was a problem hiding this comment.
It's been a while since I last used swift, but I have the same question: why the do block?
| ); | ||
| }); | ||
|
|
||
| group('appAccountToken exposure', () { |
There was a problem hiding this comment.
These 2 tests don't seem to be super valuable, would it be possible to test appAccountToken the same way receiptData was tested?
There was a problem hiding this comment.
@LongCatIsLooong
Thanks for the comments :)
-
I was trying to keep consistent code with the
transactionsmethod (which also contains a questionable do block, as I understood from its code). I removed thedoblock anyway for the method I added. -
I also removed the 2 tests and added a check for the
appAccountTokenin the existing test that tests the receipt.
There was a problem hiding this comment.
regarding the tests, would it be possible to add appAccountToken to the API fake in fake_storekit_platform.dart and verify the dart API caller would receive the correct token?
There was a problem hiding this comment.
@LongCatIsLooong kindly check if the test I added makes the PR good to go, please let me know if I need to make any other changes
…aseDetails This PR adds two new features to in_app_purchase_storekit for StoreKit 2: 1. SK2Transaction.unfinishedTransactions() - Queries only unfinished transactions, mirroring Apple's Transaction.unfinished API for better performance. 2. SK2PurchaseDetails.appAccountToken - Exposes the UUID that associates transactions with users in custom backend systems. Both features are additive and maintain full backward compatibility. Tests included for both features.
Previously returned nil for receipt data, now properly includes jwsRepresentation for server-side verification.
swift-format-ignore comments for deepEqualssk2_pigeon and deepHashsk2_pigeon functions as a workaround for flutter/flutter#178736.
6445537 to
bacf772
Compare
|
@Haidar0096 it looks like there's still one unresolved comment, but IMO the PR is probably good to merge as is. Would you like to address the comment? If not I can add this to the autosubmit queue. |
|
@LongCatIsLooong Sure I will address it, I will work on it on this weekend, thank you so much for the guidance🙏🏻 |
|
is this ready to merge? :) |
|
@LouiseHsu I was asked to add a test and I added it and waiting for the new review |
…nd expose appAccountToken (flutter/packages#10439)
flutter/packages@36383d6...0ac7a03 2025-12-11 [email protected] [in_app_purchase_storekit] Add Transaction.unfinished API and expose appAccountToken (flutter/packages#10439) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Fix CPU rendering fallback Respond to review comments Remove unused imports from surface_test.dart Don't double dispose of displayFactory feat: Add bitmap-less rendering support to OffscreenCanvasRasterizer by introducing `rasterizeToCanvas` and `canvasImageSource` to `Surface` and `CkOffscreenSurface`. Skip tests which use OffscreenSurfaceProvider in Safari format Use the base canvas to create Images in Skwasm Fix analysis warnings. Don't render disposed pictures. Add TODO comments Add isDisposed to Picture Fix up merge Delete confusing comment Enhance documentation for `LocalHistoryEntry` class (#179223) Fixes : #11660 - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Victor Sanni <[email protected]> Roll Dart SDK from 019cb923bf62 to 17749965ec57 (5 revisions) (#179640) https://dart.googlesource.com/sdk.git/+log/019cb923bf62..17749965ec57 2025-12-09 [email protected] Version 3.11.0-227.0.dev 2025-12-09 [email protected] Version 3.11.0-226.0.dev 2025-12-09 [email protected] Version 3.11.0-225.0.dev 2025-12-09 [email protected] Version 3.11.0-224.0.dev 2025-12-09 [email protected] Version 3.11.0-223.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Skia from f9e32c28c5c5 to 82fff05cc621 (2 revisions) (#179641) https://skia.googlesource.com/skia.git/+log/f9e32c28c5c5..82fff05cc621 2025-12-09 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-12-09 [email protected] Roll vulkan-deps from 4edb81c5d7c8 to 3486579f434a (4 revisions) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Make sure that a CupertinoPageScaffold doesn't crash in 0x0 environment (#179245) This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the CupertinoPageScaffold widget. Co-authored-by: Tong Mu <[email protected]> Co-authored-by: Victor Sanni <[email protected]> Make sure that a CupertinoSlider doesn't crash in 0x0 environment (#179566) This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the CupertinoSlider widget. Make sure that a CupertinoSegmentedControl doesn't crash in 0x0 envir… (#179544) This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the CupertinoSegmentedControl widget. Make sure that a Tooltip doesn't crash in 0x0 environment (#178461) This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the Tooltip widget. --------- Co-authored-by: Tong Mu <[email protected]> Co-authored-by: Victor Sanni <[email protected]> Make sure that a CupertinoMagnifier doesn't crash in 0x0 environment (#179206) This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the CupertinoMagnifier widget. Co-authored-by: Tong Mu <[email protected]> Co-authored-by: Victor Sanni <[email protected]> Make sure that a CupertinoFormSection doesn't crash in 0x0 environment (#179001) This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the CupertinoFormSection widget. Co-authored-by: Tong Mu <[email protected]> Co-authored-by: Victor Sanni <[email protected]> Make sure that a CupertinoListSection doesn't crash in 0x0 environment (#179068) This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the CupertinoListSection widget. Co-authored-by: Tong Mu <[email protected]> Co-authored-by: Victor Sanni <[email protected]> Make SettingsChannel configuration queue not static (#179636) SettingsChannel has a static data structure that stores system configurations. This is fine if there is one engine. If there are two FlutterViews and two engines - this static configuration is shared between the two different engines. Because of the way the queue deletes old entries this will result in one engine missing it's configuration. Fixes: #179559 - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [X] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [X] I signed the [CLA]. - [X] I listed at least one issue that this PR fixes in the description above. - [X] I updated/added relevant documentation (doc comments with `///`). - [X] I added new tests to check the change I am making, or this PR is [test-exempt]. - [X] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [X] All existing and new tests are passing. Make sure that a CupertinoDialogAction doesn't crash in 0x0 environment (#178956) This is my attempt to handle https://github.com/flutter/flutter/issues/6537 for the CupertinoDialogAction widget. Co-authored-by: Tong Mu <[email protected]> Roll Skia from 82fff05cc621 to e61cc6d073fd (4 revisions) (#179646) https://skia.googlesource.com/skia.git/+log/82fff05cc621..e61cc6d073fd 2025-12-09 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-12-09 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-12-09 [email protected] SkCrabbyAvifCodec: Disable sample transforms 2025-12-09 [email protected] Roll FreeType from 1518bc83 to 30e45abe (119 commits) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Implement flutter/accessibility channel (#179484) Fixes https://github.com/flutter/flutter/issues/172023 Roll Fuchsia Linux SDK from _pSztGZvEA3-Ry-GW... to u5vxWTRT0HlxOP5_r... (#179652) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Check for a null cached image in SingleFrameCodec::getNextFrame (#179483) This could happen if the image decoder invoked its callback with a null image to signal an error. The SingleFrameCodec's status will be kComplete but its cached image will not be set. Fixes https://github.com/flutter/flutter/issues/161031 Marks Mac_ios draw_arcs_all_stroke_styles_perf_ios__timeline_summary to be unflaky (#179669) <!-- meta-tags: To be used by the automation script only, DO NOT MODIFY. { "name": "Mac_ios draw_arcs_all_stroke_styles_perf_ios__timeline_summary" } --> The test has been passing for [50 consecutive runs](https://data.corp.google.com/sites/flutter_infra_metrics_datasite/flutter_check_test_flakiness_status_dashboard/?p=BUILDER_NAME:%22Mac_ios%20draw_arcs_all_stroke_styles_perf_ios__timeline_summary%22). This test can be marked as unflaky. Roll Packages from 338ecd3864b8 to 74a5a5314f5c (4 revisions) (#179693) https://github.com/flutter/packages/compare/338ecd3864b8...74a5a5314f5c 2025-12-10 [email protected] [ci] Rewrites branch exists without external dependencies (flutter/packages#10594) 2025-12-10 [email protected] [rfw] Add Flexible widget support to core widgets (flutter/packages#9750) 2025-12-09 [email protected] Redistribute package ownership among Android team (flutter/packages#10569) 2025-12-09 [email protected] [camera_android_camerax] Updates pigeon generation to prevent crash when objects call to Dart after a hot restart (flutter/packages#10571) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Manually roll characters (#179447) Flutter pub roller does not update characters to 1.4.1. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md Roll Dart SDK from 17749965ec57 to 077062c5e515 (3 revisions) (#179691) https://dart.googlesource.com/sdk.git/+log/17749965ec57..077062c5e515 2025-12-10 [email protected] Version 3.11.0-230.0.dev 2025-12-10 [email protected] Version 3.11.0-229.0.dev 2025-12-10 [email protected] Version 3.11.0-228.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Fixed RenderFlex overflow in RouteObserver Example (#170980) Fixed RenderOverflow in RouteObserver Example: https://api.flutter.dev/flutter/widgets/RouteObserver-class.html <!-- Thanks for filing a pull request! Reviewers are typically assigned within a week of filing a request. To learn more about code review, see our documentation on Tree Hygiene: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md --> This PR is about solving render overflow issue in Route Observer Example in Live Website. I've wrapped the body with a Scrollable View to solve this issue | | | | --- | --- | | B |  | | A |  | - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Victor Sanni <[email protected]> added onUserInteractionIfError for form (#175515) This PR adds a new `AutovalidateMode` value: `onUserInteractionIfError`. This mode allows `Form` and `FormField` widgets to auto-validate **only when a field already has an error and the user interacts with it again**. - Current modes (`disabled`, `always`, `onUserInteraction`, `onUnfocus`) do not cover the case where developers want validation **only when correcting an error**. - This improves UX by reducing unnecessary validation calls while still ensuring errors disappear as soon as the user fixes them. - Added `onUserInteractionIfError` to `AutovalidateMode`. - Updated Dartdoc with detailed description and example snippet. - Added new unit tests to validate behavior. - Verified no regressions in other modes (`always`, `onUnfocus`, `onUserInteraction`). ```dart TextFormField( autovalidateMode: AutovalidateMode.onUserInteractionIfError, validator: (value) => value!.isEmpty ? 'Required field' : null, ) ```` --- Fixes #\<INSERT\_RELATED\_ISSUE\_NUMBER\_IF\_ANY> --- * Added widget tests to confirm that: * No validation occurs until a field has an error. * Once an error exists, validation runs automatically on user interaction. * Resetting the form clears errors correctly. * Regression tests ensure that `always`, `onUserInteraction`, and `onUnfocus` modes still behave correctly. --- * [x] I have read the [[Contributor Guide](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md)](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md) * [x] I have read the \[Tree Hygiene] wiki page and followed its guidance * [x] I have read and followed the \[Flutter Style Guide] * [x] I signed the \[CLA] * [x] I added a new enum value with clear Dartdoc (`onUserInteractionIfError`) * [x] I added example code in the Dartdoc * [x] I added new widget/unit tests for the new mode * [x] All existing and new tests pass * [x] I ran `flutter analyze` and fixed all issues * [x] No breaking changes introduced (or marked accordingly) --- * [x] Yes * [x] No --- *(N/A — logic-only change)* --- * The new mode reduces unnecessary validation until the user corrects an error. * All tests confirm correct behavior and no regressions in existing modes. --------- Co-authored-by: Loïc Sharma <[email protected]> Fix the issue with pinned headers in nested SliverMainAxisGroup. (#179132) Fixes: #178973 - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md Ensure that the engine converts std::filesystem::path objects to UTF-8 strings on Windows (#179528) Fixes https://github.com/flutter/flutter/issues/178896 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Reland: Add framework-side hitTestBehavior support to Semantics (#178817) (#179352) This is a reland of #178817, which was reverted in #179100 due to test failures. The original PR introduced `hitTestBehavior` to the semantics framework but incorrectly applied `opaque` behavior to `ModalRoute`, which blocked platform views from receiving pointer events. Instead of making the entire modal opaque, we: 1. Keep `ModalRoute` without explicit `hitTestBehavior` (defaults to `defer`) 2. Make only the dialog/sheet content opaque (blocks clicks to barrier) 3. Platform views remain clickable because they're outside the opaque content boundary Fixes #149001 Original PR: #177570 Revert: #178744 Roll Skia from e61cc6d073fd to 59c6cad539f7 (22 revisions) (#179714) https://skia.googlesource.com/skia.git/+log/e61cc6d073fd..59c6cad539f7 2025-12-10 [email protected] Modernize SkFontMgr_Mac::onMatchFamilyStyleCharacter 2025-12-10 [email protected] Upgrade gradle to version 9.1.0 2025-12-10 [email protected] Roll vulkan-deps from 9f7342ee3761 to 50c5f8b4dd57 (8 revisions) 2025-12-10 [email protected] Revert "Pass first family name to paragraph fallback" 2025-12-10 [email protected] Revert "[rust bmp] Add initial Rust BMP decoder implementation" 2025-12-10 [email protected] Roll HarfBuzz from 08b52ae2 to 31695252 (971 commits) 2025-12-10 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-12-10 [email protected] [rust bmp] Add initial Rust BMP decoder implementation 2025-12-10 [email protected] Pass first family name to paragraph fallback 2025-12-10 [email protected] Update CanvasKit to use const version of SerialProcs 2025-12-10 [email protected] Remove legacy SkParagraphBuilder API 2025-12-10 [email protected] [wgsl] Stop forcing all function calls into scratch lets 2025-12-10 [email protected] [ganesh] Guard division by zero in AAConvexPathRenderer 2025-12-10 [email protected] [graphite] Use depth/stencil image aspects for default d/s attachments 2025-12-10 [email protected] Make SkDebugf calls log at Android's WARN level in RenderEngine 2025-12-10 [email protected] Manual roll Dawn from 57fca18a1603 to 9e1721615b33 (7 revisions) 2025-12-10 [email protected] Roll vulkan-deps from 3486579f434a to 9f7342ee3761 (5 revisions) 2025-12-10 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-12-10 [email protected] Roll ANGLE from 78bb5a33a9e9 to c2a048f9a1db (7 revisions) 2025-12-10 [email protected] Roll Skia Infra from ca3eb8741f18 to 492dfbfe3bb2 (10 revisions) 2025-12-10 [email protected] Roll Dawn from 8de9b80c5bd9 to 57fca18a1603 (17 revisions) 2025-12-10 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Use kPreventOverdraw for arcs with overlapping stroke caps (#179312) Fixes #178746 Before: <img width="341" height="527" alt="image" src="proxy.php?url=https://github.com/user-attachments/assets/b2458490-109f-4e6f-b35d-3bc0e5648de6" /> After: <img width="295" height="566" alt="image" src="proxy.php?url=https://github.com/user-attachments/assets/f5958934-dae2-4181-b142-9c68f8cdc2e8" /> - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md Roll Dart SDK from 077062c5e515 to dbcb567e2432 (2 revisions) (#179715) https://dart.googlesource.com/sdk.git/+log/077062c5e515..dbcb567e2432 2025-12-11 [email protected] Version 3.11.0-232.0.dev 2025-12-10 [email protected] Version 3.11.0-231.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Skia from 59c6cad539f7 to deb0153719dd (2 revisions) (#179721) https://skia.googlesource.com/skia.git/+log/59c6cad539f7..deb0153719dd 2025-12-11 [email protected] Roll Dawn from 9e1721615b33 to f39150de4906 (8 revisions) 2025-12-11 [email protected] Roll Skia Infra from 492dfbfe3bb2 to 6cd15cab2194 (10 revisions) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Fuchsia Linux SDK from u5vxWTRT0HlxOP5_r... to QssSL8DkxIbMvf89C... (#179729) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Dart SDK from dbcb567e2432 to 3d4b989bdc41 (1 revision) (#179733) https://dart.googlesource.com/sdk.git/+log/dbcb567e2432..3d4b989bdc41 2025-12-11 [email protected] Version 3.11.0-233.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Skia from deb0153719dd to d570e2317110 (2 revisions) (#179734) https://skia.googlesource.com/skia.git/+log/deb0153719dd..d570e2317110 2025-12-11 [email protected] Roll vulkan-deps from 50c5f8b4dd57 to f23836d62fa0 (5 revisions) 2025-12-11 [email protected] Roll ANGLE from c2a048f9a1db to 92d454d83328 (10 revisions) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md [skia] Disable legacy image decoders (#179277) After https://github.com/flutter/flutter/commit/8666e1af8ffa7e8cb0b9a7b6bb5bdd19afeabc49 Flutter shouldn't be reliant on Skia's legacy image codec registration. This will enforce that. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md Revert "Android implementation of content sizing" (#179698) Reverts flutter/flutter#176063 Fixes: #179667 Git bisect: ``` ❯ git bisect log git bisect start 'master' 'flutter-3.38-candidate.0' git bisect good df87ee3db00df61d882f99e655a3dc5f8387f806 git bisect good 951b25d2400a298f77a10e6a790905d045f62ddf git bisect good 337bbfbe042a89c0a887c895fa3aa364decc7077 git bisect good 8e952d62976dfe77e54849e9e110e5ebb7ef7f71 git bisect good 723fec502fd9788c94fb039464ab9418b3ca9a3e git bisect bad 96c65251a604a3960a9186b3011a70ee6883148f git bisect good 4000ce2b4e576e356ee0f8a3841bbb5e280cac2c git bisect good 26f311ca5e8519f31b10a2fca6f10b6eaa028e04 git bisect bad 8cc9feed310df448d80798bfc710e950cdbba4a8 git bisect bad b37b6fa92736083e8c24a56da8b4b3d326df1c31 git bisect bad f197a3a00ca9483435b8c04bb972fbcfa7737f25 ``` Roll Packages from 74a5a5314f5c to 36383d6b0cd4 (4 revisions) (#179740) https://github.com/flutter/packages/compare/74a5a5314f5c...36383d6b0cd4 2025-12-10 [email protected] Manual roll Flutter from 6a1f5b7f85a4 to e25d71b086d6 (30 revisions) (flutter/packages#10601) 2025-12-10 [email protected] [go_router] Fixes an issue where `onEnter` blocking causes navigation stack loss (stale state restoration) (flutter/packages#10476) 2025-12-10 [email protected] [file_selector] Update Linux example for deprecations (flutter/packages#10542) 2025-12-10 [email protected] Manual roll Flutter from b2de367c41e0 to 6a1f5b7f85a4 (22 revisions) (flutter/packages#10593) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md chore: linux fuchsia tests are flaking (#179744) Roll Skia from d570e2317110 to 979b7ae09145 (4 revisions) (#179742) https://skia.googlesource.com/skia.git/+log/d570e2317110..979b7ae09145 2025-12-11 [email protected] Add ZoomInSlide for investigating aliasing bugs 2025-12-11 [email protected] Add missing bazel dep to fontmgr_coretext 2025-12-11 [email protected] Refactor gradients API 2025-12-11 [email protected] Reland "[rust bmp] Add initial Rust BMP decoder implementation" If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md [ Analysis ] Added initial implementation of the `flutter_analyzer_plugin` (#175679) The `flutter_analyzer_plugin` implements rules previously enforced by the `dev/bots/analyze.dart` check run on the CI, allowing for earlier detection of custom lint violations before a change is uploaded for review. Currently, the plugin implements the following rules: - avoid_future_catch_error - no_double_clamp - no_stopwatches - protect_public_state_subtypes - render_box_intrinsics Towards https://github.com/flutter/flutter/issues/175276 fix: fresh install of windows support (#179720) - python 3.14 (pipes -> shlex) - content_aware_hash.ps1 call from gn - visual studio 2026 (MS changed directory naming) Roll Dart SDK from 3d4b989bdc41 to 9a65db770758 (2 revisions) (#179746) https://dart.googlesource.com/sdk.git/+log/3d4b989bdc41..9a65db770758 2025-12-11 [email protected] Version 3.11.0-235.0.dev 2025-12-11 [email protected] Version 3.11.0-234.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Add 3.38.5 changelog (#179750) Reverts "[ Analysis ] Added initial implementation of the `flutter_analyzer_plugin` (#175679)" (#179766) <!-- start_original_pr_link --> Reverts: flutter/flutter#175679 <!-- end_original_pr_link --> <!-- start_initiating_author --> Initiated by: jtmcdole <!-- end_initiating_author --> <!-- start_revert_reason --> Reason for reverting: Linux linux_unopt is now timing out in postsubmit <!-- end_revert_reason --> <!-- start_original_pr_author --> Original PR Author: bkonyi <!-- end_original_pr_author --> <!-- start_reviewers --> Reviewed By: {srawlins} <!-- end_reviewers --> <!-- start_revert_body --> This change reverts the following previous change: The `flutter_analyzer_plugin` implements rules previously enforced by the `dev/bots/analyze.dart` check run on the CI, allowing for earlier detection of custom lint violations before a change is uploaded for review. Currently, the plugin implements the following rules: - avoid_future_catch_error - no_double_clamp - no_stopwatches - protect_public_state_subtypes - render_box_intrinsics Towards https://github.com/flutter/flutter/issues/175276 <!-- end_revert_body --> Co-authored-by: auto-submit[bot] <[email protected]> [ Tool ] Assemble: "Improper" validation error when dealing with base64 encoded dart-define value (#178737) addressing a regression from #172510 that caused the assemble command to fail in the validation phase when a dart-define was passed as a base64-encoded value. Example command: ``` flutter --verbose assemble --no-version-check \ --output=<build_output_path>/ \ -dTargetPlatform=ios \ -dTargetFile=lib/main.dart \ -dBuildMode=release \ -dConfiguration=Debug \ -dIosArchs=arm64 \ -dSdkRoot=<xcode_sdk_path>/iPhoneOS.sdk \ -dSplitDebugInfo= \ -dTreeShakeIcons=false \ -dTrackWidgetCreation=true \ -dDartObfuscation=false \ -dAction=install \ -dFrontendServerStarterPath= \ --ExtraGenSnapshotOptions= \ --DartDefines=ZW52PXFh \ --ExtraFrontEndOptions= \ -dSrcRoot=<project_root> \ -dTargetDeviceOSVersion= \ -dCodesignIdentity=<codesign_identity> \ release_ios_bundle_flutter_assets ``` Partially addressing: https://github.com/flutter/flutter/issues/178452 - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Ben Konyi <[email protected]> Exit with code 1 when calling `flutter build` without arguments (#175900) Resolves #5797 - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. A whole bunch of tool tests failed locally even before the change, so I'll have to see CI results to know if something actually broke due to the change. Roll Skia from 979b7ae09145 to 7ad91f64b468 (6 revisions) (#179770) https://skia.googlesource.com/skia.git/+log/979b7ae09145..7ad91f64b468 2025-12-12 [email protected] Roll vulkan-deps from f23836d62fa0 to 63f49739609f (3 revisions) 2025-12-11 [email protected] Mac ld doesn't support --allow-multiple-definition 2025-12-11 [email protected] Delete unused makeIndexWriter functions 2025-12-11 [email protected] Mark other makeVertexWriter checks as unlikely/likely 2025-12-11 [email protected] Check vertex allocation in PathStencilCoverOp 2025-12-11 [email protected] [graphite] RendererProvider selects path strategy If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md [fuchsia] temporarily disable touch-input-test due to the flakiness (#179747) The FlutterEmbedTapTest.* are running on fuchsia_debug_x64_tester, and they are recently flaky; FlutterTapTest is less but still flaky. Before finding out the root cause, disabling the test suite is better than disabling the entire builder. https://ci.chromium.org/ui/p/flutter/builders/prod/Linux%20linux_fuchsia_tests - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md Roll Skia from 7ad91f64b468 to 344ff9c41fb6 (1 revision) (#179774) https://skia.googlesource.com/skia.git/+log/7ad91f64b468..344ff9c41fb6 2025-12-12 [email protected] [wgsl] check binary component matrix polyfill once If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md [ios][pv] accept/reject gesture based on hitTest (with new widget API) (#179659) This is a follow up PR to [this original PR](https://github.com/flutter/flutter/pull/177859). The difference is the API - the original PR chooses Option 1 [in the design doc](https://docs.google.com/document/d/1ag4drAdJsR7y-rQZkqJWc6tOQ4qCbflQSGyoxsSC6MM/edit?tab=t.0), while this PR chooses Option 3. To directly use flutter API, just pass in the policy when creating UiKitView widget. ``` UiKitView( ... gestureBlockingPolicy: UiKitViewGestureBlockingPolicy) ... ) ``` For plugins, we need to update plugins to use this new API. ``` WebView( ... gestureBlockingPolicy: UiKitViewGestureBlockingPolicy ) { return UiKitView( .. gestureBlockingPolicy: gestureBlockingPolicy ) } ``` For more information, refer to [the old PR](https://github.com/flutter/flutter/pull/177859). *List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.* https://github.com/flutter/flutter/issues/175099 https://github.com/flutter/flutter/issues/165787 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md Fix draggable scrollable sheet example drag speed is off (#179179) - Fix https://github.com/flutter/flutter/issues/179102 - In this PR: - Fix the sheet position so that it will follow the pointer, even when dragging mouse beyond the window then returns inside. - Some improvement for coding convention: - declare minChildSize and maxChildSize const(s) then use them in the hardcoded positions - move `_isOnDesktopAndWeb` out of Grabber, so it's easier to see Grabber widget purpose when reading the code <details open> <summary>Demo</summary> | before | after | | --------------- | --------------- | <img width="360" src="proxy.php?url=https://github.com/user-attachments/assets/5f4f507d-1491-47a2-90a6-c2a32ecdf6b5"> | <img width="360" src="proxy.php?url=https://github.com/user-attachments/assets/b2eb9ede-572e-4fcb-81c1-2269b8db2140"> </details> - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Signed-off-by: huycozy <[email protected]> Roll Skia from 344ff9c41fb6 to 4251aa7454da (2 revisions) (#179779) https://skia.googlesource.com/skia.git/+log/344ff9c41fb6..4251aa7454da 2025-12-12 [email protected] Roll Dawn from f39150de4906 to 83072ee716dc (25 revisions) 2025-12-12 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Skia from 4251aa7454da to ee08571bbf67 (1 revision) (#179783) https://skia.googlesource.com/skia.git/+log/4251aa7454da..ee08571bbf67 2025-12-12 [email protected] Roll ANGLE from 92d454d83328 to fe3c8640fe8d (11 revisions) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Fuchsia Linux SDK from QssSL8DkxIbMvf89C... to fppT9ZrwbFx7iYrIh... (#179785) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Packages from 36383d6b0cd4 to 0ac7a032dbcd (1 revision) (#179793) https://github.com/flutter/packages/compare/36383d6b0cd4...0ac7a032dbcd 2025-12-11 [email protected] [in_app_purchase_storekit] Add Transaction.unfinished API and expose appAccountToken (flutter/packages#10439) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Roll Skia from ee08571bbf67 to e66816c3645e (2 revisions) (#179792) https://skia.googlesource.com/skia.git/+log/ee08571bbf67..e66816c3645e 2025-12-12 [email protected] Stop using (deprecated) SkGradientShader 2025-12-12 [email protected] [graphite] Fix vello build typo in RendererProvider If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Add documentation for what to do when bumping the minimum sdk version supported by flutter (#179795) Fixes #170807 - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> [win32] Do not flood message loop with wake up messages (#179538) Fixes https://github.com/flutter/flutter/issues/173843 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/c…
…appAccountToken (flutter#10439) ## Summary Adds two new StoreKit 2 features to `in_app_purchase_storekit`: - `SK2Transaction.unfinishedTransactions()` - Queries only unfinished transactions for better performance - `SK2PurchaseDetails.appAccountToken` - Exposes user UUID for backend integration ## Motivation 1. **Performance:** Developers often only need unfinished transactions to complete them, not all historical transactions. This mirrors Apple's official `Transaction.unfinished` API. 2. **User Identification:** The ability to set `appAccountToken` already exists when making purchases, but reading it back from transaction details was missing. ## Changes - Added pigeon interface method for `unfinishedTransactions()` - Implemented Swift native code using Apple's `Transaction.unfinished` API - Exposed `appAccountToken` property in `SK2PurchaseDetails` - Added unit tests for both features ## Breaking Changes None. Both features are additive and maintain full backward compatibility.

Summary
Adds two new StoreKit 2 features to
in_app_purchase_storekit:SK2Transaction.unfinishedTransactions()- Queries only unfinished transactions for better performanceSK2PurchaseDetails.appAccountToken- Exposes user UUID for backend integrationMotivation
Transaction.unfinishedAPI.appAccountTokenalready exists when making purchases, but reading it back from transaction details was missing.Changes
unfinishedTransactions()Transaction.unfinishedAPIappAccountTokenproperty inSK2PurchaseDetailsBreaking Changes
None. Both features are additive and maintain full backward compatibility.