From d4061c19f46efcf2e761f7aca1d9d4b0faac3603 Mon Sep 17 00:00:00 2001 From: Darren Austin <darrenaustin@google.com> Date: Sun, 10 Jul 2022 17:17:09 -0700 Subject: [PATCH] Refactor gen_defaults to support multiple generated code blocks in the same file independently. (#107278) --- dev/tools/gen_defaults/README.md | 4 +- dev/tools/gen_defaults/bin/gen_defaults.dart | 32 ++-- .../gen_defaults/lib/app_bar_template.dart | 7 +- .../gen_defaults/lib/button_template.dart | 12 +- dev/tools/gen_defaults/lib/card_template.dart | 6 +- .../lib/chip_action_template.dart | 7 +- .../lib/chip_filter_template.dart | 7 +- .../gen_defaults/lib/chip_input_template.dart | 7 +- .../gen_defaults/lib/dialog_template.dart | 13 +- dev/tools/gen_defaults/lib/fab_template.dart | 13 +- .../lib/icon_button_template.dart | 11 +- .../lib/navigation_bar_template.dart | 13 +- .../lib/navigation_rail_template.dart | 13 +- dev/tools/gen_defaults/lib/surface_tint.dart | 4 +- dev/tools/gen_defaults/lib/template.dart | 79 +++++--- .../gen_defaults/lib/typography_template.dart | 3 +- .../gen_defaults/test/gen_defaults_test.dart | 173 +++++++++++++++--- .../flutter/lib/src/material/app_bar.dart | 25 +-- packages/flutter/lib/src/material/card.dart | 24 ++- .../flutter/lib/src/material/chip_action.dart | 20 +- .../flutter/lib/src/material/chip_choice.dart | 20 +- .../flutter/lib/src/material/chip_filter.dart | 20 +- .../flutter/lib/src/material/chip_input.dart | 20 +- packages/flutter/lib/src/material/dialog.dart | 31 ++-- .../lib/src/material/elevated_button.dart | 20 +- .../lib/src/material/elevation_overlay.dart | 13 +- .../src/material/floating_action_button.dart | 32 ++-- .../flutter/lib/src/material/icon_button.dart | 20 +- .../lib/src/material/navigation_bar.dart | 27 +-- .../lib/src/material/navigation_rail.dart | 25 +-- .../lib/src/material/outlined_button.dart | 20 +- .../flutter/lib/src/material/text_button.dart | 20 +- .../flutter/lib/src/material/typography.dart | 14 +- 33 files changed, 467 insertions(+), 288 deletions(-) diff --git a/dev/tools/gen_defaults/README.md b/dev/tools/gen_defaults/README.md index f5c4fcda48..017c6362d1 100644 --- a/dev/tools/gen_defaults/README.md +++ b/dev/tools/gen_defaults/README.md @@ -15,10 +15,10 @@ dart dev/tools/gen_defaults/bin/gen_defaults.dart There is a template file for every component that needs defaults from the token database. These templates are implemented as subclasses of `TokenTemplate`. This base class provides some utilities and a structure -for adding a new chunk of generated code to the bottom of a given file. +for adding a new block of generated code to the bottom of a given file. Templates need to override the `generate` method to provide the generated -code chunk as a string. The tokens are represented as a `Map<String, dynamic>` +code block as a string. The tokens are represented as a `Map<String, dynamic>` that is loaded from `data/material-tokens.json`. Templates can look up whatever properties are needed in this structure to provide the properties needed for the component. diff --git a/dev/tools/gen_defaults/bin/gen_defaults.dart b/dev/tools/gen_defaults/bin/gen_defaults.dart index 63deb02ace..e6f0711a30 100644 --- a/dev/tools/gen_defaults/bin/gen_defaults.dart +++ b/dev/tools/gen_defaults/bin/gen_defaults.dart @@ -99,20 +99,20 @@ Future<void> main(List<String> args) async { tokens['colorsLight'] = _readTokenFile('color_light.json'); tokens['colorsDark'] = _readTokenFile('color_dark.json'); - AppBarTemplate('$materialLib/app_bar.dart', tokens).updateFile(); - ButtonTemplate('md.comp.elevated-button', '$materialLib/elevated_button.dart', tokens).updateFile(); - ButtonTemplate('md.comp.outlined-button', '$materialLib/outlined_button.dart', tokens).updateFile(); - ButtonTemplate('md.comp.text-button', '$materialLib/text_button.dart', tokens).updateFile(); - CardTemplate('$materialLib/card.dart', tokens).updateFile(); - ChipActionTemplate('$materialLib/chip_action.dart', tokens).updateFile(); - ChipFilterTemplate('$materialLib/chip_filter.dart', tokens).updateFile(); - ChipFilterTemplate('$materialLib/chip_choice.dart', tokens).updateFile(); - ChipInputTemplate('$materialLib/chip_input.dart', tokens).updateFile(); - DialogTemplate('$materialLib/dialog.dart', tokens).updateFile(); - FABTemplate('$materialLib/floating_action_button.dart', tokens).updateFile(); - IconButtonTemplate('$materialLib/icon_button.dart', tokens).updateFile(); - NavigationBarTemplate('$materialLib/navigation_bar.dart', tokens).updateFile(); - NavigationRailTemplate('$materialLib/navigation_rail.dart', tokens).updateFile(); - SurfaceTintTemplate('$materialLib/elevation_overlay.dart', tokens).updateFile(); - TypographyTemplate('$materialLib/typography.dart', tokens).updateFile(); + AppBarTemplate('AppBar', '$materialLib/app_bar.dart', tokens).updateFile(); + ButtonTemplate('md.comp.elevated-button', 'ElevatedButton', '$materialLib/elevated_button.dart', tokens).updateFile(); + ButtonTemplate('md.comp.outlined-button', 'OutlinedButton', '$materialLib/outlined_button.dart', tokens).updateFile(); + ButtonTemplate('md.comp.text-button', 'TextButton', '$materialLib/text_button.dart', tokens).updateFile(); + CardTemplate('Card', '$materialLib/card.dart', tokens).updateFile(); + ChipActionTemplate('ActionChip', '$materialLib/chip_action.dart', tokens).updateFile(); + ChipFilterTemplate('FilterChip', '$materialLib/chip_filter.dart', tokens).updateFile(); + ChipFilterTemplate('FilterChip', '$materialLib/chip_choice.dart', tokens).updateFile(); + ChipInputTemplate('InputChip', '$materialLib/chip_input.dart', tokens).updateFile(); + DialogTemplate('Dialog', '$materialLib/dialog.dart', tokens).updateFile(); + FABTemplate('FAB', '$materialLib/floating_action_button.dart', tokens).updateFile(); + IconButtonTemplate('IconButton', '$materialLib/icon_button.dart', tokens).updateFile(); + NavigationBarTemplate('NavigationBar', '$materialLib/navigation_bar.dart', tokens).updateFile(); + NavigationRailTemplate('NavigationRail', '$materialLib/navigation_rail.dart', tokens).updateFile(); + SurfaceTintTemplate('SurfaceTint', '$materialLib/elevation_overlay.dart', tokens).updateFile(); + TypographyTemplate('Typography', '$materialLib/typography.dart', tokens).updateFile(); } diff --git a/dev/tools/gen_defaults/lib/app_bar_template.dart b/dev/tools/gen_defaults/lib/app_bar_template.dart index af8ac620c5..f426430df7 100644 --- a/dev/tools/gen_defaults/lib/app_bar_template.dart +++ b/dev/tools/gen_defaults/lib/app_bar_template.dart @@ -5,7 +5,7 @@ import 'template.dart'; class AppBarTemplate extends TokenTemplate { - const AppBarTemplate(super.fileName, super.tokens) + const AppBarTemplate(super.blockName, super.fileName, super.tokens) : super( colorSchemePrefix: '_colors.', textThemePrefix: '_textTheme.', @@ -13,9 +13,8 @@ class AppBarTemplate extends TokenTemplate { @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends AppBarTheme { - _TokenDefaultsM3(this.context) +class _${blockName}DefaultsM3 extends AppBarTheme { + _${blockName}DefaultsM3(this.context) : super( elevation: ${elevation('md.comp.top-app-bar.small.container')}, scrolledUnderElevation: ${elevation('md.comp.top-app-bar.small.on-scroll.container')}, diff --git a/dev/tools/gen_defaults/lib/button_template.dart b/dev/tools/gen_defaults/lib/button_template.dart index 16f8846fe3..c65ac6bd81 100644 --- a/dev/tools/gen_defaults/lib/button_template.dart +++ b/dev/tools/gen_defaults/lib/button_template.dart @@ -5,10 +5,9 @@ import 'template.dart'; class ButtonTemplate extends TokenTemplate { - const ButtonTemplate(this.tokenGroup, String fileName, Map<String, dynamic> tokens) - : super(fileName, tokens, - colorSchemePrefix: '_colors.', - ); + const ButtonTemplate(this.tokenGroup, super.blockName, super.fileName, super.tokens, { + super.colorSchemePrefix = '_colors.', + }); final String tokenGroup; @@ -55,9 +54,8 @@ class ButtonTemplate extends TokenTemplate { @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends ButtonStyle { - _TokenDefaultsM3(this.context) +class _${blockName}DefaultsM3 extends ButtonStyle { + _${blockName}DefaultsM3(this.context) : super( animationDuration: kThemeChangeDuration, enableFeedback: true, diff --git a/dev/tools/gen_defaults/lib/card_template.dart b/dev/tools/gen_defaults/lib/card_template.dart index db1994377a..ec038b3b86 100644 --- a/dev/tools/gen_defaults/lib/card_template.dart +++ b/dev/tools/gen_defaults/lib/card_template.dart @@ -5,13 +5,13 @@ import 'template.dart'; class CardTemplate extends TokenTemplate { - const CardTemplate(super.fileName, super.tokens); + const CardTemplate(super.blockName, super.fileName, super.tokens); @override String generate() => ''' // Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends CardTheme { - const _TokenDefaultsM3(this.context) +class _${blockName}DefaultsM3 extends CardTheme { + const _${blockName}DefaultsM3(this.context) : super( clipBehavior: Clip.none, elevation: ${elevation("md.comp.elevated-card.container")}, diff --git a/dev/tools/gen_defaults/lib/chip_action_template.dart b/dev/tools/gen_defaults/lib/chip_action_template.dart index 4aca1f0180..abbe5e14ff 100644 --- a/dev/tools/gen_defaults/lib/chip_action_template.dart +++ b/dev/tools/gen_defaults/lib/chip_action_template.dart @@ -6,16 +6,15 @@ import 'template.dart'; class ChipActionTemplate extends TokenTemplate { - const ChipActionTemplate(super.fileName, super.tokens); + const ChipActionTemplate(super.blockName, super.fileName, super.tokens); static const String tokenGroup = 'md.comp.assist-chip'; static const String variant = '.flat'; @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends ChipThemeData { - const _TokenDefaultsM3(this.context, this.isEnabled) +class _${blockName}DefaultsM3 extends ChipThemeData { + const _${blockName}DefaultsM3(this.context, this.isEnabled) : super( elevation: ${elevation("$tokenGroup$variant.container")}, shape: ${shape("$tokenGroup.container")}, diff --git a/dev/tools/gen_defaults/lib/chip_filter_template.dart b/dev/tools/gen_defaults/lib/chip_filter_template.dart index f62309b4e0..6a179f8df0 100644 --- a/dev/tools/gen_defaults/lib/chip_filter_template.dart +++ b/dev/tools/gen_defaults/lib/chip_filter_template.dart @@ -5,16 +5,15 @@ import 'template.dart'; class ChipFilterTemplate extends TokenTemplate { - const ChipFilterTemplate(super.fileName, super.tokens); + const ChipFilterTemplate(super.blockName, super.fileName, super.tokens); static const String tokenGroup = 'md.comp.filter-chip'; static const String variant = '.flat'; @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends ChipThemeData { - const _TokenDefaultsM3(this.context, this.isEnabled, this.isSelected) +class _${blockName}DefaultsM3 extends ChipThemeData { + const _${blockName}DefaultsM3(this.context, this.isEnabled, this.isSelected) : super( elevation: ${elevation("$tokenGroup$variant.container")}, shape: ${shape("$tokenGroup.container")}, diff --git a/dev/tools/gen_defaults/lib/chip_input_template.dart b/dev/tools/gen_defaults/lib/chip_input_template.dart index d83e36bb84..cfa9072979 100644 --- a/dev/tools/gen_defaults/lib/chip_input_template.dart +++ b/dev/tools/gen_defaults/lib/chip_input_template.dart @@ -5,16 +5,15 @@ import 'template.dart'; class ChipInputTemplate extends TokenTemplate { - const ChipInputTemplate(super.fileName, super.tokens); + const ChipInputTemplate(super.blockName, super.fileName, super.tokens); static const String tokenGroup = 'md.comp.input-chip'; static const String variant = ''; @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends ChipThemeData { - const _TokenDefaultsM3(this.context, this.isEnabled) +class _${blockName}DefaultsM3 extends ChipThemeData { + const _${blockName}DefaultsM3(this.context, this.isEnabled) : super( elevation: ${elevation("$tokenGroup$variant.container")}, shape: ${shape("$tokenGroup.container")}, diff --git a/dev/tools/gen_defaults/lib/dialog_template.dart b/dev/tools/gen_defaults/lib/dialog_template.dart index 798741b932..6fe11741fd 100644 --- a/dev/tools/gen_defaults/lib/dialog_template.dart +++ b/dev/tools/gen_defaults/lib/dialog_template.dart @@ -5,16 +5,15 @@ import 'template.dart'; class DialogTemplate extends TokenTemplate { - const DialogTemplate(super.fileName, super.tokens) - : super(colorSchemePrefix: '_colors.', - textThemePrefix: '_textTheme.' - ); + const DialogTemplate(super.blockName, super.fileName, super.tokens, { + super.colorSchemePrefix = '_colors.', + super.textThemePrefix = '_textTheme.' + }); @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends DialogTheme { - _TokenDefaultsM3(this.context) +class _${blockName}DefaultsM3 extends DialogTheme { + _${blockName}DefaultsM3(this.context) : super( alignment: Alignment.center, elevation: ${elevation("md.comp.dialog.container")}, diff --git a/dev/tools/gen_defaults/lib/fab_template.dart b/dev/tools/gen_defaults/lib/fab_template.dart index 2433c3335a..9d9f8c1fb2 100644 --- a/dev/tools/gen_defaults/lib/fab_template.dart +++ b/dev/tools/gen_defaults/lib/fab_template.dart @@ -5,16 +5,15 @@ import 'template.dart'; class FABTemplate extends TokenTemplate { - const FABTemplate(super.fileName, super.tokens) - : super(colorSchemePrefix: '_colors.', - textThemePrefix: '_textTheme.', - ); + const FABTemplate(super.blockName, super.fileName, super.tokens, { + super.colorSchemePrefix = '_colors.', + super.textThemePrefix = '_textTheme.', + }); @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends FloatingActionButtonThemeData { - _TokenDefaultsM3(this.context, this.type, this.hasChild) +class _${blockName}DefaultsM3 extends FloatingActionButtonThemeData { + _${blockName}DefaultsM3(this.context, this.type, this.hasChild) : super( elevation: ${elevation("md.comp.fab.primary.container")}, focusElevation: ${elevation("md.comp.fab.primary.focus.container")}, diff --git a/dev/tools/gen_defaults/lib/icon_button_template.dart b/dev/tools/gen_defaults/lib/icon_button_template.dart index 1fbd304004..325c4c59e4 100644 --- a/dev/tools/gen_defaults/lib/icon_button_template.dart +++ b/dev/tools/gen_defaults/lib/icon_button_template.dart @@ -5,15 +5,14 @@ import 'template.dart'; class IconButtonTemplate extends TokenTemplate { - const IconButtonTemplate(super.fileName, super.tokens) - : super(colorSchemePrefix: '_colors.', - ); + const IconButtonTemplate(super.blockName, super.fileName, super.tokens, { + super.colorSchemePrefix = '_colors.', + }); @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends ButtonStyle { - _TokenDefaultsM3(this.context) +class _${blockName}DefaultsM3 extends ButtonStyle { + _${blockName}DefaultsM3(this.context) : super( animationDuration: kThemeChangeDuration, enableFeedback: true, diff --git a/dev/tools/gen_defaults/lib/navigation_bar_template.dart b/dev/tools/gen_defaults/lib/navigation_bar_template.dart index 1d153e20fa..1f5f263ba4 100644 --- a/dev/tools/gen_defaults/lib/navigation_bar_template.dart +++ b/dev/tools/gen_defaults/lib/navigation_bar_template.dart @@ -5,16 +5,15 @@ import 'template.dart'; class NavigationBarTemplate extends TokenTemplate { - const NavigationBarTemplate(super.fileName, super.tokens) - : super(colorSchemePrefix: '_colors.', - textThemePrefix: '_textTheme.', - ); + const NavigationBarTemplate(super.blockName, super.fileName, super.tokens, { + super.colorSchemePrefix = '_colors.', + super.textThemePrefix = '_textTheme.', + }); @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends NavigationBarThemeData { - _TokenDefaultsM3(this.context) +class _${blockName}DefaultsM3 extends NavigationBarThemeData { + _${blockName}DefaultsM3(this.context) : super( height: ${tokens["md.comp.navigation-bar.container.height"]}, elevation: ${elevation("md.comp.navigation-bar.container")}, diff --git a/dev/tools/gen_defaults/lib/navigation_rail_template.dart b/dev/tools/gen_defaults/lib/navigation_rail_template.dart index 25701856ce..ce89b361f4 100644 --- a/dev/tools/gen_defaults/lib/navigation_rail_template.dart +++ b/dev/tools/gen_defaults/lib/navigation_rail_template.dart @@ -5,16 +5,15 @@ import 'template.dart'; class NavigationRailTemplate extends TokenTemplate { - const NavigationRailTemplate(super.fileName, super.tokens) - : super(colorSchemePrefix: '_colors.', - textThemePrefix: '_textTheme.', - ); + const NavigationRailTemplate(super.blockName, super.fileName, super.tokens, { + super.colorSchemePrefix = '_colors.', + super.textThemePrefix = '_textTheme.', + }); @override String generate() => ''' -// Generated version ${tokens["version"]} -class _TokenDefaultsM3 extends NavigationRailThemeData { - _TokenDefaultsM3(this.context) +class _${blockName}DefaultsM3 extends NavigationRailThemeData { + _${blockName}DefaultsM3(this.context) : super( elevation: ${elevation("md.comp.navigation-rail.container")}, groupAlignment: -1, diff --git a/dev/tools/gen_defaults/lib/surface_tint.dart b/dev/tools/gen_defaults/lib/surface_tint.dart index a1874ad90e..ea7a0ea4ba 100644 --- a/dev/tools/gen_defaults/lib/surface_tint.dart +++ b/dev/tools/gen_defaults/lib/surface_tint.dart @@ -5,12 +5,10 @@ import 'template.dart'; class SurfaceTintTemplate extends TokenTemplate { - const SurfaceTintTemplate(super.fileName, super.tokens); + const SurfaceTintTemplate(super.blockName, super.fileName, super.tokens); @override String generate() => ''' -// Generated version ${tokens["version"]} - // Surface tint opacities based on elevations according to the // Material Design 3 specification: // https://m3.material.io/styles/color/the-color-system/color-roles diff --git a/dev/tools/gen_defaults/lib/template.dart b/dev/tools/gen_defaults/lib/template.dart index b69c8f8965..a3f032d6cc 100644 --- a/dev/tools/gen_defaults/lib/template.dart +++ b/dev/tools/gen_defaults/lib/template.dart @@ -5,50 +5,83 @@ import 'dart:io'; abstract class TokenTemplate { - const TokenTemplate(this.fileName, this.tokens, { + const TokenTemplate(this.blockName, this.fileName, this.tokens, { this.colorSchemePrefix = 'Theme.of(context).colorScheme.', this.textThemePrefix = 'Theme.of(context).textTheme.' }); + /// Name of the code block that this template will generate. + /// + /// Used to identify an existing block when updating it. + final String blockName; + + /// Name of the file that will be updated with the generated code. + final String fileName; + + /// Map of token data extracted from the Material Design token database. + final Map<String, dynamic> tokens; + + /// Optional prefix prepended to color definitions. + /// + /// Defaults to 'Theme.of(context).colorScheme.' + final String colorSchemePrefix; + + /// Optional prefix prepended to text style definitians. + /// + /// Defaults to 'Theme.of(context).textTheme.' + final String textThemePrefix; + static const String beginGeneratedComment = ''' -// BEGIN GENERATED TOKEN PROPERTIES -'''; +// BEGIN GENERATED TOKEN PROPERTIES'''; static const String headerComment = ''' -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. '''; static const String endGeneratedComment = ''' -// END GENERATED TOKEN PROPERTIES -'''; - - final String fileName; - final Map<String, dynamic> tokens; - final String colorSchemePrefix; - final String textThemePrefix; +// END GENERATED TOKEN PROPERTIES'''; /// Replace or append the contents of the file with the text from [generate]. /// - /// If the file already contains generated block at the end, it will - /// be replaced by the [generate] output. Otherwise the content will - /// just be appended to the end of the file. + /// If the file already contains a generated text block matching the + /// [blockName], it will be replaced by the [generate] output. Otherwise + /// the content will just be appended to the end of the file. Future<void> updateFile() async { - String contents = File(fileName).readAsStringSync(); - final int previousGeneratedIndex = contents.indexOf(beginGeneratedComment); - if (previousGeneratedIndex != -1) { - contents = contents.substring(0, previousGeneratedIndex); + final String contents = File(fileName).readAsStringSync(); + final String beginComment = '$beginGeneratedComment - $blockName\n'; + final String endComment = '$endGeneratedComment - $blockName\n'; + final int beginPreviousBlock = contents.indexOf(beginComment); + final int endPreviousBlock = contents.indexOf(endComment); + late String contentBeforeBlock; + late String contentAfterBlock; + if (beginPreviousBlock != -1) { + if (endPreviousBlock < beginPreviousBlock) { + print('Unable to find block named $blockName in $fileName, skipping code generation.'); + return; + } + // Found a valid block matching the name, so record the content before and after. + contentBeforeBlock = contents.substring(0, beginPreviousBlock); + contentAfterBlock = contents.substring(endPreviousBlock + endComment.length); + } else { + // Just append to the bottom. + contentBeforeBlock = contents; + contentAfterBlock = ''; } - final StringBuffer buffer = StringBuffer(contents); - buffer.write(beginGeneratedComment); + + final StringBuffer buffer = StringBuffer(contentBeforeBlock); + buffer.write(beginComment); buffer.write(headerComment); + buffer.write('// Token database version: ${tokens['version']}\n\n'); buffer.write(generate()); - buffer.write(endGeneratedComment); + buffer.write(endComment); + buffer.write(contentAfterBlock); File(fileName).writeAsStringSync(buffer.toString()); } diff --git a/dev/tools/gen_defaults/lib/typography_template.dart b/dev/tools/gen_defaults/lib/typography_template.dart index 7fc78fd764..be4d1708fa 100644 --- a/dev/tools/gen_defaults/lib/typography_template.dart +++ b/dev/tools/gen_defaults/lib/typography_template.dart @@ -5,11 +5,10 @@ import 'template.dart'; class TypographyTemplate extends TokenTemplate { - const TypographyTemplate(super.fileName, super.tokens); + const TypographyTemplate(super.blockName, super.fileName, super.tokens); @override String generate() => ''' -// Generated version ${tokens["version"]} class _M3Typography { _M3Typography._(); diff --git a/dev/tools/gen_defaults/test/gen_defaults_test.dart b/dev/tools/gen_defaults/test/gen_defaults_test.dart index e8ba9f160b..30478af8fe 100644 --- a/dev/tools/gen_defaults/test/gen_defaults_test.dart +++ b/dev/tools/gen_defaults/test/gen_defaults_test.dart @@ -23,24 +23,27 @@ void main() { // Have a test template append new parameterized content to the end of // the file. - final Map<String, dynamic> tokens = <String, dynamic>{'foo': 'Foobar', 'bar': 'Barfoo'}; - TestTemplate(tempFile.path, tokens).updateFile(); + final Map<String, dynamic> tokens = <String, dynamic>{'version': '0.0', 'foo': 'Foobar', 'bar': 'Barfoo'}; + TestTemplate('Test', tempFile.path, tokens).updateFile(); expect(tempFile.readAsStringSync(), ''' // This is a file with stuff in it. // This part shouldn't be changed by // the template. -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - Test -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. + +// Token database version: 0.0 static final String tokenFoo = 'Foobar'; static final String tokenBar = 'Barfoo'; -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - Test '''); } finally { @@ -59,38 +62,166 @@ static final String tokenBar = 'Barfoo'; // This part shouldn't be changed by // the template. -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - Test + +// 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. -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// Token database version: 0.0 static final String tokenFoo = 'Foobar'; static final String tokenBar = 'Barfoo'; -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - Test '''); // Have a test template append new parameterized content to the end of // the file. - final Map<String, dynamic> tokens = <String, dynamic>{'foo': 'foo', 'bar': 'bar'}; - TestTemplate(tempFile.path, tokens).updateFile(); + final Map<String, dynamic> tokens = <String, dynamic>{'version': '0.0', 'foo': 'foo', 'bar': 'bar'}; + TestTemplate('Test', tempFile.path, tokens).updateFile(); + + expect(tempFile.readAsStringSync(), ''' +// This is a file with stuff in it. +// This part shouldn't be changed by +// the template. + +// BEGIN GENERATED TOKEN PROPERTIES - Test + +// 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. + +// Token database version: 0.0 + +static final String tokenFoo = 'foo'; +static final String tokenBar = 'bar'; + +// END GENERATED TOKEN PROPERTIES - Test +'''); + + } finally { + tempDir.deleteSync(recursive: true); + } + }); + + test('Multiple templates can modify different code blocks in the same file', () { + final Directory tempDir = Directory.systemTemp.createTempSync('gen_defaults'); + try { + // Create a temporary file with some content. + final File tempFile = File(path.join(tempDir.path, 'test_template.txt')); + tempFile.createSync(); + tempFile.writeAsStringSync(''' +// This is a file with stuff in it. +// This part shouldn't be changed by +// the template. +'''); + + // Update file with a template for 'Block 1' + { + final Map<String, dynamic> tokens = <String, dynamic>{'version': '0.0', 'foo': 'foo', 'bar': 'bar'}; + TestTemplate('Block 1', tempFile.path, tokens).updateFile(); + } + expect(tempFile.readAsStringSync(), ''' +// This is a file with stuff in it. +// This part shouldn't be changed by +// the template. + +// BEGIN GENERATED TOKEN PROPERTIES - Block 1 + +// 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. + +// Token database version: 0.0 + +static final String tokenFoo = 'foo'; +static final String tokenBar = 'bar'; +// END GENERATED TOKEN PROPERTIES - Block 1 +'''); + + // Update file with a template for 'Block 2', which should append but not + // disturb the code in 'Block 1'. + { + final Map<String, dynamic> tokens = <String, dynamic>{'version': '0.0', 'foo': 'bar', 'bar': 'foo'}; + TestTemplate('Block 2', tempFile.path, tokens).updateFile(); + } expect(tempFile.readAsStringSync(), ''' // This is a file with stuff in it. // This part shouldn't be changed by // the template. -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - Block 1 -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. + +// Token database version: 0.0 static final String tokenFoo = 'foo'; static final String tokenBar = 'bar'; -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - Block 1 + +// BEGIN GENERATED TOKEN PROPERTIES - Block 2 + +// 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. + +// Token database version: 0.0 + +static final String tokenFoo = 'bar'; +static final String tokenBar = 'foo'; + +// END GENERATED TOKEN PROPERTIES - Block 2 +'''); + + // Update 'Block 1' again which should just update that block, + // leaving 'Block 2' undisturbed. + { + final Map<String, dynamic> tokens = <String, dynamic>{'version': '0.0', 'foo': 'FOO', 'bar': 'BAR'}; + TestTemplate('Block 1', tempFile.path, tokens).updateFile(); + } + expect(tempFile.readAsStringSync(), ''' +// This is a file with stuff in it. +// This part shouldn't be changed by +// the template. + +// BEGIN GENERATED TOKEN PROPERTIES - Block 1 + +// 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. + +// Token database version: 0.0 + +static final String tokenFoo = 'FOO'; +static final String tokenBar = 'BAR'; + +// END GENERATED TOKEN PROPERTIES - Block 1 + +// BEGIN GENERATED TOKEN PROPERTIES - Block 2 + +// 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. + +// Token database version: 0.0 + +static final String tokenFoo = 'bar'; +static final String tokenBar = 'foo'; + +// END GENERATED TOKEN PROPERTIES - Block 2 '''); } finally { @@ -113,14 +244,14 @@ static final String tokenBar = 'bar'; 'family': 'SHAPE_FAMILY_CIRCULAR', }, }; - final TestTemplate template = TestTemplate('foobar.dart', tokens); + final TestTemplate template = TestTemplate('Test', 'foobar.dart', tokens); expect(template.shape('foo'), 'const RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(1.0), topRight: Radius.circular(2.0), bottomLeft: Radius.circular(3.0), bottomRight: Radius.circular(4.0)))'); expect(template.shape('bar'), 'const StadiumBorder()'); }); } class TestTemplate extends TokenTemplate { - TestTemplate(super.fileName, super.tokens); + TestTemplate(super.blockName, super.fileName, super.tokens); @override String generate() => ''' diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index b934e69f4f..3d4aae05a8 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -876,7 +876,7 @@ class _AppBarState extends State<AppBar> { assert(debugCheckHasMaterialLocalizations(context)); final ThemeData theme = Theme.of(context); final AppBarTheme appBarTheme = AppBarTheme.of(context); - final AppBarTheme defaults = theme.useMaterial3 ? _TokenDefaultsM3(context) : _DefaultsM2(context); + final AppBarTheme defaults = theme.useMaterial3 ? _AppBarDefaultsM3(context) : _AppBarDefaultsM2(context); final ScaffoldState? scaffold = Scaffold.maybeOf(context); final ModalRoute<dynamic>? parentRoute = ModalRoute.of(context); @@ -2284,8 +2284,9 @@ mixin _ScrollUnderFlexibleConfig { EdgeInsetsGeometry? get expandedTitlePadding; } -class _DefaultsM2 extends AppBarTheme { - _DefaultsM2(this.context) +// Hand coded defaults based on Material Design 2. +class _AppBarDefaultsM2 extends AppBarTheme { + _AppBarDefaultsM2(this.context) : super( elevation: 4.0, shadowColor: const Color(0xFF000000), @@ -2313,15 +2314,17 @@ class _DefaultsM2 extends AppBarTheme { TextStyle? get titleTextStyle => _theme.textTheme.headline6; } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - AppBar -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends AppBarTheme { - _TokenDefaultsM3(this.context) +// Token database version: v0_101 + +class _AppBarDefaultsM3 extends AppBarTheme { + _AppBarDefaultsM3(this.context) : super( elevation: 0.0, scrolledUnderElevation: 3.0, @@ -2421,4 +2424,4 @@ class _LargeScrollUnderFlexibleConfig with _ScrollUnderFlexibleConfig { EdgeInsetsGeometry? get expandedTitlePadding => const EdgeInsets.fromLTRB(16, 0, 16, 28); } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - AppBar diff --git a/packages/flutter/lib/src/material/card.dart b/packages/flutter/lib/src/material/card.dart index 8fb88a411f..102716e53d 100644 --- a/packages/flutter/lib/src/material/card.dart +++ b/packages/flutter/lib/src/material/card.dart @@ -161,7 +161,7 @@ class Card extends StatelessWidget { @override Widget build(BuildContext context) { final CardTheme cardTheme = CardTheme.of(context); - final CardTheme defaults = Theme.of(context).useMaterial3 ? _TokenDefaultsM3(context) : _DefaultsM2(context); + final CardTheme defaults = Theme.of(context).useMaterial3 ? _CardDefaultsM3(context) : _CardDefaultsM2(context); return Semantics( container: semanticContainer, @@ -186,8 +186,9 @@ class Card extends StatelessWidget { } } -class _DefaultsM2 extends CardTheme { - const _DefaultsM2(this.context) +// Hand coded defaults based on Material Design 2. +class _CardDefaultsM2 extends CardTheme { + const _CardDefaultsM2(this.context) : super( clipBehavior: Clip.none, elevation: 1.0, @@ -206,15 +207,18 @@ class _DefaultsM2 extends CardTheme { Color? get shadowColor => Theme.of(context).shadowColor; } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - Card -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. + +// Token database version: v0_101 // Generated version v0_101 -class _TokenDefaultsM3 extends CardTheme { - const _TokenDefaultsM3(this.context) +class _CardDefaultsM3 extends CardTheme { + const _CardDefaultsM3(this.context) : super( clipBehavior: Clip.none, elevation: 1.0, @@ -234,4 +238,4 @@ class _TokenDefaultsM3 extends CardTheme { Color? get surfaceTintColor => Theme.of(context).colorScheme.surfaceTint; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - Card diff --git a/packages/flutter/lib/src/material/chip_action.dart b/packages/flutter/lib/src/material/chip_action.dart index a2ab88ad48..8207b69049 100644 --- a/packages/flutter/lib/src/material/chip_action.dart +++ b/packages/flutter/lib/src/material/chip_action.dart @@ -149,7 +149,7 @@ class ActionChip extends StatelessWidget implements ChipAttributes, TappableChip Widget build(BuildContext context) { assert(debugCheckHasMaterial(context)); final ChipThemeData? defaults = Theme.of(context).useMaterial3 - ? _TokenDefaultsM3(context, isEnabled) + ? _ActionChipDefaultsM3(context, isEnabled) : null; return RawChip( defaultProperties: defaults, @@ -178,15 +178,17 @@ class ActionChip extends StatelessWidget implements ChipAttributes, TappableChip } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - ActionChip -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends ChipThemeData { - const _TokenDefaultsM3(this.context, this.isEnabled) +// Token database version: v0_101 + +class _ActionChipDefaultsM3 extends ChipThemeData { + const _ActionChipDefaultsM3(this.context, this.isEnabled) : super( elevation: 0.0, shape: const RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(8.0), topRight: Radius.circular(8.0), bottomLeft: Radius.circular(8.0), bottomRight: Radius.circular(8.0))), @@ -248,4 +250,4 @@ class _TokenDefaultsM3 extends ChipThemeData { )!; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - ActionChip diff --git a/packages/flutter/lib/src/material/chip_choice.dart b/packages/flutter/lib/src/material/chip_choice.dart index 099a3c9740..1f361bf6ae 100644 --- a/packages/flutter/lib/src/material/chip_choice.dart +++ b/packages/flutter/lib/src/material/chip_choice.dart @@ -177,7 +177,7 @@ class ChoiceChip extends StatelessWidget assert(debugCheckHasMaterial(context)); final ChipThemeData chipTheme = ChipTheme.of(context); final ChipThemeData? defaults = Theme.of(context).useMaterial3 - ? _TokenDefaultsM3(context, isEnabled, selected) + ? _FilterChipDefaultsM3(context, isEnabled, selected) : null; return RawChip( defaultProperties: defaults, @@ -211,15 +211,17 @@ class ChoiceChip extends StatelessWidget } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - FilterChip -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends ChipThemeData { - const _TokenDefaultsM3(this.context, this.isEnabled, this.isSelected) +// Token database version: v0_101 + +class _FilterChipDefaultsM3 extends ChipThemeData { + const _FilterChipDefaultsM3(this.context, this.isEnabled, this.isSelected) : super( elevation: 0.0, shape: const RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(8.0), topRight: Radius.circular(8.0), bottomLeft: Radius.circular(8.0), bottomRight: Radius.circular(8.0))), @@ -288,4 +290,4 @@ class _TokenDefaultsM3 extends ChipThemeData { )!; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - FilterChip diff --git a/packages/flutter/lib/src/material/chip_filter.dart b/packages/flutter/lib/src/material/chip_filter.dart index c9d76f814d..96f9775582 100644 --- a/packages/flutter/lib/src/material/chip_filter.dart +++ b/packages/flutter/lib/src/material/chip_filter.dart @@ -215,7 +215,7 @@ class FilterChip extends StatelessWidget Widget build(BuildContext context) { assert(debugCheckHasMaterial(context)); final ChipThemeData? defaults = Theme.of(context).useMaterial3 - ? _TokenDefaultsM3(context, isEnabled, selected) + ? _FilterChipDefaultsM3(context, isEnabled, selected) : null; return RawChip( defaultProperties: defaults, @@ -250,15 +250,17 @@ class FilterChip extends StatelessWidget } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - FilterChip -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends ChipThemeData { - const _TokenDefaultsM3(this.context, this.isEnabled, this.isSelected) +// Token database version: v0_101 + +class _FilterChipDefaultsM3 extends ChipThemeData { + const _FilterChipDefaultsM3(this.context, this.isEnabled, this.isSelected) : super( elevation: 0.0, shape: const RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(8.0), topRight: Radius.circular(8.0), bottomLeft: Radius.circular(8.0), bottomRight: Radius.circular(8.0))), @@ -327,4 +329,4 @@ class _TokenDefaultsM3 extends ChipThemeData { )!; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - FilterChip diff --git a/packages/flutter/lib/src/material/chip_input.dart b/packages/flutter/lib/src/material/chip_input.dart index 675ec53a6e..0d09ace91f 100644 --- a/packages/flutter/lib/src/material/chip_input.dart +++ b/packages/flutter/lib/src/material/chip_input.dart @@ -206,7 +206,7 @@ class InputChip extends StatelessWidget Widget build(BuildContext context) { assert(debugCheckHasMaterial(context)); final ChipThemeData? defaults = Theme.of(context).useMaterial3 - ? _TokenDefaultsM3(context, isEnabled) + ? _InputChipDefaultsM3(context, isEnabled) : null; final Widget? resolvedDeleteIcon = deleteIcon ?? (Theme.of(context).useMaterial3 ? const Icon(Icons.clear, size: 18) : null); @@ -249,15 +249,17 @@ class InputChip extends StatelessWidget } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - InputChip -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends ChipThemeData { - const _TokenDefaultsM3(this.context, this.isEnabled) +// Token database version: v0_101 + +class _InputChipDefaultsM3 extends ChipThemeData { + const _InputChipDefaultsM3(this.context, this.isEnabled) : super( elevation: 0.0, shape: const RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(8.0), topRight: Radius.circular(8.0), bottomLeft: Radius.circular(8.0), bottomRight: Radius.circular(8.0))), @@ -319,4 +321,4 @@ class _TokenDefaultsM3 extends ChipThemeData { )!; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - InputChip diff --git a/packages/flutter/lib/src/material/dialog.dart b/packages/flutter/lib/src/material/dialog.dart index 26f40169db..a85dd27d0e 100644 --- a/packages/flutter/lib/src/material/dialog.dart +++ b/packages/flutter/lib/src/material/dialog.dart @@ -135,7 +135,7 @@ class Dialog extends StatelessWidget { Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final DialogTheme dialogTheme = DialogTheme.of(context); - final DialogTheme defaults = theme.useMaterial3 ? _TokenDefaultsM3(context) : _DefaultsM2(context); + final DialogTheme defaults = theme.useMaterial3 ? _DialogDefaultsM3(context) : _DialogDefaultsM2(context); final EdgeInsets effectivePadding = MediaQuery.of(context).viewInsets + (insetPadding ?? EdgeInsets.zero); return AnimatedPadding( @@ -522,7 +522,7 @@ class AlertDialog extends StatelessWidget { assert(debugCheckHasMaterialLocalizations(context)); final ThemeData theme = Theme.of(context); final DialogTheme dialogTheme = DialogTheme.of(context); - final DialogTheme defaults = theme.useMaterial3 ? _TokenDefaultsM3(context) : _DefaultsM2(context); + final DialogTheme defaults = theme.useMaterial3 ? _DialogDefaultsM3(context) : _DialogDefaultsM2(context); String? label = semanticLabel; switch (theme.platform) { @@ -1275,12 +1275,9 @@ double _paddingScaleFactor(double textScaleFactor) { return lerpDouble(1.0, 1.0 / 3.0, clampedTextScaleFactor - 1.0)!; } -// Generate a DialogTheme that represents the M2 default values. -// This was generated by hand from the previous hand coded defaults -// for M2. It uses get method overrides instead of properties to -// avoid computing values that we may not need upfront. -class _DefaultsM2 extends DialogTheme { - _DefaultsM2(this.context) +// Hand coded defaults based on Material Design 2. +class _DialogDefaultsM2 extends DialogTheme { + _DialogDefaultsM2(this.context) : _textTheme = Theme.of(context).textTheme, _iconTheme = Theme.of(context).iconTheme, super( @@ -1309,15 +1306,17 @@ class _DefaultsM2 extends DialogTheme { EdgeInsetsGeometry? get actionsPadding => EdgeInsets.zero; } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - Dialog -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends DialogTheme { - _TokenDefaultsM3(this.context) +// Token database version: v0_101 + +class _DialogDefaultsM3 extends DialogTheme { + _DialogDefaultsM3(this.context) : super( alignment: Alignment.center, elevation: 6.0, @@ -1345,4 +1344,4 @@ class _TokenDefaultsM3 extends DialogTheme { EdgeInsetsGeometry? get actionsPadding => const EdgeInsets.only(left: 24.0, right: 24.0, bottom: 24.0); } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - Dialog diff --git a/packages/flutter/lib/src/material/elevated_button.dart b/packages/flutter/lib/src/material/elevated_button.dart index bbd81b61aa..1e610eaa50 100644 --- a/packages/flutter/lib/src/material/elevated_button.dart +++ b/packages/flutter/lib/src/material/elevated_button.dart @@ -339,7 +339,7 @@ class ElevatedButton extends ButtonStyleButton { final ColorScheme colorScheme = theme.colorScheme; return Theme.of(context).useMaterial3 - ? _TokenDefaultsM3(context) + ? _ElevatedButtonDefaultsM3(context) : styleFrom( backgroundColor: colorScheme.primary, foregroundColor: colorScheme.onPrimary, @@ -506,15 +506,17 @@ class _ElevatedButtonWithIconChild extends StatelessWidget { } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - ElevatedButton -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends ButtonStyle { - _TokenDefaultsM3(this.context) +// Token database version: v0_101 + +class _ElevatedButtonDefaultsM3 extends ButtonStyle { + _ElevatedButtonDefaultsM3(this.context) : super( animationDuration: kThemeChangeDuration, enableFeedback: true, @@ -626,4 +628,4 @@ class _TokenDefaultsM3 extends ButtonStyle { InteractiveInkFeatureFactory? get splashFactory => Theme.of(context).splashFactory; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - ElevatedButton diff --git a/packages/flutter/lib/src/material/elevation_overlay.dart b/packages/flutter/lib/src/material/elevation_overlay.dart index 3da1385c35..1cba0bd53f 100644 --- a/packages/flutter/lib/src/material/elevation_overlay.dart +++ b/packages/flutter/lib/src/material/elevation_overlay.dart @@ -151,13 +151,14 @@ class _ElevationOpacity { final double opacity; } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - SurfaceTint -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 +// Token database version: v0_101 // Surface tint opacities based on elevations according to the // Material Design 3 specification: @@ -172,4 +173,4 @@ const List<_ElevationOpacity> _surfaceTintElevationOpacities = <_ElevationOpacit _ElevationOpacity(12.0, 0.14), // Elevation level 5 ]; -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - SurfaceTint diff --git a/packages/flutter/lib/src/material/floating_action_button.dart b/packages/flutter/lib/src/material/floating_action_button.dart index f66c0d6866..d359a5338a 100644 --- a/packages/flutter/lib/src/material/floating_action_button.dart +++ b/packages/flutter/lib/src/material/floating_action_button.dart @@ -513,8 +513,8 @@ class FloatingActionButton extends StatelessWidget { final ThemeData theme = Theme.of(context); final FloatingActionButtonThemeData floatingActionButtonTheme = theme.floatingActionButtonTheme; final FloatingActionButtonThemeData defaults = theme.useMaterial3 - ? _TokenDefaultsM3(context, _floatingActionButtonType, child != null) - : _M2Defaults(context, _floatingActionButtonType, child != null); + ? _FABDefaultsM3(context, _floatingActionButtonType, child != null) + : _FABDefaultsM2(context, _floatingActionButtonType, child != null); final Color foregroundColor = this.foregroundColor ?? floatingActionButtonTheme.foregroundColor @@ -727,13 +727,9 @@ class _RenderChildOverflowBox extends RenderAligningShiftedBox { } } -// Generate a FloatingActionButtonThemeData that represents -// the M2 default values. This was generated by hand from the -// previous hand coded defaults for M2. It uses get method overrides -// instead of properties to avoid computing values that we may not -// need upfront. -class _M2Defaults extends FloatingActionButtonThemeData { - _M2Defaults(BuildContext context, this.type, this.hasChild) +// Hand coded defaults based on Material Design 2. +class _FABDefaultsM2 extends FloatingActionButtonThemeData { + _FABDefaultsM2(BuildContext context, this.type, this.hasChild) : _theme = Theme.of(context), _colors = Theme.of(context).colorScheme, super( @@ -780,15 +776,17 @@ class _M2Defaults extends FloatingActionButtonThemeData { @override TextStyle? get extendedTextStyle => _theme.textTheme.button!.copyWith(letterSpacing: 1.2); } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - FAB -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends FloatingActionButtonThemeData { - _TokenDefaultsM3(this.context, this.type, this.hasChild) +// Token database version: v0_101 + +class _FABDefaultsM3 extends FloatingActionButtonThemeData { + _FABDefaultsM3(this.context, this.type, this.hasChild) : super( elevation: 6.0, focusElevation: 6.0, @@ -855,4 +853,4 @@ class _TokenDefaultsM3 extends FloatingActionButtonThemeData { @override TextStyle? get extendedTextStyle => _textTheme.labelLarge; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - FAB diff --git a/packages/flutter/lib/src/material/icon_button.dart b/packages/flutter/lib/src/material/icon_button.dart index a11b66a896..3af465bca9 100644 --- a/packages/flutter/lib/src/material/icon_button.dart +++ b/packages/flutter/lib/src/material/icon_button.dart @@ -775,7 +775,7 @@ class _IconButtonM3 extends ButtonStyleButton { /// * `splashFactory` - Theme.splashFactory @override ButtonStyle defaultStyleOf(BuildContext context) { - return _TokenDefaultsM3(context); + return _IconButtonDefaultsM3(context); } /// Returns null because [IconButton] doesn't have its component theme. @@ -883,15 +883,17 @@ class _IconButtonDefaultMouseCursor extends MaterialStateProperty<MouseCursor> w } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - IconButton -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends ButtonStyle { - _TokenDefaultsM3(this.context) +// Token database version: v0_101 + +class _IconButtonDefaultsM3 extends ButtonStyle { + _IconButtonDefaultsM3(this.context) : super( animationDuration: kThemeChangeDuration, enableFeedback: true, @@ -992,4 +994,4 @@ class _TokenDefaultsM3 extends ButtonStyle { InteractiveInkFeatureFactory? get splashFactory => Theme.of(context).splashFactory; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - IconButton diff --git a/packages/flutter/lib/src/material/navigation_bar.dart b/packages/flutter/lib/src/material/navigation_bar.dart index 3af6ffe115..071af9b33c 100644 --- a/packages/flutter/lib/src/material/navigation_bar.dart +++ b/packages/flutter/lib/src/material/navigation_bar.dart @@ -1173,11 +1173,12 @@ bool _isForwardOrCompleted(Animation<double> animation) { } NavigationBarThemeData _defaultsFor(BuildContext context) { - return Theme.of(context).useMaterial3 ? _TokenDefaultsM3(context) : _Defaults(context); + return Theme.of(context).useMaterial3 ? _NavigationBarDefaultsM3(context) : _NavigationBarDefaultsM2(context); } -class _Defaults extends NavigationBarThemeData { - _Defaults(BuildContext context) +// Hand coded defaults based on Material Design 2. +class _NavigationBarDefaultsM2 extends NavigationBarThemeData { + _NavigationBarDefaultsM2(BuildContext context) : _theme = Theme.of(context), _colors = Theme.of(context).colorScheme, super( @@ -1190,7 +1191,7 @@ class _Defaults extends NavigationBarThemeData { final ThemeData _theme; final ColorScheme _colors; - // With Material 3, the NavigationBar uses an overlay blend for the + // With Material 2, the NavigationBar uses an overlay blend for the // default color regardless of light/dark mode. @override Color? get backgroundColor => ElevationOverlay.colorWithOverlay(_colors.surface, _colors.onSurface, 3.0); @@ -1206,15 +1207,17 @@ class _Defaults extends NavigationBarThemeData { @override MaterialStateProperty<TextStyle?>? get labelTextStyle => MaterialStatePropertyAll<TextStyle?>(_theme.textTheme.overline!.copyWith(color: _colors.onSurface)); } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - NavigationBar -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends NavigationBarThemeData { - _TokenDefaultsM3(this.context) +// Token database version: v0_101 + +class _NavigationBarDefaultsM3 extends NavigationBarThemeData { + _NavigationBarDefaultsM3(this.context) : super( height: 80.0, elevation: 3.0, @@ -1254,4 +1257,4 @@ class _TokenDefaultsM3 extends NavigationBarThemeData { } } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - NavigationBar diff --git a/packages/flutter/lib/src/material/navigation_rail.dart b/packages/flutter/lib/src/material/navigation_rail.dart index 24a9a6e5a7..b2b92fe0ea 100644 --- a/packages/flutter/lib/src/material/navigation_rail.dart +++ b/packages/flutter/lib/src/material/navigation_rail.dart @@ -379,7 +379,7 @@ class _NavigationRailState extends State<NavigationRail> with TickerProviderStat @override Widget build(BuildContext context) { final NavigationRailThemeData navigationRailTheme = NavigationRailTheme.of(context); - final NavigationRailThemeData defaults = Theme.of(context).useMaterial3 ? _TokenDefaultsM3(context) : _DefaultsM2(context); + final NavigationRailThemeData defaults = Theme.of(context).useMaterial3 ? _NavigationRailDefaultsM3(context) : _NavigationRailDefaultsM2(context); final MaterialLocalizations localizations = MaterialLocalizations.of(context); final Color backgroundColor = widget.backgroundColor ?? navigationRailTheme.backgroundColor ?? defaults.backgroundColor!; @@ -910,8 +910,9 @@ const Widget _verticalSpacer = SizedBox(height: 8.0); const double _verticalIconLabelSpacingM3 = 4.0; const double _verticalDestinationSpacingM3 = 12.0; -class _DefaultsM2 extends NavigationRailThemeData { - _DefaultsM2(BuildContext context) +// Hand coded defaults based on Material Design 2. +class _NavigationRailDefaultsM2 extends NavigationRailThemeData { + _NavigationRailDefaultsM2(BuildContext context) : _theme = Theme.of(context), _colors = Theme.of(context).colorScheme, super( @@ -953,15 +954,17 @@ class _DefaultsM2 extends NavigationRailThemeData { } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - NavigationRail -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends NavigationRailThemeData { - _TokenDefaultsM3(this.context) +// Token database version: v0_101 + +class _NavigationRailDefaultsM3 extends NavigationRailThemeData { + _NavigationRailDefaultsM3(this.context) : super( elevation: 0.0, groupAlignment: -1, @@ -1003,4 +1006,4 @@ class _TokenDefaultsM3 extends NavigationRailThemeData { } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - NavigationRail diff --git a/packages/flutter/lib/src/material/outlined_button.dart b/packages/flutter/lib/src/material/outlined_button.dart index 3bd32873e1..b986e29a48 100644 --- a/packages/flutter/lib/src/material/outlined_button.dart +++ b/packages/flutter/lib/src/material/outlined_button.dart @@ -306,7 +306,7 @@ class OutlinedButton extends ButtonStyleButton { final ColorScheme colorScheme = theme.colorScheme; return Theme.of(context).useMaterial3 - ? _TokenDefaultsM3(context) + ? _OutlinedButtonDefaultsM3(context) : styleFrom( foregroundColor: colorScheme.primary, disabledForegroundColor: colorScheme.onSurface.withOpacity(0.38), @@ -438,15 +438,17 @@ class _OutlinedButtonWithIconChild extends StatelessWidget { } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - OutlinedButton -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends ButtonStyle { - _TokenDefaultsM3(this.context) +// Token database version: v0_101 + +class _OutlinedButtonDefaultsM3 extends ButtonStyle { + _OutlinedButtonDefaultsM3(this.context) : super( animationDuration: kThemeChangeDuration, enableFeedback: true, @@ -542,4 +544,4 @@ class _TokenDefaultsM3 extends ButtonStyle { InteractiveInkFeatureFactory? get splashFactory => Theme.of(context).splashFactory; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - OutlinedButton diff --git a/packages/flutter/lib/src/material/text_button.dart b/packages/flutter/lib/src/material/text_button.dart index a6d1bdaf73..d6f472320a 100644 --- a/packages/flutter/lib/src/material/text_button.dart +++ b/packages/flutter/lib/src/material/text_button.dart @@ -327,7 +327,7 @@ class TextButton extends ButtonStyleButton { final ColorScheme colorScheme = theme.colorScheme; return Theme.of(context).useMaterial3 - ? _TokenDefaultsM3(context) + ? _TextButtonDefaultsM3(context) : styleFrom( foregroundColor: colorScheme.primary, disabledForegroundColor: colorScheme.onSurface.withOpacity(0.38), @@ -483,15 +483,17 @@ class _TextButtonWithIconChild extends StatelessWidget { } } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - TextButton -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. -// Generated version v0_101 -class _TokenDefaultsM3 extends ButtonStyle { - _TokenDefaultsM3(this.context) +// Token database version: v0_101 + +class _TextButtonDefaultsM3 extends ButtonStyle { + _TextButtonDefaultsM3(this.context) : super( animationDuration: kThemeChangeDuration, enableFeedback: true, @@ -580,4 +582,4 @@ class _TokenDefaultsM3 extends ButtonStyle { InteractiveInkFeatureFactory? get splashFactory => Theme.of(context).splashFactory; } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - TextButton diff --git a/packages/flutter/lib/src/material/typography.dart b/packages/flutter/lib/src/material/typography.dart index 1bca423bd4..7b9a99b17e 100644 --- a/packages/flutter/lib/src/material/typography.dart +++ b/packages/flutter/lib/src/material/typography.dart @@ -729,13 +729,15 @@ class Typography with Diagnosticable { static const TextTheme tall2021 = _M3Typography.tall; } -// BEGIN GENERATED TOKEN PROPERTIES +// BEGIN GENERATED TOKEN PROPERTIES - Typography -// Generated code to the end of this file. Do not edit by hand. -// These defaults are generated from the Material Design Token -// database by the script dev/tools/gen_defaults/bin/gen_defaults.dart. +// 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. + +// Token database version: v0_101 -// Generated version v0_101 class _M3Typography { _M3Typography._(); @@ -794,4 +796,4 @@ class _M3Typography { ); } -// END GENERATED TOKEN PROPERTIES +// END GENERATED TOKEN PROPERTIES - Typography -- 2.21.0