Skip to content

Paint the paragraph as a single image#181206

Merged
auto-submit[bot] merged 26 commits into
flutter:masterfrom
Rusino:singleImage
Feb 25, 2026
Merged

Paint the paragraph as a single image#181206
auto-submit[bot] merged 26 commits into
flutter:masterfrom
Rusino:singleImage

Conversation

@Rusino

@Rusino Rusino commented Jan 20, 2026

Copy link
Copy Markdown
Contributor

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-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.

/gemini review

(not yet ready; ellipsis at least does not work)
@github-actions github-actions Bot added engine flutter/engine related. See also e: labels. platform-web Web applications specifically labels Jan 20, 2026
@Rusino Rusino requested a review from mdebbar January 20, 2026 21:21
@Rusino Rusino self-assigned this Jan 20, 2026
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/layout.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/layout.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
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
@Rusino Rusino requested a review from mdebbar February 5, 2026 16:03
@Rusino

Rusino commented Feb 5, 2026

Copy link
Copy Markdown
Contributor Author

/gemini review

@Rusino Rusino marked this pull request as ready for review February 5, 2026 16:18

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_clusters.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_paragraph.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/debug.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/debug.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/debug.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_clusters.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_paragraph.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/debug.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_paragraph.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/test/webparagraph/paragraph_performance_test.dart Outdated
@Rusino

Rusino commented Feb 5, 2026

Copy link
Copy Markdown
Contributor Author

/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/layout.dart Outdated
@Rusino

Rusino commented Feb 5, 2026

Copy link
Copy Markdown
Contributor Author

/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +202 to +205
// 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,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

These hardcoded values for shadow positioning (+ 100 for x and 100 for y) seem to be for temporary debugging, as indicated by the TODO. This should be replaced with a proper calculation of shadow bounds before this PR is merged.

Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/debug.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
@Rusino

Rusino commented Feb 10, 2026

Copy link
Copy Markdown
Contributor Author

/gemini review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +202 to +206
// 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,
);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

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).

Suggested change
// 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,

Comment on lines 117 to 120
// 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);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The shadow's source and target rectangles are being inflated and translated by a hardcoded value of 100. This will result in incorrectly rendered shadows. The inflation and translation should be dynamically calculated based on the shadow's properties, such as blurRadius and offset.

Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/debug.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/layout.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_paragraph.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_paragraph.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_paragraph.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint_paragraph.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/painter.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/lib/src/engine/web_paragraph/paint.dart Outdated
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).
@flutter-dashboard

Copy link
Copy Markdown

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 package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #181206 at sha 70896c9

@flutter-dashboard flutter-dashboard Bot added the will affect goldens Changes to golden files label Feb 25, 2026
@flutter-dashboard

Copy link
Copy Markdown

Golden file changes are available for triage from new commit, Click here to view.

For more guidance, visit Writing a golden file test for package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #181206 at sha e344fc2

@Rusino Rusino added the autosubmit Merge PR when tree becomes green via auto submit App label Feb 25, 2026
@auto-submit auto-submit Bot added this pull request to the merge queue Feb 25, 2026
Merged via the queue into flutter:master with commit c847578 Feb 25, 2026
182 of 183 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Feb 25, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 26, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 26, 2026
ahmedsameha1 pushed a commit to ahmedsameha1/flutter that referenced this pull request Feb 27, 2026
## 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>
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 27, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Feb 27, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Feb 27, 2026
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)
...
xxxOVALxxx pushed a commit to xxxOVALxxx/flutter that referenced this pull request Mar 10, 2026
## 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>
okorohelijah pushed a commit to okorohelijah/packages that referenced this pull request Mar 26, 2026
…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)
...
mboetger pushed a commit to mboetger/flutter that referenced this pull request Mar 26, 2026
## 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>
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…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)
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

engine flutter/engine related. See also e: labels. platform-web Web applications specifically will affect goldens Changes to golden files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants