Prevent LayoutBuilder from rebuilding more than once #147856
Open
+680
−240
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #146379: introduces
Element.buildScope
whichBuildOwner.buildScope
uses to identify subtrees that need skipping (those with differentBuildScope
s). IfElement.update
callsupdateChild
then dirty children will still be rebuilt regardless of their build scopes.This also introduces
LayoutBuilder.applyDoubleRebuildFix
migration flag which should only live for a week or less.Caveats:
LayoutBuilder
's render object callsmarkNeedsLayout
if a descendant Element is dirty. SincemarkNeedsLayout
also impliesmarkNeedsPaint
, the render object is going to be very repaint/relayout-happy.Tests:
Presubmits with the migration flag set to true: https://github.com/flutter/flutter/pull/147856/checks?check_run_id=24629865893
Pre-launch Checklist
///
).If you need help, consider asking for advice on the #hackers-new channel on Discord.