Repository navigation
[material_ui] Migrate M3 snackbar defaults to new gen_defaults - #13009
Conversation
There was a problem hiding this comment.
Code Review
This pull request migrates the Material 3 Snackbar defaults generation to the new token-based template system. It removes the inline _SnackbarDefaultsM3 class from snack_bar.dart and generates it into a separate part file using the newly added SnackbarTemplateM3. Additionally, tests are added to verify the generated defaults. Feedback is provided to address formatting and style inconsistencies within the template string of SnackbarTemplateM3 to ensure better maintainability.
| $className(this.context); | ||
|
|
||
| final BuildContext context; | ||
| late final ThemeData _theme = Theme.of(context); | ||
| late final ColorScheme _colors = _theme.colorScheme; | ||
|
|
||
| @override | ||
| Color get backgroundColor => ${color(TokenSnackbar.containerColor)}; | ||
|
|
||
| @override | ||
| Color get actionTextColor => WidgetStateColor.resolveWith((Set<WidgetState> states) { | ||
| if (states.contains(WidgetState.disabled)) { | ||
| return ${color(TokenSnackbar.actionPressedLabelTextColor)}; | ||
| } | ||
| if (states.contains(WidgetState.pressed)) { | ||
| return ${color(TokenSnackbar.actionPressedLabelTextColor)}; | ||
| } | ||
| if (states.contains(WidgetState.hovered)) { | ||
| return ${color(TokenSnackbar.actionHoverLabelTextColor)}; | ||
| } | ||
| if (states.contains(WidgetState.focused)) { | ||
| return ${color(TokenSnackbar.actionFocusLabelTextColor)}; | ||
| } | ||
| return ${color(TokenSnackbar.actionLabelTextColor)}; | ||
| }); | ||
|
|
||
| @override | ||
| Color get disabledActionTextColor => | ||
| ${color(TokenSnackbar.actionPressedLabelTextColor)}; | ||
|
|
||
|
|
||
| @override | ||
| TextStyle get contentTextStyle => | ||
| ${textStyle(TokenSnackbar.supportingTextType, 'Theme.of(context).textTheme')}!.copyWith | ||
| (color: ${color(TokenSnackbar.supportingTextColor)}, | ||
| ); |
There was a problem hiding this comment.
The template has several minor formatting and style inconsistencies (such as extra spaces, incorrect indentation of the constructor, and non-standard wrapping of the contentTextStyle copyWith method). Although the auto-formatter cleans up the generated file, keeping the template code clean and properly formatted improves maintainability.
$className(this.context);
final BuildContext context;
late final ThemeData _theme = Theme.of(context);
late final ColorScheme _colors = _theme.colorScheme;
@override
Color get backgroundColor => ${color(TokenSnackbar.containerColor)};
@override
Color get actionTextColor => WidgetStateColor.resolveWith((Set<WidgetState> states) {
if (states.contains(WidgetState.disabled)) {
return ${color(TokenSnackbar.actionPressedLabelTextColor)};
}
if (states.contains(WidgetState.pressed)) {
return ${color(TokenSnackbar.actionPressedLabelTextColor)};
}
if (states.contains(WidgetState.hovered)) {
return ${color(TokenSnackbar.actionHoverLabelTextColor)};
}
if (states.contains(WidgetState.focused)) {
return ${color(TokenSnackbar.actionFocusLabelTextColor)};
}
return ${color(TokenSnackbar.actionLabelTextColor)};
});
@override
Color get disabledActionTextColor => ${color(TokenSnackbar.actionPressedLabelTextColor)};
@override
TextStyle get contentTextStyle =>
${textStyle(TokenSnackbar.supportingTextType, 'Theme.of(context).textTheme')}!.copyWith(
color: ${color(TokenSnackbar.supportingTextColor)},
);References
- Code should follow the relevant style guides, and use the correct auto-formatter, for each language, as described in the repository contributing guide's Style section. (link)
QuncCccccc
left a comment
There was a problem hiding this comment.
NICE! Thanks a lot for helping with the migration!
LGTM.
…er#193711) flutter/packages@d5ec6db...5620e65 2026-10-02 [email protected] [material_ui] Migrate M3 Menu template to use new gen_defaults (flutter/packages#13057) 2026-10-02 [email protected] [material_ui] Repaint NavigationIndicator when the selection changes without pointer input (flutter/packages#13010) 2026-10-01 [email protected] [tool] Use flutter pub for packages that depend on jni (flutter/packages#13087) 2026-10-01 [email protected] [material_ui] Migrate M3 snackbar defaults to new gen_defaults (flutter/packages#13009) 2026-10-01 [email protected] Manual roll Flutter (stable) from 6a19cca to 5fc3468 (6 revisions) (flutter/packages#13105) 2026-10-01 [email protected] Manual roll Flutter from d649d2b to e89fd0a (27 revisions) (flutter/packages#13104) 2026-10-01 [email protected] [webview_flutter] Add gesture blocking policy to WebKitWebViewWidgetCreationParams (flutter/packages#12496) 2026-10-01 [email protected] [material_ui] Update Material tokens to Material version 38.2.83 (flutter/packages#13082) 2026-10-01 [email protected] [material_ui] Migrate MaterialApp API doc snippets to {@example} and add unit tests (batch 6) (flutter/packages#13021) 2026-10-01 [email protected] [material_ui] Migrate AppBar, SliverAppBar, BottomAppBar, and Scaffold API doc snippets to {@example} (batch 7) (flutter/packages#13023) 2026-10-01 [email protected] [various] Update Robolectric to 4.17 (flutter/packages#13041) 2026-10-01 [email protected] [pigeon] pin native interop related dev deps and update some docs (flutter/packages#13103) 2026-10-01 [email protected] [tool] Add more documentation (flutter/packages#13063) If this roll has caused a breakage, revert this CL and set the roller to dry run mode using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC [email protected] 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 toward flutter/flutter#187899
Fixes flutter/flutter#188434
Pre-Review Checklist
[shared_preferences]///).