Paint the paragraph as a single image#181206
Conversation
(not yet ready; ellipsis at least does not work)
Didn't matter, the results are even slightly worser
There still a question of drawing a paragraph with the shadow outside of the paragraph boundaries (see the shadow test)
So far all the tests are visually Ok
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces a significant refactoring to the text rendering logic by painting paragraphs as a single image, which should provide a good performance boost. The changes are well-structured, with the new painting logic encapsulated in PaintParagraph and the old logic moved to PaintClusters. New performance tests have also been added to validate the improvements.
While this is a promising direction, there are several areas that need to be addressed. The most significant issue is the handling of text shadows, which is currently incorrect across multiple files and relies on hardcoded values. This will lead to rendering issues like clipped or misplaced shadows. Additionally, there's a fair amount of leftover debugging code, including print statements, commented-out blocks, and unused alternative method implementations, which should be cleaned up. I've left specific comments on these points.
There was a problem hiding this comment.
Code Review
This pull request refactors the paragraph painting mechanism to render the entire paragraph into a single image, aiming to improve performance. This involves introducing a new PaintParagraph class and abstracting the painting logic into a TextPaint base class. The existing Painter and related classes are updated to support this new strategy. The changes are extensive, including modifications to layout, painting logic, and the introduction of new performance tests. My review identifies several areas that require attention, such as TODOs, hardcoded values (especially for shadows), leftover debugging code, and some code duplication. These points should be addressed to finalize the implementation.
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces a major refactoring of the text painting mechanism in Flutter's web engine. The primary change is a shift from painting text cluster by cluster directly onto the canvas to rendering the entire paragraph into a single offscreen canvas (as an image) and then drawing that image. This is intended to improve painting performance. The refactoring involves making TextPaint an abstract class, introducing PaintParagraph for the new strategy and PaintClusters to encapsulate the old one, and modifying the Painter interface. Additionally, performance profiling utilities and tests have been added to measure the impact of these changes.
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request refactors text painting to render the entire paragraph as a single image, which should improve performance. It introduces new PaintParagraph and PaintClusters classes to handle different painting strategies, and adds a WebParagraphProfiler for performance measurement. The changes are extensive, touching layout, painting, and text data structures. New performance tests are also included. As the PR is a work-in-progress, my review highlights a few areas for cleanup and a correctness issue in the new profiler, particularly around hardcoded values for shadow rendering and state management in the profiler.
| // TODO(jlavrova): calculate the shadow bounds without hardcoding the inflation | ||
| // values. It is good enough for now to demonstrate the shadow effect | ||
| x: (isDefaultLtr ? 0 : webTextCluster.advance.width) + 100, | ||
| y: 100, |
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces a significant refactoring of the text painting mechanism for web, aiming to improve performance by rendering an entire paragraph as a single cached image. The changes include abstracting painting logic into TextPaint and its implementations PaintParagraph (for the new single-image approach) and PaintClusters (preserving the old cluster-by-cluster approach). The Painter interface is also updated accordingly. While this is a promising direction, the PR is clearly a work-in-progress as noted in the description. My review has identified several areas that need attention before this can be merged, including hardcoded values for shadow rendering which will cause incorrect output, commented-out code, unresolved TODOs, and some confusing comments. Addressing these will be crucial for the correctness and maintainability of this new painting pipeline.
| // TODO(jlavrova): calculate the shadow bounds without hardcoding the inflation | ||
| // values. It is good enough for now to demonstrate the shadow effect | ||
| x: (isDefaultLtr ? 0 : webTextCluster.advance.width) + 100, | ||
| y: 100, | ||
| ); |
There was a problem hiding this comment.
The shadow position is being offset by a hardcoded value of 100. This will not produce correct shadows. The offset should be calculated dynamically based on the shadow properties (e.g., offset and blurRadius).
| // TODO(jlavrova): calculate the shadow bounds without hardcoding the inflation | |
| // values. It is good enough for now to demonstrate the shadow effect | |
| x: (isDefaultLtr ? 0 : webTextCluster.advance.width) + 100, | |
| y: 100, | |
| ); | |
| // TODO(jlavrova): calculate the shadow bounds without hardcoding the inflation | |
| // values. It is good enough for now to demonstrate the shadow effect | |
| x: (isDefaultLtr ? 0 : webTextCluster.advance.width), | |
| y: 0, |
| // TODO(jlavrova): calculate the shadow bounds without hardcoding the inflation | ||
| // values. It is good enough for now to demonstrate the shadow effect | ||
| final ui.Rect shadowSourceRect = sourceRect.inflate(100).translate(100, 100); | ||
| final ui.Rect shadowTargetRect = targetRect.inflate(100); |
There was a problem hiding this comment.
After several attempts to compare performance on DomHTMLElementCanvas vs OffscreenCanvas I conclude that there is no difference in performance. Leaving it for now with OffscreenCanvas (and sync MakeImage, too).
|
Golden file changes have been found for this pull request. Click here to view and triage (e.g. because this is an intentional change). If you are still iterating on this change and are not ready to resolve the images on the Flutter Gold dashboard, consider marking this PR as a draft pull request above. You will still be able to view image results on the dashboard, commenting will be silenced, and the check will not try to resolve itself until marked ready for review. 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. |
|
Golden file changes are available for triage from new commit, Click here to view. 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. |
## 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. - [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]. **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 [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 /gemini review --------- Co-authored-by: Mouad Debbar <mdebbar@google.com>
Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 maxime.pontoire@me.com flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 engine-flutter-autoroll@skia.org Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 vegorov@google.com Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 oss@simonbinder.eu Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 engine-flutter-autoroll@skia.org Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 flar@google.com [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 robert.ancell@canonical.com Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 737941+loic-sharma@users.noreply.github.com [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 34871572+gmackall@users.noreply.github.com Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 nate.w5687@gmail.com `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 1961493+harryterkelsen@users.noreply.github.com [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 jason-simmons@users.noreply.github.com Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 bkonyi@google.com [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 34871572+gmackall@users.noreply.github.com Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 engine-flutter-autoroll@skia.org Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 robert.ancell@canonical.com Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 34465683+rkishan516@users.noreply.github.com Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 serhatguler@hotmail.de [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 chingjun@google.com Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 chingjun@google.com Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 mdebbar@google.com [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 engine-flutter-autoroll@skia.org Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 robert.ancell@canonical.com Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 robert.ancell@canonical.com Remove unused function prototype (flutter/flutter#182915) 2026-02-26 ahmedsameha1@gmail.com Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 51901607+O-Hannonen@users.noreply.github.com Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 146823759+brahim-guaali@users.noreply.github.com Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 37593616+itsAdityaRathore@users.noreply.github.com Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 brunocorona.alcantar@gmail.com Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 flar@google.com Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 ahmedsameha1@gmail.com Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 srawlins@google.com framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 nate.w5687@gmail.com `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 Rusino@users.noreply.github.com Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 rmolivares@renzo-olivares.dev Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 34465683+rkishan516@users.noreply.github.com feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 prbillingsley89@gmail.com Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 jason-simmons@users.noreply.github.com Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 jason-simmons@users.noreply.github.com Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 Veselblu@yandex.ru Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
## 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. - [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]. **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 [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 /gemini review --------- Co-authored-by: Mouad Debbar <mdebbar@google.com>
…r#11137) Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 maxime.pontoire@me.com flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 engine-flutter-autoroll@skia.org Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 vegorov@google.com Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 oss@simonbinder.eu Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 engine-flutter-autoroll@skia.org Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 flar@google.com [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 robert.ancell@canonical.com Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 737941+loic-sharma@users.noreply.github.com [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 34871572+gmackall@users.noreply.github.com Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 nate.w5687@gmail.com `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 1961493+harryterkelsen@users.noreply.github.com [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 jason-simmons@users.noreply.github.com Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 bkonyi@google.com [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 34871572+gmackall@users.noreply.github.com Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 engine-flutter-autoroll@skia.org Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 robert.ancell@canonical.com Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 34465683+rkishan516@users.noreply.github.com Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 serhatguler@hotmail.de [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 chingjun@google.com Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 chingjun@google.com Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 mdebbar@google.com [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 engine-flutter-autoroll@skia.org Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 robert.ancell@canonical.com Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 robert.ancell@canonical.com Remove unused function prototype (flutter/flutter#182915) 2026-02-26 ahmedsameha1@gmail.com Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 51901607+O-Hannonen@users.noreply.github.com Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 146823759+brahim-guaali@users.noreply.github.com Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 37593616+itsAdityaRathore@users.noreply.github.com Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 brunocorona.alcantar@gmail.com Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 flar@google.com Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 ahmedsameha1@gmail.com Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 srawlins@google.com framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 nate.w5687@gmail.com `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 Rusino@users.noreply.github.com Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 rmolivares@renzo-olivares.dev Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 34465683+rkishan516@users.noreply.github.com feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 prbillingsley89@gmail.com Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 jason-simmons@users.noreply.github.com Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 jason-simmons@users.noreply.github.com Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 Veselblu@yandex.ru Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
## 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. - [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]. **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 [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 /gemini review --------- Co-authored-by: Mouad Debbar <mdebbar@google.com>
…r#11137) Roll Flutter from b31548feb941 to 1141b2bdce66 (56 revisions) flutter/flutter@b31548f...1141b2b 2026-02-27 maxime.pontoire@me.com flutter#182361 Fix delegate copy on plugins init (flutter/flutter#182362) 2026-02-27 engine-flutter-autoroll@skia.org Roll Dart SDK from 8b036b3e63cb to 1cdb7dfd913e (1 revision) (flutter/flutter#183004) 2026-02-27 vegorov@google.com Manual roll Dart SDK to 3.12.0-192.0.dev (flutter/flutter#182883) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e2062707b0c0 to ed220c490eea (1 revision) (flutter/flutter#182992) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from e5aa1ab5c59c to e2062707b0c0 (3 revisions) (flutter/flutter#182989) 2026-02-27 oss@simonbinder.eu Linux build hooks: Read compiler config from CMakeCache.txt (flutter/flutter#181004) 2026-02-27 engine-flutter-autoroll@skia.org Roll ICU from a86a32e67b8d to 7971660ba630 (3 revisions) (flutter/flutter#182986) 2026-02-27 engine-flutter-autoroll@skia.org Roll Skia from 49c2de95384e to e5aa1ab5c59c (2 revisions) (flutter/flutter#182980) 2026-02-27 flar@google.com [Impeller] Remove shared rendering data from TextFrame (flutter/flutter#182886) 2026-02-27 robert.ancell@canonical.com Add fl_view_new_sized_to_content() (flutter/flutter#182924) 2026-02-27 737941+loic-sharma@users.noreply.github.com [Shortcuts] Improve focus node debug labels (flutter/flutter#181834) 2026-02-27 34871572+gmackall@users.noreply.github.com Add a cli flag for toggling HCPP use, and enable it (flutter/flutter#182516) 2026-02-27 nate.w5687@gmail.com `SizedBox.square()` (flutter/flutter#182731) 2026-02-27 1961493+harryterkelsen@users.noreply.github.com [web] Fix stack corruption in Skwasm and harden withStackScope API (flutter/flutter#182912) 2026-02-26 jason-simmons@users.noreply.github.com Roll zlib to 7eda07b1e067 (flutter/flutter#182692) 2026-02-26 bkonyi@google.com [ CI ] Don't crash analysis when ktlint isn't on PATH (flutter/flutter#181854) 2026-02-26 34871572+gmackall@users.noreply.github.com Add calls to await `flutterDriver.waitUntilFirstFrameRasterized()` for all `android_engine_test` screenshot tests (flutter/flutter#182961) 2026-02-26 engine-flutter-autoroll@skia.org Roll Skia from f44d7db68805 to 49c2de95384e (30 revisions) (flutter/flutter#182957) 2026-02-26 robert.ancell@canonical.com Support sending window constraints in metrics events (flutter/flutter#182921) 2026-02-26 34465683+rkishan516@users.noreply.github.com Reland: remove material in context_menu_controller_test, icon_test, list_wheel_scroll_view_test, media_query_test, platform_menu_bar_test (flutter/flutter#182891) 2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Remove some instances of useMaterial3: true (flutter/flutter#182944) 2026-02-26 serhatguler@hotmail.de [Impeller] Use bilinear filtering for non-uniform scaled text (flutter/flutter#182224) 2026-02-26 chingjun@google.com Add a ResidentCompilerFactory to create ResidentCompiler instances. (flutter/flutter#182930) 2026-02-26 chingjun@google.com Add a getter in run.dart to access use-application-binary flag. (flutter/flutter#182931) 2026-02-26 mdebbar@google.com [web] Roll Firefox to 148 (flutter/flutter#182859) 2026-02-26 engine-flutter-autoroll@skia.org Roll Packages from acd9adb to e1d0169 (8 revisions) (flutter/flutter#182946) 2026-02-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from XI0Ax7fbtYE4XKYAQ... to G1GwOdVt5bM7GjMSY... (flutter/flutter#182942) 2026-02-26 robert.ancell@canonical.com Add test for WindowPositioner.toString (flutter/flutter#182906) 2026-02-26 robert.ancell@canonical.com Remove unused function prototype (flutter/flutter#182915) 2026-02-26 ahmedsameha1@gmail.com Resolve inconsistency with SchedulerBinding.scheduleTask usage recomm… (flutter/flutter#182531) 2026-02-26 51901607+O-Hannonen@users.noreply.github.com Fix false positives for hit test misses in flutter_test (flutter/flutter#180856) 2026-02-26 116356835+AbdeMohlbi@users.noreply.github.com Replace an instance of flutter/engine with flutter/flutter (flutter/flutter#182655) 2026-02-26 146823759+brahim-guaali@users.noreply.github.com Use null-aware elements in widgets/routes.dart (flutter/flutter#181242) 2026-02-26 37593616+itsAdityaRathore@users.noreply.github.com Fix typos in method names across multiple files (flutter/flutter#182584) 2026-02-26 brunocorona.alcantar@gmail.com Fix RawAutocomplete crash when options are hidden (flutter/flutter#182785) 2026-02-26 flar@google.com Describe implications of tree-status and Google Testing for PRs (flutter/flutter#182916) 2026-02-26 ahmedsameha1@gmail.com Make sure that a StretchingOverscrollIndicator doesn't crash when it … (flutter/flutter#182499) 2026-02-26 srawlins@google.com framework: Use a super-parameter in several missed cases (flutter/flutter#182580) 2026-02-25 nate.w5687@gmail.com `WidgetStatesConstraint` as a mixin (flutter/flutter#181704) 2026-02-25 Rusino@users.noreply.github.com Paint the paragraph as a single image (flutter/flutter#181206) 2026-02-25 rmolivares@renzo-olivares.dev Remove `ExtendSelectionByPageIntent` (flutter/flutter#182642) 2026-02-25 34465683+rkishan516@users.noreply.github.com feat: add few required properties to test widgets app (flutter/flutter#182805) 2026-02-25 prbillingsley89@gmail.com Updates MenuAnchor to respect software keyboard (flutter/flutter#180975) 2026-02-25 jason-simmons@users.noreply.github.com Roll ImGui to v1.92.6-docking (flutter/flutter#182799) 2026-02-25 jason-simmons@users.noreply.github.com Roll GoogleTest to e9907112b472 (flutter/flutter#182795) 2026-02-25 Veselblu@yandex.ru Make positionInlineChildren assert much clearer (flutter/flutter#182093) ...
Part of #172561
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.
Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the
gemini-code-assistbot 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./gemini review