Repository navigation
Conversation
…r#187928) flutter/packages@1b56cde...b78ad83 2026-06-12 48776784+mackings@users.noreply.github.com [camera] Fix web facingMode capability handling (flutter/packages#11728) 2026-06-11 engine-flutter-autoroll@skia.org Roll Flutter from c0a1129 to 8bdce07 (13 revisions) (flutter/packages#11885) 2026-06-11 github.com@h-h.win [pigeon] make swift enum CaseIterable (flutter/packages#11702) 2026-06-11 engine-flutter-autoroll@skia.org Roll Flutter from 66aaa9a to c0a1129 (17 revisions) (flutter/packages#11881) 2026-06-10 stuartmorgan@google.com [ci] Allow mustache_template deps (flutter/packages#11882) 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
…7926) https://skia.googlesource.com/skia.git/+log/cadbde1ec4b7..8c89bf2b0ee3 2026-06-12 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2026-06-12 arthursonzogni@chromium.org Specialize sk_is_trivially_relocatable for raw_ptr and raw_ref 2026-06-12 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2026-06-12 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from d3bbae038752 to d8ab95e03469 (6 revisions) 2026-06-12 ragsharma@microsoft.com Export SkFontMgr::Request methods across the DLL boundary 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 jsimmons@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
…lutter#187876) Add timeouts to stopApp and uninstallApp Fixes: flutter#187785 ## 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.
…ate (flutter#187218) This CL addresses potential `std::vector` index out-of-bounds errors in the Flutter engine's Android native code, detected by libc++ hardening (go/cc-hardening-assertions). The issues stem from unsafe `&vector[0]` accesses on potentially empty vectors. 1. **platform_view_android_jni_impl.cc (SetViewportMetrics):** Added size checks before using `GetIntArrayRegion` on vectors created from JNI arrays, which can be empty. 2. **platform_view_android_delegate.cc (UpdateSemantics):** Moved buffer pointer initializations (e.g., `&buffer[0]`) and their usage to be within `!empty()` checks, preventing access on zero-sized vectors. These changes ensure safe vector handling, particularly when empty data is passed via JNI. See cl/922343981
…#187250) Fix a critical unit mismatch bug in "AndroidGradleBuilder._runGradleTask" where "kMaxRetryTime.inMicroseconds" (10,000,000) was mistakenly used instead of "inMilliseconds" (10,000) to cap the exponential backoff delay duration (which is calculated in milliseconds). This error allowed the backoff delay time to scale up uncapped to 2.77 hours instead of properly capping it at 10 seconds, significantly hanging failed/unstable builds. Added a robust unit test using "FakeAsync" to simulate 8 failing build retries instantaneously, verifying that wait times double correctly (100ms -> 200ms -> 400ms -> 800ms -> 1600ms -> 3200ms -> 6400ms) and cap cleanly at exactly 10000ms (10s) on the 8th retry. Additionally, added a safeguard to cap the exponent in the pow calculation at 7, preventing potential integer overflow on high retry counts (when maxRetries is null). Fixes: flutter#83971 ## 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: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…ray and use it in the APNG tests (flutter#187930)
…s by default (flutter#186080) Updates the Android Device Testing instructions in the `integration_test` README to natively support Kotlin-based projects (which is the default in modern Flutter templates). Retains the Java-based instructions as a clear fallback for older or legacy projects. Includes a complete Kotlin code snippet demonstrating the necessary usage of JUnit 4 `@Rule` combined with Kotlin's `@JvmField` annotation. Fixes flutter#62237 ## 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: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
fixes flutter#187738 ## 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
…lutter#186784) When a widget inside a **modal route** (bottom sheet, dialog, etc.) is selected in the widget inspector, the on-device overlay (selection box, layout guide lines, and tooltip) was drawn across the **entire screen**, including over the scaffold behind the modal. That made inspection misleading while a modal was open. This PR scopes inspector overlay behavior to the selected widget’s **modal route**: - **`_inspectAt`**: filters hit-test `selection.candidates` to the active modal route scope (prefers the current route when present; otherwise uses the smallest-area hit’s route; excludes offstage routes). - **`_InspectorOverlayLayer`**: skips drawing overlay candidates that do not share the selected render object’s `ModalRoute`. - **`InspectorSelection.clearOverlayCandidates()`**: clears stale candidates when selection is updated via tools (`setSelection`), without clearing `current` / `currentElement`. **Before:** selecting a sheet widget could show guide lines over main-screen widgets behind the sheet. **After:** overlay candidates and painted guides stay within the modal route scope. Manual verification: `examples/inspector_overlay_repro` (optional reviewer aid). No DevTools changes are required; the overlay is painted in `widget_inspector.dart`. Fixes flutter#186782 ## 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]. - [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. - [ ] 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
Optimize SHA hash calculation of generated APK by using chunked reading to prevent OutOfMemoryError. Fixes: flutter#171860. ## 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: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…ations (flutter#186031) Detects if multiple unique adb binaries are installed on the user's PATH or Android SDK platform-tools. Having multiple adb versions can lead to conflicting server instances and device detection failures during development. This change adds an `OperatingSystemUtils` dependency injection to `AndroidValidator`, resolves canonical paths using `resolveSymbolicLinksSync` to avoid duplicate symlink warnings, and outputs a hint in `flutter doctor` if multiple unique binaries are found. Fixes flutter#9709 ## 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.
…kends (flutter#179683) Enables the unit tests that verifies that compute shaders can be compiled. This unit test was previously only enabled for Metal backends, however compilation is supported on all backends (provided the ESSL language version is at least 310), except SKSL. Closes flutter#179708 ## Pre-launch Checklist - [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]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. --------- Co-authored-by: gaaclarke <30870216+gaaclarke@users.noreply.github.com>
Fixes flutter#187725, regression was introduced in flutter#187488 `DevFSFileContent.isModifiedAfter` returned `true` whenever the cached `_fileStat` was `null`, ignoring the time argument entirely. `_fileStat` is the sync baseline written only by `markClean()` the entries of a freshly built `AssetBundle` are never marked clean, so `_fileStat` is always `null` for them and `isModifiedAfter` always reported them as modified. ## 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 Co-authored-by: Kevin Moore <kevmoo@users.noreply.github.com>
…187932) Fixes flutter#187931. `DeviceBufferGLES::Flush()` merges dirty ranges from writer threads (for example the UI thread writing to a flutter_gpu host-visible buffer) while `BindAndUploadDataIfNecessary()` consumes the range on a reactor thread. The upload read the dirty range, called `glBufferSubData`, and cleared `dirty_range_` afterwards, so any flush landing during the upload was silently discarded and its data never reached the GPU. Draws could then read stale vertex/instance/uniform data, and when a buffer's only flush was lost, uninitialized buffer contents. This change guards `dirty_range_` with a mutex and takes and clears it before uploading, so a concurrent flush merges into a fresh range that the next bind uploads. Also adds `BufferSubData` to the GLES test mocks and a regression test that flushes from inside the mocked upload, which fails with the previous ordering. ## 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/ [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…#187542) ## 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
) Fixes flutter#187357 Adds a Flutter GPU surface API for rendering into a presentable color texture and drawing the latest presented image through Flutter. The surface owns the backing texture pool, tracks acquired frames, keeps the current image out of reuse, and waits for producer command buffer completion before a presented texture can be reused. The API is shaped as a small family so later destinations (a Flutter canvas, and eventually the window swapchain) can share one per-frame contract. `GpuSurface` and `GpuSurfaceFrame` are the destination-agnostic base types. This PR ships the first concrete destination, `GpuImageSurface`, which Flutter draws as a `ui.Image`. Two parts of the contract are uniform across all future destinations, even though the image destination never exercises them. `acquireNextFrame` is nullable, because a window swapchain can skip a frame. `present` returns a `GpuPresentStatus`, because a window swapchain can report that it needs reconfiguring. For an image surface, acquire always returns a frame and present always reports success, and the published image is read from `GpuImageSurface.currentImage`. The API keeps depth, stencil, MSAA, and intermediate attachments renderer-owned. `GpuSurfaceFrame.colorTexture` is only the final color target handed back to Flutter as a `ui.Image`. A minimal example. ```dart final surface = gpu.gpuContext.createImageSurface(width, height); final frame = surface.acquireNextFrame(); final commandBuffer = gpu.gpuContext.createCommandBuffer(); commandBuffer.createRenderPass( gpu.RenderTarget.singleColor( gpu.ColorAttachment(texture: frame.colorTexture), ), ); // Bind a pipeline, bind resources, and draw. frame.present(commandBuffer); commandBuffer.submit(); canvas.drawImageRect(surface.currentImage!, src, dst, paint); ``` Depth and stencil remain normal renderer-owned attachments. ```dart final frame = surface.acquireNextFrame(); final depthStencil = gpu.gpuContext.createTexture( gpu.StorageMode.deviceTransient, width, height, format: gpu.gpuContext.defaultDepthStencilFormat, enableRenderTargetUsage: true, enableShaderReadUsage: false, ); final commandBuffer = gpu.gpuContext.createCommandBuffer(); commandBuffer.createRenderPass( gpu.RenderTarget.singleColor( gpu.ColorAttachment(texture: frame.colorTexture), depthStencilAttachment: gpu.DepthStencilAttachment(texture: depthStencil), ), ); ``` Tests cover surface acquisition, presentation, current image behavior, discard, resize, and rendering a clear color into a surface. ## 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.
…7968) https://skia.googlesource.com/skia.git/+log/8c89bf2b0ee3..9ef46390c2d1 2026-06-13 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from d8ab95e03469 to 973a663c1394 (10 revisions) 2026-06-12 kjlubick@google.com Fix merge issues with src/base rename 2026-06-12 alexisdavidc@google.com Resolved a Data Race on fStream in SkTypeface_Mac 2026-06-12 jmbetancourt@google.com Move files from src/base to src/core 2026-06-12 michaelludwig@google.com [graphite] Use stable collection for static bindings 2026-06-12 fmalita@google.com Roll ICU to 78.2 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 jsimmons@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
`ShaderLibrary.fromAsset` now returns a `Future<ShaderLibrary?>` instead of loading synchronously. Asset reads can only be asynchronous on some platforms, so a synchronous loader cannot work everywhere. Making the single loader async gives every platform one consistent entry point and removes the need for downstream code to keep a separate async loading path. flutter_gpu is experimental, so this breaking change is cheap to make now. On platforms that read synchronously the returned Future still completes in the same turn, and the library is still cached by asset path, so hot reload is unaffected. The engine Dart tests and the renderer fixture harness are updated to await the loader. The fixture harness drains the microtask queue after invoking an entry point so the now-async fixtures run to completion. This is a breaking change to an experimental API, so no `flutter/tests` migration guide is needed. ## 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/ [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
) https://skia.googlesource.com/skia.git/+log/9ef46390c2d1..42355271a335 2026-06-13 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 973a663c1394 to 7bfc18a5a2d4 (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 jsimmons@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
…... (flutter#187975) 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 jsimmons@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
…7979) https://skia.googlesource.com/skia.git/+log/42355271a335..c52667607242 2026-06-13 skia-autoroll@skia-public.iam.gserviceaccount.com Manual roll ANGLE from 8e09325ebad4 to 81a96a84e6e6 (10 revisions) 2026-06-13 skia-autoroll@skia-public.iam.gserviceaccount.com Manual roll Dawn from 181bf8634c1d to 9533d3296a2a (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 jsimmons@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
…idth/height (flutter#187954) ## What's new? - Fixed bug where the width and height were swapped in `FlutterWindowsView::OnFrameGenerated` - Update the test to NOT use square dimensions so that the error would be obvious going forward fixes flutter#187922 ## 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.
…187587) This PR updates the cross imports checker to also check in `packages/flutter_test` and its subdirectories. Since `flutter_test` is testing related, I figured it is a good candidate to be put in the existing check. To dry run the new check, I fixed one of the violations, along with updating the relevant test. Fixes flutter#187528 *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. - [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
The docs no longer lie. ## 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
) https://skia.googlesource.com/skia.git/+log/c52667607242..4e2c9b5e4dad 2026-06-14 skia-autoroll@skia-public.iam.gserviceaccount.com Roll SKP CIPD package from 564 to 565 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 brettos@google.com,jsimmons@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
) https://skia.googlesource.com/skia.git/+log/4e2c9b5e4dad..f46928e7f50c 2026-06-14 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 7bfc18a5a2d4 to fdbd11044b7e (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 brettos@google.com,jsimmons@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
…... (flutter#187997) 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 jsimmons@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
Updating CHANGELOGs correctly is one of the most common issues for new contributors in flutter/packages. The way the docs were written highlights using the `NEXT` section for version-exempt changes first, because it's unusual and specific to our repo, but given how common it is for new contributors to use it when they shouldn't, it seems like this structure is likely confusing for the people who most need the docs. This reworks the whole section to discuss the common case first, then the uncommon case (now explicitly highlighted as uncommon) second. The new structure is a little longer, but should hopefully be more clear, which seems like a tradeoff worth trying given the frequency of issues. Also includes some minor fixes I noticed while I was in the file (grammar, inconsistent backticks for file names), and addition of references to the new flutter/core-packages.
) https://skia.googlesource.com/skia.git/+log/f46928e7f50c..0a3b8549cbf0 2026-06-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll skottie-base from a61634294908 to 870493f76166 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 brettos@google.com,jsimmons@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
…8697) https://skia.googlesource.com/skia.git/+log/3c462ad5a838..587d8befe1ee 2026-06-28 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from e44f14c91d6d to 782a48bf2db0 (1 revision) 2026-06-28 skia-autoroll@skia-public.iam.gserviceaccount.com Roll SKP CIPD package from 566 to 567 2026-06-28 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from dee190b82ff3 to e44f14c91d6d (1 revision) 2026-06-27 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 421bfddfc5bd to dee190b82ff3 (1 revision) 2026-06-27 elliotsisteron@google.com Implement sampling for non-interlaced images in `SkPngRustCodec` 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 aaclarke@google.com,kjlubick@google.com,maxhudnell@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
…er#188699) FlAccessibleNode registered its engine and parent weak pointers on the node itself rather than on the target objects, so the pointers were never cleared when the engine or parent was destroyed. The AT-SPI bridge can keep nodes alive past engine teardown, so subsequent calls would dereference freed memory. Store the engine and parent as GWeakRef and fetch a strong reference where needed, returning safely when the target has been destroyed. This matches the rest of the embedder. Add tests covering access after engine and parent destruction. Fixes flutter#188660
…e when it's updated. (flutter#188466) context: this is to address a feedback from VPAT testing. also check supportsAnnounce because android 16 deprecated announcement we should use liveregion instead if the announcement is not supported. ## 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
`package:intl` cannot be used to create fixed timestamps. ## 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
…8717) https://skia.googlesource.com/skia.git/+log/587d8befe1ee..ba1942d8c3e1 2026-06-29 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2026-06-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE from 6e65aeaa7006 to 98dab44d9cd2 (6 revisions) 2026-06-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll vulkan-deps from 782a48bf2db0 to 0af4fee9206d (1 revision) 2026-06-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia Infra from 51dfbce05960 to c0e4e8a0a6bd (7 revisions) 2026-06-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn from 5f4709f1a2c7 to 7807dcbdca24 (7 revisions) 2026-06-29 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 aaclarke@google.com,kjlubick@google.com,maxhudnell@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/ba1942d8c3e1..111e7582d081 2026-06-29 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 aaclarke@google.com,kjlubick@google.com,maxhudnell@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
…able (flutter#188715) Fixes flutter#188712 Honors the `enable` argument in `RenderPass.setDepthWriteEnable`. The native binding `InternalFlutterGpu_RenderPass_SetDepthWriteEnable` ignored its argument and always set `depth_write_enabled` to `true`, so `RenderPass.setDepthWriteEnable(false)` was a no-op and depth writes could not be disabled for any Flutter GPU draw. ## 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/ [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…er#188605) Fixes flutter#188246 Adds `Texture.fromImage`, the inverse of `Texture.asImage`. It wraps the GPU texture that backs a `ui.Image` as a Flutter GPU `Texture` without copying any pixel data. Getting widget content into a Flutter GPU texture currently needs a full CPU round trip (rasterize, read back with `toByteData`, then upload into a new texture). The `ui.Image` returned by `toImage` already holds a GPU resident texture on the same context Flutter GPU renders with, so the readback and the upload are wasted work. `Texture.fromImage` reads the texture metadata from the descriptor and shares the underlying texture, so neither copy is needed. Notes - Use an image from the asynchronous `RepaintBoundary.toImage` or `Picture.toImage`. A `toImageSync` image rasterizes asynchronously and may not have a texture yet, in which case this throws. - The wrapped texture is meant for sampling. It reflects the usage of the source texture and is not guaranteed to be usable as a render pass attachment. - The wrapper holds its own reference to the shared texture, so it stays valid after the source `ui.Image` is disposed. https://github.com/user-attachments/assets/c4d164f8-6d18-4d77-bf02-12fb83a8faf7 ## 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/ [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Replace g_object_add_weak_pointer with GWeakRef for tracking the connected instance, so the helper only disconnects the signal if the instance is still alive and uses the thread-safe weak reference API.
…utter#188702) A forced dispose (gtk_widget_destroy) runs even while the raster thread holds a strong reference on the view and is presenting onto the compositor. Releasing the compositor in dispose could free it mid-present, causing a use-after-free. Move the release to finalize so it lives until the last reference (held transitively by the raster thread) is dropped. Fixes flutter#188659
When an FlView holding the text input focus is destroyed, the text input handler kept a dangling pointer to the view, causing a crash. Clear the handler's widget in fl_view_dispose and make set_widget null-safe. Fixes flutter#188657
…er#188728) flutter/packages@c1f7d92...656ccaa 2026-06-26 21270878+elliette@users.noreply.github.com [material_ui] Enable `icon_button_test` (flutter/packages#12015) 2026-06-26 21270878+elliette@users.noreply.github.com [material_ui] Enable `list_tile_test` (flutter/packages#12017) 2026-06-26 21270878+elliette@users.noreply.github.com [material_ui] Enable `calendar_date_picker_test` (flutter/packages#12006) 2026-06-26 21270878+elliette@users.noreply.github.com [material_ui] Enable `filter_chip_test` (flutter/packages#12013) 2026-06-26 21270878+elliette@users.noreply.github.com [material_ui] Enable `ink_well_test` (flutter/packages#12016) 2026-06-26 21270878+elliette@users.noreply.github.com [material_ui] Enable `radio_list_tile_test` (flutter/packages#12019) 2026-06-26 21270878+elliette@users.noreply.github.com [material_ui] Enable `tabs_test` (flutter/packages#12021) 2026-06-26 36861262+QuncCccccc@users.noreply.github.com [material_ui] Remove widgets import in `bottom_sheet_test.dart` (flutter/packages#12001) 2026-06-26 36861262+QuncCccccc@users.noreply.github.com [material_ui] Remove widgets import in `dialog_test.dart`, `dropdown_menu_test.dart` and `sliver_app_bar_test.dart` (flutter/packages#12002) 2026-06-26 stuartmorgan@google.com [various] Check in auto-upgrade to analysis options (flutter/packages#11969) 2026-06-26 73310711+shrabanti722@users.noreply.github.com [video_player_platform_interface] Add preventsDisplaySleepDuringVideoPlayback option (flutter/packages#11546) 2026-06-26 nateshmbhat1@gmail.com [video_player_avfoundation] Add video track selection support (flutter/packages#11476) 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
Update `flutter test --platform=chrome ...` to use the new DDC module system. * Updates bootstrap generation in test runner to load the modules needed to run the test. * Uses `org-dartlang-app:///` URIs (with three slashes) more consistently in the DDC logic. From the PR history flutter#65984 and the hidden nature of the `--platform=chrome` CLI flag I am assuming this codepath is unsupported and only used for flutter framework tests. Fixes: flutter#187797 Issue: flutter#142060 ## 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
…r#188453) The Flutter tool crashes with a `FormatException: Missing extension byte` when helper processes output non-UTF-8 bytes (e.g., on Windows/WSL under certain non-UTF-8 system locales). This change updates the process streaming mechanism to use the fault-tolerant `utf8AllowMalformedLineDecoder` instead of the strict `utf8LineDecoder`. This replaces invalid bytes with the Unicode replacement character (`U+FFFD`) instead of throwing a fatal `FormatException`, preventing crashes while preserving log output. Fixes flutter#188448
…lutter#187947) [flutter_tools] Track asset transformer dependencies for hot reload Allow asset transformers to register additional input dependencies for hot reload by passing a `--depfile` flag to the transformer subprocess and parsing the resulting Ninja-format depfile. Key changes: - `AssetTransformer` now passes `--depfile` and parses it using `DepfileService`, returning dependencies in a new `AssetTransformationResult`. - `DevelopmentAssetTransformer` tracks these dependencies and provides them to `DevFS`. - `DevFS.updateBundle` does not skip transformed assets on startup, running the transformer to collect dependencies but optimizing by not uploading them to the device unless requested (e.g., for Web). - `DevFS.updateBundle` checks if any tracked dependencies are invalidated and triggers re-transformation. - `DevFS.update` and `WebDevFS.update` append collected dependencies to the watched `sources` set. - `copyAssets` build target collects and adds these dependencies to its inputs to ensure correct rebuilds. - Added unit and integration tests to verify the behavior. Fixes flutter#187051
…r#188387) This PR addresses the issue where `flutter test` (specifically integration tests) hangs at teardown on CPU-starved CI runners because the Dart Development Service (DDS) fails to exit cleanly. ### Changes * Modify `DartDevelopmentService.shutdown` to return `Future<void>` and properly await the underlying DDS instance shutdown. * Update `IntegrationTestTestDevice.kill` to await the DDS shutdown with a configurable timeout (defaulting to 5 seconds, using `ddsShutdownTimeout`), preventing permanent hangs if DDS fails to exit. * Update `ResidentRunner.shutdownDartDevelopmentService` to also be asynchronous and await all DDS shutdowns with a 10-second safety timeout to prevent `flutter run` from hanging on exit. * Propagate the async `shutdown` signature to all callers and mock implementations in tests. * Add a regression test in `integration_test_device_test.dart` to verify that `kill()` completes even if DDS shutdown hangs (times out). ### Verification * Ran static analysis (`dart analyze`) on the entire `packages/flutter_tools` package with zero issues. * Ran all unit tests in `integration_test_device_test.dart` and they passed (including the new regression test). * Verified that integration tests on Linux desktop run and exit cleanly. Fixes flutter#187984
Once flutter/cocoon#5091 has landed, the revert workflow can just use the `revert` label since cocoon is no longer using it.
…8731) https://skia.googlesource.com/skia.git/+log/111e7582d081..bfb7860cb9c7 2026-06-29 kjlubick@google.com Add TSAN suppression for libgallium 2026-06-29 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 aaclarke@google.com,kjlubick@google.com,maxhudnell@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
…flutter#187910) Edited: This pull request updates the getSimulatorPath method in Xcode to look for DeviceHub.app instead of Simulator.app when the Xcode version is 27 or higher, and adds comprehensive unit tests for this behavior. Feedback suggested simplifying this logic by directly checking the filesystem for DeviceHub.app and falling back to Simulator.app, which eliminates the need for version parsing and future cleanup. ## Tests Added four unit tests to `xcode_test.dart` covering: - Xcode < 27 returns `Simulator.app` - Xcode ≥ 27 returns `DeviceHub.app` - Returns `null` when the app directory does not exist - Returns `null` when `xcode-select` is unavailable Fixes flutter#187759 Closes flutter#187759 ## 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 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
… to read goldens from flutter asset URI (flutter#188587) Cleanup related to flutter#182123 - add support for reading the golden image from flutter asset URI - use that instead of writing golden to temp - add widget tests for comparator behavior - update readme ## 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
<!-- 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 --> Flutter desktop on Windows currently has no equivalent of the `--flavor` plumbing that already exists for Android, iOS, and macOS: `flutter build windows --flavor X` is rejected at the command-parser level, `flutter run -d windows --flavor X` emits a "flavor only supported on Android, iOS, macOS" warning, and there is no convention for producing per-flavor binaries or build directories. This PR wires the existing flavor infrastructure end-to-end on Windows so that multiple flavors can coexist in the same project without colliding on disk or in the runner. ### What changes - **`flutter build windows`** accepts `--flavor` via the shared `usesFlavorOption()` helper. - **`WindowsDevice.supportsFlavors`** returns `true`, so `flutter run -d windows --flavor X` no longer warns and now drives the flavored build pipeline. - **Build directory** is namespaced per flavor: `build/windows/<arch>/<flavor>/runner/<Config>/` (parity with Android/iOS/macOS). Projects that don't pass `--flavor` keep the legacy `build/windows/<arch>/runner/<Config>/` layout — no migration required. - **CMake configure** receives `-DFLUTTER_APP_FLAVOR=<flavor>` so the generated project can react to the flavor at configure time. - **Generated CMake template** (`windows.tmpl/CMakeLists.txt.tmpl`) suffixes `BINARY_NAME` with `-<flavor>` when `FLUTTER_APP_FLAVOR` is defined. The branch is guarded by `if(DEFINED FLUTTER_APP_FLAVOR AND NOT FLUTTER_APP_FLAVOR STREQUAL "")`, so existing projects regenerated from this template behave identically when no flavor is passed. - **Runner template** (`windows.tmpl/runner/CMakeLists.txt` + `main.cpp.tmpl`) exposes `FLUTTER_APP_FLAVOR` as a compile-time preprocessor define via `target_compile_definitions` and uses it to suffix the Win32 window title, giving projects a one-line entry point for flavor-aware native behavior without any additional Flutter tool surface area. - **Runner resource template** (`windows.tmpl/runner/Runner.rc.tmpl`) introduces a `FLUTTER_BINARY_NAME` preprocessor define — injected via the same `target_compile_definitions` mechanism already used for `FLUTTER_VERSION_*` — and uses it for the `InternalName` and `OriginalFilename` PE metadata fields, so the version resource stays in sync with the actual on-disk binary name regardless of flavor. - **Dart-side** continues to use the existing `appFlavor` getter from `package:flutter/services.dart`, which reads `FLUTTER_APP_FLAVOR` from the dart-defines that `toEnvironmentConfig()` already produces. No framework changes required. ### Design choices - **Build directory nests flavor above `runner/<Config>`**: the `runner/<Config>` leaf reflects the Visual Studio multi-config generator (Debug/Profile/Release are subdirectories chosen at build time, not at CMake configure time). Inserting the flavor above this segment keeps the VS solution reusable across modes for a given flavor. - **`FLUTTER_BINARY_NAME` in `Runner.rc`**: PE metadata correctness matters because tools (installers, code-signing pipelines, Windows Error Reporting) read `OriginalFilename` and `InternalName` from the version resource. Passing the CMake variable as a preprocessor define costs nothing and avoids any `configure_file` indirection in the template. - Per-flavor assets, icons, `Package.appxmanifest`, and installer scripts remain the project's responsibility — this PR intentionally keeps the tool agnostic and only standardizes the plumbing. ### Tests - New `test/general.shard/windows/build_windows_flavor_test.dart` covers: - `flutter build windows --flavor apple` invokes CMake with `-DFLUTTER_APP_FLAVOR=apple` and a flavor-namespaced working directory, and the success log references `build\windows\x64\apple\runner\Release\`. - `getCmakeExecutableName` returns the base binary name without a flavor, and `name-flavor` when a flavor is provided (empty string treated as no flavor). - `getWindowsBuildDirectory` returns the legacy path without a flavor and inserts the flavor segment when one is provided. - Existing `test/commands.shard/hermetic/build_windows_test.dart` continues to pass with no changes, confirming the legacy no-flavor path is unaffected. ### Manual verification Generated an example project, then ran the full matrix: ``` flutter build windows --flavor apple # → build\windows\x64\apple\runner\Release\example-apple.exe flutter build windows --flavor banana # → build\windows\x64\banana\runner\Release\example-banana.exe flutter build windows # → build\windows\x64\runner\Release\example.exe (unchanged) flutter run -d windows --flavor apple # launches, no "unsupported flavor" warning ``` All three builds coexist in `build\windows\x64\` without overwriting each other, the Win32 window title reflects the flavor, and the Dart UI reads `appFlavor` correctly at runtime in each binary. PE metadata (`InternalName`, `OriginalFilename`) matches the actual filename in all three cases. ### Backward compatibility - Projects that never pass `--flavor` see no change: same build directory, same binary name, same generated CMake. - Existing projects do not need to regenerate `windows/CMakeLists.txt` to keep working; they only need to regenerate (or hand-patch the `if(DEFINED FLUTTER_APP_FLAVOR)` branch) to opt into flavor support. Fixes flutter#98994 ## Pre-launch Checklist - [X] I read the [[Contributor Guide](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview)] and followed the process outlined there for submitting PRs. - [X] I read the [[AI contribution guidelines](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines)] and understand my responsibilities, or I am not using AI tools. - [X] I read the [[Tree Hygiene](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md)] wiki page, which explains my responsibilities. - [X] I read and followed the [[Flutter Style Guide](https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md)], including [[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)]. - [X] I signed the [[CLA](https://cla.developers.google.com/)]. - [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](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests)]. - [X] I followed the [[breaking change policy](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes)] and added [[Data Driven Fixes](https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md)] 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
issue: flutter#188640 This follows the pattern from flutter#161249 This duplicates the logic of https://github.com/flutter/cocoon/blob/main/app_dart/bin/validate_task_ownership.dart Note that the TESTOWNERS file format seems straightforward but it is actually weird where things that look like comments have semantic meaning. ## 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
…Xcode 27 (flutter#188520) Fixes flutter#187762 ## 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.
<!-- 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 adds a new benchmark test (`complex_layout_android__impeller_gles_start_up`) that measures app startup performance with Impeller renderer forced to use OpenGLES backend on Android low-end devices (mokey). ### Purpose This benchmark is designed to: - Measure startup performance when Impeller uses OpenGLES backend on Android devices - Provide baseline metrics for tracking startup time improvements on low-end Android devices - Enable performance comparison for PRs that modify the IO context setup for OpenGLES ### Test Configuration - __Device:__ mokey (Android low-end device) - __Renderer:__ Impeller with OpenGLES backend (forced via `forceOpenGLES: true`) - __Test App:__ complex_layout benchmark - __Metric:__ App startup time ### Related Work This benchmark supports the performance validation for [](https://github.com/flutter/flutter/pull/185723)<https://github.com/flutter/flutter/pull/185723>, which improves startup time on low-end devices by using IO context for OpenGLES setup. ### Expected Outcome This benchmark will provide measurable data to demonstrate the performance improvements from PR flutter#185723 by comparing: 1. Baseline measurements (before IO context changes) 2. Post-merge measurements (after IO context changes are applied) ## 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
…M service origin checks Introduce a new `--disable-service-origin-check` flag to both `flutter run` and `flutter test` commands to allow connections to the VM service from any origin. * Propagate the option through `DebuggingOptions` to iOS launch arguments, Android (`adb shell am start`), desktop environments, and `flutter_tester`. * Update the Flutter engine C++ and Java codebases to parse the `--disable-service-origin-check` switch and forward it to `DartServiceIsolate::Startup`. * Add corresponding unit tests in `device_test.dart` and `run_test.dart` to verify flag propagation and serialization. * Add integration test verification in `disable_service_origin_check_test.dart` to verify that origin checks correctly block connections by default and permit connections when the flag is passed.
bkonyi
pushed a commit
that referenced
this pull request
Sep 4, 2026
… NDK fallback to public DSL (flutter#192116) This is PR 5 of 11 in the AGP 9.1.0 / public `gradle-api` / newdsl migration stack. Add externalNativeBuild to the shared type. Extracted some shared mocking logic to a utility. No external visible changes expected. Also improved the README.md so that the test file for multiple agp versions was a markdown link. - @reidbaker --- 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. 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 every pr. --- Agent authored description. This is PR 5 of 11 in the AGP 9.1.0 / public `gradle-api` migration stack (flutter#180137, flutter#166550). ### Key Changes - **Public DSL Wrapper `externalNativeBuild`**: Exposes `val externalNativeBuild: ExternalNativeBuild` in `AgpCommonExtensionWrapper.kt` dispatching across `ApplicationExtension`, `LibraryExtension`, `DynamicFeatureExtension`, and `TestExtension` without referencing `CommonExtension` (bypassing AGP binary incompatibility). - **Zero Legacy `BaseExtension` in Production Sources**: Deletes `getLegacyAndroidExtension(project: Project): BaseExtension` and removes the `com.android.build.gradle.BaseExtension` import from `FlutterPluginUtils.kt`. - **Public DSL NDK Fallback Configuration**: Migrates `forceNdkDownload` and `configureSyntheticExternalNativeBuildFallback` in `FlutterPluginUtils.kt` to `getAndroidExtension(gradleProject)` using `externalNativeBuild.cmake` / `externalNativeBuild.ndkBuild`. Sets `cmake.path = File(...)`, `cmake.buildStagingDirectory = ...`, and `buildType.externalNativeBuild.cmake.arguments += ...` through the public DSL while preserving the upstream PR flutter#187201 `ndkBuild.path` check. - **Unit Test Public DSL Mocking & Cleanup**: Migrates unit tests in `FlutterPluginUtilsTest.kt` to mock public DSL types (`ApplicationExtension`, `Cmake`, `NdkBuild`), asserts CMake arguments by list content, deletes obsolete tests asserting `ApplicationExtension`-vs-`BaseExtension` `ndkVersion` preference, and removes unused `import io.mockk.called` as well as all legacy `com.android.build.gradle.internal.*` imports. ## 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.
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.
Introduce a new
--disable-service-origin-checkflag to bothflutter runandflutter testcommands to allow connections to the VM service from any origin.DebuggingOptionsto iOS launch arguments, Android (adb shell am start), desktop environments, andflutter_tester.--disable-service-origin-checkswitch and forward it toDartServiceIsolate::Startup.device_test.dartandrun_test.dartto verify flag propagation and serialization.disable_service_origin_check_test.dartto verify that origin checks correctly block connections by default and permit connections when the flag is passed.