Sitelet https://github.com/flutter/packages/pull/12637
Skip to content

[material_ui] Add helper methods in gen_defaults template - #12637

Merged
auto-submit[bot] merged 1 commit into
flutter:mainfrom
elliette:port-pr-12121
Aug 27, 2026
Merged

auto-submit[bot] merged 1 commit into
flutter:mainfrom
elliette:port-pr-12121

Conversation

@elliette

Copy link
Copy Markdown
Member

Work towards flutter/flutter#191088

Ports over #12121 which landed on the m3e_migration feature branch.

Original PR description

Related to flutter/flutter#184950

This PR is to add some helper methods to handle color, and shape tokens. Also I updated the generated default class name from _M3xxx to _xxxM3 to keep the name consistent with the original M2 and M3 defaults.

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

Footnotes

  1. Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. ↩ ↩2

@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 updates the Material 3 component defaults template generator by renaming generated classes and adding helper methods to generate Dart expressions for colors and shapes. It also adds corresponding unit tests and updates test fixtures. The review feedback suggests simplifying the string interpolation logic for generating BorderRadius expressions by using collection-if statements inside a list to produce cleaner, more idiomatic Dart code.

Comment on lines +134 to +146
if (topLeft == topRight && bottomLeft == bottomRight) {
return '${prefix}RoundedRectangleBorder(borderRadius: BorderRadius.vertical('
'${topLeft > 0 ? 'top: Radius.circular(${number(topLeft)})' : ''}'
'${topLeft > 0 && bottomLeft > 0 ? ', ' : ''}'
'${bottomLeft > 0 ? 'bottom: Radius.circular(${number(bottomLeft)})' : ''}'
'))';
}
return '${prefix}RoundedRectangleBorder(borderRadius: '
'BorderRadius.only('
'topLeft: Radius.circular(${number(topLeft)}), '
'topRight: Radius.circular(${number(topRight)}), '
'bottomLeft: Radius.circular(${number(bottomLeft)}), '
'bottomRight: Radius.circular(${number(bottomRight)})))';

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.

medium

The current string interpolation for BorderRadius.vertical and BorderRadius.only is somewhat complex and fragile due to conditional commas and generating unnecessary Radius.circular(0.0) parameters for zero-radius corners.

We can simplify this and make the generated code much cleaner by using collection-if inside a list and joining them with a comma. This avoids manually handling conditional commas and produces more idiomatic Dart code (omitting zero-radius corners in BorderRadius.only).

Suggested change
if (topLeft == topRight && bottomLeft == bottomRight) {
return '${prefix}RoundedRectangleBorder(borderRadius: BorderRadius.vertical('
'${topLeft > 0 ? 'top: Radius.circular(${number(topLeft)})' : ''}'
'${topLeft > 0 && bottomLeft > 0 ? ', ' : ''}'
'${bottomLeft > 0 ? 'bottom: Radius.circular(${number(bottomLeft)})' : ''}'
'))';
}
return '${prefix}RoundedRectangleBorder(borderRadius: '
'BorderRadius.only('
'topLeft: Radius.circular(${number(topLeft)}), '
'topRight: Radius.circular(${number(topRight)}), '
'bottomLeft: Radius.circular(${number(bottomLeft)}), '
'bottomRight: Radius.circular(${number(bottomRight)})))';
if (topLeft == topRight && bottomLeft == bottomRight) {
final List<String> sides = <String>[
if (topLeft > 0) 'top: Radius.circular(${number(topLeft)})',
if (bottomLeft > 0) 'bottom: Radius.circular(${number(bottomLeft)})',
];
return '${prefix}RoundedRectangleBorder(borderRadius: BorderRadius.vertical(${sides.join(', ')}))';
}
final List<String> corners = <String>[
if (topLeft > 0) 'topLeft: Radius.circular(${number(topLeft)})',
if (topRight > 0) 'topRight: Radius.circular(${number(topRight)})',
if (bottomLeft > 0) 'bottomLeft: Radius.circular(${number(bottomLeft)})',
if (bottomRight > 0) 'bottomRight: Radius.circular(${number(bottomRight)})',
];
return '${prefix}RoundedRectangleBorder(borderRadius: BorderRadius.only(${corners.join(', ')}))';

