Skip to content

[flutter_tools, engine] Add --disable-service-origin-check option to disable VM service origin checks - #5

Closed
bkonyi wants to merge 2939 commits into
masterfrom
disable-vm-origin-checks
Closed

bkonyi wants to merge 2939 commits into
masterfrom
disable-vm-origin-checks

Conversation

@bkonyi

@bkonyi bkonyi commented Jun 29, 2026

Copy link
Copy Markdown
Owner

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.

engine-flutter-autoroll and others added 30 commits June 12, 2026 15:53
…r#187928)

flutter/packages@1b56cde...b78ad83

2026-06-12 48776784+mackings@users.noreply.github.com [camera] Fix web
facingMode capability handling (flutter/packages#11728)
2026-06-11 engine-flutter-autoroll@skia.org Roll Flutter from
c0a1129 to 8bdce07 (13 revisions) (flutter/packages#11885)
2026-06-11 github.com@h-h.win [pigeon] make swift enum CaseIterable
(flutter/packages#11702)
2026-06-11 engine-flutter-autoroll@skia.org Roll Flutter from
66aaa9a to c0a1129 (17 revisions) (flutter/packages#11881)
2026-06-10 stuartmorgan@google.com [ci] Allow mustache_template deps
(flutter/packages#11882)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…7926)

https://skia.googlesource.com/skia.git/+log/cadbde1ec4b7..8c89bf2b0ee3

2026-06-12
recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com
Roll recipe dependencies (trivial).
2026-06-12 arthursonzogni@chromium.org Specialize
sk_is_trivially_relocatable for raw_ptr and raw_ref
2026-06-12
recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com
Roll recipe dependencies (trivial).
2026-06-12 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from d3bbae038752 to d8ab95e03469 (6 revisions)
2026-06-12 ragsharma@microsoft.com Export SkFontMgr::Request methods
across the DLL boundary

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC jsimmons@google.com,kjlubick@google.com on the revert to
ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…lutter#187876)

Add timeouts to stopApp and uninstallApp

Fixes: flutter#187785

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.
…ate (flutter#187218)

This CL addresses potential `std::vector` index out-of-bounds errors in
the Flutter engine's Android native code, detected by libc++ hardening
(go/cc-hardening-assertions). The issues stem from unsafe `&vector[0]`
accesses on potentially empty vectors.

1. **platform_view_android_jni_impl.cc (SetViewportMetrics):** Added
size checks before using `GetIntArrayRegion` on vectors created from JNI
arrays, which can be empty.
2. **platform_view_android_delegate.cc (UpdateSemantics):** Moved buffer
pointer initializations (e.g., `&buffer[0]`) and their usage to be
within `!empty()` checks, preventing access on zero-sized vectors.

These changes ensure safe vector handling, particularly when empty data
is passed via JNI.

See cl/922343981
…#187250)

Fix a critical unit mismatch bug in
"AndroidGradleBuilder._runGradleTask" where
"kMaxRetryTime.inMicroseconds" (10,000,000) was mistakenly used instead
of "inMilliseconds" (10,000) to cap the exponential backoff delay
duration (which is calculated in milliseconds).
This error allowed the backoff delay time to scale up uncapped to 2.77
hours instead of properly capping it at 10 seconds, significantly
hanging failed/unstable builds.

Added a robust unit test using "FakeAsync" to simulate 8 failing build
retries instantaneously, verifying that wait times double correctly
(100ms -> 200ms -> 400ms -> 800ms -> 1600ms -> 3200ms -> 6400ms) and cap
cleanly at exactly 10000ms (10s) on the 8th retry.

Additionally, added a safeguard to cap the exponent in the pow
calculation at 7, preventing potential integer overflow on high retry
counts (when maxRetries is null).

Fixes: flutter#83971

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…s by default (flutter#186080)

Updates the Android Device Testing instructions in the
`integration_test` README to natively support Kotlin-based projects
(which is the default in modern Flutter templates). Retains the
Java-based instructions as a clear fallback for older or legacy
projects.

Includes a complete Kotlin code snippet demonstrating the necessary
usage of JUnit 4 `@Rule` combined with Kotlin's `@JvmField` annotation.

Fixes flutter#62237

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
fixes flutter#187738

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…lutter#186784)

When a widget inside a **modal route** (bottom sheet, dialog, etc.) is
selected in the widget inspector, the on-device overlay (selection box,
layout guide lines, and tooltip) was drawn across the **entire screen**,
including over the scaffold behind the modal. That made inspection
misleading while a modal was open.

This PR scopes inspector overlay behavior to the selected widget’s
**modal route**:

- **`_inspectAt`**: filters hit-test `selection.candidates` to the
active modal route scope (prefers the current route when present;
otherwise uses the smallest-area hit’s route; excludes offstage routes).
- **`_InspectorOverlayLayer`**: skips drawing overlay candidates that do
not share the selected render object’s `ModalRoute`.
- **`InspectorSelection.clearOverlayCandidates()`**: clears stale
candidates when selection is updated via tools (`setSelection`), without
clearing `current` / `currentElement`.

**Before:** selecting a sheet widget could show guide lines over
main-screen widgets behind the sheet.

**After:** overlay candidates and painted guides stay within the modal
route scope. Manual verification: `examples/inspector_overlay_repro`
(optional reviewer aid).

No DevTools changes are required; the overlay is painted in
`widget_inspector.dart`.

Fixes flutter#186782

## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [ ] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Optimize SHA hash calculation of generated APK by using chunked reading
to prevent OutOfMemoryError.

Fixes: flutter#171860.

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…ations (flutter#186031)

Detects if multiple unique adb binaries are installed on the user's PATH
or Android SDK platform-tools. Having multiple adb versions can lead to
conflicting server instances and device detection failures during
development.

This change adds an `OperatingSystemUtils` dependency injection to
`AndroidValidator`, resolves canonical paths using
`resolveSymbolicLinksSync` to avoid duplicate symlink warnings, and
outputs a hint in `flutter doctor` if multiple unique binaries are
found.

Fixes flutter#9709

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.
…kends (flutter#179683)

Enables the unit tests that verifies that compute shaders can be
compiled. This unit test was previously only enabled for Metal backends,
however compilation is supported on all backends (provided the ESSL
language version is at least 310), except SKSL.

Closes flutter#179708

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

---------

Co-authored-by: gaaclarke <30870216+gaaclarke@users.noreply.github.com>
Fixes flutter#187725, regression was introduced in flutter#187488

`DevFSFileContent.isModifiedAfter` returned `true` whenever the cached
`_fileStat` was `null`, ignoring the time argument entirely. `_fileStat`
is the sync baseline written only by `markClean()` the entries of a
freshly built `AssetBundle` are never marked clean, so `_fileStat` is
always `null` for them and `isModifiedAfter` always reported them as
modified.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

Co-authored-by: Kevin Moore <kevmoo@users.noreply.github.com>
…187932)

Fixes flutter#187931.

`DeviceBufferGLES::Flush()` merges dirty ranges from writer threads (for
example the UI thread writing to a flutter_gpu host-visible buffer)
while `BindAndUploadDataIfNecessary()` consumes the range on a reactor
thread. The upload read the dirty range, called `glBufferSubData`, and
cleared `dirty_range_` afterwards, so any flush landing during the
upload was silently discarded and its data never reached the GPU. Draws
could then read stale vertex/instance/uniform data, and when a buffer's
only flush was lost, uninitialized buffer contents.

This change guards `dirty_range_` with a mutex and takes and clears it
before uploading, so a concurrent flush merges into a fresh range that
the next bind uploads.

Also adds `BufferSubData` to the GLES test mocks and a regression test
that flushes from inside the mocked upload, which fails with the
previous ordering.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…#187542)

## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [ ] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
)

Fixes flutter#187357

Adds a Flutter GPU surface API for rendering into a presentable color
texture and drawing the latest presented image through Flutter. The
surface owns the backing texture pool, tracks acquired frames, keeps the
current image out of reuse, and waits for producer command buffer
completion before a presented texture can be reused.

The API is shaped as a small family so later destinations (a Flutter
canvas, and eventually the window swapchain) can share one per-frame
contract. `GpuSurface` and `GpuSurfaceFrame` are the
destination-agnostic base types. This PR ships the first concrete
destination, `GpuImageSurface`, which Flutter draws as a `ui.Image`.

Two parts of the contract are uniform across all future destinations,
even though the image destination never exercises them.
`acquireNextFrame` is nullable, because a window swapchain can skip a
frame. `present` returns a `GpuPresentStatus`, because a window
swapchain can report that it needs reconfiguring. For an image surface,
acquire always returns a frame and present always reports success, and
the published image is read from `GpuImageSurface.currentImage`.

The API keeps depth, stencil, MSAA, and intermediate attachments
renderer-owned. `GpuSurfaceFrame.colorTexture` is only the final color
target handed back to Flutter as a `ui.Image`.

A minimal example.

```dart
final surface = gpu.gpuContext.createImageSurface(width, height);
final frame = surface.acquireNextFrame();

final commandBuffer = gpu.gpuContext.createCommandBuffer();
commandBuffer.createRenderPass(
  gpu.RenderTarget.singleColor(
    gpu.ColorAttachment(texture: frame.colorTexture),
  ),
);

// Bind a pipeline, bind resources, and draw.

frame.present(commandBuffer);
commandBuffer.submit();
canvas.drawImageRect(surface.currentImage!, src, dst, paint);
```

Depth and stencil remain normal renderer-owned attachments.

```dart
final frame = surface.acquireNextFrame();
final depthStencil = gpu.gpuContext.createTexture(
  gpu.StorageMode.deviceTransient,
  width,
  height,
  format: gpu.gpuContext.defaultDepthStencilFormat,
  enableRenderTargetUsage: true,
  enableShaderReadUsage: false,
);

final commandBuffer = gpu.gpuContext.createCommandBuffer();
commandBuffer.createRenderPass(
  gpu.RenderTarget.singleColor(
    gpu.ColorAttachment(texture: frame.colorTexture),
    depthStencilAttachment: gpu.DepthStencilAttachment(texture: depthStencil),
  ),
);
```

Tests cover surface acquisition, presentation, current image behavior,
discard, resize, and rendering a clear color into a surface.

## Pre-launch Checklist

- [x] I read the Contributor Guide and followed the process outlined
there for submitting PRs.
- [x] I read the AI contribution guidelines and understand my
responsibilities, or I am not using AI tools.
- [x] I read the Tree Hygiene wiki page, which explains my
responsibilities.
- [x] I read and followed the Flutter Style Guide, including Features we
expect every widget to implement.
- [x] I signed the CLA.
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
test-exempt.
- [x] I followed the breaking change policy and added Data Driven Fixes
where supported.
- [x] All existing and new tests are passing.
…7968)

https://skia.googlesource.com/skia.git/+log/8c89bf2b0ee3..9ef46390c2d1

2026-06-13 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from d8ab95e03469 to 973a663c1394 (10 revisions)
2026-06-12 kjlubick@google.com Fix merge issues with src/base rename
2026-06-12 alexisdavidc@google.com Resolved a Data Race on fStream in
SkTypeface_Mac
2026-06-12 jmbetancourt@google.com Move files from src/base to src/core
2026-06-12 michaelludwig@google.com [graphite] Use stable collection for
static bindings
2026-06-12 fmalita@google.com Roll ICU to 78.2

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC jsimmons@google.com,kjlubick@google.com on the revert to
ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
`ShaderLibrary.fromAsset` now returns a `Future<ShaderLibrary?>` instead
of loading synchronously.

Asset reads can only be asynchronous on some platforms, so a synchronous
loader cannot work everywhere. Making the single loader async gives
every platform one consistent entry point and removes the need for
downstream code to keep a separate async loading path. flutter_gpu is
experimental, so this breaking change is cheap to make now.

On platforms that read synchronously the returned Future still completes
in the same turn, and the library is still cached by asset path, so hot
reload is unaffected.

The engine Dart tests and the renderer fixture harness are updated to
await the loader. The fixture harness drains the microtask queue after
invoking an entry point so the now-async fixtures run to completion.

This is a breaking change to an experimental API, so no `flutter/tests`
migration guide is needed.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
)

https://skia.googlesource.com/skia.git/+log/9ef46390c2d1..42355271a335

2026-06-13 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from 973a663c1394 to 7bfc18a5a2d4 (4 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC jsimmons@google.com,kjlubick@google.com on the revert to
ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…... (flutter#187975)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter
Please CC jsimmons@google.com,zra@google.com on the revert to ensure
that a human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…7979)

https://skia.googlesource.com/skia.git/+log/42355271a335..c52667607242

2026-06-13 skia-autoroll@skia-public.iam.gserviceaccount.com Manual roll
ANGLE from 8e09325ebad4 to 81a96a84e6e6 (10 revisions)
2026-06-13 skia-autoroll@skia-public.iam.gserviceaccount.com Manual roll
Dawn from 181bf8634c1d to 9533d3296a2a (11 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC jsimmons@google.com,kjlubick@google.com on the revert to
ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…idth/height (flutter#187954)

## What's new?
- Fixed bug where the width and height were swapped in
`FlutterWindowsView::OnFrameGenerated`
- Update the test to NOT use square dimensions so that the error would
be obvious going forward

fixes flutter#187922

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
…187587)

This PR updates the cross imports checker to also check in
`packages/flutter_test` and its subdirectories.

Since `flutter_test` is testing related, I figured it is a good
candidate to be put in the existing check.

To dry run the new check, I fixed one of the violations, along with
updating the relevant test.

Fixes flutter#187528

*If you had to change anything in the [flutter/tests] repo, include a
link to the migration guide as per the [breaking change policy].*

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
The docs no longer lie.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
)

https://skia.googlesource.com/skia.git/+log/c52667607242..4e2c9b5e4dad

2026-06-14 skia-autoroll@skia-public.iam.gserviceaccount.com Roll SKP
CIPD package from 564 to 565

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC brettos@google.com,jsimmons@google.com,kjlubick@google.com on
the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
)

https://skia.googlesource.com/skia.git/+log/4e2c9b5e4dad..f46928e7f50c

2026-06-14 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from 7bfc18a5a2d4 to fdbd11044b7e (1 revision)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC brettos@google.com,jsimmons@google.com,kjlubick@google.com on
the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…... (flutter#187997)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter
Please CC jsimmons@google.com,zra@google.com on the revert to ensure
that a human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Updating CHANGELOGs correctly is one of the most common issues for new
contributors in flutter/packages. The way the docs were written
highlights using the `NEXT` section for version-exempt changes first,
because it's unusual and specific to our repo, but given how common it
is for new contributors to use it when they shouldn't, it seems like
this structure is likely confusing for the people who most need the
docs.

This reworks the whole section to discuss the common case first, then
the uncommon case (now explicitly highlighted as uncommon) second. The
new structure is a little longer, but should hopefully be more clear,
which seems like a tradeoff worth trying given the frequency of issues.

Also includes some minor fixes I noticed while I was in the file
(grammar, inconsistent backticks for file names), and addition of
references to the new flutter/core-packages.
)

https://skia.googlesource.com/skia.git/+log/f46928e7f50c..0a3b8549cbf0

2026-06-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
skottie-base from a61634294908 to 870493f76166

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC brettos@google.com,jsimmons@google.com,kjlubick@google.com on
the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
engine-flutter-autoroll and others added 28 commits June 28, 2026 20:02
…8697)

https://skia.googlesource.com/skia.git/+log/3c462ad5a838..587d8befe1ee

2026-06-28 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from e44f14c91d6d to 782a48bf2db0 (1 revision)
2026-06-28 skia-autoroll@skia-public.iam.gserviceaccount.com Roll SKP
CIPD package from 566 to 567
2026-06-28 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from dee190b82ff3 to e44f14c91d6d (1 revision)
2026-06-27 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from 421bfddfc5bd to dee190b82ff3 (1 revision)
2026-06-27 elliotsisteron@google.com Implement sampling for
non-interlaced images in `SkPngRustCodec`

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,kjlubick@google.com,maxhudnell@google.com
on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…er#188699)

FlAccessibleNode registered its engine and parent weak pointers on the
node itself rather than on the target objects, so the pointers were
never cleared when the engine or parent was destroyed. The AT-SPI bridge
can keep nodes alive past engine teardown, so subsequent calls would
dereference freed memory.

Store the engine and parent as GWeakRef and fetch a strong reference
where needed, returning safely when the target has been destroyed. This
matches the rest of the embedder. Add tests covering access after engine
and parent destruction.

Fixes flutter#188660
…e when it's updated. (flutter#188466)

context: this is to address a feedback from VPAT testing. 

also check supportsAnnounce because android 16 deprecated announcement
we should use liveregion instead if the announcement is not supported.

## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [ ] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
`package:intl` cannot be used to create fixed timestamps.

## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [ ] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [ ] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [ ] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…8717)

https://skia.googlesource.com/skia.git/+log/587d8befe1ee..ba1942d8c3e1

2026-06-29
recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com
Roll recipe dependencies (trivial).
2026-06-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE
from 6e65aeaa7006 to 98dab44d9cd2 (6 revisions)
2026-06-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from 782a48bf2db0 to 0af4fee9206d (1 revision)
2026-06-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia
Infra from 51dfbce05960 to c0e4e8a0a6bd (7 revisions)
2026-06-29 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn
from 5f4709f1a2c7 to 7807dcbdca24 (7 revisions)
2026-06-29
recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com
Roll recipe dependencies (trivial).

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,kjlubick@google.com,maxhudnell@google.com
on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
)

https://skia.googlesource.com/skia.git/+log/ba1942d8c3e1..111e7582d081

2026-06-29
recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com
Roll recipe dependencies (trivial).

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,kjlubick@google.com,maxhudnell@google.com
on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…able (flutter#188715)

Fixes flutter#188712

Honors the `enable` argument in `RenderPass.setDepthWriteEnable`. The
native binding `InternalFlutterGpu_RenderPass_SetDepthWriteEnable`
ignored its argument and always set `depth_write_enabled` to `true`, so
`RenderPass.setDepthWriteEnable(false)` was a no-op and depth writes
could not be disabled for any Flutter GPU draw.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…er#188605)

Fixes flutter#188246

Adds `Texture.fromImage`, the inverse of `Texture.asImage`. It wraps the
GPU texture that backs a `ui.Image` as a Flutter GPU `Texture` without
copying any pixel data.

Getting widget content into a Flutter GPU texture currently needs a full
CPU round trip (rasterize, read back with `toByteData`, then upload into
a new texture). The `ui.Image` returned by `toImage` already holds a GPU
resident texture on the same context Flutter GPU renders with, so the
readback and the upload are wasted work. `Texture.fromImage` reads the
texture metadata from the descriptor and shares the underlying texture,
so neither copy is needed.

Notes

- Use an image from the asynchronous `RepaintBoundary.toImage` or
`Picture.toImage`. A `toImageSync` image rasterizes asynchronously and
may not have a texture yet, in which case this throws.
- The wrapped texture is meant for sampling. It reflects the usage of
the source texture and is not guaranteed to be usable as a render pass
attachment.
- The wrapper holds its own reference to the shared texture, so it stays
valid after the source `ui.Image` is disposed.



https://github.com/user-attachments/assets/c4d164f8-6d18-4d77-bf02-12fb83a8faf7

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
Replace g_object_add_weak_pointer with GWeakRef for tracking the
connected instance, so the helper only disconnects the signal if the
instance is still alive and uses the thread-safe weak reference API.
…utter#188702)

A forced dispose (gtk_widget_destroy) runs even while the raster thread
holds a strong reference on the view and is presenting onto the
compositor. Releasing the compositor in dispose could free it
mid-present, causing a use-after-free. Move the release to finalize so
it lives until the last reference (held transitively by the raster
thread) is dropped.

Fixes flutter#188659
When an FlView holding the text input focus is destroyed, the text input
handler kept a dangling pointer to the view, causing a crash. Clear the
handler's widget in fl_view_dispose and make set_widget null-safe.

Fixes flutter#188657
…er#188728)

flutter/packages@c1f7d92...656ccaa

2026-06-26 21270878+elliette@users.noreply.github.com [material_ui]
Enable `icon_button_test` (flutter/packages#12015)
2026-06-26 21270878+elliette@users.noreply.github.com [material_ui]
Enable `list_tile_test` (flutter/packages#12017)
2026-06-26 21270878+elliette@users.noreply.github.com [material_ui]
Enable `calendar_date_picker_test` (flutter/packages#12006)
2026-06-26 21270878+elliette@users.noreply.github.com [material_ui]
Enable `filter_chip_test` (flutter/packages#12013)
2026-06-26 21270878+elliette@users.noreply.github.com [material_ui]
Enable `ink_well_test` (flutter/packages#12016)
2026-06-26 21270878+elliette@users.noreply.github.com [material_ui]
Enable `radio_list_tile_test` (flutter/packages#12019)
2026-06-26 21270878+elliette@users.noreply.github.com [material_ui]
Enable `tabs_test` (flutter/packages#12021)
2026-06-26 36861262+QuncCccccc@users.noreply.github.com [material_ui]
Remove widgets import in `bottom_sheet_test.dart`
(flutter/packages#12001)
2026-06-26 36861262+QuncCccccc@users.noreply.github.com [material_ui]
Remove widgets import in `dialog_test.dart`, `dropdown_menu_test.dart`
and `sliver_app_bar_test.dart` (flutter/packages#12002)
2026-06-26 stuartmorgan@google.com [various] Check in auto-upgrade to
analysis options (flutter/packages#11969)
2026-06-26 73310711+shrabanti722@users.noreply.github.com
[video_player_platform_interface] Add
preventsDisplaySleepDuringVideoPlayback option (flutter/packages#11546)
2026-06-26 nateshmbhat1@gmail.com [video_player_avfoundation] Add video
track selection support (flutter/packages#11476)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Update `flutter test --platform=chrome ...` to use the new DDC module
system.

* Updates bootstrap generation in test runner to load the modules needed
to run the test.
* Uses `org-dartlang-app:///` URIs (with three slashes) more
consistently in the DDC logic.

From the PR history flutter#65984 and
the hidden nature of the
`--platform=chrome` CLI flag I am assuming this codepath is unsupported
and only used for
flutter framework tests.

Fixes: flutter#187797
Issue: flutter#142060

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…r#188453)

The Flutter tool crashes with a `FormatException: Missing extension
byte` when helper processes output non-UTF-8 bytes (e.g., on Windows/WSL
under certain non-UTF-8 system locales).

This change updates the process streaming mechanism to use the
fault-tolerant `utf8AllowMalformedLineDecoder` instead of the strict
`utf8LineDecoder`. This replaces invalid bytes with the Unicode
replacement character (`U+FFFD`) instead of throwing a fatal
`FormatException`, preventing crashes while preserving log output.

Fixes flutter#188448
…lutter#187947)

[flutter_tools] Track asset transformer dependencies for hot reload

Allow asset transformers to register additional input dependencies for
hot reload by passing a `--depfile` flag to the transformer subprocess
and parsing the resulting Ninja-format depfile.

Key changes:
- `AssetTransformer` now passes `--depfile` and parses it using
`DepfileService`, returning dependencies in a new
`AssetTransformationResult`.
- `DevelopmentAssetTransformer` tracks these dependencies and provides
them to `DevFS`.
- `DevFS.updateBundle` does not skip transformed assets on startup,
running the transformer to collect dependencies but optimizing by not
uploading them to the device unless requested (e.g., for Web).
- `DevFS.updateBundle` checks if any tracked dependencies are
invalidated and triggers re-transformation.
- `DevFS.update` and `WebDevFS.update` append collected dependencies to
the watched `sources` set.
- `copyAssets` build target collects and adds these dependencies to its
inputs to ensure correct rebuilds.
- Added unit and integration tests to verify the behavior.

Fixes flutter#187051
…r#188387)

This PR addresses the issue where `flutter test` (specifically
integration tests) hangs at teardown on CPU-starved CI runners because
the Dart Development Service (DDS) fails to exit cleanly.

### Changes
* Modify `DartDevelopmentService.shutdown` to return `Future<void>` and
properly await the underlying DDS instance shutdown.
* Update `IntegrationTestTestDevice.kill` to await the DDS shutdown with
a configurable timeout (defaulting to 5 seconds, using
`ddsShutdownTimeout`), preventing permanent hangs if DDS fails to exit.
* Update `ResidentRunner.shutdownDartDevelopmentService` to also be
asynchronous and await all DDS shutdowns with a 10-second safety timeout
to prevent `flutter run` from hanging on exit.
* Propagate the async `shutdown` signature to all callers and mock
implementations in tests.
* Add a regression test in `integration_test_device_test.dart` to verify
that `kill()` completes even if DDS shutdown hangs (times out).

### Verification
* Ran static analysis (`dart analyze`) on the entire
`packages/flutter_tools` package with zero issues.
* Ran all unit tests in `integration_test_device_test.dart` and they
passed (including the new regression test).
* Verified that integration tests on Linux desktop run and exit cleanly.

Fixes flutter#187984
Once flutter/cocoon#5091 has landed, the revert
workflow can just use the `revert` label since cocoon is no longer using
it.
…8731)

https://skia.googlesource.com/skia.git/+log/111e7582d081..bfb7860cb9c7

2026-06-29 kjlubick@google.com Add TSAN suppression for libgallium
2026-06-29
recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com
Roll recipe dependencies (trivial).

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC aaclarke@google.com,kjlubick@google.com,maxhudnell@google.com
on the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…flutter#187910)

Edited:
This pull request updates the getSimulatorPath method in Xcode to look
for DeviceHub.app instead of Simulator.app when the Xcode version is 27
or higher, and adds comprehensive unit tests for this behavior.
Feedback suggested simplifying this logic by directly checking the
filesystem for DeviceHub.app and falling back to Simulator.app, which
eliminates the need for version parsing and future cleanup.

  ## Tests

  Added four unit tests to `xcode_test.dart` covering:
  - Xcode < 27 returns `Simulator.app`
  - Xcode ≥ 27 returns `DeviceHub.app`
  - Returns `null` when the app directory does not exist
  - Returns `null` when `xcode-select` is unavailable

Fixes flutter#187759
Closes flutter#187759

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
… to read goldens from flutter asset URI (flutter#188587)

Cleanup related to flutter#182123

- add support for reading the golden image from flutter asset URI
- use that instead of writing golden to temp
- add widget tests for comparator behavior
- update readme



## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

Flutter desktop on Windows currently has no equivalent of the `--flavor`
plumbing that already exists for Android, iOS, and macOS: `flutter build
windows --flavor X` is rejected at the command-parser level, `flutter
run -d windows --flavor X` emits a "flavor only supported on Android,
iOS, macOS" warning, and there is no convention for producing per-flavor
binaries or build directories. This PR wires the existing flavor
infrastructure end-to-end on Windows so that multiple flavors can
coexist in the same project without colliding on disk or in the runner.

### What changes

- **`flutter build windows`** accepts `--flavor` via the shared
`usesFlavorOption()` helper.
- **`WindowsDevice.supportsFlavors`** returns `true`, so `flutter run -d
windows --flavor X` no longer warns and now drives the flavored build
pipeline.
- **Build directory** is namespaced per flavor:
`build/windows/<arch>/<flavor>/runner/<Config>/` (parity with
Android/iOS/macOS). Projects that don't pass `--flavor` keep the legacy
`build/windows/<arch>/runner/<Config>/` layout — no migration required.
- **CMake configure** receives `-DFLUTTER_APP_FLAVOR=<flavor>` so the
generated project can react to the flavor at configure time.
- **Generated CMake template** (`windows.tmpl/CMakeLists.txt.tmpl`)
suffixes `BINARY_NAME` with `-<flavor>` when `FLUTTER_APP_FLAVOR` is
defined. The branch is guarded by `if(DEFINED FLUTTER_APP_FLAVOR AND NOT
FLUTTER_APP_FLAVOR STREQUAL "")`, so existing projects regenerated from
this template behave identically when no flavor is passed.
- **Runner template** (`windows.tmpl/runner/CMakeLists.txt` +
`main.cpp.tmpl`) exposes `FLUTTER_APP_FLAVOR` as a compile-time
preprocessor define via `target_compile_definitions` and uses it to
suffix the Win32 window title, giving projects a one-line entry point
for flavor-aware native behavior without any additional Flutter tool
surface area.
- **Runner resource template** (`windows.tmpl/runner/Runner.rc.tmpl`)
introduces a `FLUTTER_BINARY_NAME` preprocessor define — injected via
the same `target_compile_definitions` mechanism already used for
`FLUTTER_VERSION_*` — and uses it for the `InternalName` and
`OriginalFilename` PE metadata fields, so the version resource stays in
sync with the actual on-disk binary name regardless of flavor.
- **Dart-side** continues to use the existing `appFlavor` getter from
`package:flutter/services.dart`, which reads `FLUTTER_APP_FLAVOR` from
the dart-defines that `toEnvironmentConfig()` already produces. No
framework changes required.

### Design choices

- **Build directory nests flavor above `runner/<Config>`**: the
`runner/<Config>` leaf reflects the Visual Studio multi-config generator
(Debug/Profile/Release are subdirectories chosen at build time, not at
CMake configure time). Inserting the flavor above this segment keeps the
VS solution reusable across modes for a given flavor.
- **`FLUTTER_BINARY_NAME` in `Runner.rc`**: PE metadata correctness
matters because tools (installers, code-signing pipelines, Windows Error
Reporting) read `OriginalFilename` and `InternalName` from the version
resource. Passing the CMake variable as a preprocessor define costs
nothing and avoids any `configure_file` indirection in the template.
- Per-flavor assets, icons, `Package.appxmanifest`, and installer
scripts remain the project's responsibility — this PR intentionally
keeps the tool agnostic and only standardizes the plumbing.

### Tests

- New `test/general.shard/windows/build_windows_flavor_test.dart`
covers:
- `flutter build windows --flavor apple` invokes CMake with
`-DFLUTTER_APP_FLAVOR=apple` and a flavor-namespaced working directory,
and the success log references
`build\windows\x64\apple\runner\Release\`.
- `getCmakeExecutableName` returns the base binary name without a
flavor, and `name-flavor` when a flavor is provided (empty string
treated as no flavor).
- `getWindowsBuildDirectory` returns the legacy path without a flavor
and inserts the flavor segment when one is provided.
- Existing `test/commands.shard/hermetic/build_windows_test.dart`
continues to pass with no changes, confirming the legacy no-flavor path
is unaffected.

### Manual verification

Generated an example project, then ran the full matrix:

```
flutter build windows --flavor apple   # → build\windows\x64\apple\runner\Release\example-apple.exe
flutter build windows --flavor banana  # → build\windows\x64\banana\runner\Release\example-banana.exe
flutter build windows                  # → build\windows\x64\runner\Release\example.exe (unchanged)
flutter run -d windows --flavor apple  # launches, no "unsupported flavor" warning
```

All three builds coexist in `build\windows\x64\` without overwriting
each other, the Win32 window title reflects the flavor, and the Dart UI
reads `appFlavor` correctly at runtime in each binary. PE metadata
(`InternalName`, `OriginalFilename`) matches the actual filename in all
three cases.

### Backward compatibility

- Projects that never pass `--flavor` see no change: same build
directory, same binary name, same generated CMake.
- Existing projects do not need to regenerate `windows/CMakeLists.txt`
to keep working; they only need to regenerate (or hand-patch the
`if(DEFINED FLUTTER_APP_FLAVOR)` branch) to opt into flavor support.

Fixes flutter#98994

## Pre-launch Checklist

- [X] I read the [[Contributor
Guide](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview)]
and followed the process outlined there for submitting PRs.
- [X] I read the [[AI contribution
guidelines](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines)]
and understand my responsibilities, or I am not using AI tools.
- [X] I read the [[Tree
Hygiene](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md)]
wiki page, which explains my responsibilities.
- [X] I read and followed the [[Flutter Style
Guide](https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md)],
including [[Features we expect every widget to
implement](https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement)].
- [X] I signed the [[CLA](https://cla.developers.google.com/)].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[[test-exempt](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests)].
- [X] I followed the [[breaking change
policy](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes)]
and added [[Data Driven
Fixes](https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md)]
where supported.
- [X] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
issue: flutter#188640

This follows the pattern from
flutter#161249

This duplicates the logic of
https://github.com/flutter/cocoon/blob/main/app_dart/bin/validate_task_ownership.dart

Note that the TESTOWNERS file format seems straightforward but it is
actually weird where things that look like comments have semantic
meaning.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…Xcode 27 (flutter#188520)

Fixes flutter#187762

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->
This PR adds a new benchmark test
(`complex_layout_android__impeller_gles_start_up`) that measures app
startup performance with Impeller renderer forced to use OpenGLES
backend on Android low-end devices (mokey).

### Purpose

This benchmark is designed to:

- Measure startup performance when Impeller uses OpenGLES backend on
Android devices
- Provide baseline metrics for tracking startup time improvements on
low-end Android devices
- Enable performance comparison for PRs that modify the IO context setup
for OpenGLES

### Test Configuration

- __Device:__ mokey (Android low-end device)
- __Renderer:__ Impeller with OpenGLES backend (forced via
`forceOpenGLES: true`)
- __Test App:__ complex_layout benchmark
- __Metric:__ App startup time
### Related Work

This benchmark supports the performance validation for
[](https://github.com/flutter/flutter/pull/185723)<https://github.com/flutter/flutter/pull/185723>,
which improves startup time on low-end devices by using IO context for
OpenGLES setup.

### Expected Outcome

This benchmark will provide measurable data to demonstrate the
performance improvements from PR flutter#185723 by comparing:

1. Baseline measurements (before IO context changes)
2. Post-merge measurements (after IO context changes are applied)


## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…M service origin checks

Introduce a new `--disable-service-origin-check` flag to both `flutter run` and `flutter test` commands to allow connections to the VM service from any origin.

* Propagate the option through `DebuggingOptions` to iOS launch arguments, Android (`adb shell am start`), desktop environments, and `flutter_tester`.
* Update the Flutter engine C++ and Java codebases to parse the `--disable-service-origin-check` switch and forward it to `DartServiceIsolate::Startup`.
* Add corresponding unit tests in `device_test.dart` and `run_test.dart` to verify flag propagation and serialization.
* Add integration test verification in `disable_service_origin_check_test.dart` to verify that origin checks correctly block connections by default and permit connections when the flag is passed.
@bkonyi bkonyi closed this Jun 29, 2026
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.