[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', () {