Repository navigation
[material_ui] Add helper methods in gen_defaults template - #12637
Conversation
There was a problem hiding this comment.
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.
| 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)})))'; |
There was a problem hiding this comment.
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).
| 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(', ')}))'; |
QuncCccccc
left a comment
There was a problem hiding this comment.
LGTM. Thanks for the help!
…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
) 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.
) 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.
Work towards flutter/flutter#191088
Ports over #12121 which landed on the
m3e_migrationfeature 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
[shared_preferences]///).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.Footnotes
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