-
Notifications
You must be signed in to change notification settings - Fork 29.8k
Add ConstrainedLayoutBuilder.updateShouldRebuild() #136691
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
Conversation
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.
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.
Done
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.
While this used to be the style, we now recommend against providing specialized getters for performance reasons because most callers don't care about the specific type (especially on the rebuild hot path) but still have to pay for the cast. Instead, just cast it at the two or three sides where you need the specific type. See also "Specializing the getters" in our docs: https://master-api.flutter.dev/flutter/widgets/RenderObjectElement-class.html.
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.
Done
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 document explicitly that the new widget is asked if it requires a rebuild and it is given the old widget. Not the other way around.
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.
Done
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 find the wording "rebuilt" here a little confusing since this callback isn't on the Element.rebuild path. Maybe we can reword this to make it clear that this callback is consulted when the widget configuration is changed (i.e. the Element.update path)?
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.
Done
This method controls whether the builder needs to be called again again even if the layout constraints are the same. By default, the builder will always be called when the widget is updated because the logic in the callback might have changed. However, there are cases where subclasses of ConstrainedLayoutBuilder know that certain property updates only affect paint and not build. In these cases, we lack a way of expressing that the builder callback is not needed -- and we end up doing superfluous work. This PR gives subclasses the ability to know exactly when the callback needs to be called and when it can be skipped.
|
Thanks! PTAL |
goderbauer
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.
LGTM
Roll Flutter from c555599 to 5907c97 (45 revisions) flutter/flutter@c555599...5907c97 2023-10-27 gspencergoog@users.noreply.github.com Add `isLogicalKeyPressed` to `KeyEvent` (flutter/flutter#136856) 2023-10-27 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Ensure `flutter build apk --release` optimizes+shrinks platform code" (flutter/flutter#137433) 2023-10-27 engine-flutter-autoroll@skia.org Roll Flutter Engine from bedc49efc85c to a198ad4e740d (20 revisions) (flutter/flutter#137429) 2023-10-27 31859944+LongCatIsLooong@users.noreply.github.com Make `SemanticsNode.isMergedIntoParent` Readonly (flutter/flutter#137304) 2023-10-27 engine-flutter-autoroll@skia.org Manual roll Flutter Engine from bedc49efc85c to 71e1a0430232 (16 revisions) (flutter/flutter#137422) 2023-10-27 engine-flutter-autoroll@skia.org Roll Packages from fea24c5 to 2af6954 (5 revisions) (flutter/flutter#137421) 2023-10-27 15619084+vashworth@users.noreply.github.com Run tests on either macOS 12 or 13 (flutter/flutter#137365) 2023-10-27 tessertaha@gmail.com Revert "Update `DataTable` test when data row is pressed for Material 3 (#137230)" (flutter/flutter#137407) 2023-10-27 tessertaha@gmail.com Revert "Reland - Update `OutlinedButton` tests for Material 3 (#136809) (#137247)" (flutter/flutter#137406) 2023-10-27 kustermann@google.com Ensure `flutter build apk --release` optimizes+shrinks platform code (flutter/flutter#136880) 2023-10-27 tessertaha@gmail.com Update `DataTable` test when data row is pressed for Material 3 (flutter/flutter#137230) 2023-10-27 tessertaha@gmail.com Reland - Update `OutlinedButton` tests for Material 3 (#136809) (flutter/flutter#137247) 2023-10-27 andrewrkolos@gmail.com update asset manifest file name referenced in `WebServiceWorker` (flutter/flutter#135954) 2023-10-27 andrewrkolos@gmail.com give `throwsToolExit` a more useful description (flutter/flutter#136694) 2023-10-27 tvolkert@users.noreply.github.com Add ConstrainedLayoutBuilder.updateShouldRebuild() (flutter/flutter#136691) 2023-10-27 41873024+droidbg@users.noreply.github.com Fix. typos (flutter/flutter#137325) 2023-10-27 engine-flutter-autoroll@skia.org Roll Flutter Engine from 87f384c2d70b to bedc49efc85c (1 revision) (flutter/flutter#137382) 2023-10-26 pateltirth454@gmail.com Fix Typos (flutter/flutter#137292) 2023-10-26 sokolovskyi.konstantin@gmail.com AnimationController should dispatch creation in constructor. (flutter/flutter#134839) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 9788bb9ff83e to 87f384c2d70b (4 revisions) (flutter/flutter#137380) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from ce1c1ee54107 to 9788bb9ff83e (3 revisions) (flutter/flutter#137373) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 windows_startup_test to be unflaky (flutter/flutter#137228) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 flutter_tool_startup__windows to be unflaky (flutter/flutter#137229) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 windows_home_scroll_perf__timeline_summary to be unflaky (flutter/flutter#137221) 2023-10-26 34871572+gmackall@users.noreply.github.com Declare dependency on copyFlutterAssetsTask in bundleAarTask (flutter/flutter#137370) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 complex_layout_win_desktop__start_up to be unflaky (flutter/flutter#137225) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 394744d2c4d0 to ce1c1ee54107 (2 revisions) (flutter/flutter#137367) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 hot_mode_dev_cycle_win_target__benchmark to be unflaky (flutter/flutter#137217) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 flutter_view_win_desktop__start_up to be unflaky (flutter/flutter#137226) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 platform_view_win_desktop__start_up to be unflaky (flutter/flutter#137227) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 flutter_gallery_win_desktop__start_up to be unflaky (flutter/flutter#137224) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 hello_world_win_desktop__compile to be unflaky (flutter/flutter#137222) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 flutter_gallery_win_desktop__compile to be unflaky (flutter/flutter#137223) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 run_release_test_windows to be unflaky (flutter/flutter#137220) 2023-10-26 greg@zulip.com Fix dislocated doc and comment on ThemeData localize cache (flutter/flutter#137315) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 platform_channel_sample_test_windows to be unflaky (flutter/flutter#137218) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 7c5c8f587992 to 394744d2c4d0 (1 revision) (flutter/flutter#137364) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 9363fe6ba503 to 7c5c8f587992 (3 revisions) (flutter/flutter#137363) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 542f8bc4c019 to 9363fe6ba503 (2 revisions) (flutter/flutter#137354) 2023-10-26 42216813+eliasyishak@users.noreply.github.com Unified analytics events for doctor validators (flutter/flutter#136647) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from d8132d5070bf to 542f8bc4c019 (2 revisions) (flutter/flutter#137349) 2023-10-26 fluttergithubbot@gmail.com Marks Windows_arm64 run_debug_test_windows to be unflaky (flutter/flutter#137219) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 0a6253dbfafd to d8132d5070bf (1 revision) (flutter/flutter#137347) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 5da115661f01 to 0a6253dbfafd (1 revision) (flutter/flutter#137341) 2023-10-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 61ae5ef94e9c to 5da115661f01 (1 revision) (flutter/flutter#137340) ...
This method controls whether the builder needs to be called again again even if the layout constraints are the same.
By default, the builder will always be called when the widget is updated because the logic in the callback might have changed. However, there are cases where subclasses of ConstrainedLayoutBuilder know that certain property updates only affect paint and not build. In these cases, we lack a way of expressing that the builder callback is not needed -- and we end up doing superfluous work.
This PR gives subclasses the ability to know exactly when the callback needs to be called and when it can be skipped.
Pre-launch Checklist
///).