@github-actions github-actions Bot added p: material_ui triage-design Should be looked at in design triage labels Aug 26, 2026

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

LGTM. Thanks for the help!

@elliette elliette added the autosubmit Merge PR when tree becomes green via auto submit App label Aug 27, 2026
@auto-submit
auto-submit Bot merged commit a6b39ef into flutter:main Aug 27, 2026
13 checks passed
pull Bot pushed a commit to Mu-L/flutter that referenced this pull request Aug 28, 2026
…er#191965)

flutter/packages@bd3cbc1...cd4cdd0

2026-08-28 21270878+elliette@users.noreply.github.com [material_ui] Add
all M3 templates and generated code to `temporarily_excluded/` before
migration (flutter/packages#12661)
2026-08-28 engine-flutter-autoroll@skia.org Roll Flutter from
15d8908 to e8dca90 (58 revisions) (flutter/packages#12660)
2026-08-28 bkonyi@google.com [various] Update pigeon dev_dependency to
^27.3.2 (flutter/packages#12615)
2026-08-27 269567208+reidbaker-agent@users.noreply.github.com
[camera_android_camerax] Enforce CHANGELOG backticks and add eval commit
author check to pre-push-skill (flutter/packages#12624)
2026-08-27 imcusg@gmail.com [material_ui] Prevent stale async
suggestions in SearchAnchor (flutter/packages#12478)
2026-08-27 bkonyi@google.com [go_router_builder] Support analyzer 14
(flutter/packages#12614)
2026-08-27 srawlins@google.com [cupertino_ui] Use super parameters in
more places (flutter/packages#12459)
2026-08-27 32538273+ValentinVignal@users.noreply.github.com
[material_ui] Remove no-shuffle from progress indicator test
(flutter/packages#12505)
2026-08-27 32538273+ValentinVignal@users.noreply.github.com
[two_dimensional_scrollables] Activate leak testing and fix memory leaks
(flutter/packages#11653)
2026-08-27 21270878+elliette@users.noreply.github.com [material_ui] Add
helper methods in gen_defaults template (flutter/packages#12637)
2026-08-27 brackenavaron@gmail.com [cupertino_ui] fix CupertinoIcons
font not being included in examples and fix TextEditingController leaks
(flutter/packages#12228)
2026-08-27 269567208+reidbaker-agent@users.noreply.github.com
[camera_android_camerax] Check Git hooks configuration in
check-readiness skill (flutter/packages#12628)
2026-08-27 47866232+chunhtai@users.noreply.github.com [ci] sync back pr
for branch release only run when release succeeds
(flutter/packages#12581)
2026-08-27 stuartmorgan@google.com [google_maps_flutter] Convert overlay
controllers to Swift (flutter/packages#12638)
2026-08-27 47866232+chunhtai@users.noreply.github.com
[go_router_builder] Fixes text golden test to ignore platform specific
newline (flutter/packages#12652)

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 flutter-ecosystem@google.com 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
victorsanni pushed a commit to victorsanni/packages that referenced this pull request Sep 9, 2026
)

Work towards flutter/flutter#191088

**Ports over flutter#12121 which landed on the `m3e_migration` feature branch.**

### Original PR description

Related to flutter/flutter#184950

This PR is to add some helper methods to handle color, and shape tokens. Also I updated the generated default class name from _M3xxx to _xxxM3 to keep the name consistent with the original M2 and M3 defaults.

## Pre-Review Checklist

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

[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
victorsanni pushed a commit to victorsanni/packages that referenced this pull request Sep 9, 2026
)

Work towards flutter/flutter#191088

**Ports over flutter#12121 which landed on the `m3e_migration` feature branch.**

### Original PR description

Related to flutter/flutter#184950

This PR is to add some helper methods to handle color, and shape tokens. Also I updated the generated default class name from _M3xxx to _xxxM3 to keep the name consistent with the original M2 and M3 defaults.

## Pre-Review Checklist

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

[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App CICD Run CI/CD p: material_ui triage-design Should be looked at in design triage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants