Repository navigation
Conversation
flutter/packages@1b56cde...b78ad83 2026-06-12 [email protected] [camera] Fix web facingMode capability handling (flutter/packages#11728) 2026-06-11 [email protected] Roll Flutter from c0a1129 to 8bdce07 (13 revisions) (flutter/packages#11885) 2026-06-11 [email protected] [pigeon] make swift enum CaseIterable (flutter/packages#11702) 2026-06-11 [email protected] Roll Flutter from 66aaa9a to c0a1129 (17 revisions) (flutter/packages#11881) 2026-06-10 [email protected] [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 [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…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 [email protected] 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 [email protected] Roll vulkan-deps from d3bbae038752 to d8ab95e03469 (6 revisions) 2026-06-12 [email protected] 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 [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…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 <[email protected]>
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 <[email protected]>
…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 [email protected] Roll vulkan-deps from d8ab95e03469 to 973a663c1394 (10 revisions) 2026-06-12 [email protected] Fix merge issues with src/base rename 2026-06-12 [email protected] Resolved a Data Race on fStream in SkTypeface_Mac 2026-06-12 [email protected] Move files from src/base to src/core 2026-06-12 [email protected] [graphite] Use stable collection for static bindings 2026-06-12 [email protected] 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 [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
`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 [email protected] 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 [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…... (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 [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…7979) https://skia.googlesource.com/skia.git/+log/42355271a335..c52667607242 2026-06-13 [email protected] Manual roll ANGLE from 8e09325ebad4 to 81a96a84e6e6 (10 revisions) 2026-06-13 [email protected] 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 [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…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 [email protected] 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 [email protected],[email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
) https://skia.googlesource.com/skia.git/+log/4e2c9b5e4dad..f46928e7f50c 2026-06-14 [email protected] 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 [email protected],[email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…... (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 [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
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 [email protected] 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 [email protected],[email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
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
flutter/packages@c1f7d92...656ccaa 2026-06-26 [email protected] [material_ui] Enable `icon_button_test` (flutter/packages#12015) 2026-06-26 [email protected] [material_ui] Enable `list_tile_test` (flutter/packages#12017) 2026-06-26 [email protected] [material_ui] Enable `calendar_date_picker_test` (flutter/packages#12006) 2026-06-26 [email protected] [material_ui] Enable `filter_chip_test` (flutter/packages#12013) 2026-06-26 [email protected] [material_ui] Enable `ink_well_test` (flutter/packages#12016) 2026-06-26 [email protected] [material_ui] Enable `radio_list_tile_test` (flutter/packages#12019) 2026-06-26 [email protected] [material_ui] Enable `tabs_test` (flutter/packages#12021) 2026-06-26 [email protected] [material_ui] Remove widgets import in `bottom_sheet_test.dart` (flutter/packages#12001) 2026-06-26 [email protected] [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 [email protected] [various] Check in auto-upgrade to analysis options (flutter/packages#11969) 2026-06-26 [email protected] [video_player_platform_interface] Add preventsDisplaySleepDuringVideoPlayback option (flutter/packages#11546) 2026-06-26 [email protected] [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 [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
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 [email protected] 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 [email protected],[email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…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.
bkonyi
added a commit
that referenced
this pull request
Nov 6, 2026
…tures Only include the UTF-8 encoding remediation hint in `TestCommand.verifyThenRunCommand` when `readAsStringSync` fails due to a UTF-8 decoding error (`err.osError == null` and `readAsBytesSync` succeeds), rather than on OS or filesystem read failures. Add a hermetic regression test for OS `FileSystemException`s and document the AppleDouble and UTF-16 LE byte-array fixtures in `test_test.dart`. Previous output (AppleDouble sidecar files): ``` Failed to decode data using encoding 'utf-8', path = '/usr/local/google/home/bkonyi/.gemini/jetski/brain/ee6d5e68-1051-40e6-a23a-a289ca33c97a/scratch/repro_app/test/._a_test.dart' dart:io _File.readAsStringSync package:test_core/src/runner/loader.dart 41:22 Loader.parseSuiteMetadata.<fn>.<fn> package:async/src/result/result.dart 67:40 new Result package:test_core/src/runner/loader.dart 38:14 Loader.parseSuiteMetadata.<fn> dart:_compact_hash _LinkedHashMapMixin.putIfAbsent package:test_core/src/runner/loader.dart 36:35 Loader.parseSuiteMetadata package:test_core/src/runner/loader.dart 266:41 Loader.loadFile This is an unexpected error. Please file an issue at http://github.com/dart-lang/test with the stack trace and instructions for reproducing the error. FileSystemException: Failed to decode data using encoding 'utf-8', path = '/usr/local/google/home/bkonyi/.gemini/jetski/brain/ee6d5e68-1051-40e6-a23a-a289ca33c97a/scratch/repro_app/test/._widget_test.dart' #0 _File._tryDecode (dart:io/file_impl.dart:704:7) #1 _File.readAsStringSync (dart:io/file_impl.dart:715:7) #2 Loader.parseSuiteMetadata.<anonymous closure>.<anonymous closure> (package:test_core/src/runner/loader.dart:41:22) #3 new Result (package:async/src/result/result.dart:67:40) #4 Loader.parseSuiteMetadata.<anonymous closure> (package:test_core/src/runner/loader.dart:38:14) #5 _LinkedHashMapMixin.putIfAbsent (dart:_compact_hash:631:23) #6 Loader.parseSuiteMetadata (package:test_core/src/runner/loader.dart:36:35) flutter#7 Loader.loadFile (package:test_core/src/runner/loader.dart:266:41) <asynchronous suspension> Feature flags enabled: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64, enable-hcpp ``` Current output (AppleDouble sidecar files): ``` 00:00 +0: loading /usr/local/google/home/bkonyi/.gemini/jetski/brain/ee6d5e68-1051-40e6-a23a-a289ca33c97a/scratch/repro_app/test/widget_test.dart 00:00 +0: passes 00:00 +1: All tests passed! ``` Previous output (non-UTF-8 test files): ``` Failed to decode data using encoding 'utf-8', path = '/usr/local/google/home/bkonyi/.gemini/jetski/brain/ee6d5e68-1051-40e6-a23a-a289ca33c97a/scratch/repro_app/test/non_utf8_1_test.dart' dart:io _File.readAsStringSync package:test_core/src/runner/loader.dart 41:22 Loader.parseSuiteMetadata.<fn>.<fn> package:async/src/result/result.dart 67:40 new Result package:test_core/src/runner/loader.dart 38:14 Loader.parseSuiteMetadata.<fn> dart:_compact_hash _LinkedHashMapMixin.putIfAbsent package:test_core/src/runner/loader.dart 36:35 Loader.parseSuiteMetadata package:test_core/src/runner/loader.dart 266:41 Loader.loadFile This is an unexpected error. Please file an issue at http://github.com/dart-lang/test with the stack trace and instructions for reproducing the error. FileSystemException: Failed to decode data using encoding 'utf-8', path = '/usr/local/google/home/bkonyi/.gemini/jetski/brain/ee6d5e68-1051-40e6-a23a-a289ca33c97a/scratch/repro_app/test/non_utf8_2_test.dart' #0 _File._tryDecode (dart:io/file_impl.dart:704:7) #1 _File.readAsStringSync (dart:io/file_impl.dart:715:7) #2 Loader.parseSuiteMetadata.<anonymous closure>.<anonymous closure> (package:test_core/src/runner/loader.dart:41:22) #3 new Result (package:async/src/result/result.dart:67:40) #4 Loader.parseSuiteMetadata.<anonymous closure> (package:test_core/src/runner/loader.dart:38:14) #5 _LinkedHashMapMixin.putIfAbsent (dart:_compact_hash:631:23) #6 Loader.parseSuiteMetadata (package:test_core/src/runner/loader.dart:36:35) flutter#7 Loader.loadFile (package:test_core/src/runner/loader.dart:266:41) <asynchronous suspension> Feature flags enabled: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64, enable-hcpp ``` Current output (non-UTF-8 test files): ``` Failed to read test file "/usr/local/google/home/bkonyi/.gemini/jetski/brain/ee6d5e68-1051-40e6-a23a-a289 ca33c97a/scratch/repro_app/test/non_utf8_1_test.dart": Failed to decode data using encoding 'utf-8'. Ensure that the file is a valid UTF-8 encoded Dart test file. ```
bkonyi
added a commit
that referenced
this pull request
Nov 9, 2026
… overwrite test Updates `native_assets_flutter_test_manifest_overwrite_test.dart` to invoke `flutterBin` (`test_utils.dart`) with `@Timeout(Duration(minutes: 5))` instead of manually compiling `bin/flutter_tools.dart` to `flutter_tools.dill`, and uses `loadPackageConfig`, `PackageConfig`, `Package`, `LanguageVersion`, and `savePackageConfig` from `package:package_config/package_config.dart` to construct the offline test project's `.dart_tool/package_config.json`. Previous output: ``` Unhandled exception: FileSystemException: Cannot rename file to '/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp', path = '/tmp/repro_196121_src.tmp' (OS Error: Invalid cross-device link, errno = 18) #0 _File.throwIfError (dart:io/file_impl.dart:779:7) #1 _File.renameSync (dart:io/file_impl.dart:396:5) #2 ForwardingFileSystemEntity.renameSync (package:file/src/forwarding/forwarding_file_system_entity.dart:50:49) #3 ErrorHandlingFile.renameSync.<anonymous closure> (package:flutter_tools/src/base/error_handling_io.dart:430:31) #4 _runSync (package:flutter_tools/src/base/error_handling_io.dart:1116:16) #5 ErrorHandlingFile.renameSync (package:flutter_tools/src/base/error_handling_io.dart:429:12) #6 main (file:///usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_exdev.dart:24:37) flutter#7 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:313:19) flutter#8 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12) ``` Current output: ``` Flutter failed to rename file at "/tmp/repro_196121_src.tmp" to "/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp". A file system operation failed across different volumes or mount points. FileSystemException: Cannot rename file to '/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp', path = '/tmp/repro_196121_src.tmp' (OS Error: Invalid cross-device link, errno = 18) Ensure that the project, build output, and temporary directories are on the same writable volume, or check external volume and security software settings. ``` Previous output (flutter test overwriting existing native_assets.json): ``` Flutter failed to delete file at "/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4 d2ca98a9/scratch/repro_app/build/native_assets/linux/native_assets.json". Please ensure that the SDK and/or project is installed in a location that has read/write permissions for the current user. Try running: sudo chown -R $(whoami) /usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc 4d2ca98a9/scratch/repro_app/build/native_assets/linux/native_assets.json ``` Current output (flutter test overwriting existing native_assets.json): ``` 00:00 +0: loading /usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_app/test/smoke_test.dart 00:00 +0: smoke test 00:00 +1: All tests passed! ``` Fixes flutter#196121
bkonyi
added a commit
that referenced
this pull request
Nov 9, 2026
Simplifies the fix and tests for avoiding redundant `native_assets.json` deletion and handling `EXDEV`: - Restores `ErrorHandlingFileSystem.deleteIfExists` to upstream and removes custom `ForwardingFileSystem` test doubles in `error_handling_io_test.dart`, testing `EXDEV` (`errno = 18`) directly with `MemoryFileSystem.test(opHandle: exceptionHandler.opHandle)`. - Streams `targetDir.list(followLinks: false)` in `_copyNativeCodeAssetsForOS` with `entity is File` instead of `.toList()` and `typeSync`, and deduplicates `installCodeAssets` test setup in `native_assets_test.dart`. - Removes the redundant `flutter test` subprocess integration test (`native_assets_flutter_test_manifest_overwrite_test.dart`). Reproduction notes: Both output pairs below were captured on a Linux host, which cannot reproduce the macOS external-volume behavior directly. The first pair comes from a small Dart script (`repro_exdev.dart`) calling `ErrorHandlingFileSystem.file(...).renameSync(...)` from `/tmp` (`tmpfs`) to an `ext4` directory to trigger a real kernel `EXDEV` (`errno = 18`). The second pair comes from running `BOT=true flutter test --no-pub -r expanded` on a minimal app after making `build/native_assets/linux` read-only (`chmod 0555`) while leaving `native_assets.json` writable (`0644`), so `unlink(2)` fails while in-place truncation succeeds; with a writable `build/native_assets/linux` directory, the unfixed tool passes with the same 3-line test output. Local workspace paths inside the fenced output blocks are preserved verbatim to match exact command output. Previous output: ``` Unhandled exception: FileSystemException: Cannot rename file to '/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp', path = '/tmp/repro_196121_src.tmp' (OS Error: Invalid cross-device link, errno = 18) #0 _File.throwIfError (dart:io/file_impl.dart:779:7) #1 _File.renameSync (dart:io/file_impl.dart:396:5) #2 ForwardingFileSystemEntity.renameSync (package:file/src/forwarding/forwarding_file_system_entity.dart:50:49) #3 ErrorHandlingFile.renameSync.<anonymous closure> (package:flutter_tools/src/base/error_handling_io.dart:430:31) #4 _runSync (package:flutter_tools/src/base/error_handling_io.dart:1116:16) #5 ErrorHandlingFile.renameSync (package:flutter_tools/src/base/error_handling_io.dart:429:12) #6 main (file:///usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_exdev.dart:24:37) flutter#7 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:313:19) flutter#8 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12) ``` Current output: ``` Flutter failed to rename file at "/tmp/repro_196121_src.tmp" to "/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp". A file system operation failed across different volumes or mount points. FileSystemException: Cannot rename file to '/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp', path = '/tmp/repro_196121_src.tmp' (OS Error: Invalid cross-device link, errno = 18) Ensure that the project, build output, and temporary directories are on the same writable volume, or check external volume and security software settings. ``` Previous output (flutter test overwriting existing native_assets.json): ``` Flutter failed to delete file at "/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4 d2ca98a9/scratch/repro_app/build/native_assets/linux/native_assets.json". Please ensure that the SDK and/or project is installed in a location that has read/write permissions for the current user. Try running: sudo chown -R $(whoami) /usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc 4d2ca98a9/scratch/repro_app/build/native_assets/linux/native_assets.json ``` Current output (flutter test overwriting existing native_assets.json): ``` 00:00 +0: loading /usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_app/test/smoke_test.dart 00:00 +0: smoke test 00:00 +1: All tests passed! ``` Fixes flutter#196121
bkonyi
added a commit
that referenced
this pull request
Nov 9, 2026
…ative assets Restores `.toList()` on `targetDir.list(followLinks: false)` in `_copyNativeCodeAssetsForOS` so directory enumeration completes before deleting stale entries in `targetDir`, avoiding concurrent directory stream mutation issues on Windows and network filesystems. Reproduction notes: Both output pairs below were captured on a Linux host, which cannot reproduce the macOS external-volume behavior directly. The first pair comes from a small Dart script (`repro_exdev.dart`) calling `ErrorHandlingFileSystem.file(...).renameSync(...)` from `/tmp` (`tmpfs`) to an `ext4` directory to trigger a real kernel `EXDEV` (`errno = 18`). The second pair comes from running `BOT=true flutter test --no-pub -r expanded` on a minimal app after making `build/native_assets/linux` read-only (`chmod 0555`) while leaving `native_assets.json` writable (`0644`), so `unlink(2)` fails while in-place truncation succeeds; with a writable `build/native_assets/linux` directory, the unfixed tool passes with the same 3-line test output. Local workspace paths inside the fenced output blocks are preserved verbatim to match exact command output. Previous output: ``` Unhandled exception: FileSystemException: Cannot rename file to '/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp', path = '/tmp/repro_196121_src.tmp' (OS Error: Invalid cross-device link, errno = 18) #0 _File.throwIfError (dart:io/file_impl.dart:779:7) #1 _File.renameSync (dart:io/file_impl.dart:396:5) #2 ForwardingFileSystemEntity.renameSync (package:file/src/forwarding/forwarding_file_system_entity.dart:50:49) #3 ErrorHandlingFile.renameSync.<anonymous closure> (package:flutter_tools/src/base/error_handling_io.dart:430:31) #4 _runSync (package:flutter_tools/src/base/error_handling_io.dart:1116:16) #5 ErrorHandlingFile.renameSync (package:flutter_tools/src/base/error_handling_io.dart:429:12) #6 main (file:///usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_exdev.dart:24:37) flutter#7 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:313:19) flutter#8 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12) ``` Current output: ``` Flutter failed to rename file at "/tmp/repro_196121_src.tmp" to "/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp". A file system operation failed across different volumes or mount points. FileSystemException: Cannot rename file to '/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp', path = '/tmp/repro_196121_src.tmp' (OS Error: Invalid cross-device link, errno = 18) Ensure that the project, build output, and temporary directories are on the same writable volume, or check external volume and security software settings. ``` Previous output (flutter test overwriting existing native_assets.json): ``` Flutter failed to delete file at "/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4 d2ca98a9/scratch/repro_app/build/native_assets/linux/native_assets.json". Please ensure that the SDK and/or project is installed in a location that has read/write permissions for the current user. Try running: sudo chown -R $(whoami) /usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc 4d2ca98a9/scratch/repro_app/build/native_assets/linux/native_assets.json ``` Current output (flutter test overwriting existing native_assets.json): ``` 00:00 +0: loading /usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_app/test/smoke_test.dart 00:00 +0: smoke test 00:00 +1: All tests passed! ``` Fixes flutter#196121
bkonyi
added a commit
that referenced
this pull request
Nov 11, 2026
…lutter#196134) Previously, `installCodeAssets` invoked `_copyNativeCodeAssetsForOS` on every `flutter test` run, which listed `build/native_assets/<os>/` and deleted `native_assets.json` right before `_writeNativeAssetsJson` truncated and overwrote that same file in place. On macOS external volumes (for example `/Volumes/...` where endpoint-security or recycle-bin interposers intercept `unlink(2)` and attempt a cross-volume `rename(2)`), unlinking `native_assets.json` failed with `FileSystemException (OS Error: Cross-device link, errno = 18)` (`EXDEV`). In addition, `_handlePosixException` did not map `EXDEV` (`errno = 18`) to a `ToolExit`. This change: 1. Skips deleting `native_assets.json` in `_copyNativeCodeAssetsForOS` when it already exists on disk as a regular file, since `_writeNativeAssetsJson` immediately truncates and overwrites it in place (while still deleting stale bundled native asset artifacts, directories, and symlinks). 2. Handles POSIX `EXDEV` (`errno = 18`) in `_handlePosixException` on Linux and macOS by throwing an actionable `ToolExit` instead of crashing with an unhandled `FileSystemException`. Reproduction notes: Both output pairs below were captured on a Linux host, which cannot reproduce the macOS external-volume behavior directly. The first pair comes from a small Dart script (`repro_exdev.dart`) calling `ErrorHandlingFileSystem.file(...).renameSync(...)` from `/tmp` (`tmpfs`) to an `ext4` directory to trigger a real kernel `EXDEV` (`errno = 18`). The second pair comes from running `BOT=true flutter test --no-pub -r expanded` on a minimal app after making `build/native_assets/linux` read-only (`chmod 0555`) while leaving `native_assets.json` writable (`0644`), so `unlink(2)` fails while in-place truncation succeeds; with a writable `build/native_assets/linux` directory, the unfixed tool passes with the same 3-line test output. Local workspace paths inside the fenced output blocks are preserved verbatim to match exact command output. Previous output: ``` Unhandled exception: FileSystemException: Cannot rename file to '/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp', path = '/tmp/repro_196121_src.tmp' (OS Error: Invalid cross-device link, errno = 18) #0 _File.throwIfError (dart:io/file_impl.dart:779:7) #1 _File.renameSync (dart:io/file_impl.dart:396:5) #2 ForwardingFileSystemEntity.renameSync (package:file/src/forwarding/forwarding_file_system_entity.dart:50:49) #3 ErrorHandlingFile.renameSync.<anonymous closure> (package:flutter_tools/src/base/error_handling_io.dart:430:31) #4 _runSync (package:flutter_tools/src/base/error_handling_io.dart:1116:16) #5 ErrorHandlingFile.renameSync (package:flutter_tools/src/base/error_handling_io.dart:429:12) #6 main (file:///usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_exdev.dart:24:37) flutter#7 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:313:19) flutter#8 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12) ``` Current output: ``` Flutter failed to rename file at "/tmp/repro_196121_src.tmp" to "/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp". A file system operation failed across different volumes or mount points. FileSystemException: Cannot rename file to '/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_196121_dst.tmp', path = '/tmp/repro_196121_src.tmp' (OS Error: Invalid cross-device link, errno = 18) Ensure that the project, build output, and temporary directories are on the same writable volume, or check external volume and security software settings. ``` Previous output (flutter test overwriting existing native_assets.json): ``` Flutter failed to delete file at "/usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4 d2ca98a9/scratch/repro_app/build/native_assets/linux/native_assets.json". Please ensure that the SDK and/or project is installed in a location that has read/write permissions for the current user. Try running: sudo chown -R $(whoami) /usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc 4d2ca98a9/scratch/repro_app/build/native_assets/linux/native_assets.json ``` Current output (flutter test overwriting existing native_assets.json): ``` 00:00 +0: loading /usr/local/google/home/bkonyi/.gemini/jetski/brain/0a669702-1e2d-46a6-9c37-fdc4d2ca98a9/scratch/repro_app/test/smoke_test.dart 00:00 +0: smoke test 00:00 +1: All tests passed! ``` Fixes flutter#196121
bkonyi
added a commit
that referenced
this pull request
Nov 12, 2026
flutter#196136) Previously, `ErrorHandlingFile.readAsStringSync` dropped its `encoding` parameter when calling `delegate.readAsStringSync()`, forcing UTF-8 decoding even when callers requested another encoding (unlike `readAsString`, `readAsLines`, and `readAsLinesSync`, which already forwarded `encoding`). Because `flutter_tools` wraps `LocalFileSystem` in `ErrorHandlingFileSystem`, callers such as `ScreenshotCommand.ensureOutputIsNotJsonRpcError` (which passes `AsciiCodec(allowInvalid: true)` when checking small screenshot files for JSON-RPC error payloads) crashed with a `FileSystemException`. Forward `encoding` to `delegate.readAsStringSync(encoding: encoding)` and add regression tests covering `ErrorHandlingFile.readAsStringSync` backed by `LocalFileSystem` and `ScreenshotCommand.ensureOutputIsNotJsonRpcError` on `ErrorHandlingFileSystem`. Fixes flutter#196225 Previous output: ``` Screenshot written to flutter_01.skp (0kB). FileSystemException: Failed to decode data using encoding 'utf-8', path = '/tmp/repro_screenshot_skp.QPQNLT/flutter_01.skp' #0 _File._tryDecode (dart:io/file_impl.dart:704:7) #1 _File.readAsStringSync (dart:io/file_impl.dart:715:7) #2 ForwardingFile.readAsStringSync (package:file/src/forwarding/forwarding_file.dart:99:16) #3 ErrorHandlingFile.readAsStringSync.<anonymous closure> (package:flutter_tools/src/base/error_handling_io.dart:258:22) #4 _runSync (package:flutter_tools/src/base/error_handling_io.dart:1116:16) #5 ErrorHandlingFile.readAsStringSync (package:flutter_tools/src/base/error_handling_io.dart:257:12) #6 ScreenshotCommand.ensureOutputIsNotJsonRpcError (package:flutter_tools/src/commands/screenshot.dart:198:39) flutter#7 ScreenshotCommand.runSkia (package:flutter_tools/src/commands/screenshot.dart:180:5) <asynchronous suspension> flutter#8 ScreenshotCommand.runCommand (package:flutter_tools/src/commands/screenshot.dart:123:19) <asynchronous suspension> flutter#9 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:876:27) <asynchronous suspension> flutter#10 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#11 CommandRunner.runCommand (package:args/command_runner.dart:212:13) <asynchronous suspension> flutter#12 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:689:9) <asynchronous suspension> flutter#13 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#14 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:619:5) <asynchronous suspension> flutter#15 FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:379:5) <asynchronous suspension> flutter#16 run.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:419:19) <asynchronous suspension> flutter#17 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#18 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#19 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#20 main (package:flutter_tools/executable.dart:133:3) <asynchronous suspension> Feature flags enabled: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64, enable-hcpp ``` Current output: ``` Screenshot written to flutter_01.skp (0kB). ```
bkonyi
added a commit
that referenced
this pull request
Nov 12, 2026
Update `screenshot_test.dart` to write its synthetic package configuration via `writePackageConfigFiles`, resolve local engine paths via `LocalEngineLocator` and `getLocalEngineArguments()` with a normalized absolute `flutterBin` path, and register `flutter_tester` teardown immediately after process startup with early-exit reporting. Previous output: ``` _flutter.screenshotSkp: (-32000) Cannot capture SKP screenshot with Impeller enabled. #0 new _OutstandingRequest (package:vm_service/src/vm_service.dart:280:34) #1 VmService._call.<anonymous closure> (package:vm_service/src/vm_service.dart:1962:25) #2 VmService._call (package:vm_service/src/vm_service.dart:1974:8) #3 VmService.callServiceExtension (package:vm_service/src/vm_service.dart:1905:14) #4 FlutterVmService._checkedCallServiceExtension (package:flutter_tools/src/vmservice.dart:835:28) #5 FlutterVmService.screenshotSkp (package:flutter_tools/src/vmservice.dart:1069:12) #6 ScreenshotCommand.runSkia (package:flutter_tools/src/commands/screenshot.dart:167:54) <asynchronous suspension> flutter#7 ScreenshotCommand.runCommand (package:flutter_tools/src/commands/screenshot.dart:123:19) <asynchronous suspension> flutter#8 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:876:27) <asynchronous suspension> flutter#9 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#10 CommandRunner.runCommand (package:args/command_runner.dart:212:13) <asynchronous suspension> flutter#11 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:689:9) <asynchronous suspension> flutter#12 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#13 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:619:5) <asynchronous suspension> flutter#14 FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:379:5) <asynchronous suspension> flutter#15 run.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:419:19) <asynchronous suspension> flutter#16 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#17 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#18 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#19 main (package:flutter_tools/executable.dart:133:3) <asynchronous suspension> Feature flags enabled: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64, enable-hcpp ``` Current output: ``` The Skia picture request failed: Cannot capture SKP screenshot with Impeller enabled. ``` Fixes flutter#196119
bkonyi
added a commit
that referenced
this pull request
Nov 13, 2026
…#196132) Previously, running `flutter screenshot --type=skia` against an application with Impeller enabled crashed with an unhandled `vm_service.RPCError` (`-32000`) because the engine rejects `_flutter.screenshotSkp` requests under Impeller and `ScreenshotCommand.runSkia` did not catch `RPCError`. Catch `vm_service.RPCError` in `ScreenshotCommand.runSkia` and exit cleanly via `throwToolExit` with the engine's error message. Previous output: ``` _flutter.screenshotSkp: (-32000) Cannot capture SKP screenshot with Impeller enabled. #0 new _OutstandingRequest (package:vm_service/src/vm_service.dart:280:34) #1 VmService._call.<anonymous closure> (package:vm_service/src/vm_service.dart:1962:25) #2 VmService._call (package:vm_service/src/vm_service.dart:1974:8) #3 VmService.callServiceExtension (package:vm_service/src/vm_service.dart:1905:14) #4 FlutterVmService._checkedCallServiceExtension (package:flutter_tools/src/vmservice.dart:835:28) #5 FlutterVmService.screenshotSkp (package:flutter_tools/src/vmservice.dart:1069:12) #6 ScreenshotCommand.runSkia (package:flutter_tools/src/commands/screenshot.dart:167:54) <asynchronous suspension> flutter#7 ScreenshotCommand.runCommand (package:flutter_tools/src/commands/screenshot.dart:123:19) <asynchronous suspension> flutter#8 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:876:27) <asynchronous suspension> flutter#9 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#10 CommandRunner.runCommand (package:args/command_runner.dart:212:13) <asynchronous suspension> flutter#11 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:689:9) <asynchronous suspension> flutter#12 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#13 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:619:5) <asynchronous suspension> flutter#14 FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:379:5) <asynchronous suspension> flutter#15 run.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:419:19) <asynchronous suspension> flutter#16 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#17 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#18 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#19 main (package:flutter_tools/executable.dart:133:3) <asynchronous suspension> Feature flags enabled: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64, enable-hcpp ``` Current output: ``` The Skia picture request failed: Cannot capture SKP screenshot with Impeller enabled. ``` Fixes flutter#196119
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.