-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Make _relayoutBoundary a boolean #169638
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make _relayoutBoundary a boolean #169638
Conversation
| // here tries to detect such cases by checking _debugLaidOutByThisParentBefore: | ||
| // if this RenderObject has never been laid out by the current parent, then | ||
| // we assume that the parent will layout the subtree when needed. | ||
| return !_debugLaidOutByThisParentBefore || |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't this the same thing as checking whether this branch is detached? in that case, can we just return true while parent is null?
also is it possible to have cases where the a parent keeps a child but do not lay it out. I think not, but just want to double check
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If a subtree is kept alive (for instance), it's not detached from its owner or removed from the tree.
is it possible to have cases where the a parent keeps a child but do not lay it out
Yes, _RenderTheater, RenderSliverMultiBoxAdaptor, to name a few. And the worst part is that they implemented that differently. I think the framework should be aware of that when a parent decides to skip laying out a child so PipelineOwner can perform further optimizations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
for those case the _debugLaidOutByThisParentBefore may or may not be true while been skipped by the parent. Why do we use it to decide whether to check above the parent? and as long as there is a parent we can continue this check right?
I think my question is why not just continue check the parent until reaches parent == null? that way we don't need to introduce a new _debugLaidOutByThisParentBefore boolean
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also keptalive children are dropped, so the _debugLaidOutByThisParentBefore should be false for them
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we use it to decide whether to check above the parent? and as long as there is a parent we can continue this check right?
Say I have a RenderSliverMultiBoxAdaptor a and its child b which are both dirty. The node a is a relayout boundary and b is not. Then I make b a kept-alive child, and flushes the layout such that a becomes clean. But b is not reachable via treewalk so it's still dirty. Now I break the invariant and have a dirty node with a clean relayout boundary.
The additional _debugLaidOutByThisParentBefore flag basically represents the case when _relayoutBoundary becomes null before the patch.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know what prevents offscreen OverlayEntries from triggering the assert
I think this may be something we need to look into, it looks like the offstage child is still attached to parent, maybe the children are forced to become layout boundary somehow?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we some how makes the keptalive renderobject the relayoutboundary? technically it is a relayoutboundary, layout change underneath it won't affect parent(renderslivermultiboxadpater)'s layout
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we some how makes the keptalive renderobject the relayoutboundary?
We can (calling layout with the current constraints with parentUsesSize set to false will probably do it), but I don't know if we should. It comes at a cost (for example a few extra layout calls on render objects that didn't need to be laid out).
Also it doesn't improve the situation:
-
instead of the assert relying on an implementation detail of
RenderSliverMultiBoxAdaptor,RenderSliverMultiBoxAdaptornow have to cope with proposition that is known to be false. So we are basically making theRenderSliverMultiBoxAdaptorimplementation more complicated for nothing.OverlayPortalhas a couple of workarounds to suppress framework asserts and those are really bad for readability / maintainability, I hopeRenderSliverMultiBoxAdaptor(or_RenderTheater) doesn't have to suffer from that. -
Overlays will probably have to do the same.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we have a debug getter like Iterable<RenderObject> get debugDanglingChildren which returns children that are not layout and use them to check whether assertion should throw in the assertion?
Otherwise, I can't think of anything else better than current solution.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe for a separate PR? In this PR I tried to keep the logic the same (except for the RenderObject.attach change). This is basically rephrasing the existing logic with two Booleans instead of a RenderObject?.
gnprice
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Glad to see this happening! I never found the time to come back to #150905 and finish it.
I compared these changes with my old draft of a follow-up branch after #150905, and the logic is very similar. The two substantive differences are:
-
This version collapses the "don't yet know" case into the "not a relayout boundary" case. My draft kept that distinction, making it a
bool?. I definitely felt like that distinction should be eliminated, just hadn't quite convinced myself that there wasn't anything subtly depending on it. -
The
_debugRelayoutBoundaryAlreadyMarkedNeedsLayoutcheck is tricky to maintain after this change — basically this change is all about no longer tracking certain fine-grained information which wasn't being meaningfully used in release mode, but was being used by that debug check.In my branch I ended up ripping that check out, after trying some things to try to maintain it. In this version you introduce some other debug-only data (
_debugLaidOutByThisParentBefore) in order to maintain it, but I see you have a comment suggesting to rip it out after all. I've copied below the notes I wrote that led me to decide it was OK to just remove.
This version also overhauls the doc on _relayoutBoundary / _isRelayoutBoundary. I wrote the existing version; the field was undocumented before #150527. The rewrite looks like an improvement, modulo one question below.
(I'll be OOO tomorrow through next week, then working toward a mid-June launch, so won't be able to do a full review before then. Since this fixes a regression, I imagine you'll go ahead and merge it sooner.)
| // TODO(LongCatIsLooong): consider removing this check entirely, or introduce | ||
| // a new flag on RenderObject so the rendering layer knows when a child subtree | ||
| // is being skipped for layout, see the comments regarding the use of | ||
| // _debugLaidOutByThisParentBefore. | ||
| bool _debugRelayoutBoundaryAlreadyMarkedNeedsLayout() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I'd suggest removing this check entirely. In my draft follow-up to #150905 I ended up doing so. Here's my commit message with notes on that (lightly edited, mostly for formatting), in case they're helpful:
"""
Cut _debugRelayoutBoundaryAlreadyMarkedNeedsLayout assertion
This check has been here since the beginning of the Git history in 2015 (originally by the name debugAncestorsAlreadyMarkedNeedsLayout).
Doubtless it was important in the early development of the needs-layout protocol.
But I think it's now outlived its usefulness, for a few reasons:
-
Unlike many other debug-mode checks of similar complexity, it remains in the form of bare
asserts, with no error messages. If this were regularly catching errors in user code, it's likely that somebody at some point would have taken the time to expand these checks with helpful error messages wrapped in FlutterError. -
rarely touched: last was 2019, in 96fbbdc / Fix "node._relayoutBoundary == _relayoutBoundary" crash #44490; and that was to add updates to _relayoutBoundary in a way that is no longer relevant after recent refactor; plus that was mildly expensive
-
full list of changes to this whole algorithm:
- 2022 a63ee24 / Reland "Avoid calling
performLayoutwhen only the relayout boundary is different" #100581 / Avoid callingperformLayoutwhen only the relayout boundary is different #99056 "avoid calling performLayout" - 2019 as above, fix _relayoutBoundary crash
- ?? 2017 596eb03 / Loosen the constraints for Stack non-positioned children. #9581 "Loosen the constraints for Stack non-positioned children"
(not sure that even is related) - 2016 007d0a2 / Cache intrinsic dimensions #4446 "Cache intrinsic dimensions"
- 2015 a6e6b93 "Allow parents of RenderObjects that have layout callbacks…"
- 2015 633b650 start of history
So since 2016, two (or three?) changes to algorithm, one of which was really just about maintaining this check itself.
- 2022 a63ee24 / Reland "Avoid calling
TODO ok but see #139802, plus #147452/#149237, where this check did fire. Maybe those mean it's needed after all?
-
Hmmm, one of those, Failed assertion: line 2283 pos 14: '_debugSubtreeRelayoutRootAlreadyMarkedNeedsLayout()': is not true #147452, "works fine in release mode". Wonder if this is another iatrogenic error, caused by the check itself. Calls for debugging.
-
Hard to interpret bug #139802; there's no repro and little other detail.
-
Searched the tracker for other issues where this check fired:
https://github.com/flutter/flutter/issues?q=_debugSubtreeRelayoutRootAlreadyMarkedNeedsLayout
and looking only at changes since the check was changed in 2019 / Fix "node._relayoutBoundary == _relayoutBoundary" crash #44490 (though the issue that PR was about has many dupes!).The only other match is Failed assertion: line 556 pos 15: 'scrollOffsetCorrection != 0.0': is not true. #63380; and there it's after some other assertion failures, so seems secondary.
Indeed that one wound up closed as a dupe of SliverList throws Exception when first item is SizedBox.shrink() #62198 (via ListView crashing when scrolling #63286), which matches those previous errors.
"""
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for looking into this! I looked at two issues where the assert actually fired, both of them are using route so I suspect Overlay does have the same problem.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't agree with the statement, assert like this is sometimes annoying but is extremely useful for catching regression when refactoring code. When I was refactoring the semantics compiling, it was assertion like this that catches a lot of corner cases. (e.g. something is marked dirty but not added into dirty node..etc).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah that's true, the assert can be helpful during refactors when it doesn't give false positives.
| /// locations). In other words, if a [RenderObject]'s [performLayout] | ||
| /// implementation does not ask the child for its size at all, **the child** is | ||
| /// a relayout boundary. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The version of this doc in main offers a second way the child can be a relayout boundary:
because its size cannot change on relayout
That's also still true, right? That's the middle two conditions here:
final bool isRelayoutBoundary =
!parentUsesSize || sizedByParent || constraints.isTight || parent == null;There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Given the point this new version makes about baselines and other possible artifacts from performLayout, I guess maybe those conditions shouldn't apply. But it looks like they currently do.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ha good catch, baselines / dry sizes don't affect the _isRelayoutBoundary flag per se. I'll update that in the docs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, with some nit and a suggestion #169638 (comment), but I consider it is a good to have, not blocking
| // This debug method verifies that every node with _needsLayout sets to true | ||
| // is reachable via tree-walk. However RenderObjects who deliberately skips | ||
| // children (e.g., RenderSliverMultiBoxAdaptor or _RenderTheater) want to | ||
| // make part of the tree unreachable for performance reasons. The implementation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
they are reachable through tree walk, which is the problem right? maybe rephrase it that RenderObjects who deliberately skips laying out children for performance reason
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In both cases (RenderSliverMultiBoxAdaptor and _RenderTheater), the "offstage" children are not reachable via treewalk IIRC. RenderSliverMultiBoxAdaptor removes kept-alive children from its child model so they won't be visited in visitChildren. _RenderTheater skips the off screen children in the performLayout implementation so they're not reachable via layout treewalk either.
| /// This flag is true if [layout] has been called at least once for this | ||
| /// [RenderObject] by its current parent. | ||
| /// | ||
| /// If a parent calls [dropChild] and [adoptChild] on this child, this flag |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it only resets on dropChild, probably shouldn't mention adoptChild
#169638, without the more risky changes. I'll try to fix the g3 failures and land #169638 later. ## Pre-launch Checklist - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] 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]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
commit 1b9502b007d01e1cc79dd86fc3300061522803a5 Author: Kostia Sokolovskyi <[email protected]> Date: Mon Jun 9 17:01:53 2025 +0200 Add debugOverridePlatformViewRegistry to HtmlElementView test. (#170163) - Adds `debugOverridePlatformViewRegistry` usage to `HtmlElementView` tests - Removes private `debugOverridePlatformViewRegistry` from `_html_element_view_web.dart` - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [X] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [X] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [ ] 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]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md commit e9e989bef3de34cd8d2b24215f76bfb660aa544a Author: engine-flutter-autoroll <[email protected]> Date: Sat Jun 7 07:45:31 2025 -0400 Roll Dart SDK from f8e88f6ce02a to c26e7ca44805 (1 revision) (#170198) https://dart.googlesource.com/sdk.git/+log/f8e88f6ce02a..c26e7ca44805 2025-06-07 [email protected] Version 3.9.0-211.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md commit 2eec076321fb4ea99a461fd18e540e7ed110eb2c Author: engine-flutter-autoroll <[email protected]> Date: Fri Jun 6 19:40:24 2025 -0400 Roll Dart SDK from 239174405ad0 to f8e88f6ce02a (14 revisions) (#170182) https://dart.googlesource.com/sdk.git/+log/239174405ad0..f8e88f6ce02a 2025-06-06 [email protected] Version 3.9.0-210.0.dev 2025-06-06 [email protected] Version 3.9.0-209.0.dev 2025-06-06 [email protected] Version 3.9.0-208.0.dev 2025-06-06 [email protected] Version 3.9.0-207.0.dev 2025-06-06 [email protected] Version 3.9.0-206.0.dev 2025-06-05 [email protected] Version 3.9.0-205.0.dev 2025-06-05 [email protected] Version 3.9.0-204.0.dev 2025-06-05 [email protected] Version 3.9.0-203.0.dev 2025-06-05 [email protected] Version 3.9.0-202.0.dev 2025-06-04 [email protected] Version 3.9.0-201.0.dev 2025-06-04 [email protected] Version 3.9.0-200.0.dev 2025-06-04 [email protected] Version 3.9.0-199.0.dev 2025-06-04 [email protected] Version 3.9.0-198.0.dev 2025-06-03 [email protected] Version 3.9.0-197.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md commit f4bd508c28a92f2e85422f454cf1a393eebed843 Author: Koji Wakamiya <[email protected]> Date: Sat Jun 7 08:36:16 2025 +0900 Dispose ImmutableBuffer at web_ui.instantiateImageCodecFromBuffer and web_ui.instantiateImageCodecWithSize (#161488) fix https://github.com/flutter/flutter/issues/150016 Fixed `instantiateImageCodecFromBuffer` and `instantiateImageCodecWithSize` and added tests. doc > The buffer will be disposed by this method once the codec has been created, so the caller must relinquish ownership of the buffer when they call this method. * https://api.flutter.dev/flutter/dart-ui/instantiateImageCodecFromBuffer.html * https://api.flutter.dev/flutter/dart-ui/instantiateImageCodecWithSize.html ui https://github.com/flutter/flutter/blob/bd1ebf2e1498bd022808f8b237654ce42ae537be/engine/src/flutter/lib/ui/painting.dart#L2484-L2504 https://github.com/flutter/flutter/blob/bd1ebf2e1498bd022808f8b237654ce42ae537be/engine/src/flutter/lib/ui/painting.dart#L2541-L2558 web_ui https://github.com/flutter/flutter/blob/bd1ebf2e1498bd022808f8b237654ce42ae537be/engine/src/flutter/lib/web_ui/lib/painting.dart#L640-L679 - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Mouad Debbar <[email protected]> commit 7769f98c33c5858bd7fca6f914374f2d01bd4e9b Author: Hannah Jin <[email protected]> Date: Fri Jun 6 16:17:20 2025 -0700 [a11y] Semanctis flag refactor step 4: web and updateNode (#168852) issue: https://github.com/flutter/flutter/issues/166101, overall goal is to update semantics flag to be a struct/class to support more than 32 flags. step 1: https://github.com/flutter/flutter/pull/167421 Update semantics_node.h and dart:ui step 2: https://github.com/flutter/flutter/pull/167738 Update Embedder part to use a struct instead of a int bit mask. step 3: https://github.com/flutter/flutter/pull/167771 Update Framework use the SemanticsFlags class instead of bitmask step 4 (this PR) Update web engine to use the new class and update SemanticsUpdateBuilder.updateNode to pass a list of bools instead of bitmask TODO: flutter_tester use the SemanticsFlags class instead of bitmask [apicheck_test.dart](https://github.com/flutter/flutter/pull/167421/files#diff-69aefaacf1041f639974044962123bfae0756ce86032ac1f26256099425d7a5a) Add this test back - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] 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]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md commit 14472b4aed42a9ab23a8ee640323448d4dc8d89d Author: Zachary Anderson <[email protected]> Date: Fri Jun 6 15:57:26 2025 -0700 Reland workflow cache (#170111) Put the Android SDK and pub cache under the workflow's workspace directory instead of the worker's `$HOME` directory. In order to avoid the pub cache and Android SDK being nested inside of the Flutter checkout, this change also moves the Flutter checkout to a subdirectory of the workspace directory called `flutter`. --------- Co-authored-by: John "codefu" McDole <[email protected]> commit ea83a6a072990acc34c482d8e90f4d2bef713344 Author: zhongliugo <[email protected]> Date: Fri Jun 6 15:15:18 2025 -0700 Fix VoiceOver tab activation by adding tappable behavior to SemanticTab (#170076) This pull request fixes VoiceOver tab activation by adding tappable behavior to the SemanticTab class in the Flutter web engine. The fix ensures that tabs can be properly activated using assistive technology commands like VoiceOver's ctrl-option-space, making tab navigation fully accessible for screen reader users. When using VoiceOver to navigate tabs in a Flutter web app, users were unable to activate tabs using the standard VoiceOver activation command (ctrl-option-space). The SemanticTab class was missing the Tappable semantic behavior that enables assistive technology interaction, causing screen readers to treat tabs as non-interactive elements despite having tap handlers in the Flutter framework. **Before behavior:** https://tab-0605-before.web.app/ - Navigate to a tab using VoiceOver (ctrl-option-arrow) - Attempt to activate the tab with ctrl-option-space - Tab does not respond to activation command - Users cannot switch between tabs using assistive technology VoiceOver and other screen reader users can now properly activate tabs using standard assistive technology commands. Tabs respond correctly to ctrl-option-space and other activation gestures, providing full keyboard accessibility for tab navigation. **After behavior:** https://tab-0605-after.web.app/ - Navigate to a tab using VoiceOver (ctrl-option-arrow) - Activate the tab with ctrl-option-space - Tab switches correctly, displaying the associated tab panel - Consistent behavior across all assistive technologies - Added `addTappable()` call to `SemanticTab` constructor in `tabs.dart` - Added test case "tab with tap action" to verify DOM elements receive the `flt-tappable` attribute - Ensures tabs with `hasTap: true` are properly marked as interactive for assistive technologies Added unit test that verifies: - Tabs with tap actions receive the `flt-tappable` DOM attribute - SemanticTab properly integrates with the existing tappable behavior system This PR addresses GitHub Issue #169279, which reports that VoiceOver doesn't allow users to click tabs in Flutter web applications. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. commit 8caedde6cc2cc847ee31f98b9d394d97aa2ae968 Author: Jason Simmons <[email protected]> Date: Fri Jun 6 15:12:09 2025 -0700 Redirect the output of the "pub upgrade" command run by bin/flutter to stderr (#170174) The dev/bots/analyze.dart script is now running "flutter pub deps --json" to query packages in the Flutter workspace (see https://github.com/flutter/flutter/pull/169556) analyze.dart is capturing the stdout of that bin/flutter command and expecting the output to contain only JSON. If the flutter_tools snapshot needs to be rebuilt, then the output of the pub command invoked by the rebuild should not show up in stdout. commit 39ce6155300cec9808570b8dc7fd5df5f1635a1a Author: Qun Cheng <[email protected]> Date: Fri Jun 6 14:51:08 2025 -0700 Add landmark roles (#168931) This PR is to add ARIA landmark roles to `SemanticsRole`: complementary, contentInfo, main, navigation and region. I skipped `sectionhead` because it is an abstract role based on the [MDN docs](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/sectionhead_role#:~:text=The%20structural%20sectionhead%20role%20is%20an%20abstract%20role%20for%20the%20subclass%20roles%20that%20identify%20the%20labels%20or%20summaries%20of%20the%20sections%20they%20label.%20The%20role%20must%20not%20be%20used.) . Fixes https://github.com/flutter/flutter/issues/162138 - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. commit ce058e0be0d82198227c3d2adeb8881c4e763059 Author: Alex Medinsh <[email protected]> Date: Sat Jun 7 00:21:15 2025 +0300 Trigger `CupertinoPicker` haptics in the middle of the item (#169670) Towards https://github.com/flutter/flutter/issues/169606 This PR only fixes the haptic behaviour of `CupertinoPicker`, which now triggers only when passing the middle of the item. Haptic feedback is now also not trigger when tapping on an item to scroll to. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. commit 631ab1729ada1835fc61037da06c54f4a50af0db Author: engine-flutter-autoroll <[email protected]> Date: Fri Jun 6 15:49:35 2025 -0400 Roll Skia from c810c9ba87fe to 910070084066 (29 revisions) (#170165) https://skia.googlesource.com/skia.git/+log/c810c9ba87fe..910070084066 2025-06-06 [email protected] use SkSpan in SkMatrix API 2025-06-06 [email protected] [graphite][vulkan] Minimize graphics pipeline key 2025-06-06 [email protected] [graphite][vulkan] Use vertex input dynamic state 2025-06-06 [email protected] don't define SK_SUPPORT_UNSPANNED_API: it is in SkTypes.h 2025-06-06 [email protected] static bounds methods 2025-06-06 [email protected] [vulkan] Fix feature checks for YCbCr's chroma filter 2025-06-06 [email protected] [vulkan] Apply RelaxedPrecision to texture/atomic intrinsics 2025-06-06 [email protected] Revert "[graphite] Fix clamping bug on Intel UHD 630." 2025-06-06 [email protected] Roll ANGLE from ef31b3ed1c0e to db9624073324 (8 revisions) 2025-06-06 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-06-06 [email protected] Roll Skia Infra from 8b4c1b14163e to 3bbfa4528971 (9 revisions) 2025-06-06 [email protected] Roll SwiftShader from b62ac8aa106b to 11dc1b167af4 (2 revisions) 2025-06-06 [email protected] Roll Dawn from f8d7c6eea2f0 to 63ca6919b752 (19 revisions) 2025-06-06 [email protected] [graphite][vulkan] Optimize sample-count-support check 2025-06-06 [email protected] Roll skcms from e12ef7c0da42 to 1915b4d7ccd3 (1 revision) 2025-06-05 [email protected] Roll vulkan-deps from 0dbc05833984 to 1c3b39ad6dc0 (3 revisions) 2025-06-05 [email protected] Replace bug ids with mapped ids in the new issue tracker 2025-06-05 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-06-05 [email protected] Revert "[graphite] Use HW blends for kPlus on unorm texture formats" 2025-06-05 [email protected] Remove support for iOS12 2025-06-05 [email protected] Revert "Support GL texture for BGRA8 format" 2025-06-05 [email protected] [graphite] Fix clamping bug on Intel UHD 630. 2025-06-05 [email protected] [graphite] Disable DynamicVerticesPaddingTest 2025-06-05 [email protected] Recommend persistent default install location for Android NDK 2025-06-05 [email protected] Revert "[png] Simplify extra endian transform for SkPngEncode" 2025-06-05 [email protected] Implement drawCoverageMask for SkBitmapDevice 2025-06-05 [email protected] Fix resource loading in Android apks 2025-06-05 [email protected] [infra] Add jobs for MacOS 11 2025-06-05 [email protected] Use SkSpan in pathbuilder API If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md commit b5c1bbef587a7d02290301357b7ef89d11028ba1 Author: Victor Sanni <[email protected]> Date: Fri Jun 6 12:18:19 2025 -0700 Align persistent nav bar leading widget (#170095) | Before | After | | --- | --- | | <img width="381" alt="before leading" src="https://github.com/user-attachments/assets/ffd22324-75a4-4ff8-a06c-87f9148c198c" /> | <img width="381" alt="after leading" src="https://github.com/user-attachments/assets/36a1cd49-856b-462f-b321-6a016ffed382" /> | Fixes [CupertinoNavigationBar leading is too high](https://github.com/flutter/flutter/issues/18536) commit 8a41339418df9943583e72029813ea76d33587bf Author: Kevin Moore <[email protected]> Date: Fri Jun 6 14:10:51 2025 -0500 [engine/web] Migrate many things to switch expressions (#170096) commit c958e8313c782ea1df62b384a5dc85a2db5f747b Author: auto-submit[bot] <98614782+auto-submit[bot]@users.noreply.github.com> Date: Fri Jun 6 17:58:16 2025 +0000 Reverts "Lazy paths and frame object arenas (#168996)" (#170164) <!-- start_original_pr_link --> Reverts: flutter/flutter#168996 <!-- end_original_pr_link --> <!-- start_initiating_author --> Initiated by: zanderso <!-- end_initiating_author --> <!-- start_revert_reason --> Reason for reverting: Failing in post submit on web_long_running_tests_3_5 <!-- end_revert_reason --> <!-- start_original_pr_author --> Original PR Author: eyebrowsoffire <!-- end_original_pr_author --> <!-- start_reviewers --> Reviewed By: {mdebbar} <!-- end_reviewers --> <!-- start_revert_body --> This change reverts the following previous change: The lifecycle of `Path` objects are currently not managed by the user. That is to say, there is no `dispose` method on path objects and therefore no explicit way to detect when the user is done with the path object and the native-side object can be exposed. As of right now, we use `FinalizationRegistry` to clean up the native-side objects when the dart-side objects are garbage collected. However, this has a number of issues: * Adding objects to the finalization registry actually ends up prolonging their lifetime in V8, since the V8 garbage collector will only collect them in a major GC and not a minor GC once they are registered with the finalization registry. See the following Chrome bug: https://issues.chromium.org/issues/340777103 * We can run into OOM issues where the linear memory of canvaskit/skwasm exceeds 2GB if the collection of paths go on too long. * Even if the paths do get collected by the GC, they often happen infrequently enough that paths over many frames have accumulated and are being collected all at once. This gap can often be dozens or hundreds of frames long, and when collection does occur it is freeing a lot of paths at once, which causes a janky frame. I have seen this take upwards of 800ms on my M1 Macbook Pro. There are some more details in https://github.com/flutter/flutter/issues/153678 This PR alleviates this issue by creating a `LazyPath` object. This object is added to an arena that explicitly collects the underlying native objects at the end of each frame. The object also tracks the API calls made to it so that if it is actually used across a frame boundary that we can recreate the native object if it was freed. Running our benchmarks, this has a non-trivial performance cost to building and using these paths (30-50% in a microbenchmark, 3-6% in a broader full app benchmark). However, as a team we've decided that this cost is worth it to avoid OOM issues as well as the non-deterministic jank associated with large collections of these objects. <!-- end_revert_body --> Co-authored-by: auto-submit[bot] <[email protected]> commit 894fbf6d5323bf0e6fcd3b1170eef932f646cec5 Author: Daco Harkes <[email protected]> Date: Fri Jun 6 19:30:54 2025 +0200 [native assets] Roll dependencies (#169920) Roll to deps published today. commit 48c6ef247df6150059b058b28212ccb4138eaf78 Author: Mouad Debbar <[email protected]> Date: Fri Jun 6 13:16:11 2025 -0400 Make DDC tests run on linux only (#170155) I had previously allowed these tests to run on Mac and Windows (https://github.com/flutter/flutter/pull/169860). But it turns out they are flaky on those platforms too. So let's mark them back as linux-only. commit d3170f4a966431cd74ada0f57f205e41c72b058f Author: Jenn Magder <[email protected]> Date: Fri Jun 6 09:58:09 2025 -0700 Remove deprecated Objective-C iOS app create template (#169547) Remove Objective-C template for new apps. Existing apps won't be impacted. Keep Objective-C templates for plugins, though their example apps will be Swift instead. See https://github.com/flutter/flutter/issues/148586#issuecomment-2121323676 Move `templates/app/ios-swift.tmpl` to `templates/app/ios.tmpl`. Fixes https://github.com/flutter/flutter/issues/148586 - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md commit a11524896eaecaa2a6a44c14cdb65aa31492e479 Author: Jackson Gardner <[email protected]> Date: Fri Jun 6 09:27:08 2025 -0700 Lazy paths and frame object arenas (#168996) The lifecycle of `Path` objects are currently not managed by the user. That is to say, there is no `dispose` method on path objects and therefore no explicit way to detect when the user is done with the path object and the native-side object can be exposed. As of right now, we use `FinalizationRegistry` to clean up the native-side objects when the dart-side objects are garbage collected. However, this has a number of issues: * Adding objects to the finalization registry actually ends up prolonging their lifetime in V8, since the V8 garbage collector will only collect them in a major GC and not a minor GC once they are registered with the finalization registry. See the following Chrome bug: https://issues.chromium.org/issues/340777103 * We can run into OOM issues where the linear memory of canvaskit/skwasm exceeds 2GB if the collection of paths go on too long. * Even if the paths do get collected by the GC, they often happen infrequently enough that paths over many frames have accumulated and are being collected all at once. This gap can often be dozens or hundreds of frames long, and when collection does occur it is freeing a lot of paths at once, which causes a janky frame. I have seen this take upwards of 800ms on my M1 Macbook Pro. There are some more details in https://github.com/flutter/flutter/issues/153678 This PR alleviates this issue by creating a `LazyPath` object. This object is added to an arena that explicitly collects the underlying native objects at the end of each frame. The object also tracks the API calls made to it so that if it is actually used across a frame boundary that we can recreate the native object if it was freed. Running our benchmarks, this has a non-trivial performance cost to building and using these paths (30-50% in a microbenchmark, 3-6% in a broader full app benchmark). However, as a team we've decided that this cost is worth it to avoid OOM issues as well as the non-deterministic jank associated with large collections of these objects. commit ed275039e174b0916816a2889f21bad54a61af56 Author: Kostia Sokolovskyi <[email protected]> Date: Fri Jun 6 18:14:19 2025 +0200 [web] Allow overriding platformViewRegistry for testing. (#170144) Closes https://github.com/flutter/flutter/issues/170143 - Adds `debugOverridePlatformViewRegistry` function to allow `platformViewRegistry` overriding in tests - Adds tests for the new functionality - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [X] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [X] I signed the [CLA]. - [X] I listed at least one issue that this PR fixes in the description above. - [X] I updated/added relevant documentation (doc comments with `///`). - [X] I added new tests to check the change I am making, or this PR is [test-exempt]. - [X] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [X] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md commit 4ffa9852f9f07f0279fc3da0a1b7dfea184226fd Author: engine-flutter-autoroll <[email protected]> Date: Fri Jun 6 11:42:25 2025 -0400 Roll Packages from ecba2dbf07ee to 974f1522ee03 (6 revisions) (#170146) https://github.com/flutter/packages/compare/ecba2dbf07ee...974f1522ee03 2025-06-06 [email protected] [camera_avfoundation] Implementation swift migration - part 4 (flutter/packages#9219) 2025-06-05 [email protected] [go_router_builder] Use a mixin instead of an extension (flutter/packages#9275) 2025-06-05 [email protected] Roll Flutter master to 8b18dde7 (flutter/packages#9387) 2025-06-05 [email protected] [camera_android_camerax] Fixes premature garbage collection of native objects when app is under memory pressure (flutter/packages#9287) 2025-06-05 [email protected] [google_maps_flutter_platform_interface] Add a new zIndexInt param to marker and deprecate zIndex (flutter/packages#9372) 2025-06-05 [email protected] [camera_android_camerax] Java style improvements (flutter/packages#9234) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md commit 09405e87d819691e787ae95cc7f4297338e5f6d2 Author: auto-submit[bot] <98614782+auto-submit[bot]@users.noreply.github.com> Date: Thu Jun 5 23:40:26 2025 +0000 Reverts "Add caching to the tool test workflow (#169858)" (#170100) <!-- start_original_pr_link --> Reverts: flutter/flutter#169858 <!-- end_original_pr_link --> <!-- start_initiating_author --> Initiated by: jtmcdole <!-- end_initiating_author --> <!-- start_revert_reason --> Reason for reverting: https://github.com/flutter/flutter/issues/170099 Apparently the cache isn't restored correctly? <!-- end_revert_reason --> <!-- start_original_pr_author --> Original PR Author: zanderso <!-- end_original_pr_author --> <!-- start_reviewers --> Reviewed By: {jtmcdole} <!-- end_reviewers --> <!-- start_revert_body --> This change reverts the following previous change: No description provided. <!-- end_revert_body --> Co-authored-by: auto-submit[bot] <[email protected]> commit de805531741f9b9a56b7ee65bafa37b502be788d Author: Koji Wakamiya <[email protected]> Date: Fri Jun 6 07:07:24 2025 +0900 Remove AlarmClock from BrowserImageDecoder (#161481) PR derived from https://github.com/flutter/flutter/pull/159945. Since `ui.Codec` is now disposed of externally, the close processing of the resource by AlarmClock is no longer necessary. This fix works in combination with #159945 and is stabilized by #161132. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [ ] 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]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Mouad Debbar <[email protected]> commit 317be1f6813ee420b916a57a1cc08a85fcc9ab27 Author: Zachary Anderson <[email protected]> Date: Thu Jun 5 15:03:56 2025 -0700 Add caching to the tool test workflow (#169858) Co-authored-by: John "codefu" McDole <[email protected]> commit cfc9e3e1be24bd1cda836c3248681c9b2cb08a3d Author: Kate Lovett <[email protected]> Date: Thu Jun 5 15:31:24 2025 -0500 Update triage page (#170084) This PR reflects the rolling of go_router triage into framework triage: - removes go_router team from triage docs - Updates the framework triage links - The incoming issue link was broken, pulling the wrong subset due to `p: go_router` - Added PR link for framework owned PRs in flutter/packages I am following up with the triage team to remove the team-go_router labels and reroute them to team-framework. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [ ] 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]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md commit 2c9d898e2f01ccea157d559181d4acaa82388200 Author: Koji Wakamiya <[email protected]> Date: Fri Jun 6 04:58:50 2025 +0900 [Engine][Web] Fixed fallback font loading process (#166212) fix https://github.com/flutter/flutter/issues/165299 Fixes a problem where the drawing does not render as expected if the value of `maxCodePointsCovered` is greater for an unsuitable language than for a font suitable for that language. | before | after | | :---: | :---: | | <img src="https://github.com/user-attachments/assets/137dc021-31ce-41a7-b7a9-843abd88b738" width="300" /> | <img src="https://github.com/user-attachments/assets/fbfcc982-623a-4fe9-87a6-bf5bd7c88ebd" width="300" /> | - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --------- Co-authored-by: Mouad Debbar <[email protected]> commit 7f26571eb13a0e4a8a2d4a36b4038ed71d34ce70 Author: Srujan Gaddam <[email protected]> Date: Thu Jun 5 10:24:08 2025 -0700 Add connectedApps listener before we launch the browser (#170010) Related to https://github.com/flutter/flutter/issues/169574 There's a race condition where we currently might listen for the connected app after the stream has already sent the app. That would make the app wait forever. This avoids that by registering the listener before the browser even launches to make sure that the stream can't possibly send a connected app before we get to listen to it. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. --------- Co-authored-by: Mouad Debbar <[email protected]> commit 63980cb25ba5b70122f2814406989eb5fa8ef5a1 Author: flutter-pub-roller-bot <[email protected]> Date: Thu Jun 5 09:34:27 2025 -0700 Roll pub packages (#170066) This PR was generated by `flutter update-packages --force-upgrade`. commit 4469c5e4db3e6203c0bab2ad0b1b44df4cdc0d07 Author: Matan Lurey <[email protected]> Date: Thu Jun 5 09:33:45 2025 -0700 Release validation: Check `bin/internal/engine.version` in presubmit (#170018) Closes https://github.com/flutter/flutter/issues/170012. Note that this won't immediately apply to 3.32, but only for future branches from `master`. commit 92c55f06e01ecd2b7dd46f9a6bbae5d5f418f394 Author: engine-flutter-autoroll <[email protected]> Date: Thu Jun 5 12:29:41 2025 -0400 Roll Skia from 14bdc9e0a8ee to c810c9ba87fe (28 revisions) (#170064) https://skia.googlesource.com/skia.git/+log/14bdc9e0a8ee..c810c9ba87fe 2025-06-05 [email protected] Fix typo in legacy SkPath::Polygon 2025-06-05 [email protected] Roll vulkan-deps from f14d47636e83 to 0dbc05833984 (4 revisions) 2025-06-05 [email protected] Roll ANGLE from 88ea74bfbc55 to ef31b3ed1c0e (4 revisions) 2025-06-05 [email protected] Roll Skia Infra from 1a29d4378c5a to 8b4c1b14163e (4 revisions) 2025-06-05 [email protected] Roll SwiftShader from a8133cbb3c89 to b62ac8aa106b (2 revisions) 2025-06-05 [email protected] Roll Dawn from 0b7011542a20 to f8d7c6eea2f0 (19 revisions) 2025-06-05 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-06-05 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-06-05 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-06-05 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-06-05 [email protected] [graphite][vulkan] Use extended dynamic state 2025-06-05 [email protected] Use SkSpan in SkDevice/SkDraw drawPoints 2025-06-04 [email protected] [graphite] Use HW blends for kPlus on unorm texture formats 2025-06-04 [email protected] Fix IWYU enforcement on Graphite standalone headers 2025-06-04 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-06-04 [email protected] [vulkan] Fix minFilter vs chromaFilter matching for YCbCr 2025-06-04 [email protected] Roll vulkan-deps from a6136634622e to f14d47636e83 (6 revisions) 2025-06-04 [email protected] Use SkSpan in Path API 2025-06-04 [email protected] [graphite] Add padding test for drawPass-time vertices uploads 2025-06-04 [email protected] [png] Simplify extra endian transform for SkPngEncode 2025-06-04 [email protected] Add missing include 2025-06-04 [email protected] [graphite] Add missing string include 2025-06-04 [email protected] No longer claim support for macOS 10.15 2025-06-04 [email protected] Roll skcms from df82c365f7be to e12ef7c0da42 (1 revision) 2025-06-04 [email protected] Use SkSpan in SkRect::setBounds 2025-06-04 [email protected] Get CPU Recorder from all recorders 2025-06-04 recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com Roll recipe dependencies (trivial). 2025-06-04 [email protected] Roll ANGLE from 8c75960e034a to 88ea74bfbc55 (7 revisions) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/skia-flutter-autoroll Please CC [email protected],[email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md commit 817fa9701467feaa8ac7bb4d4446548b983fcaba Author: Mouad Debbar <[email protected]> Date: Thu Jun 5 12:10:14 2025 -0400 Combine expression evaluation tests to reduce testing time (#169860) Each `flutter run` invocation is expensive (time- and memory-wise). Each invocation also launches its own Chrome instance. This PR is attempting to minimize the number of launches by combining tests that need the same `flutter run` configuration into a single test. That way, we are reusing a single instance to do many checks, instead of launching a new instance for each check. Currently, I did this for expression evaluation tests, which cut their runtime in half on my local machine. This PR aims to help with issues like https://github.com/flutter/flutter/issues/169574 and https://github.com/flutter/flutter/issues/169304. Closes https://github.com/flutter/flutter/issues/110879 commit 736053538b14ed730d5c9937cb794983afef2f4f Author: engine-flutter-autoroll <[email protected]> Date: Thu Jun 5 11:53:21 2025 -0400 Roll Packages from 2bac766c5853 to ecba2dbf07ee (1 revision) (#170061) https://github.com/flutter/packages/compare/2bac766c5853...ecba2dbf07ee 2025-06-04 [email protected] Bump create_all_packages_command CompileSdk to 36 (flutter/packages#9293) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md commit 121caa68d6c1326e75fd4e42f8c5ad5e318311c7 Author: Jason Simmons <[email protected]> Date: Thu Jun 5 07:41:16 2025 -0700 Make ImageFilter::equals a static method and fix the name in its FFI annotation (#170023) Fixes https://github.com/flutter/flutter/issues/169936 commit 6e738ee3929f60e3fd373a06eb9fe6f6da4eb4cb Author: flutter-pub-roller-bot <[email protected]> Date: Wed Jun 4 20:53:33 2025 -0700 Roll pub packages (#170042) This PR was generated by `flutter update-packages --force-upgrade`. commit 6be019ba259ee6e97a62b8d25cabc2077755554d Author: flutter-pub-roller-bot <[email protected]> Date: Wed Jun 4 19:03:10 2025 -0700 Roll pub packages (#170040) This PR was generated by `flutter update-packages --force-upgrade`. commit ad585c1e8d85841ace73c7ccc0e4d3f1b4b5c4da Author: engine-flutter-autoroll <[email protected]> Date: Wed Jun 4 21:57:35 2025 -0400 Roll Fuchsia Linux SDK from XalPPr5CNvZXHPo6O... to Dueykg3VpLT5D_jSG... (#170035) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md commit 1af0c06704a04fb338e3f9e7fee51ddfe542b7b1 Author: Jason Simmons <[email protected]> Date: Wed Jun 4 17:36:07 2025 -0700 Move the check for Git in the PATH into the top level Windows flutter.bat script (#169794) The check for Git was originally in flutter.bat but was removed by https://github.com/flutter/flutter/commit/b84bfa35264385a897e6d85d039eae0ea6ba90ab in order to improve performance. It was later brought back in https://github.com/flutter/flutter/commit/bc4fc5ffb98478340b53c097d83245582b776940. However, that change added it to a subroutine in shared.bat. If Git is not found then shared.bat would exit the shell process to stop retries of the subroutine. This PR moves the check back into flutter.bat and exits the script without quitting the shell. Fixes https://github.com/flutter/flutter/issues/169784 commit 824868f5d1e6c091a5df23d3628407e75149e1da Author: auto-submit[bot] <98614782+auto-submit[bot]@users.noreply.github.com> Date: Wed Jun 4 23:15:26 2025 +0000 Reverts "Data assets (#169273)" (#170034) <!-- start_original_pr_link --> Reverts: flutter/flutter#169273 <!-- end_original_pr_link --> <!-- start_initiating_author --> Initiated by: jason-simmons <!-- end_initiating_author --> <!-- start_revert_reason --> Reason for reverting: seeing flakes of `dart_data_asset_test.dart` CI runs for various PRs got errors in the `tool_integration_tests` shards. The errors occurred on multiple platforms (Linux, Mac, and Windows). Affected PRs include: https://github.com/flutter/flutter/pull/170022, https://github.com/flutter/flutter/pull/169995 LUCI log of an error: https://ci.chromium.org/ui/p/flutter/builders/try/Windows%20t <!-- end_revert_reason --> <!-- start_original_pr_author --> Original PR Author: mosuem <!-- end_original_pr_author --> <!-- start_reviewers --> Reviewed By: {bkonyi} <!-- end_reviewers --> <!-- start_revert_body --> This change reverts the following previous change: Refiling of #164094, which itself is a rebase of #159675 This PR adds bundling support for the experimental dart data asset feature: Dart packages with hooks can now emit data assets which the flutter tool will bundle. It relies on flutter's existing asset bundling mechanism (e.g. entries in AssetManifest.json, DevFS syncing in reload/restart, ...). The support is added under an experimental flag (similar to the existing native assets experimental flag). Also, kNativeAssets is removed to also bundle data assets on flutter build bundle. The chrome sandbox is disabled as per #165664. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md <!-- end_revert_body --> Co-authored-by: auto-submit[bot] <[email protected]> commit e094c18882ad0e3382351a1e906cc928611ba4de Author: Camille Simon <[email protected]> Date: Wed Jun 4 15:21:22 2025 -0700 Merge `CHANGELOG` from 3.32.2 (#170028) Adds `CHANGELOG` updates from the 3.32.2 stable hotfix release. - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] 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]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md commit 27d9c0ff2beee1f9005fc2d8a7f5702267470094 Author: Ben Konyi <[email protected]> Date: Wed Jun 4 16:21:20 2025 -0400 [ Widget Previews ] Add support for localizations in widget previews (#169229) This change adds a new `localizations` property to the `Preview` annotation, which takes a callback that returns a `PreviewLocalizationsData` object. This class contains the same localization properties that can be provided to `WidgetsApp` and other similar widgets. This change also refactors much of the localization resolution logic into a shared `LocalizationsResolver` class to allow for localization resolution to be done in the widget preview scaffold on a per-preview basis. Fixes https://github.com/flutter/flutter/issues/166433 commit 94e9a2ca8d1737ec9b79c00b9f2c003bb6926a4e Author: Ben Konyi <[email protected]> Date: Wed Jun 4 16:17:27 2025 -0400 [ Tool ] Fix failed VSCode version lookup on Linux (#169949) VSCode installations on Linux appear to place the packages.json file at `$VSCODE_INSTALL/resources/app/package.json` rather than at the expected `$VSCODE_INSTALL/Resources/app/package.json`, causing the VSCode version to not be reported correctly on Linux. Fixes https://github.com/flutter/flutter/issues/169812 commit d3e8dc3df9e81778c6d8db44d0dd095249fbf0d9 Author: LongCatIsLooong <[email protected]> Date: Wed Jun 4 13:09:33 2025 -0700 Make _layoutBoundary a boolean 2 (#169958) https://github.com/flutter/flutter/pull/169638, without the more risky changes. I'll try to fix the g3 failures and land #169638 later. - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] 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 …
flutter#169638, without the more risky changes. I'll try to fix the g3 failures and land flutter#169638 later. ## Pre-launch Checklist - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [ ] 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]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
|
This pull request executed golden file tests, but it has not been updated in a while (20+ days). Test results from Gold expire after as many days, so this pull request will need to be updated with a fresh commit in order to get results from Gold. For more guidance, visit Writing a golden file test for Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
|
Greetings from stale PR triage! 👋 |
|
closing for now. |
This is basically #150905.
Unfortunately the
_debugRelayoutBoundaryAlreadyMarkedNeedsLayoutcheck we have inmarkNeedsLayoutfeels a bit questionable, when there are render objects we deliberately skip in Overlay / lazy lists.Fixes #168936
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.