Add public buildModeFor overloads and wire Flutter dependencies through the new DSL - #3
Closed
reidbaker-agent wants to merge 332 commits into
Closed
Add public buildModeFor overloads and wire Flutter dependencies through the new DSL#3reidbaker-agent wants to merge 332 commits into
reidbaker-agent wants to merge 332 commits into
Conversation
reidbaker-agent
force-pushed
the
agp-internal-utils
branch
from
July 22, 2026 15:54
ac19fbe to
8568ecf
Compare
reidbaker-agent
force-pushed
the
agp-buildmode-deps
branch
from
July 22, 2026 15:54
e66a279 to
0e7b3ee
Compare
reidbaker-agent
force-pushed
the
agp-internal-utils
branch
from
July 28, 2026 13:35
8568ecf to
0caf4c3
Compare
reidbaker-agent
force-pushed
the
agp-buildmode-deps
branch
from
July 28, 2026 13:35
0e7b3ee to
d177502
Compare
reidbaker-agent
force-pushed
the
agp-internal-utils
branch
from
July 28, 2026 13:37
0caf4c3 to
47b3ac5
Compare
reidbaker-agent
force-pushed
the
agp-buildmode-deps
branch
3 times, most recently
from
July 29, 2026 20:42
f068e04 to
3996bce
Compare
reidbaker
force-pushed
the
agp-buildmode-deps
branch
from
July 31, 2026 18:07
3996bce to
5a528c3
Compare
reidbaker
force-pushed
the
agp-internal-utils
branch
from
July 31, 2026 18:07
47b3ac5 to
4aefffe
Compare
…DAP clients (flutter#190455) This is functionality from the legacy DAPs that was missed when migrating to the SDK. Some kinds of errors (such as Overflow errors) includes nodes to deep-link into DevTools. By forwarding these to the IDE, instead of just a text link the IDE can show a toast notification with a button to open the embedded version of DevTools. This is part of the work to fix Dart-Code/Dart-Code#6134. There are some additional fixes required elsewhere, but once those are resolved, this will result in a notification like this: <img width="533" height="226" alt="image" src="https://github.com/user-attachments/assets/8989a67f-3ac2-4d87-b583-f56704ca8872" /> Clicked "Inspect Widget" will open the embedded Inspector on the correct widget. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
…d non-ASCII font rendering (flutter#180235) # Separate ARM64 Linux Desktop and Embedded engine builds to fix CJK and non-ASCII font rendering ## Problem On ARM64 Linux desktop environments (GNOME, KDE, etc.), **Chinese characters and other non-ASCII text render as squares** in Flutter applications. This affects production applications like Ubuntu App Center which uses Flutter on ARM64. ### Root Cause The ARM64 Linux engine builds (`linux_arm_host_engine`) were missing the `--enable-fontconfig` flag, unlike x64 Linux builds which have it. Without fontconfig support, the Flutter GTK engine cannot discover and load system fonts properly on desktop Linux distributions. ### Why This Wasn't Caught Earlier The same build configuration was used for both: - **Desktop environments** (GNOME/KDE with GTK) - requires fontconfig - **Embedded/IoT systems** (headless or custom UI) - doesn't need fontconfig This conflation meant adding fontconfig would unnecessarily bloat embedded deployments. --- ## Solution This PR **separates ARM64 Linux builds into two distinct configurations**, following the same architecture pattern as x64 Linux: ### 1. Desktop Builds (NEW: `linux_arm_host_desktop_engine`) - **Target**: GNOME/KDE desktop environments - **Includes**: `--enable-fontconfig` for proper font rendering - **Builds**: `flutter_gtk` library for profile/debug/release modes - **Use case**: Desktop applications (App Center, desktop Flutter apps) ### 2. Embedded/IoT Builds (MODIFIED: `linux_arm_host_engine`) - **Target**: Headless or custom UI embedded systems - **Excludes**: fontconfig dependency (not needed) - **Builds**: embedder library, artifacts, Dart SDK, Impeller SDK - **Use case**: Raspberry Pi, embedded Linux, IoT devices --- ## Changes Made 1. **Created**: `engine/src/flutter/ci/builders/linux_arm_host_desktop_engine.json` - New builder configuration for ARM64 desktop - Adds `--enable-fontconfig` to all build modes - Produces `flutter_gtk` libraries 2. **Modified**: `engine/src/flutter/ci/builders/linux_arm_host_engine.json` - Now focuses on embedded/IoT builds only - Removed `flutter_gtk` targets (moved to desktop config) - Removed `--enable-fontconfig` (not needed for embedded) - Removed profile/release configs (only build embedder in debug) 3. **Modified**: `engine/src/flutter/.ci.yaml` - Registered new `linux_arm_host_desktop_engine` builder - Same CI configuration as existing ARM64 builder --- ## Testing & Verification ### ✅ Manual Testing - **Platform**: Ubuntu 25.10 on ARM64 (Parallels VM on Apple M4) - **Application**: Ubuntu App Center (Snap package) - **Flutter Version**: 3.38.1 **Before** (Official ARM64 build without fontconfig): - Chinese characters display as squares (□□□) - All CJK and non-Latin text affected **After** (Custom build with fontconfig): - Chinese characters render correctly using system fonts - All text displays properly ### Test Commands Used ```bash # Compile custom engine with fontconfig ./flutter/tools/gn --runtime-mode release --enable-fontconfig \ --target-os linux --linux-cpu arm64 --no-goma ninja -C out/linux_release_arm64 # Verify fontconfig linking readelf -d out/linux_release_arm64/libflutter_linux_gtk.so | grep fontconfig # Output: libfontconfig.so.1 # Replace engine in App Center snap (via mount) sudo mount --bind custom_libflutter_linux_gtk.so \ /snap/snap-store/current/bin/lib/libflutter_linux_gtk.so # Launch App Center - Chinese text now renders correctly snap-store ``` --- ## Architecture Benefits ✅ **Decoupling**: Desktop and embedded builds are now independent ✅ **No Breaking Changes**: Embedded builds remain unchanged (same targets, no fontconfig) ✅ **Transparent**: Flutter Tool and VS Code don't need modifications ✅ **Consistency**: Follows the same pattern as x64 Linux architecture ✅ **Minimal Impact**: Only adds new builds, doesn't modify existing ones --- ## Downstream Impact ### Who Benefits - ARM64 Linux desktop users (Ubuntu, Fedora, Debian on ARM) - Applications using Flutter GTK on ARM64 (App Center, custom desktop apps) - Developers targeting ARM64 desktop environments ### Who Is NOT Affected - Embedded/IoT users (they continue using `linux_arm_host_engine` as before) - x64 Linux users (already have fontconfig) - Mobile platforms (Android, iOS) - Windows/macOS platforms --- ## Related Issues Fixes flutter#139293 flutter#90951 --- ## Checklist - [x] I read the [Contributor Guide](https://github.com/flutter/flutter/blob/master/CONTRIBUTING.md) and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene](https://github.com/flutter/flutter/wiki/Tree-hygiene) wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo). - [x] I signed the CLA. - [x] I listed at least one issue that this PR fixes in the description above. (Fixes flutter#139293) - [x] I updated/added relevant documentation (comments in JSON files). - [x] I added new tests to check the change I am making, or this PR is test-exempt. (CI infrastructure change) - [x] All existing and new tests are passing. (JSON syntax verified) --- ## Core Reviewers @flutter/engine-ci @flutter/linux-desktop --- ## Screenshots ### Before (Without Fontconfig) Chinese text displays as squares in Ubuntu App Center on ARM64: ``` 标题: □□□□□ 描述: □□□□□□□□ ``` ### After (With Fontconfig) Chinese text renders correctly: ``` 标题: 应用中心 描述: 发现和安装应用程序 ``` *(Actual screenshots can be added to the PR after creation)* --- ## Additional Context This issue was discovered while investigating font rendering problems in Ubuntu App Center on ARM64 systems. The fix has been verified to work with Flutter 3.38.1 on Ubuntu 25.10 ARM64. The architecture follows the principle of **separation of concerns**: desktop applications need system font integration via fontconfig, while embedded systems typically use bundled fonts and don't need this dependency. --------- Co-authored-by: John McDole <codefu@google.com> Co-authored-by: Jason Simmons <jason-simmons@users.noreply.github.com>
…lutter#188901) <!-- 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 --> Fixes flutter#177509 This updates `flutter_tools` UTF-8 error detection so that a valid `U+FFFD` replacement character is not mistaken for malformed UTF-8. Previously, `Utf8Decoder` decoded bytes with `allowMalformed: true` and then treated any decoded string containing `U+FFFD` as evidence that the original bytes were malformed. That incorrectly rejects valid UTF-8 input such as `EF BF BD`, which is the legitimate encoding of `U+FFFD`. This PR changes the decoder to use a strict UTF-8 decoder when `reportErrors` is enabled. If strict decoding succeeds, the decoded string is returned as-is. If strict decoding throws `FormatException`, the input is decoded again with `allowMalformed: true` only to preserve the existing `ToolExit` diagnostic message and source bytes. The permissive `reportErrors: false` path is unchanged and continues to decode malformed bytes with replacement characters. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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: Ben Konyi <bkonyi@google.com>
…ller tests on Mac Minis used by CI (flutter#189813)" (flutter#190560) This reverts commit 285bf67. This was an experiment that tried to reduce the frequency of flakes when running Impeller OpenGLESSDF rendering tests. It is obsolete now that these tests were disabled by flutter#190469
Enables Gradle CI Cache for single test target. ## Pre-launch Checklist - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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.
…r#190622) flutter/packages@3498b9d...b1424e2 2026-08-05 saurabhmirajkar000@gmail.com [go_router] Document regex constraints for path parameters (flutter/packages#12281) 2026-08-04 fluttergithubbot@gmail.com Sync release-cupertino_ui-0.0.3 to main (flutter/packages#12367) 2026-08-04 43054281+camsim99@users.noreply.github.com [camera_android_camerax] Fix video recording after backgrounding app (flutter/packages#12145) 2026-08-04 jmccandless@google.com [material_ui and cupertino_ui] Remove workspaces and fix CI (flutter/packages#12351) 2026-08-04 fluttergithubbot@gmail.com Sync release-material_ui-0.0.3 to main (flutter/packages#12352) 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 flutter-ecosystem@google.com 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
… test command (flutter#189193) (flutter#190541) Fixes flutter#189193 In `TestCommand`, `--tags` (`-t`) and `--exclude-tags` (`-x`) were registered using `addOption(...)` instead of `addMultiOption(...)`. This scalar option definition retained only the last CLI occurrence when passed multiple times (`-t a -t b` became `'b'`). Additionally, default comma splitting in `package:args` mangled composite boolean selector expressions (`||`, `&&`, `!`) before forwarding arguments to `package:test`. This PR migrates `--tags` and `--exclude-tags` to `addMultiOption(..., splitCommas: false)` in `TestCommand` and updates `FlutterTestRunner` to forward all `--tags` and `--exclude-tags` values sequentially to `dart test`. ## Testing - Added hermetic regression test `passes boolean selectors and multiple tags/exclude-tags through to package:test` in `packages/flutter_tools/test/commands.shard/hermetic/test_test.dart`.
The `snippets` test fails with one error on HEAD. Apparently it's not run on CI. This PR fixes the failure by removing the test case that verifies `--no-format-output`. The CLI option was removed in https://github.com/flutter/flutter/pull/161347/changes . A deadcode parameter is also removed. This PR also adds this test to CI. ## Pre-launch Checklist - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [ ] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [ ] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [ ] 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 `///`). - [ ] 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. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
…ation_golden_test (flutter#190581) Part of flutter#190301 Renames the specific primitive_shape_test to a more generic engine_integration_golden_test. The original lib/main.dart of the test is renamed lib/primitive_shape_main.dart. We anticipate adding further tests with their own main.dart in lib/, and importing and using each one in integration_test/engine_integration_golden_test.dart. <!-- 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 --> *Replace this paragraph with a description of what this PR is changing or adding, and why. Consider including before/after screenshots.* *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.* *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
…ing. (flutter#189192) When attempting to test multiple integration tests, the `DesktopLogReader` would cause a failure because `DesktopLogReader._inputController` was closed, so a new process couldn't use it. `DesktopLogReader` now keeps a persistent log reader per device that isn't closed on process termination, which fixes the issue for integration tests. However, `ProtocolDiscovery` requires the stream to close to detect that a launched process exited without providing a VM Service. This introduces `SingleLaunchLogReader`, which is specifically used for VM discovery, to satisfy that requirement. This is in line with how Android deals with the same issue. refs: flutter#135673 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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: Ben Konyi <bkonyi@google.com>
…ostics (flutter#190112) Fix impellerc crash on Windows when paths contain Unicode characters, and improve diagnostics by capturing stdout/stderr and adding helpful hints. Fixes flutter#190233
…#190379) Related to flutter#189899. `RenderPass` memoizes its built pipeline behind a dirty flag, but the fixed-function setters all assign through `GetPipelineDescriptor`, which dirties unconditionally. Callers re-send the same cull mode, winding order, primitive type, and polygon mode ahead of most draws, and rebind the same pipeline, so the memo was being invalidated on nearly every draw. These setters now compare before assigning and leave the state clean when nothing changed.
Reverts: [Enable Gradle cache for a single test target](flutter#190474) Initiated by: @mboetger Reason for reverting: broke the tree with spaces. Original PR Author: @mboetger Reviewed By: @jtmcdole The original PR description is provided below: Enables Gradle CI Cache for single test target. ## Pre-launch Checklist - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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.
…irement (flutter#183835) This changes flutter web's detection of wasm compatibility to be the expression emitted by dart2wasm. The expression was generated by passing `--require-js-string-builtin` to the dart2wasm compiler. Newer versions of browsers all support the `js-string` builtins nowadays. Apps running on browsers without `js-string` builtin support will not run in a performant way, so we'd not want to run the wasm version on them anyway. This is a preparation for dart2wasm to require the `js-string` builtin by default (i.e. we'll remove the `--require-js-string-builtin` flag and also remove the polyfill for `js-string` builtins). See [0] [0] https://dart-review.googlesource.com/c/sdk/+/488840 For reference of Safari testing on Dart: * [cl/347283](https://dart-review.googlesource.com/c/sdk/+/347283), [cl/348601](https://dart-review.googlesource.com/c/sdk/+/348601), [cl/348560](https://dart-review.googlesource.com/c/sdk/+/348560), [cl/371542](https://dart-review.googlesource.com/c/sdk/+/371542) added JavaScriptCore testing (command line version of Safari's JS engine) * [cl/426461](https://dart-review.googlesource.com/c/sdk/+/426461), [cl/501501](https://dart-review.googlesource.com/c/sdk/+/501501), [cl/501480](https://dart-review.googlesource.com/501480) added / will add Safari browser testing to Dart CI Co-authored-by: Mouad Debbar <mdebbar@google.com>
Testing CI stability without --disable-dev-shm-usage flag.
Migrates the platform_view example to import material_ui. Related to flutter#190093. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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.
…or real (flutter#190494) Marking types and type members internal prevents the swift compiler from marking the corresponding symbols (in the case of `@objc`, both the Swift and Objc symbols) visible. ~Unfortunately since the CI is still on Swift 6.2, so the ` -emit-clang-header-min-access` flag is not available. As a result the `engine/src/out/host_debug_unopt_arm64/gen/flutter/shell/platform/darwin/common/test_utils_swift/test_utils_swift.h` file swift compiler emits doesn't actually include the interface of `StringOutputWriter` since it's internal. The only workaround I found was to manually add the interface.~ Adding a bridging header fixed that. With these changes, when I build the iOS `Flutter.framework` with `enable-testing` set to false, the only visible swift symbols are from a class marked `@usableFromInline` (`_FlutterTraceScope`). And as gemini suggested I removed the `@inlinable` from that class. So no Swift symbols or internal objc symbols: ```bash nm -gUm out/ios_debug_sim_unopt_arm64/Flutter.framework/Flutter 00000000038d64b0 (__DATA,__common) external _FlutterEndOfEventStream 00000000038d64a8 (__DATA,__common) external _FlutterMethodNotImplemented 00000000037d5838 (__DATA_CONST,__const) external _FlutterSemanticsUpdateNotification 00000000037d5848 (__DATA_CONST,__const) external _FlutterViewControllerHideHomeIndicator 00000000037d5850 (__DATA_CONST,__const) external _FlutterViewControllerShowHomeIndicator 00000000037d5840 (__DATA_CONST,__const) external _FlutterViewControllerWillDealloc 00000000019bc8c4 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyBufferToTexture 00000000019bc9a8 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyTextureToBuffer 00000000019bca50 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyTextureToTexture 00000000019bc410 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_Initialize 00000000019bc5b0 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_Submit 00000000019c6df8 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultColorFormat 00000000019c7048 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultDepthStencilFormat 00000000019c7004 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultStencilFormat 00000000019c7174 (__TEXT,__text) external _InternalFlutterGpu_Context_GetMaxSamplerAnisotropy 00000000019c708c (__TEXT,__text) external _InternalFlutterGpu_Context_GetMinimumUniformByteAlignment 00000000019c70f4 (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsFramebufferRenderMipmap 00000000019c7134 (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsManuallyMippedTextures 00000000019c70cc (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsOffscreenMSAA 00000000019c6c30 (__TEXT,__text) external _InternalFlutterGpu_Context_InitializeDefault 00000000019c71b4 (__TEXT,__text) external _InternalFlutterGpu_Context_SupportsTextureCompression 00000000019c7230 (__TEXT,__text) external _InternalFlutterGpu_Context_SupportsTextureFormat 00000000019c9ca8 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Flush 00000000019c9720 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Initialize 00000000019c99f8 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_InitializeWithHostData 00000000019c9c48 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Overwrite 00000000019cc474 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Begin 00000000019cc6ec (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindIndexBufferDevice 00000000019cc4cc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindPipeline 00000000019ccb6c (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindTexture 00000000019cceb8 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindTextureIndexed 00000000019cc7fc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindUniformDevice 00000000019ccac4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindUniformDeviceIndexed 00000000019cc598 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindVertexBufferDevice 00000000019ccf54 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_ClearBindings 00000000019cd660 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Draw 00000000019cd6d4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_DrawIndexed 00000000019cbf98 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Initialize 00000000019cc0e4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorAttachment 00000000019ccf78 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorBlendEnable 00000000019ccfbc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorBlendEquation 00000000019cd4b0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetCullMode 00000000019cd0e8 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthCompareOperation 00000000019cc2f0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthStencilAttachment 00000000019cd0ac (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthWriteEnable 00000000019cd5f4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetPolygonMode 00000000019cd51c (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetPrimitiveType 00000000019cd168 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetScissor 00000000019cd3b4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetStencilConfig 00000000019cd148 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetStencilReference 00000000019cd2a0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetViewport 00000000019cd588 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetWindingOrder 00000000019d6208 (__TEXT,__text) external _InternalFlutterGpu_RenderPipeline_Initialize 00000000019e4898 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_GetShader 00000000019e4190 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_InitializeWithAsset 00000000019e44d8 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_InitializeWithBytes 00000000019e43a0 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_ReinitializeWithAsset 00000000019e473c (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_ReinitializeWithBytes 00000000019dc244 (__TEXT,__text) external _InternalFlutterGpu_Shader_DebugIsDirty 00000000019dc170 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformMemberOffset 00000000019dc0d0 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformStructIndex 00000000019dc04c (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformStructSize 00000000019dc120 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformTextureIndex 00000000019f2f64 (__TEXT,__text) external _InternalFlutterGpu_Surface_AcquireNextFrame 00000000019f2ff0 (__TEXT,__text) external _InternalFlutterGpu_Surface_DiscardFrame 00000000019f312c (__TEXT,__text) external _InternalFlutterGpu_Surface_GetBackingTextureCount 00000000019f3030 (__TEXT,__text) external _InternalFlutterGpu_Surface_GetCurrentImage 00000000019f2d4c (__TEXT,__text) external _InternalFlutterGpu_Surface_Initialize 00000000019f2f90 (__TEXT,__text) external _InternalFlutterGpu_Surface_PresentFrame 00000000019f3054 (__TEXT,__text) external _InternalFlutterGpu_Surface_Resize 00000000019f7650 (__TEXT,__text) external _InternalFlutterGpu_Texture_AsImage 00000000019f7674 (__TEXT,__text) external _InternalFlutterGpu_Texture_ImageTextureInfo 00000000019f7214 (__TEXT,__text) external _InternalFlutterGpu_Texture_Initialize 00000000019f7aec (__TEXT,__text) external _InternalFlutterGpu_Texture_InitializeFromImage 00000000019f75a0 (__TEXT,__text) external _InternalFlutterGpu_Texture_Overwrite 000000000388da18 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterAppDelegate 0000000003890a20 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBasicMessageChannel 0000000003890bb0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBinaryCodec 00000000038909d0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBinaryMessengerRelay 000000000388dae0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterCallbackCache 000000000388da90 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterCallbackInformation 000000000388db58 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterDartProject 000000000388dd88 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngine 000000000388df18 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngineGroup 000000000388def0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngineGroupOptions 0000000003890a70 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterError 0000000003890b60 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEventChannel 000000000388df68 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterHeadlessDartRunner 0000000003890c50 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterJSONMessageCodec 0000000003890ca0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterJSONMethodCodec 0000000003890ac0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterMethodCall 0000000003890b10 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterMethodChannel 000000000388e4b8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterPluginAppLifeCycleDelegate 000000000388e5a8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterPluginSceneLifeCycleDelegate 000000000388e558 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterSceneDelegate 0000000003890d68 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardMessageCodec 0000000003890db8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardMethodCodec 0000000003890ea8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardReader 0000000003890d40 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardReaderWriter 0000000003890e08 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardTypedData 0000000003890e58 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardWriter 0000000003890c00 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStringCodec 000000000388e828 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterTextInputView 000000000388eaa8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterTextureRegistryRelay 000000000388ebe8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterViewController 000000000388da40 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterAppDelegate 0000000003890a48 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBasicMessageChannel 0000000003890bd8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBinaryCodec 00000000038909f8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBinaryMessengerRelay 000000000388dab8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterCallbackCache 000000000388da68 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterCallbackInformation 000000000388db80 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterDartProject 000000000388de00 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngine 000000000388df40 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngineGroup 000000000388dec8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngineGroupOptions 0000000003890a98 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterError 0000000003890b88 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEventChannel 000000000388df90 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterHeadlessDartRunner 0000000003890c78 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterJSONMessageCodec 0000000003890cc8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterJSONMethodCodec 0000000003890ae8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterMethodCall 0000000003890b38 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterMethodChannel 000000000388e4e0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterPluginAppLifeCycleDelegate 000000000388e5d0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterPluginSceneLifeCycleDelegate 000000000388e580 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterSceneDelegate 0000000003890d90 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardMessageCodec 0000000003890de0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardMethodCodec 0000000003890ed0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardReader 0000000003890ef8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardReaderWriter 0000000003890e30 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardTypedData 0000000003890e80 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardWriter 0000000003890c28 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStringCodec 000000000388e968 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterTextInputView 000000000388ead0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterTextureRegistryRelay 000000000388ec10 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterViewController 00000000022b91c0 (__TEXT,__const) external _kDartSnapshotData 0000000001eb0440 (__TEXT,__text) external _kDartSnapshotText 0000000002dd0e40 (__TEXT,__const) external _kPlatformStrongDill 00000000037b76a0 (__TEXT,__const) external _kPlatformStrongDillSize ``` ## Pre-launch Checklist - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [ ] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [ ] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [ ] 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 `///`). - [ ] 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. - [ ] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
`et` performs formatting by diffing the repo file against the output of the formatter for that file, which it passes to stdin (`-`). This results in `git diff` outputting the "to" path as `-`. `et` then tries to rewrite that `-` to the repo path. For users with certain git settings such as `diff.mnemonicPrefix` or `diff.noprefix` the diff path prefixes emitted in the two-line ---/+++ file pair will differ from the default `a/` and `b/`, which the existing `et format` code assumes. The end result is a (silent) failure to rewrite the "to" path, with the result that when we apply the diff, the file is rewritten to a file named `-` at the root of the repo. We now explicitly pass git diff `--src-prefix` and `--dst-prefix` flags, which override git diff settings such as `diff.mnemonicPrefix`, `diff.noprefix`, `diff.srcPrefix` and `diff.dstPrefix`. I've extracted the diff job construction into a method that we reuse where needed and added some paranoid error checking to ensure we actually rewrite the path correctly. <!-- 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 --> ## Pre-launch Checklist - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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, or I don't feel like filing one. - [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]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
…90971) BoxConstraints.lerp has the signature ```dart static BoxConstraints? lerp(BoxConstraints? a, BoxConstraints? b, double t) ``` Overshooting curves, such as `Curves.easeOutBack`, extrapolate t outside of the range 0.0 to 1.0. Without normalizing, the results can be invalid, causing crashes. This PR normalizes the returned `BoxConstraints`. Fixes [AnimatedContainer throws Exception when animating height with easeOutBack curve.](flutter#37559)
flutter#191125) Migrates `verifyTabooDocumentation` from `dev/bots/analyze.dart` to an AST-based `AnalysisRule` (`TabooDocumentation`) in `dev/flutter_analyzer_plugin`. ## Changes - Implements `TabooDocumentation` in `dev/flutter_analyzer_plugin/lib/src/rules/taboo_documentation.dart`. - Adds unit tests in `dev/flutter_analyzer_plugin/test/taboo_documentation_test.dart`. - Registers `TabooDocumentation` in `dev/flutter_analyzer_plugin/lib/main.dart`. - Removes `verifyTabooDocumentation` and `'taboo'` from `dev/bots/analyze.dart` and `dev/bots/test/analyze_test.dart`.
…1145) https://skia.googlesource.com/skia.git/+log/e0ecec6708b8..b09fcee5f9a9 2026-08-14 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2026-08-14 jmbetancourt@google.com [skcapture] Structure captures to group draws by recording 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 jimgraham@google.com,jmbetancourt@google.com,kjlubick@google.com 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
…r#191146) https://dart.googlesource.com/sdk.git/+log/609ae67507a4..ad45e1b32109 2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.14.0-134.0.dev 2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.14.0-133.0.dev 2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.14.0-132.0.dev 2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.14.0-131.0.dev 2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.14.0-130.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 dart-vm-team@google.com,jimgraham@google.com 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
) https://skia.googlesource.com/skia.git/+log/b09fcee5f9a9..653397c6be15 2026-08-14 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from f98a3773ade5 to b0be4f8861ed (14 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 jimgraham@google.com,jmbetancourt@google.com,kjlubick@google.com 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
As of flutter#180531 the Xcode minimum is Xcode 15. Remove dead code that checked < 15. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
LicenseEntryWithLineBreaks recognized CRLF at paragraph boundaries, but addLine() did not strip the trailing carriage return when collecting hard-wrapped lines within a paragraph. As a result, CRLF-terminated license text kept `\r` characters in LicenseParagraph.text and rendered differently from the equivalent LF text. Drop a trailing `\r` in addLine() so a CRLF line ending is treated the same as an LF line ending. Add a test covering reflow and paragraph splitting with CRLF input. Fixes flutter#189313 ## Local validation - `flutter test test/foundation/licenses_test.dart` passed. - `flutter analyze --flutter-repo lib/src/foundation/licenses.dart test/foundation/licenses_test.dart` passed. - `git diff --check` passed. I also ran the full `flutter test` locally. It failed due to unrelated golden pixel diffs outside this change; the new `licenses_test.dart` case passed during that run. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
…ssellation scaling (flutter#191102) `Tessellator::StrokedCircle` delegated to `GenerateStrokedCircle` whenever `half_width > 0`, but that generator zig-zags between an inner and an outer circle and asserts `half_width < radius`, since the inner radius goes negative once the stroke is at least as wide as the radius. That case should render as a filled circle whose radius reaches the outer edge of the stroke. We were hitting this when enabling construction lines during debugging. With `debugPaintSizeEnabled` set, `RenderSliver.debugPaint` draws a circle of radius 2.0 with a stroke width of 4.0, so toggling construction lines on in unopt builds triggered this `FML_DCHECK`: ``` [FATAL:flutter/impeller/tessellator/tessellator.cc(755)] Check failed: data.half_width > 0 && data.half_width < data.radii.width. ``` `GenerateStrokedArc` had the same issue but didn't assert: the inner radii went negative and the inner edge folded back through the centre of the oval, producing a self-intersecting strip. We now clamp to the centre. Also fixed a small bug in stroked circle division count scaling. `Tessellator::StrokedCircle` computes its quadrant divisions based on the radius. The radius in this case should be the circle radius + the stroke half-width to get the outer radius of the resulting filled circle. The effect would be under-tessellation of the outer edge that gets worse with increasing half-width. This tosses a pair of brackets on to scale the whole thing. Fixes: flutter#190597 <!-- 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 --> ## Pre-launch Checklist - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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]. If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance. **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 [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
…... (flutter#191152) 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 jimgraham@google.com,zra@google.com 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
) https://skia.googlesource.com/skia.git/+log/653397c6be15..22fdd3bee587 2026-08-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from b0be4f8861ed to 9c1420718b16 (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 jimgraham@google.com,jmbetancourt@google.com,kjlubick@google.com 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
…analyzer_plugin (flutter#191127) Migrates `verifyIssueLinks` and `verifyRepositoryLinks` from `dev/bots/analyze.dart` to AST-based `AnalysisRule`s in `dev/flutter_analyzer_plugin`. ## Changes - Implements `IssueLinkSyntax` in `dev/flutter_analyzer_plugin/lib/src/rules/issue_link_syntax.dart`. - Implements `RepositoryLinkSyntax` in `dev/flutter_analyzer_plugin/lib/src/rules/repository_link_syntax.dart`. - Adds unit tests in `dev/flutter_analyzer_plugin/test/issue_link_syntax_test.dart` and `dev/flutter_analyzer_plugin/test/repository_link_syntax_test.dart`. - Registers both rules in `dev/flutter_analyzer_plugin/lib/main.dart`. - Removes `verifyIssueLinks`, `verifyRepositoryLinks`, `'issue-links'`, and `'repository-links'` from `dev/bots/analyze.dart` and `dev/bots/test/analyze_test.dart`.
… runner (flutter#190734) Part of the tool extensibility prototype effort. Implements the generic JSON-RPC protocol framing, capability handshake, and isolate runner infrastructure for Flutter tool extensions: - `ToolExtensionEntryPoint`, `ToolExtensionService`, `ToolExtensionRunner` in `package:flutter_tools_extension`. - Host-side `ExtensionManager` and `ExtensionDiscovery` in `package:flutter_tools`. Part of flutter#190746 Part of flutter#190755 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
…dart (flutter#191128) Removes the legacy `dev/bots/custom_rules/` folder and `private-lints` validation in `dev/bots/analyze.dart` now that all rules have been migrated to `dev/flutter_analyzer_plugin`. ## Changes - Deletes `dev/bots/custom_rules/` directory and all legacy rule implementations. - Removes `_verifyPrivateLints` and `'private-lints'` from `dev/bots/analyze.dart`. - Removes obsolete tests from `dev/bots/test/analyze_test.dart`. - Updates documentation reference in `packages/flutter/lib/src/widgets/framework.dart`.
…le path (flutter#191159) ## Description This PR optimizes static analysis performance in `dev/flutter_analyzer_plugin` by early-exiting in `registerNodeProcessors` based on file path for rules that only target specific files: - `IssueLinkSyntax`: Early exits for unit tests (`_test.dart`) and the rule's definition file (`issue_link_syntax.dart`), removing `_shouldSkip()` from the visitor. - `IntegrationTestTimeouts`: Early exits for non-integration-test files (files not containing `test_driver` or `test.dart`), removing the redundant per-invocation file path check in `visitMethodInvocation`. - `NoBadImportsInFlutter`: Early exits for files not in `packages/flutter/lib/src/`, removing redundant path checks in `visitImportDirective`. This avoids unnecessary AST visitor registration and listener callbacks across non-applicable files in the repository. Addresses feedback from @srawlins in flutter#191127. ## Related Issues - Follow-up to flutter#191127 ## Tests - All existing tests in `dev/flutter_analyzer_plugin/test/` continue to pass.
…... (flutter#191172) 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 jimgraham@google.com,zra@google.com 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
) https://skia.googlesource.com/skia.git/+log/22fdd3bee587..62fadc19be71 2026-08-16 skia-autoroll@skia-public.iam.gserviceaccount.com Roll SKP CIPD package from 572 to 573 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 jimgraham@google.com,kjlubick@google.com,robertphillips@google.com 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
) https://skia.googlesource.com/skia.git/+log/62fadc19be71..95a3bf341a38 2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 9c1420718b16 to 8ab3e1d4c253 (1 revision) 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 jimgraham@google.com,kjlubick@google.com,robertphillips@google.com 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
) https://skia.googlesource.com/skia.git/+log/95a3bf341a38..d40f20074be1 2026-08-17 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 jimgraham@google.com,kjlubick@google.com,robertphillips@google.com 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
…lutter#190624) Replaces 17 identical occurrences of boilerplate `BuildSwiftPackageUtils` dependency injection constructor blocks with a single file-local factory helper. * Adds top-level private `_createTestUtils` helper using named required parameters to match suite idioms. * Removes over 140 lines of duplicate test setup code while maintaining 100% test behavior parity. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [AI contribution guidelines]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines [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
) https://skia.googlesource.com/skia.git/+log/d40f20074be1..88b2a86a3eeb 2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll debugger-app-base from 9c5025e806af to 908aa7ccc3a9 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 jimgraham@google.com,kjlubick@google.com,robertphillips@google.com 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
…1195) https://skia.googlesource.com/skia.git/+log/88b2a86a3eeb..d07795eebb11 2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE from fff51488e419 to 60ccf9a219bd (7 revisions) 2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia Infra from ba16fbcff21e to 57107b5a16cb (10 revisions) 2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn from 086c465ef70e to a8db5510cc0e (14 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 jimgraham@google.com,kjlubick@google.com,robertphillips@google.com 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
…gh the new DSL Phase P2 of the AGP public-API migration (flutter#180137, flutter#166550): - buildModeFor gains a (buildTypeName, isDebuggable) core overload and a new-DSL BuildType overload. Application and dynamic-feature build types use their public isDebuggable flag; library build types have no public debuggable signal at DSL scope, so the conventional "debug" name is used for them. The legacy com.android.builder.model.BuildType overload remains for the variant-scope call sites that migrate in later phases. - addFlutterDependencies (engine/embedding deps) now takes a new-DSL BuildType, and FlutterPlugin registers it via the wrapper's buildTypes container instead of the legacy BaseExtension. - PluginHandler's three dependency-wiring loops (per-build-type Api wiring, embedding deps, plugin-to-plugin deps) iterate the wrapper container. The build-type copy block still uses the legacy container and internal.dsl.BuildType; that is phase P3. - build.gradle.kts accepts -PagpVersion= so CI can compile and test the plugin against the AGP 9 line in addition to the default (the public DSL is not binary-compatible between AGP 8 and 9 everywhere), and a new validateNoCommonExtensionInBytecode task fails the build if any compiled main class references CommonExtension (the known-broken type that AgpCommonExtensionWrapper exists to avoid). - android_run_flutter_gradle_plugin_tests_test.dart gains a second test running the suite with -PagpVersion=<templateAndroidGradlePluginVersion>. - PluginHandlerTest no longer depends on exhausted-iterator mock behavior; the wrapper container returns a fresh iterator per call. Verification note: FGP unit tests could not be executed in this sandbox (network policy blocks dl.google.com); run 'gradle test' and 'gradle -PagpVersion=9.1.0 test' in packages/flutter_tools/gradle in CI. Revert-safe until P3 lands.
reidbaker
force-pushed
the
agp-buildmode-deps
branch
from
August 17, 2026 16:46
8373302 to
f9e55f7
Compare
# Conflicts: # packages/flutter_tools/gradle/build.gradle.kts
10 tasks
Owner
Author
|
closed in favor of https://github.com/flutter/flutter/pull/191218/changes |
okorohelijah
pushed a commit
to okorohelijah/flutter
that referenced
this pull request
Aug 17, 2026
…90957) This is PR 2 of 11 in the AGP 9.1.0 / public `gradle-api`/ newdls migration stack. This PR extracts some common utilities used in the Flutter Gradle Plugin to internal functions, to be used in upcoming PRs in this stack. It also introduces a typesafe CompileSdkVersion that handles comparisons between api versions and preview versions which are strings. First attempt was here flutter#190949 this pr includes my feedback from that first review. The first attempt did not follow the pattern of having the agent account open the pr because of rebase shenanigans that ended up touching freeze.yml. --- Standard review context for this pr stack This is PR is part of an 11 pr stack to migrate the "newdsl" `gradle-api` specifically in agp 9.1.0. The complete stack has pass pre submits, post submits and customer tests. https://flutter-dashboard.appspot.com/#/build?repo=flutter&branch=experimental/agp-gradle-api All of the code was LLM authored. A mix of manual prompting, automatic prompting, several models and adversarial review. The combined sessions are enough that I cannot include relevant prompts like I have been doing on other prs. If you want to review the pr stack you can find it here. These prs will be abandoned/closed as prs land into flutter/flutter. 1. reidbaker-agent#1 (branch: agp-api-doc) 2. reidbaker-agent#2 (branch: agp-internal-utils) 3. reidbaker-agent#3 (branch: agp-buildmode-deps) 4. reidbaker-agent#4 (branch: agp-plugin-buildtypes) 5. reidbaker-agent#5 (branch: agp-ndk-fallback) 6. reidbaker-agent#6 (branch: agp-assets-onvariants) 7. reidbaker-agent#7 (branch: agp-apk-copy-versioncode) 8. reidbaker-agent#8 (branch: agp-add-to-app) 9. reidbaker-agent#9 (branch: agp-aar-script) 10. reidbaker-agent#10 (branch: agp-newdsl-flip) 11. reidbaker-agent#11 (branch: agp-gradle-api) This work is urgent in the sense that we are worried that android will publish agp 10 with no opt out but not so urgent that we are willing to break flutter users because we didn't review or understand the code because we were in a rush. Breaking changes are expected as part of this work. There are patterns the android team explicitly does not want apps to use and apis that have no equivalent. As part of the effort to ensure this work does not slip into ai slop, prs from this stack will be reviewed by me (@reidbaker) before asking for review. Then we will have 2 android expert reviewers also review the every pr. --- Agent authored description. This is PR 2 of 11 in the AGP 9.1.0 / public `gradle-api` migration stack. This PR extracts some common utilities used in the Flutter Gradle Plugin to internal functions, to be used in upcoming PRs in this stack. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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: reidbaker-agent <reidbaker@google.com> Co-authored-by: Reid Baker <1063596+reidbaker@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is PR 3 of 11 in the AGP 9.1.0 / public
gradle-api/ newdsl migration stack.This PR introduces public
buildModeForoverloads supporting modernApplicationBuildType,LibraryBuildType, andDynamicFeatureBuildType, and wires Flutter dependencies through the new AGP 9.1.0 DSL.Depends on flutter#190957 (PR 2).
Standard review context for this pr stack
This is PR is part of an 11 pr stack to migrate the "newdsl"
gradle-apispecifically in agp 9.1.0.The complete stack has passed presubmits, postsubmits, and customer tests: https://flutter-dashboard.appspot.com/#/build?repo=flutter&branch=experimental/agp-gradle-api
All of the code was LLM authored. A mix of manual prompting, automatic prompting, several models and adversarial review. The combined sessions are enough that I cannot include relevant prompts like I have been doing on other prs.
If you want to review the pr stack you can find it here. These prs will be abandoned/closed as prs land into flutter/flutter.
This work is urgent in the sense that we are worried that android will publish agp 10 with no opt out but not so urgent that we are willing to break flutter users because we didn't review or understand the code because we were in a rush.
Breaking changes are expected as part of this work. There are patterns the android team explicitly does not want apps to use and apis that have no equivalent.
As part of the effort to ensure this work does not slip into ai slop, prs from this stack will be reviewed by me (@reidbaker) before asking for review. Then we will have 2 android expert reviewers also review every pr.
Agent authored description.
This is PR 3 of 11 in the AGP 9.1.0 / public
gradle-apimigration stack (flutter#180137, flutter#166550).buildModeForoverloads supporting modern AGPBuildTypeDSL objects (ApplicationBuildType,DynamicFeatureBuildType,LibraryBuildType).CompileSdkVersionwith invariant validation (apiLevelxorpreviewCodename).ModelBuildType,DslBuildType,InternalDslBuildType).addFlutterDependenciesandPluginHandlerto iterateAgpCommonExtensionWrapper.buildTypes.build.gradle.ktswith multi-AGP test capability (-PagpVersion=) and bytecode check (:validateNoCommonExtensionInBytecode).CompileSdkVersion, build mode resolution, and dependency wiring under both AGP 8.11.1 and 9.1.0.Pre-launch Checklist
///).