[material_ui] Migrate M3 `Banner` template to use new `gen_defaults` (#12227) Work towards https://github.com/flutter/flutter/issues/187899 Fixes https://github.com/flutter/flutter/issues/188402 ## Pre-Review Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] page, which explains my responsibilities. - [x] I read and followed the [relevant style guides] and ran [the auto-formatter]. - [x] I signed the [CLA]. - [x] The title of the PR starts with the name of the package surrounded by square brackets, e.g. `[shared_preferences]` - [x] I [linked to at least one issue that this PR fixes] in the description above. - [x] I followed [the version and CHANGELOG instructions], using [semantic versioning] and the [repository CHANGELOG style], or I have commented below to indicate which documented exception this PR falls under[^1]. - [x] I updated/added any relevant documentation (doc comments with `///`). - [ ] I added new tests to check the change I am making, or I have commented below to indicate which [test exemption] this PR falls under[^1]. - [x] All existing and new tests are passing.
diff --git a/packages/material_ui/lib/src/banner.dart b/packages/material_ui/lib/src/banner.dart index 4823692..5ba0e94 100644 --- a/packages/material_ui/lib/src/banner.dart +++ b/packages/material_ui/lib/src/banner.dart
@@ -18,6 +18,8 @@ import 'text_theme.dart'; import 'theme.dart'; +part 'generated/banner_defaults_m3.g.dart'; + // Examples can assume: // late BuildContext context; @@ -489,35 +491,3 @@ @override TextStyle? get contentTextStyle => _theme.textTheme.bodyMedium; } - -// BEGIN GENERATED TOKEN PROPERTIES - Banner - -// Do not edit by hand. The code between the "BEGIN GENERATED" and -// "END GENERATED" comments are generated from data in the Material -// Design token database by the script: -// dev/tools/gen_defaults/bin/gen_defaults.dart. - -// dart format off -class _BannerDefaultsM3 extends MaterialBannerThemeData { - _BannerDefaultsM3(this.context) - : super(elevation: 1.0); - - final BuildContext context; - late final ColorScheme _colors = Theme.of(context).colorScheme; - late final TextTheme _textTheme = Theme.of(context).textTheme; - - @override - Color? get backgroundColor => _colors.surfaceContainerLow; - - @override - Color? get surfaceTintColor => Colors.transparent; - - @override - Color? get dividerColor => _colors.outlineVariant; - - @override - TextStyle? get contentTextStyle => _textTheme.bodyMedium; -} -// dart format on - -// END GENERATED TOKEN PROPERTIES - Banner
diff --git a/packages/material_ui/tool/gen_defaults/temporarily_excluded/generated/banner_defaults.g.dart b/packages/material_ui/lib/src/generated/banner_defaults_m3.g.dart similarity index 76% rename from packages/material_ui/tool/gen_defaults/temporarily_excluded/generated/banner_defaults.g.dart rename to packages/material_ui/lib/src/generated/banner_defaults_m3.g.dart index 1cb263c..308539b 100644 --- a/packages/material_ui/tool/gen_defaults/temporarily_excluded/generated/banner_defaults.g.dart +++ b/packages/material_ui/lib/src/generated/banner_defaults_m3.g.dart
@@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Do not edit by hand. The code is generated from data in the Material +// Design token database by the script: +// packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart. +part of '../banner.dart'; + class _BannerDefaultsM3 extends MaterialBannerThemeData { _BannerDefaultsM3(this.context) : super(elevation: 1.0);
diff --git a/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart b/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart index 8281608..07c1ade 100644 --- a/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart +++ b/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart
@@ -14,8 +14,8 @@ import '../templates/action_chip_template.dart'; import '../templates/app_bar_template.dart'; +import '../templates/banner_template.dart'; import '../templates/badge_template.dart'; -// import '../templates/banner_template.dart'; // import '../templates/bottom_app_bar_template.dart'; import '../templates/bottom_sheet_template.dart'; // import '../templates/button_template.dart'; @@ -65,8 +65,8 @@ const ActionChipTemplateM3().generateFile(verbose: verbose); const AppBarTemplateM3().generateFile(verbose: verbose); + const BannerTemplateM3().generateFile(verbose: verbose); const BadgeTemplateM3().generateFile(verbose: verbose); - // const BannerTemplateM3().generateFile(verbose: verbose); // const BottomAppBarTemplateM3().generateFile(verbose: verbose); const BottomSheetTemplateM3().generateFile(verbose: verbose); // const ButtonTemplateM3().generateFile(verbose: verbose);
diff --git a/packages/material_ui/tool/gen_defaults/templates/banner_template.dart b/packages/material_ui/tool/gen_defaults/templates/banner_template.dart new file mode 100644 index 0000000..ea02333 --- /dev/null +++ b/packages/material_ui/tool/gen_defaults/templates/banner_template.dart
@@ -0,0 +1,42 @@ +// Copyright 2013 The Flutter Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import '../data/banner.dart'; +import '../data/divider.dart'; +import 'template.dart'; + +class BannerTemplateM3 extends TokenTemplateM3 { + const BannerTemplateM3(); + + @override + String get name => 'Banner'; + + @override + String get parentFilePath => 'banner.dart'; + + @override + String generateContents(String className) => + ''' +class $className extends MaterialBannerThemeData { + $className(this.context) + : super(elevation: ${number(TokenBanner.containerElevation)}); + + final BuildContext context; + late final ColorScheme _colors = Theme.of(context).colorScheme; + late final TextTheme _textTheme = Theme.of(context).textTheme; + + @override + Color? get backgroundColor => ${color(TokenBanner.containerColor, '_colors')}; + + @override + Color? get surfaceTintColor => Colors.transparent; + + @override + Color? get dividerColor => ${color(TokenDivider.color, '_colors')}; + + @override + TextStyle? get contentTextStyle => ${textStyle(TokenBanner.supportingTextType, '_textTheme')}; +} +'''; +}
diff --git a/packages/material_ui/tool/gen_defaults/temporarily_excluded/templates/banner_template.dart b/packages/material_ui/tool/gen_defaults/temporarily_excluded/templates/banner_template.dart deleted file mode 100644 index eb9bd75..0000000 --- a/packages/material_ui/tool/gen_defaults/temporarily_excluded/templates/banner_template.dart +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2013 The Flutter Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'template.dart'; - -class BannerTemplate extends TokenTemplate { - const BannerTemplate( - super.blockName, - super.fileName, - super.tokens, { - super.colorSchemePrefix = '_colors.', - super.textThemePrefix = '_textTheme.', - }); - - @override - String generate() => ''' -class _${blockName}DefaultsM3 extends MaterialBannerThemeData { - _${blockName}DefaultsM3(this.context) - : super(elevation: ${elevation("md.comp.banner.container")}); - - final BuildContext context; - late final ColorScheme _colors = Theme.of(context).colorScheme; - late final TextTheme _textTheme = Theme.of(context).textTheme; - - @override - Color? get backgroundColor => ${componentColor("md.comp.banner.container")}; - - @override - Color? get surfaceTintColor => ${colorOrTransparent("md.comp.banner.container.surface-tint-layer.color")}; - - @override - Color? get dividerColor => ${color("md.comp.divider.color")}; - - @override - TextStyle? get contentTextStyle => ${textStyle("md.comp.banner.supporting-text")}; -} -'''; -}
diff --git a/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart b/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart index 5603fa5..f5f2536 100644 --- a/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart +++ b/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart
@@ -11,6 +11,7 @@ import '../data/typescale_emphasized.dart'; import '../templates/action_chip_template.dart'; import '../templates/app_bar_template.dart'; +import '../templates/banner_template.dart'; import '../templates/badge_template.dart'; import '../templates/bottom_sheet_template.dart'; import '../templates/template.dart'; @@ -220,9 +221,14 @@ ); }); - test('BannerTemplateM3 emits M3 Banner defaults from tokens', () { - // Intentionally empty, will be implemented during migration. See: - // https://github.com/flutter/flutter/issues/187899 + test('BannerTemplateM3 emits M3 Banner defaults from banner tokens', () { + final String contents = _generateContents(const BannerTemplateM3()); + expect(contents, contains('class _BannerDefaultsM3 extends MaterialBannerThemeData')); + expect(contents, contains('elevation: 1.0')); + expect(contents, contains('Color? get backgroundColor => _colors.surfaceContainerLow')); + expect(contents, contains('Color? get surfaceTintColor => Colors.transparent')); + expect(contents, contains('Color? get dividerColor => _colors.outlineVariant')); + expect(contents, contains('TextStyle? get contentTextStyle => _textTheme.bodyMedium')); }); test('BottomAppBarTemplateM3 emits M3 BottomAppBar defaults from tokens', () {