Unverified Commit 66cda591 authored by Pierre-Louis's avatar Pierre-Louis Committed by GitHub

Improve defaults generation with logging, stats, and token validation (#128244)

## Description

This improves defaults generation with logging, stats, and token validation. 

This PR includes these changes:
* introduce `TokenLogger`, with a verbose mode
  * prints versions and tokens usage to the console
  * outputs `generated/used_tokens.csv`, a list of all used tokens, for use by Google
* find token files in `data` automatically
* hide tokens `Map`
  * tokens can be obtained using existing resolvers (e.g. `color`, `shape`), or directly through `getToken`.
  * tokens can be checked for existence with `tokenAvailable`
* remove version from template, since the tokens are aggregated and multiple versions are possible (as is the case currently), it does not make sense to attribute a single version
* improve documentation

## Related Issues
 - Fixes https://github.com/flutter/flutter/issues/122602

## Tests
 - Added tests for `TokenLogger`
 - Regenerated tokens, no-op except version removal

## Future work
A future PR should replace or remove the following invalid tokens usages

<img width="578" alt="image" src="https://github.com/flutter/flutter/assets/6655696/b6f9e5a7-523f-4f72-94f9-1b0bf4cc9f00">
parent 0d39f646
## Token Defaults Generator ## Token Defaults Generator
Script that generates widget component theme data defaults Script that generates component theme data defaults based on token data.
based on the Material Token database. These tokens were
extracted into a JSON file from an internal Google database.
## Usage ## Usage
Run this program from the root of the git repository: Run this program from the root of the git repository:
``` ```
dart dev/tools/gen_defaults/bin/gen_defaults.dart dart dev/tools/gen_defaults/bin/gen_defaults.dart [-v]
``` ```
This updates `generated/used_tokens.csv` and the various component theme files.
## Templates ## Templates
There is a template file for every component that needs defaults from There is a template file for every component that needs defaults from
...@@ -18,10 +18,18 @@ the token database. These templates are implemented as subclasses of ...@@ -18,10 +18,18 @@ the token database. These templates are implemented as subclasses of
for adding a new block 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 Templates need to override the `generate` method to provide the generated
code block as a string. The tokens are represented as a `Map<String, dynamic>` code block as a string.
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.
See `lib/fab_template.dart` for an example that generates defaults for the See `lib/fab_template.dart` for an example that generates defaults for the
Floating Action Button. Floating Action Button.
## Tokens
Tokens are stored in JSON files in `data/`, and are sourced from
an internal Google database.
`template.dart` should provide nearly all useful token resolvers
(e.g. `color`, `shape`, etc.). For special cases in which one shouldn't
be defined, use `getToken` to get the raw token value. The script, through
the various revolvers and `getToken`, validates tokens, keeps track of
which tokens are used, and generates `generated/used_tokens.csv`.
...@@ -2,21 +2,18 @@ ...@@ -2,21 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Generate component theme data defaults based on the Material
// Design Token database. These tokens were extracted into a
// JSON file from the internal Google database.
//
// ## Usage // ## Usage
// //
// Run this program from the root of the git repository. // Run this program from the root of the git repository.
// //
// ``` // ```
// dart dev/tools/gen_defaults/bin/gen_defaults.dart // dart dev/tools/gen_defaults/bin/gen_defaults.dart [-v]
// ``` // ```
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:args/args.dart';
import 'package:gen_defaults/action_chip_template.dart'; import 'package:gen_defaults/action_chip_template.dart';
import 'package:gen_defaults/app_bar_template.dart'; import 'package:gen_defaults/app_bar_template.dart';
import 'package:gen_defaults/badge_template.dart'; import 'package:gen_defaults/badge_template.dart';
...@@ -56,89 +53,51 @@ import 'package:gen_defaults/switch_template.dart'; ...@@ -56,89 +53,51 @@ import 'package:gen_defaults/switch_template.dart';
import 'package:gen_defaults/tabs_template.dart'; import 'package:gen_defaults/tabs_template.dart';
import 'package:gen_defaults/text_field_template.dart'; import 'package:gen_defaults/text_field_template.dart';
import 'package:gen_defaults/time_picker_template.dart'; import 'package:gen_defaults/time_picker_template.dart';
import 'package:gen_defaults/token_logger.dart';
import 'package:gen_defaults/typography_template.dart'; import 'package:gen_defaults/typography_template.dart';
Map<String, dynamic> _readTokenFile(String fileName) { Map<String, dynamic> _readTokenFile(File file) {
return jsonDecode(File('dev/tools/gen_defaults/data/$fileName').readAsStringSync()) as Map<String, dynamic>; return jsonDecode(file.readAsStringSync()) as Map<String, dynamic>;
} }
const String materialLib = 'packages/flutter/lib/src/material';
const String dataDir = 'dev/tools/gen_defaults/data';
Future<void> main(List<String> args) async { Future<void> main(List<String> args) async {
const String materialLib = 'packages/flutter/lib/src/material'; // Parse arguments
const List<String> tokenFiles = <String>[ final ArgParser parser = ArgParser();
'badge.json', parser.addFlag(
'banner.json', 'verbose',
'badge.json', abbr: 'v',
'bottom_app_bar.json', help: 'Enable verbose output',
'button_elevated.json', negatable: false,
'button_filled.json', );
'button_filled_tonal.json', final ArgResults argResults = parser.parse(args);
'button_outlined.json', final bool verbose = argResults['verbose'] as bool;
'button_text.json',
'card_elevated.json',
'card_filled.json',
'card_outlined.json',
'checkbox.json',
'chip_assist.json',
'chip_filter.json',
'chip_input.json',
'chip_suggestion.json',
'color_dark.json',
'color_light.json',
'date_picker_docked.json',
'date_picker_modal.json',
'dialog.json',
'dialog_fullscreen.json',
'divider.json',
'elevation.json',
'fab_extended_primary.json',
'fab_large_primary.json',
'fab_primary.json',
'fab_small_primary.json',
'icon_button.json',
'icon_button_filled.json',
'icon_button_filled_tonal.json',
'icon_button_outlined.json',
'list.json',
'menu.json',
'motion.json',
'navigation_bar.json',
'navigation_drawer.json',
'navigation_rail.json',
'navigation_tab_primary.json',
'navigation_tab_secondary.json',
'palette.json',
'progress_indicator_circular.json',
'progress_indicator_linear.json',
'radio_button.json',
'search_bar.json',
'search_view.json',
'segmented_button_outlined.json',
'shape.json',
'sheet_bottom.json',
'slider.json',
'snackbar.json',
'state.json',
'switch.json',
'text_field_filled.json',
'text_field_outlined.json',
'text_style.json',
'time_picker.json',
'top_app_bar_large.json',
'top_app_bar_medium.json',
'top_app_bar_small.json',
'typeface.json',
];
// Generate a map with all the tokens to simplify the template interface. // Map of version number to list of data files that use that version.
final Map<String, List<String>> versionMap = <String, List<String>>{};
// Map of all tokens to their values.
final Map<String, dynamic> tokens = <String, dynamic>{}; final Map<String, dynamic> tokens = <String, dynamic>{};
for (final String tokenFile in tokenFiles) {
tokens.addAll(_readTokenFile(tokenFile)); // Initialize.
for (final FileSystemEntity tokenFile in Directory(dataDir).listSync()) {
final Map<String, dynamic> tokenFileTokens = _readTokenFile(tokenFile as File);
final String version = tokenFileTokens['version'] as String;
tokenFileTokens.remove('version');
if (versionMap[version] == null) {
versionMap[version] = List<String>.empty(growable: true);
} }
versionMap[version]!.add(tokenFile.uri.pathSegments.last);
// Special case the light and dark color schemes. tokens.addAll(tokenFileTokens);
tokens['colorsLight'] = _readTokenFile('color_light.json'); }
tokens['colorsDark'] = _readTokenFile('color_dark.json'); tokenLogger.init(allTokens: tokens, versionMap: versionMap);
// Handle light/dark color tokens separately because they share identical token names.
final Map<String, dynamic> colorLightTokens = _readTokenFile(File('$dataDir/color_light.json'));
final Map<String, dynamic> colorDarkTokens = _readTokenFile(File('$dataDir/color_dark.json'));
// Generate tokens files.
ChipTemplate('Chip', '$materialLib/chip.dart', tokens).updateFile(); ChipTemplate('Chip', '$materialLib/chip.dart', tokens).updateFile();
ActionChipTemplate('ActionChip', '$materialLib/action_chip.dart', tokens).updateFile(); ActionChipTemplate('ActionChip', '$materialLib/action_chip.dart', tokens).updateFile();
AppBarTemplate('AppBar', '$materialLib/app_bar.dart', tokens).updateFile(); AppBarTemplate('AppBar', '$materialLib/app_bar.dart', tokens).updateFile();
...@@ -154,7 +113,7 @@ Future<void> main(List<String> args) async { ...@@ -154,7 +113,7 @@ Future<void> main(List<String> args) async {
ButtonTemplate('md.comp.text-button', 'TextButton', '$materialLib/text_button.dart', tokens).updateFile(); ButtonTemplate('md.comp.text-button', 'TextButton', '$materialLib/text_button.dart', tokens).updateFile();
CardTemplate('Card', '$materialLib/card.dart', tokens).updateFile(); CardTemplate('Card', '$materialLib/card.dart', tokens).updateFile();
CheckboxTemplate('Checkbox', '$materialLib/checkbox.dart', tokens).updateFile(); CheckboxTemplate('Checkbox', '$materialLib/checkbox.dart', tokens).updateFile();
ColorSchemeTemplate('ColorScheme', '$materialLib/theme_data.dart', tokens).updateFile(); ColorSchemeTemplate(colorLightTokens, colorDarkTokens, 'ColorScheme', '$materialLib/theme_data.dart', tokens).updateFile();
DatePickerTemplate('DatePicker', '$materialLib/date_picker_theme.dart', tokens).updateFile(); DatePickerTemplate('DatePicker', '$materialLib/date_picker_theme.dart', tokens).updateFile();
DialogFullscreenTemplate('DialogFullscreen', '$materialLib/dialog.dart', tokens).updateFile(); DialogFullscreenTemplate('DialogFullscreen', '$materialLib/dialog.dart', tokens).updateFile();
DialogTemplate('Dialog', '$materialLib/dialog.dart', tokens).updateFile(); DialogTemplate('Dialog', '$materialLib/dialog.dart', tokens).updateFile();
...@@ -189,4 +148,12 @@ Future<void> main(List<String> args) async { ...@@ -189,4 +148,12 @@ Future<void> main(List<String> args) async {
TextFieldTemplate('TextField', '$materialLib/text_field.dart', tokens).updateFile(); TextFieldTemplate('TextField', '$materialLib/text_field.dart', tokens).updateFile();
TabsTemplate('Tabs', '$materialLib/tabs.dart', tokens).updateFile(); TabsTemplate('Tabs', '$materialLib/tabs.dart', tokens).updateFile();
TypographyTemplate('Typography', '$materialLib/typography.dart', tokens).updateFile(); TypographyTemplate('Typography', '$materialLib/typography.dart', tokens).updateFile();
tokenLogger.printVersionUsage(verbose: verbose);
tokenLogger.printTokensUsage(verbose: verbose);
if (!verbose) {
print('\nTo see detailed version and token usage, run with --verbose (-v).');
}
tokenLogger.dumpToFile('dev/tools/gen_defaults/generated/used_tokens.csv');
} }
This diff is collapsed.
...@@ -77,7 +77,7 @@ class _${blockName}DefaultsM3 extends ChipThemeData { ...@@ -77,7 +77,7 @@ class _${blockName}DefaultsM3 extends ChipThemeData {
color: isEnabled color: isEnabled
? ${color("$tokenGroup.with-icon.icon.color")} ? ${color("$tokenGroup.with-icon.icon.color")}
: ${color("$tokenGroup.with-icon.disabled.icon.color")}, : ${color("$tokenGroup.with-icon.disabled.icon.color")},
size: ${tokens["$tokenGroup.with-icon.icon.size"]}, size: ${getToken("$tokenGroup.with-icon.icon.size")},
); );
@override @override
......
...@@ -19,7 +19,7 @@ class _${blockName}DefaultsM3 extends AppBarTheme { ...@@ -19,7 +19,7 @@ class _${blockName}DefaultsM3 extends AppBarTheme {
elevation: ${elevation('md.comp.top-app-bar.small.container')}, elevation: ${elevation('md.comp.top-app-bar.small.container')},
scrolledUnderElevation: ${elevation('md.comp.top-app-bar.small.on-scroll.container')}, scrolledUnderElevation: ${elevation('md.comp.top-app-bar.small.on-scroll.container')},
titleSpacing: NavigationToolbar.kMiddleSpacing, titleSpacing: NavigationToolbar.kMiddleSpacing,
toolbarHeight: ${tokens['md.comp.top-app-bar.small.container.height']}, toolbarHeight: ${getToken('md.comp.top-app-bar.small.container.height')},
); );
final BuildContext context; final BuildContext context;
...@@ -42,13 +42,13 @@ class _${blockName}DefaultsM3 extends AppBarTheme { ...@@ -42,13 +42,13 @@ class _${blockName}DefaultsM3 extends AppBarTheme {
@override @override
IconThemeData? get iconTheme => IconThemeData( IconThemeData? get iconTheme => IconThemeData(
color: ${componentColor('md.comp.top-app-bar.small.leading-icon')}, color: ${componentColor('md.comp.top-app-bar.small.leading-icon')},
size: ${tokens['md.comp.top-app-bar.small.leading-icon.size']}, size: ${getToken('md.comp.top-app-bar.small.leading-icon.size')},
); );
@override @override
IconThemeData? get actionsIconTheme => IconThemeData( IconThemeData? get actionsIconTheme => IconThemeData(
color: ${componentColor('md.comp.top-app-bar.small.trailing-icon')}, color: ${componentColor('md.comp.top-app-bar.small.trailing-icon')},
size: ${tokens['md.comp.top-app-bar.small.trailing-icon.size']}, size: ${getToken('md.comp.top-app-bar.small.trailing-icon.size')},
); );
@override @override
...@@ -67,8 +67,8 @@ class _MediumScrollUnderFlexibleConfig with _ScrollUnderFlexibleConfig { ...@@ -67,8 +67,8 @@ class _MediumScrollUnderFlexibleConfig with _ScrollUnderFlexibleConfig {
late final ColorScheme _colors = _theme.colorScheme; late final ColorScheme _colors = _theme.colorScheme;
late final TextTheme _textTheme = _theme.textTheme; late final TextTheme _textTheme = _theme.textTheme;
static const double collapsedHeight = ${tokens['md.comp.top-app-bar.small.container.height']}; static const double collapsedHeight = ${getToken('md.comp.top-app-bar.small.container.height')};
static const double expandedHeight = ${tokens['md.comp.top-app-bar.medium.container.height']}; static const double expandedHeight = ${getToken('md.comp.top-app-bar.medium.container.height')};
@override @override
TextStyle? get collapsedTextStyle => TextStyle? get collapsedTextStyle =>
...@@ -90,8 +90,8 @@ class _LargeScrollUnderFlexibleConfig with _ScrollUnderFlexibleConfig { ...@@ -90,8 +90,8 @@ class _LargeScrollUnderFlexibleConfig with _ScrollUnderFlexibleConfig {
late final ColorScheme _colors = _theme.colorScheme; late final ColorScheme _colors = _theme.colorScheme;
late final TextTheme _textTheme = _theme.textTheme; late final TextTheme _textTheme = _theme.textTheme;
static const double collapsedHeight = ${tokens['md.comp.top-app-bar.small.container.height']}; static const double collapsedHeight = ${getToken('md.comp.top-app-bar.small.container.height')};
static const double expandedHeight = ${tokens['md.comp.top-app-bar.large.container.height']}; static const double expandedHeight = ${getToken('md.comp.top-app-bar.large.container.height')};
@override @override
TextStyle? get collapsedTextStyle => TextStyle? get collapsedTextStyle =>
......
...@@ -13,8 +13,8 @@ class BadgeTemplate extends TokenTemplate { ...@@ -13,8 +13,8 @@ class BadgeTemplate extends TokenTemplate {
String generate() => ''' String generate() => '''
class _${blockName}DefaultsM3 extends BadgeThemeData { class _${blockName}DefaultsM3 extends BadgeThemeData {
_${blockName}DefaultsM3(this.context) : super( _${blockName}DefaultsM3(this.context) : super(
smallSize: ${tokens["md.comp.badge.size"]}, smallSize: ${getToken("md.comp.badge.size")},
largeSize: ${tokens["md.comp.badge.large.size"]}, largeSize: ${getToken("md.comp.badge.large.size")},
padding: const EdgeInsets.symmetric(horizontal: 4), padding: const EdgeInsets.symmetric(horizontal: 4),
alignment: AlignmentDirectional.topEnd, alignment: AlignmentDirectional.topEnd,
); );
......
...@@ -15,7 +15,7 @@ class _${blockName}DefaultsM3 extends BottomAppBarTheme { ...@@ -15,7 +15,7 @@ class _${blockName}DefaultsM3 extends BottomAppBarTheme {
_${blockName}DefaultsM3(this.context) _${blockName}DefaultsM3(this.context)
: super( : super(
elevation: ${elevation('md.comp.bottom-app-bar.container')}, elevation: ${elevation('md.comp.bottom-app-bar.container')},
height: ${tokens['md.comp.bottom-app-bar.container.height']}, height: ${getToken('md.comp.bottom-app-bar.container.height')},
shape: const AutomaticNotchedShape(${shape('md.comp.bottom-app-bar.container', '')}), shape: const AutomaticNotchedShape(${shape('md.comp.bottom-app-bar.container', '')}),
); );
......
...@@ -12,7 +12,7 @@ class ButtonTemplate extends TokenTemplate { ...@@ -12,7 +12,7 @@ class ButtonTemplate extends TokenTemplate {
final String tokenGroup; final String tokenGroup;
String _backgroundColor() { String _backgroundColor() {
if (tokens.containsKey('$tokenGroup.container.color')) { if (tokenAvailable('$tokenGroup.container.color')) {
return ''' return '''
MaterialStateProperty.resolveWith((Set<MaterialState> states) { MaterialStateProperty.resolveWith((Set<MaterialState> states) {
...@@ -28,7 +28,7 @@ class ButtonTemplate extends TokenTemplate { ...@@ -28,7 +28,7 @@ class ButtonTemplate extends TokenTemplate {
} }
String _elevation() { String _elevation() {
if (tokens.containsKey('$tokenGroup.container.elevation')) { if (tokenAvailable('$tokenGroup.container.elevation')) {
return ''' return '''
MaterialStateProperty.resolveWith((Set<MaterialState> states) { MaterialStateProperty.resolveWith((Set<MaterialState> states) {
...@@ -53,7 +53,7 @@ class ButtonTemplate extends TokenTemplate { ...@@ -53,7 +53,7 @@ class ButtonTemplate extends TokenTemplate {
} }
String _elevationColor(String token) { String _elevationColor(String token) {
if (tokens.containsKey(token)) { if (tokenAvailable(token)) {
return 'MaterialStatePropertyAll<Color>(${color(token)})'; return 'MaterialStatePropertyAll<Color>(${color(token)})';
} else { } else {
return 'const MaterialStatePropertyAll<Color>(Colors.transparent)'; return 'const MaterialStatePropertyAll<Color>(Colors.transparent)';
...@@ -121,7 +121,7 @@ class _${blockName}DefaultsM3 extends ButtonStyle { ...@@ -121,7 +121,7 @@ class _${blockName}DefaultsM3 extends ButtonStyle {
@override @override
MaterialStateProperty<Size>? get minimumSize => MaterialStateProperty<Size>? get minimumSize =>
const MaterialStatePropertyAll<Size>(Size(64.0, ${tokens["$tokenGroup.container.height"]})); const MaterialStatePropertyAll<Size>(Size(64.0, ${getToken("$tokenGroup.container.height")}));
// No default fixedSize // No default fixedSize
...@@ -129,7 +129,7 @@ class _${blockName}DefaultsM3 extends ButtonStyle { ...@@ -129,7 +129,7 @@ class _${blockName}DefaultsM3 extends ButtonStyle {
MaterialStateProperty<Size>? get maximumSize => MaterialStateProperty<Size>? get maximumSize =>
const MaterialStatePropertyAll<Size>(Size.infinite); const MaterialStatePropertyAll<Size>(Size.infinite);
${tokens.containsKey("$tokenGroup.outline.color") ? ''' ${tokenAvailable("$tokenGroup.outline.color") ? '''
@override @override
MaterialStateProperty<BorderSide>? get side => MaterialStateProperty<BorderSide>? get side =>
MaterialStateProperty.resolveWith((Set<MaterialState> states) { MaterialStateProperty.resolveWith((Set<MaterialState> states) {
......
...@@ -24,26 +24,26 @@ class _${blockName}DefaultsM3 extends CheckboxThemeData { ...@@ -24,26 +24,26 @@ class _${blockName}DefaultsM3 extends CheckboxThemeData {
return MaterialStateBorderSide.resolveWith((Set<MaterialState> states) { return MaterialStateBorderSide.resolveWith((Set<MaterialState> states) {
if (states.contains(MaterialState.disabled)) { if (states.contains(MaterialState.disabled)) {
if (states.contains(MaterialState.selected)) { if (states.contains(MaterialState.selected)) {
return const BorderSide(width: ${tokens['md.comp.checkbox.unselected.disabled.outline.width']}, color: Colors.transparent); return const BorderSide(width: ${getToken('md.comp.checkbox.unselected.disabled.outline.width')}, color: Colors.transparent);
} }
return BorderSide(width: ${tokens['md.comp.checkbox.unselected.disabled.outline.width']}, color: ${componentColor('md.comp.checkbox.unselected.disabled.outline')}.withOpacity(${tokens['md.comp.checkbox.unselected.disabled.container.opacity']})); return BorderSide(width: ${getToken('md.comp.checkbox.unselected.disabled.outline.width')}, color: ${componentColor('md.comp.checkbox.unselected.disabled.outline')}.withOpacity(${getToken('md.comp.checkbox.unselected.disabled.container.opacity')}));
} }
if (states.contains(MaterialState.selected)) { if (states.contains(MaterialState.selected)) {
return const BorderSide(width: ${tokens['md.comp.checkbox.selected.outline.width']}, color: Colors.transparent); return const BorderSide(width: ${getToken('md.comp.checkbox.selected.outline.width')}, color: Colors.transparent);
} }
if (states.contains(MaterialState.error)) { if (states.contains(MaterialState.error)) {
return BorderSide(width: ${tokens['md.comp.checkbox.unselected.disabled.outline.width']}, color: ${componentColor('md.comp.checkbox.unselected.error.outline')}); return BorderSide(width: ${getToken('md.comp.checkbox.unselected.disabled.outline.width')}, color: ${componentColor('md.comp.checkbox.unselected.error.outline')});
} }
if (states.contains(MaterialState.pressed)) { if (states.contains(MaterialState.pressed)) {
return BorderSide(width: ${tokens['md.comp.checkbox.unselected.pressed.outline.width']}, color: ${componentColor('md.comp.checkbox.unselected.pressed.outline')}); return BorderSide(width: ${getToken('md.comp.checkbox.unselected.pressed.outline.width')}, color: ${componentColor('md.comp.checkbox.unselected.pressed.outline')});
} }
if (states.contains(MaterialState.hovered)) { if (states.contains(MaterialState.hovered)) {
return BorderSide(width: ${tokens['md.comp.checkbox.unselected.hover.outline.width']}, color: ${componentColor('md.comp.checkbox.unselected.hover.outline')}); return BorderSide(width: ${getToken('md.comp.checkbox.unselected.hover.outline.width')}, color: ${componentColor('md.comp.checkbox.unselected.hover.outline')});
} }
if (states.contains(MaterialState.focused)) { if (states.contains(MaterialState.focused)) {
return BorderSide(width: ${tokens['md.comp.checkbox.unselected.focus.outline.width']}, color: ${componentColor('md.comp.checkbox.unselected.focus.outline')}); return BorderSide(width: ${getToken('md.comp.checkbox.unselected.focus.outline.width')}, color: ${componentColor('md.comp.checkbox.unselected.focus.outline')});
} }
return BorderSide(width: ${tokens['md.comp.checkbox.unselected.outline.width']}, color: ${componentColor('md.comp.checkbox.unselected.outline')}); return BorderSide(width: ${getToken('md.comp.checkbox.unselected.outline.width')}, color: ${componentColor('md.comp.checkbox.unselected.outline')});
}); });
} }
...@@ -125,7 +125,7 @@ class _${blockName}DefaultsM3 extends CheckboxThemeData { ...@@ -125,7 +125,7 @@ class _${blockName}DefaultsM3 extends CheckboxThemeData {
} }
@override @override
double get splashRadius => ${tokens['md.comp.checkbox.state-layer.size']} / 2; double get splashRadius => ${getToken('md.comp.checkbox.state-layer.size')} / 2;
@override @override
MaterialTapTargetSize get materialTapTargetSize => _theme.materialTapTargetSize; MaterialTapTargetSize get materialTapTargetSize => _theme.materialTapTargetSize;
...@@ -135,7 +135,7 @@ class _${blockName}DefaultsM3 extends CheckboxThemeData { ...@@ -135,7 +135,7 @@ class _${blockName}DefaultsM3 extends CheckboxThemeData {
@override @override
OutlinedBorder get shape => const RoundedRectangleBorder( OutlinedBorder get shape => const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(${tokens['md.comp.checkbox.unselected.outline.width']})), borderRadius: BorderRadius.all(Radius.circular(${getToken('md.comp.checkbox.unselected.outline.width')})),
); );
} }
'''; ''';
......
...@@ -62,7 +62,7 @@ class _${blockName}DefaultsM3 extends ChipThemeData { ...@@ -62,7 +62,7 @@ class _${blockName}DefaultsM3 extends ChipThemeData {
color: isEnabled color: isEnabled
? ${color("$tokenGroup.with-icon.icon.color")} ? ${color("$tokenGroup.with-icon.icon.color")}
: ${color("$tokenGroup.with-icon.disabled.icon.color")}, : ${color("$tokenGroup.with-icon.disabled.icon.color")},
size: ${tokens["$tokenGroup.with-icon.icon.size"]}, size: ${getToken("$tokenGroup.with-icon.icon.size")},
); );
@override @override
......
...@@ -3,86 +3,97 @@ ...@@ -3,86 +3,97 @@
// found in the LICENSE file. // found in the LICENSE file.
import 'template.dart'; import 'template.dart';
import 'token_logger.dart';
class ColorSchemeTemplate extends TokenTemplate { class ColorSchemeTemplate extends TokenTemplate {
ColorSchemeTemplate(super.blockName, super.fileName, super.tokens); ColorSchemeTemplate(this._colorTokensLight, this._colorTokensDark, super.blockName, super.fileName, super.tokens);
// Map of light color scheme token data from tokens. // Map of light color scheme token data from tokens.
late Map<String, dynamic> colorTokensLight = tokens['colorsLight'] as Map<String, dynamic>; final Map<String, dynamic> _colorTokensLight;
// Map of dark color scheme token data from tokens. // Map of dark color scheme token data from tokens.
late Map<String, dynamic> colorTokensDark = tokens['colorsDark'] as Map<String, dynamic>; final Map<String, dynamic> _colorTokensDark;
dynamic light(String tokenName) {
tokenLogger.log(tokenName);
return getToken(_colorTokensLight[tokenName] as String);
}
dynamic dark(String tokenName) {
tokenLogger.log(tokenName);
return getToken(_colorTokensDark[tokenName] as String);
}
@override @override
String generate() => ''' String generate() => '''
const ColorScheme _colorSchemeLightM3 = ColorScheme( const ColorScheme _colorSchemeLightM3 = ColorScheme(
brightness: Brightness.light, brightness: Brightness.light,
primary: Color(${tokens[colorTokensLight['md.sys.color.primary']]}), primary: Color(${light('md.sys.color.primary')}),
onPrimary: Color(${tokens[colorTokensLight['md.sys.color.on-primary']]}), onPrimary: Color(${light('md.sys.color.on-primary')}),
primaryContainer: Color(${tokens[colorTokensLight['md.sys.color.primary-container']]}), primaryContainer: Color(${light('md.sys.color.primary-container')}),
onPrimaryContainer: Color(${tokens[colorTokensLight['md.sys.color.on-primary-container']]}), onPrimaryContainer: Color(${light('md.sys.color.on-primary-container')}),
secondary: Color(${tokens[colorTokensLight['md.sys.color.secondary']]}), secondary: Color(${light('md.sys.color.secondary')}),
onSecondary: Color(${tokens[colorTokensLight['md.sys.color.on-secondary']]}), onSecondary: Color(${light('md.sys.color.on-secondary')}),
secondaryContainer: Color(${tokens[colorTokensLight['md.sys.color.secondary-container']]}), secondaryContainer: Color(${light('md.sys.color.secondary-container')}),
onSecondaryContainer: Color(${tokens[colorTokensLight['md.sys.color.on-secondary-container']]}), onSecondaryContainer: Color(${light('md.sys.color.on-secondary-container')}),
tertiary: Color(${tokens[colorTokensLight['md.sys.color.tertiary']]}), tertiary: Color(${light('md.sys.color.tertiary')}),
onTertiary: Color(${tokens[colorTokensLight['md.sys.color.on-tertiary']]}), onTertiary: Color(${light('md.sys.color.on-tertiary')}),
tertiaryContainer: Color(${tokens[colorTokensLight['md.sys.color.tertiary-container']]}), tertiaryContainer: Color(${light('md.sys.color.tertiary-container')}),
onTertiaryContainer: Color(${tokens[colorTokensLight['md.sys.color.on-tertiary-container']]}), onTertiaryContainer: Color(${light('md.sys.color.on-tertiary-container')}),
error: Color(${tokens[colorTokensLight['md.sys.color.error']]}), error: Color(${light('md.sys.color.error')}),
onError: Color(${tokens[colorTokensLight['md.sys.color.on-error']]}), onError: Color(${light('md.sys.color.on-error')}),
errorContainer: Color(${tokens[colorTokensLight['md.sys.color.error-container']]}), errorContainer: Color(${light('md.sys.color.error-container')}),
onErrorContainer: Color(${tokens[colorTokensLight['md.sys.color.on-error-container']]}), onErrorContainer: Color(${light('md.sys.color.on-error-container')}),
background: Color(${tokens[colorTokensLight['md.sys.color.background']]}), background: Color(${light('md.sys.color.background')}),
onBackground: Color(${tokens[colorTokensLight['md.sys.color.on-background']]}), onBackground: Color(${light('md.sys.color.on-background')}),
surface: Color(${tokens[colorTokensLight['md.sys.color.surface']]}), surface: Color(${light('md.sys.color.surface')}),
onSurface: Color(${tokens[colorTokensLight['md.sys.color.on-surface']]}), onSurface: Color(${light('md.sys.color.on-surface')}),
surfaceVariant: Color(${tokens[colorTokensLight['md.sys.color.surface-variant']]}), surfaceVariant: Color(${light('md.sys.color.surface-variant')}),
onSurfaceVariant: Color(${tokens[colorTokensLight['md.sys.color.on-surface-variant']]}), onSurfaceVariant: Color(${light('md.sys.color.on-surface-variant')}),
outline: Color(${tokens[colorTokensLight['md.sys.color.outline']]}), outline: Color(${light('md.sys.color.outline')}),
outlineVariant: Color(${tokens[colorTokensLight['md.sys.color.outline-variant']]}), outlineVariant: Color(${light('md.sys.color.outline-variant')}),
shadow: Color(${tokens[colorTokensLight['md.sys.color.shadow']]}), shadow: Color(${light('md.sys.color.shadow')}),
scrim: Color(${tokens[colorTokensLight['md.sys.color.scrim']]}), scrim: Color(${light('md.sys.color.scrim')}),
inverseSurface: Color(${tokens[colorTokensLight['md.sys.color.inverse-surface']]}), inverseSurface: Color(${light('md.sys.color.inverse-surface')}),
onInverseSurface: Color(${tokens[colorTokensLight['md.sys.color.inverse-on-surface']]}), onInverseSurface: Color(${light('md.sys.color.inverse-on-surface')}),
inversePrimary: Color(${tokens[colorTokensLight['md.sys.color.inverse-primary']]}), inversePrimary: Color(${light('md.sys.color.inverse-primary')}),
// The surfaceTint color is set to the same color as the primary. // The surfaceTint color is set to the same color as the primary.
surfaceTint: Color(${tokens[colorTokensLight['md.sys.color.primary']]}), surfaceTint: Color(${light('md.sys.color.primary')}),
); );
const ColorScheme _colorSchemeDarkM3 = ColorScheme( const ColorScheme _colorSchemeDarkM3 = ColorScheme(
brightness: Brightness.dark, brightness: Brightness.dark,
primary: Color(${tokens[colorTokensDark['md.sys.color.primary']]}), primary: Color(${dark('md.sys.color.primary')}),
onPrimary: Color(${tokens[colorTokensDark['md.sys.color.on-primary']]}), onPrimary: Color(${dark('md.sys.color.on-primary')}),
primaryContainer: Color(${tokens[colorTokensDark['md.sys.color.primary-container']]}), primaryContainer: Color(${dark('md.sys.color.primary-container')}),
onPrimaryContainer: Color(${tokens[colorTokensDark['md.sys.color.on-primary-container']]}), onPrimaryContainer: Color(${dark('md.sys.color.on-primary-container')}),
secondary: Color(${tokens[colorTokensDark['md.sys.color.secondary']]}), secondary: Color(${dark('md.sys.color.secondary')}),
onSecondary: Color(${tokens[colorTokensDark['md.sys.color.on-secondary']]}), onSecondary: Color(${dark('md.sys.color.on-secondary')}),
secondaryContainer: Color(${tokens[colorTokensDark['md.sys.color.secondary-container']]}), secondaryContainer: Color(${dark('md.sys.color.secondary-container')}),
onSecondaryContainer: Color(${tokens[colorTokensDark['md.sys.color.on-secondary-container']]}), onSecondaryContainer: Color(${dark('md.sys.color.on-secondary-container')}),
tertiary: Color(${tokens[colorTokensDark['md.sys.color.tertiary']]}), tertiary: Color(${dark('md.sys.color.tertiary')}),
onTertiary: Color(${tokens[colorTokensDark['md.sys.color.on-tertiary']]}), onTertiary: Color(${dark('md.sys.color.on-tertiary')}),
tertiaryContainer: Color(${tokens[colorTokensDark['md.sys.color.tertiary-container']]}), tertiaryContainer: Color(${dark('md.sys.color.tertiary-container')}),
onTertiaryContainer: Color(${tokens[colorTokensDark['md.sys.color.on-tertiary-container']]}), onTertiaryContainer: Color(${dark('md.sys.color.on-tertiary-container')}),
error: Color(${tokens[colorTokensDark['md.sys.color.error']]}), error: Color(${dark('md.sys.color.error')}),
onError: Color(${tokens[colorTokensDark['md.sys.color.on-error']]}), onError: Color(${dark('md.sys.color.on-error')}),
errorContainer: Color(${tokens[colorTokensDark['md.sys.color.error-container']]}), errorContainer: Color(${dark('md.sys.color.error-container')}),
onErrorContainer: Color(${tokens[colorTokensDark['md.sys.color.on-error-container']]}), onErrorContainer: Color(${dark('md.sys.color.on-error-container')}),
background: Color(${tokens[colorTokensDark['md.sys.color.background']]}), background: Color(${dark('md.sys.color.background')}),
onBackground: Color(${tokens[colorTokensDark['md.sys.color.on-background']]}), onBackground: Color(${dark('md.sys.color.on-background')}),
surface: Color(${tokens[colorTokensDark['md.sys.color.surface']]}), surface: Color(${dark('md.sys.color.surface')}),
onSurface: Color(${tokens[colorTokensDark['md.sys.color.on-surface']]}), onSurface: Color(${dark('md.sys.color.on-surface')}),
surfaceVariant: Color(${tokens[colorTokensDark['md.sys.color.surface-variant']]}), surfaceVariant: Color(${dark('md.sys.color.surface-variant')}),
onSurfaceVariant: Color(${tokens[colorTokensDark['md.sys.color.on-surface-variant']]}), onSurfaceVariant: Color(${dark('md.sys.color.on-surface-variant')}),
outline: Color(${tokens[colorTokensDark['md.sys.color.outline']]}), outline: Color(${dark('md.sys.color.outline')}),
outlineVariant: Color(${tokens[colorTokensDark['md.sys.color.outline-variant']]}), outlineVariant: Color(${dark('md.sys.color.outline-variant')}),
shadow: Color(${tokens[colorTokensDark['md.sys.color.shadow']]}), shadow: Color(${dark('md.sys.color.shadow')}),
scrim: Color(${tokens[colorTokensDark['md.sys.color.scrim']]}), scrim: Color(${dark('md.sys.color.scrim')}),
inverseSurface: Color(${tokens[colorTokensDark['md.sys.color.inverse-surface']]}), inverseSurface: Color(${dark('md.sys.color.inverse-surface')}),
onInverseSurface: Color(${tokens[colorTokensDark['md.sys.color.inverse-on-surface']]}), onInverseSurface: Color(${dark('md.sys.color.inverse-on-surface')}),
inversePrimary: Color(${tokens[colorTokensDark['md.sys.color.inverse-primary']]}), inversePrimary: Color(${dark('md.sys.color.inverse-primary')}),
// The surfaceTint color is set to the same color as the primary. // The surfaceTint color is set to the same color as the primary.
surfaceTint: Color(${tokens[colorTokensDark['md.sys.color.primary']]}), surfaceTint: Color(${dark('md.sys.color.primary')}),
); );
'''; ''';
} }
...@@ -11,10 +11,10 @@ class DatePickerTemplate extends TokenTemplate { ...@@ -11,10 +11,10 @@ class DatePickerTemplate extends TokenTemplate {
}); });
String _layerOpacity(String layerToken) { String _layerOpacity(String layerToken) {
if (tokens.containsKey(layerToken)) { if (tokenAvailable(layerToken)) {
final String? layerValue = tokens[layerToken] as String?; final String layerValue = getToken(layerToken) as String;
if (tokens.containsKey(layerValue)) { if (tokenAvailable(layerValue)) {
final String? opacityValue = opacity(layerValue!); final String? opacityValue = opacity(layerValue);
if (opacityValue != null) { if (opacityValue != null) {
return '.withOpacity($opacityValue)'; return '.withOpacity($opacityValue)';
} }
......
...@@ -12,7 +12,7 @@ class DividerTemplate extends TokenTemplate { ...@@ -12,7 +12,7 @@ class DividerTemplate extends TokenTemplate {
class _${blockName}DefaultsM3 extends DividerThemeData { class _${blockName}DefaultsM3 extends DividerThemeData {
const _${blockName}DefaultsM3(this.context) : super( const _${blockName}DefaultsM3(this.context) : super(
space: 16, space: 16,
thickness: ${tokens["md.comp.divider.thickness"]}, thickness: ${getToken("md.comp.divider.thickness")},
indent: 0, indent: 0,
endIndent: 0, endIndent: 0,
); );
......
...@@ -21,19 +21,19 @@ class _${blockName}DefaultsM3 extends FloatingActionButtonThemeData { ...@@ -21,19 +21,19 @@ class _${blockName}DefaultsM3 extends FloatingActionButtonThemeData {
highlightElevation: ${elevation("md.comp.fab.primary.pressed.container")}, highlightElevation: ${elevation("md.comp.fab.primary.pressed.container")},
enableFeedback: true, enableFeedback: true,
sizeConstraints: const BoxConstraints.tightFor( sizeConstraints: const BoxConstraints.tightFor(
width: ${tokens["md.comp.fab.primary.container.width"]}, width: ${getToken("md.comp.fab.primary.container.width")},
height: ${tokens["md.comp.fab.primary.container.height"]}, height: ${getToken("md.comp.fab.primary.container.height")},
), ),
smallSizeConstraints: const BoxConstraints.tightFor( smallSizeConstraints: const BoxConstraints.tightFor(
width: ${tokens["md.comp.fab.primary.small.container.width"]}, width: ${getToken("md.comp.fab.primary.small.container.width")},
height: ${tokens["md.comp.fab.primary.small.container.height"]}, height: ${getToken("md.comp.fab.primary.small.container.height")},
), ),
largeSizeConstraints: const BoxConstraints.tightFor( largeSizeConstraints: const BoxConstraints.tightFor(
width: ${tokens["md.comp.fab.primary.large.container.width"]}, width: ${getToken("md.comp.fab.primary.large.container.width")},
height: ${tokens["md.comp.fab.primary.large.container.height"]}, height: ${getToken("md.comp.fab.primary.large.container.height")},
), ),
extendedSizeConstraints: const BoxConstraints.tightFor( extendedSizeConstraints: const BoxConstraints.tightFor(
height: ${tokens["md.comp.extended-fab.primary.container.height"]}, height: ${getToken("md.comp.extended-fab.primary.container.height")},
), ),
extendedIconLabelSpacing: 8.0, extendedIconLabelSpacing: 8.0,
); );
...@@ -69,10 +69,10 @@ class _${blockName}DefaultsM3 extends FloatingActionButtonThemeData { ...@@ -69,10 +69,10 @@ class _${blockName}DefaultsM3 extends FloatingActionButtonThemeData {
@override @override
double? get iconSize { double? get iconSize {
switch (type) { switch (type) {
case _FloatingActionButtonType.regular: return ${tokens["md.comp.fab.primary.icon.size"]}; case _FloatingActionButtonType.regular: return ${getToken("md.comp.fab.primary.icon.size")};
case _FloatingActionButtonType.small: return ${tokens["md.comp.fab.primary.small.icon.size"]}; case _FloatingActionButtonType.small: return ${getToken("md.comp.fab.primary.small.icon.size")};
case _FloatingActionButtonType.large: return ${tokens["md.comp.fab.primary.large.icon.size"]}; case _FloatingActionButtonType.large: return ${getToken("md.comp.fab.primary.large.icon.size")};
case _FloatingActionButtonType.extended: return ${tokens["md.comp.extended-fab.primary.icon.size"]}; case _FloatingActionButtonType.extended: return ${getToken("md.comp.extended-fab.primary.icon.size")};
} }
} }
......
...@@ -90,7 +90,7 @@ class _${blockName}DefaultsM3 extends ChipThemeData { ...@@ -90,7 +90,7 @@ class _${blockName}DefaultsM3 extends ChipThemeData {
color: isEnabled color: isEnabled
? ${color("$tokenGroup.with-icon.icon.color")} ? ${color("$tokenGroup.with-icon.icon.color")}
: ${color("$tokenGroup.with-leading-icon.disabled.leading-icon.color")}, : ${color("$tokenGroup.with-leading-icon.disabled.leading-icon.color")},
size: ${tokens["$tokenGroup.with-icon.icon.size"]}, size: ${getToken("$tokenGroup.with-icon.icon.size")},
); );
@override @override
......
...@@ -185,19 +185,19 @@ class IconButtonTemplate extends TokenTemplate { ...@@ -185,19 +185,19 @@ class IconButtonTemplate extends TokenTemplate {
} }
String _minimumSize() { String _minimumSize() {
if (tokens.containsKey('$tokenGroup.container.size')) { if (tokenAvailable('$tokenGroup.container.size')) {
return ''' return '''
const MaterialStatePropertyAll<Size>(Size(${tokens['$tokenGroup.container.size']}, ${tokens['$tokenGroup.container.size']}))'''; const MaterialStatePropertyAll<Size>(Size(${getToken('$tokenGroup.container.size')}, ${getToken('$tokenGroup.container.size')}))''';
} else { } else {
return ''' return '''
const MaterialStatePropertyAll<Size>(Size(${tokens['$tokenGroup.state-layer.size']}, ${tokens['$tokenGroup.state-layer.size']}))'''; const MaterialStatePropertyAll<Size>(Size(${getToken('$tokenGroup.state-layer.size')}, ${getToken('$tokenGroup.state-layer.size')}))''';
} }
} }
String _shape() { String _shape() {
if (tokens.containsKey('$tokenGroup.container.shape')) { if (tokenAvailable('$tokenGroup.container.shape')) {
return ''' return '''
const MaterialStatePropertyAll<OutlinedBorder>(${shape("$tokenGroup.container", "")})'''; const MaterialStatePropertyAll<OutlinedBorder>(${shape("$tokenGroup.container", "")})''';
...@@ -209,7 +209,7 @@ class IconButtonTemplate extends TokenTemplate { ...@@ -209,7 +209,7 @@ class IconButtonTemplate extends TokenTemplate {
} }
String _side() { String _side() {
if (tokens.containsKey('$tokenGroup.unselected.outline.color')) { if (tokenAvailable('$tokenGroup.unselected.outline.color')) {
return ''' return '''
MaterialStateProperty.resolveWith((Set<MaterialState> states) { MaterialStateProperty.resolveWith((Set<MaterialState> states) {
...@@ -227,7 +227,7 @@ class IconButtonTemplate extends TokenTemplate { ...@@ -227,7 +227,7 @@ class IconButtonTemplate extends TokenTemplate {
} }
String _elevationColor(String token) { String _elevationColor(String token) {
if (tokens.containsKey(token)) { if (tokenAvailable(token)) {
return 'MaterialStatePropertyAll<Color>(${color(token)})'; return 'MaterialStatePropertyAll<Color>(${color(token)})';
} else { } else {
return 'const MaterialStatePropertyAll<Color>(Colors.transparent)'; return 'const MaterialStatePropertyAll<Color>(Colors.transparent)';
...@@ -286,7 +286,7 @@ class _${blockName}DefaultsM3 extends ButtonStyle { ...@@ -286,7 +286,7 @@ class _${blockName}DefaultsM3 extends ButtonStyle {
@override @override
MaterialStateProperty<double>? get iconSize => MaterialStateProperty<double>? get iconSize =>
const MaterialStatePropertyAll<double>(${tokens["$tokenGroup.icon.size"]}); const MaterialStatePropertyAll<double>(${getToken("$tokenGroup.icon.size")});
@override @override
MaterialStateProperty<BorderSide?>? get side =>${_side()}; MaterialStateProperty<BorderSide?>? get side =>${_side()};
......
...@@ -67,7 +67,7 @@ class _${blockName}DefaultsM3 extends ChipThemeData { ...@@ -67,7 +67,7 @@ class _${blockName}DefaultsM3 extends ChipThemeData {
color: isEnabled color: isEnabled
? ${color("$tokenGroup.with-leading-icon.leading-icon.color")} ? ${color("$tokenGroup.with-leading-icon.leading-icon.color")}
: ${color("$tokenGroup.with-leading-icon.disabled.leading-icon.color")}, : ${color("$tokenGroup.with-leading-icon.disabled.leading-icon.color")},
size: ${tokens["$tokenGroup.with-leading-icon.leading-icon.size"]}, size: ${getToken("$tokenGroup.with-leading-icon.leading-icon.size")},
); );
@override @override
......
...@@ -215,10 +215,10 @@ class _${blockName}DefaultsM3 extends InputDecorationTheme { ...@@ -215,10 +215,10 @@ class _${blockName}DefaultsM3 extends InputDecorationTheme {
? componentColor(componentToken1) ? componentColor(componentToken1)
: componentColor(componentToken2); : componentColor(componentToken2);
final double width = ( final double width = (
tokens['$componentToken1.width'] ?? getToken('$componentToken1.width') ??
tokens['$componentToken1.height'] ?? getToken('$componentToken1.height') ??
tokens['$componentToken2.width'] ?? getToken('$componentToken2.width') ??
tokens['$componentToken2.height'] ?? getToken('$componentToken2.height') ??
1.0) as double; 1.0) as double;
return 'BorderSide(color: $borderColor${width != 1.0 ? ", width: $width" : ""})'; return 'BorderSide(color: $borderColor${width != 1.0 ? ", width: $width" : ""})';
} }
......
...@@ -15,7 +15,7 @@ class NavigationBarTemplate extends TokenTemplate { ...@@ -15,7 +15,7 @@ class NavigationBarTemplate extends TokenTemplate {
class _${blockName}DefaultsM3 extends NavigationBarThemeData { class _${blockName}DefaultsM3 extends NavigationBarThemeData {
_${blockName}DefaultsM3(this.context) _${blockName}DefaultsM3(this.context)
: super( : super(
height: ${tokens["md.comp.navigation-bar.container.height"]}, height: ${getToken("md.comp.navigation-bar.container.height")},
elevation: ${elevation("md.comp.navigation-bar.container")}, elevation: ${elevation("md.comp.navigation-bar.container")},
labelBehavior: NavigationDestinationLabelBehavior.alwaysShow, labelBehavior: NavigationDestinationLabelBehavior.alwaysShow,
); );
...@@ -33,7 +33,7 @@ class _${blockName}DefaultsM3 extends NavigationBarThemeData { ...@@ -33,7 +33,7 @@ class _${blockName}DefaultsM3 extends NavigationBarThemeData {
@override MaterialStateProperty<IconThemeData?>? get iconTheme { @override MaterialStateProperty<IconThemeData?>? get iconTheme {
return MaterialStateProperty.resolveWith((Set<MaterialState> states) { return MaterialStateProperty.resolveWith((Set<MaterialState> states) {
return IconThemeData( return IconThemeData(
size: ${tokens["md.comp.navigation-bar.icon.size"]}, size: ${getToken("md.comp.navigation-bar.icon.size")},
color: states.contains(MaterialState.selected) color: states.contains(MaterialState.selected)
? ${componentColor("md.comp.navigation-bar.active.icon")} ? ${componentColor("md.comp.navigation-bar.active.icon")}
: ${componentColor("md.comp.navigation-bar.inactive.icon")}, : ${componentColor("md.comp.navigation-bar.inactive.icon")},
......
...@@ -16,9 +16,9 @@ class _${blockName}DefaultsM3 extends NavigationDrawerThemeData { ...@@ -16,9 +16,9 @@ class _${blockName}DefaultsM3 extends NavigationDrawerThemeData {
_${blockName}DefaultsM3(this.context) _${blockName}DefaultsM3(this.context)
: super( : super(
elevation: ${elevation("md.comp.navigation-drawer.modal.container")}, elevation: ${elevation("md.comp.navigation-drawer.modal.container")},
tileHeight: ${tokens["md.comp.navigation-drawer.active-indicator.height"]}, tileHeight: ${getToken("md.comp.navigation-drawer.active-indicator.height")},
indicatorShape: ${shape("md.comp.navigation-drawer.active-indicator")}, indicatorShape: ${shape("md.comp.navigation-drawer.active-indicator")},
indicatorSize: const Size(${tokens["md.comp.navigation-drawer.active-indicator.width"]}, ${tokens["md.comp.navigation-drawer.active-indicator.height"]}), indicatorSize: const Size(${getToken("md.comp.navigation-drawer.active-indicator.width")}, ${getToken("md.comp.navigation-drawer.active-indicator.height")}),
); );
final BuildContext context; final BuildContext context;
...@@ -41,7 +41,7 @@ class _${blockName}DefaultsM3 extends NavigationDrawerThemeData { ...@@ -41,7 +41,7 @@ class _${blockName}DefaultsM3 extends NavigationDrawerThemeData {
MaterialStateProperty<IconThemeData?>? get iconTheme { MaterialStateProperty<IconThemeData?>? get iconTheme {
return MaterialStateProperty.resolveWith((Set<MaterialState> states) { return MaterialStateProperty.resolveWith((Set<MaterialState> states) {
return IconThemeData( return IconThemeData(
size: ${tokens["md.comp.navigation-drawer.icon.size"]}, size: ${getToken("md.comp.navigation-drawer.icon.size")},
color: states.contains(MaterialState.selected) color: states.contains(MaterialState.selected)
? ${componentColor("md.comp.navigation-drawer.active.icon.")} ? ${componentColor("md.comp.navigation-drawer.active.icon.")}
: ${componentColor("md.comp.navigation-drawer.inactive.icon")}, : ${componentColor("md.comp.navigation-drawer.inactive.icon")},
......
...@@ -19,7 +19,7 @@ class _${blockName}DefaultsM3 extends NavigationRailThemeData { ...@@ -19,7 +19,7 @@ class _${blockName}DefaultsM3 extends NavigationRailThemeData {
groupAlignment: -1, groupAlignment: -1,
labelType: NavigationRailLabelType.none, labelType: NavigationRailLabelType.none,
useIndicator: true, useIndicator: true,
minWidth: ${tokens["md.comp.navigation-rail.container.width"]}, minWidth: ${getToken('md.comp.navigation-rail.container.width')},
minExtendedWidth: 256, minExtendedWidth: 256,
); );
...@@ -39,14 +39,14 @@ class _${blockName}DefaultsM3 extends NavigationRailThemeData { ...@@ -39,14 +39,14 @@ class _${blockName}DefaultsM3 extends NavigationRailThemeData {
@override IconThemeData? get unselectedIconTheme { @override IconThemeData? get unselectedIconTheme {
return IconThemeData( return IconThemeData(
size: ${tokens["md.comp.navigation-rail.icon.size"]}, size: ${getToken("md.comp.navigation-rail.icon.size")},
color: ${componentColor("md.comp.navigation-rail.inactive.icon")}, color: ${componentColor("md.comp.navigation-rail.inactive.icon")},
); );
} }
@override IconThemeData? get selectedIconTheme { @override IconThemeData? get selectedIconTheme {
return IconThemeData( return IconThemeData(
size: ${tokens["md.comp.navigation-rail.icon.size"]}, size: ${getToken("md.comp.navigation-rail.icon.size")},
color: ${componentColor("md.comp.navigation-rail.active.icon")}, color: ${componentColor("md.comp.navigation-rail.active.icon")},
); );
} }
......
...@@ -34,7 +34,7 @@ class _Linear${blockName}DefaultsM3 extends ProgressIndicatorThemeData { ...@@ -34,7 +34,7 @@ class _Linear${blockName}DefaultsM3 extends ProgressIndicatorThemeData {
Color get linearTrackColor => ${componentColor('md.comp.linear-progress-indicator.track')}; Color get linearTrackColor => ${componentColor('md.comp.linear-progress-indicator.track')};
@override @override
double get linearMinHeight => ${tokens['md.comp.linear-progress-indicator.track.height']}; double get linearMinHeight => ${getToken('md.comp.linear-progress-indicator.track.height')};
} }
'''; ''';
} }
...@@ -70,7 +70,7 @@ class _SearchBarDefaultsM3 extends SearchBarThemeData { ...@@ -70,7 +70,7 @@ class _SearchBarDefaultsM3 extends SearchBarThemeData {
@override @override
BoxConstraints get constraints => BoxConstraints get constraints =>
const BoxConstraints(minWidth: 360.0, maxWidth: 800.0, minHeight: ${tokens['md.comp.search-bar.container.height']}); const BoxConstraints(minWidth: 360.0, maxWidth: 800.0, minHeight: ${getToken('md.comp.search-bar.container.height')});
} }
'''; ''';
} }
...@@ -20,7 +20,7 @@ class _${blockName}DefaultsM3 extends ${blockName}ThemeData { ...@@ -20,7 +20,7 @@ class _${blockName}DefaultsM3 extends ${blockName}ThemeData {
late final ColorScheme _colors = Theme.of(context).colorScheme; late final ColorScheme _colors = Theme.of(context).colorScheme;
late final TextTheme _textTheme = Theme.of(context).textTheme; late final TextTheme _textTheme = Theme.of(context).textTheme;
static double fullScreenBarHeight = ${tokens['md.comp.search-view.full-screen.header.container.height']}; static double fullScreenBarHeight = ${getToken('md.comp.search-view.full-screen.header.container.height')};
@override @override
Color? get backgroundColor => ${componentColor('md.comp.search-view.container')}; Color? get backgroundColor => ${componentColor('md.comp.search-view.container')};
......
...@@ -12,10 +12,10 @@ class SegmentedButtonTemplate extends TokenTemplate { ...@@ -12,10 +12,10 @@ class SegmentedButtonTemplate extends TokenTemplate {
final String tokenGroup; final String tokenGroup;
String _layerOpacity(String layerToken) { String _layerOpacity(String layerToken) {
if (tokens.containsKey(layerToken)) { if (tokenAvailable(layerToken)) {
final String? layerValue = tokens[layerToken] as String?; final String layerValue = getToken(layerToken) as String;
if (tokens.containsKey(layerValue)) { if (tokenAvailable(layerValue)) {
final String? opacityValue = opacity(layerValue!); final String? opacityValue = opacity(layerValue);
if (opacityValue != null) { if (opacityValue != null) {
return '.withOpacity($opacityValue)'; return '.withOpacity($opacityValue)';
} }
...@@ -106,7 +106,7 @@ class _${blockName}DefaultsM3 extends SegmentedButtonThemeData { ...@@ -106,7 +106,7 @@ class _${blockName}DefaultsM3 extends SegmentedButtonThemeData {
}), }),
surfaceTintColor: const MaterialStatePropertyAll<Color>(Colors.transparent), surfaceTintColor: const MaterialStatePropertyAll<Color>(Colors.transparent),
elevation: const MaterialStatePropertyAll<double>(0), elevation: const MaterialStatePropertyAll<double>(0),
iconSize: const MaterialStatePropertyAll<double?>(${tokens['$tokenGroup.with-icon.icon.size']}), iconSize: const MaterialStatePropertyAll<double?>(${getToken('$tokenGroup.with-icon.icon.size')}),
side: MaterialStateProperty.resolveWith((Set<MaterialState> states) { side: MaterialStateProperty.resolveWith((Set<MaterialState> states) {
if (states.contains(MaterialState.disabled)) { if (states.contains(MaterialState.disabled)) {
return ${border("$tokenGroup.disabled.outline")}; return ${border("$tokenGroup.disabled.outline")};
...@@ -114,7 +114,7 @@ class _${blockName}DefaultsM3 extends SegmentedButtonThemeData { ...@@ -114,7 +114,7 @@ class _${blockName}DefaultsM3 extends SegmentedButtonThemeData {
return ${border("$tokenGroup.outline")}; return ${border("$tokenGroup.outline")};
}), }),
shape: const MaterialStatePropertyAll<OutlinedBorder>(${shape(tokenGroup, '')}), shape: const MaterialStatePropertyAll<OutlinedBorder>(${shape(tokenGroup, '')}),
minimumSize: const MaterialStatePropertyAll<Size?>(Size.fromHeight(${tokens['$tokenGroup.container.height']})), minimumSize: const MaterialStatePropertyAll<Size?>(Size.fromHeight(${getToken('$tokenGroup.container.height')})),
); );
} }
@override @override
......
...@@ -15,7 +15,7 @@ class SliderTemplate extends TokenTemplate { ...@@ -15,7 +15,7 @@ class SliderTemplate extends TokenTemplate {
String generate() => ''' String generate() => '''
class _${blockName}DefaultsM3 extends SliderThemeData { class _${blockName}DefaultsM3 extends SliderThemeData {
_${blockName}DefaultsM3(this.context) _${blockName}DefaultsM3(this.context)
: super(trackHeight: ${tokens['$tokenGroup.active.track.height']}); : super(trackHeight: ${getToken('$tokenGroup.active.track.height')});
final BuildContext context; final BuildContext context;
late final ColorScheme _colors = Theme.of(context).colorScheme; late final ColorScheme _colors = Theme.of(context).colorScheme;
......
...@@ -14,12 +14,12 @@ class SurfaceTintTemplate extends TokenTemplate { ...@@ -14,12 +14,12 @@ class SurfaceTintTemplate extends TokenTemplate {
// https://m3.material.io/styles/color/the-color-system/color-roles // https://m3.material.io/styles/color/the-color-system/color-roles
// Ordered by increasing elevation. // Ordered by increasing elevation.
const List<_ElevationOpacity> _surfaceTintElevationOpacities = <_ElevationOpacity>[ const List<_ElevationOpacity> _surfaceTintElevationOpacities = <_ElevationOpacity>[
_ElevationOpacity(${tokens['md.sys.elevation.level0']}, 0.0), // Elevation level 0 _ElevationOpacity(${getToken('md.sys.elevation.level0')}, 0.0), // Elevation level 0
_ElevationOpacity(${tokens['md.sys.elevation.level1']}, 0.05), // Elevation level 1 _ElevationOpacity(${getToken('md.sys.elevation.level1')}, 0.05), // Elevation level 1
_ElevationOpacity(${tokens['md.sys.elevation.level2']}, 0.08), // Elevation level 2 _ElevationOpacity(${getToken('md.sys.elevation.level2')}, 0.08), // Elevation level 2
_ElevationOpacity(${tokens['md.sys.elevation.level3']}, 0.11), // Elevation level 3 _ElevationOpacity(${getToken('md.sys.elevation.level3')}, 0.11), // Elevation level 3
_ElevationOpacity(${tokens['md.sys.elevation.level4']}, 0.12), // Elevation level 4 _ElevationOpacity(${getToken('md.sys.elevation.level4')}, 0.12), // Elevation level 4
_ElevationOpacity(${tokens['md.sys.elevation.level5']}, 0.14), // Elevation level 5 _ElevationOpacity(${getToken('md.sys.elevation.level5')}, 0.14), // Elevation level 5
]; ];
'''; ''';
} }
...@@ -127,10 +127,10 @@ class _${blockName}DefaultsM3 extends SwitchThemeData { ...@@ -127,10 +127,10 @@ class _${blockName}DefaultsM3 extends SwitchThemeData {
} }
@override @override
MaterialStatePropertyAll<double> get trackOutlineWidth => const MaterialStatePropertyAll<double>(${tokens['md.comp.switch.track.outline.width']}); MaterialStatePropertyAll<double> get trackOutlineWidth => const MaterialStatePropertyAll<double>(${getToken('md.comp.switch.track.outline.width')});
@override @override
double get splashRadius => ${tokens['md.comp.switch.state-layer.size']} / 2; double get splashRadius => ${getToken('md.comp.switch.state-layer.size')} / 2;
} }
class _SwitchConfigM3 with _SwitchConfig { class _SwitchConfigM3 with _SwitchConfig {
...@@ -140,10 +140,10 @@ class _SwitchConfigM3 with _SwitchConfig { ...@@ -140,10 +140,10 @@ class _SwitchConfigM3 with _SwitchConfig {
BuildContext context; BuildContext context;
final ColorScheme _colors; final ColorScheme _colors;
static const double iconSize = ${tokens['md.comp.switch.unselected.icon.size']}; static const double iconSize = ${getToken('md.comp.switch.unselected.icon.size')};
@override @override
double get activeThumbRadius => ${tokens['md.comp.switch.selected.handle.width']} / 2; double get activeThumbRadius => ${getToken('md.comp.switch.selected.handle.width')} / 2;
@override @override
MaterialStateProperty<Color> get iconColor { MaterialStateProperty<Color> get iconColor {
...@@ -180,10 +180,10 @@ class _SwitchConfigM3 with _SwitchConfig { ...@@ -180,10 +180,10 @@ class _SwitchConfigM3 with _SwitchConfig {
} }
@override @override
double get inactiveThumbRadius => ${tokens['md.comp.switch.unselected.handle.width']} / 2; double get inactiveThumbRadius => ${getToken('md.comp.switch.unselected.handle.width')} / 2;
@override @override
double get pressedThumbRadius => ${tokens['md.comp.switch.pressed.handle.width']} / 2; double get pressedThumbRadius => ${getToken('md.comp.switch.pressed.handle.width')} / 2;
@override @override
double get switchHeight => _kSwitchMinSize + 8.0; double get switchHeight => _kSwitchMinSize + 8.0;
...@@ -195,16 +195,16 @@ class _SwitchConfigM3 with _SwitchConfig { ...@@ -195,16 +195,16 @@ class _SwitchConfigM3 with _SwitchConfig {
double get switchWidth => trackWidth - 2 * (trackHeight / 2.0) + _kSwitchMinSize; double get switchWidth => trackWidth - 2 * (trackHeight / 2.0) + _kSwitchMinSize;
@override @override
double get thumbRadiusWithIcon => ${tokens['md.comp.switch.with-icon.handle.width']} / 2; double get thumbRadiusWithIcon => ${getToken('md.comp.switch.with-icon.handle.width')} / 2;
@override @override
List<BoxShadow>? get thumbShadow => kElevationToShadow[0]; List<BoxShadow>? get thumbShadow => kElevationToShadow[0];
@override @override
double get trackHeight => ${tokens['md.comp.switch.track.height']}; double get trackHeight => ${getToken('md.comp.switch.track.height')};
@override @override
double get trackWidth => ${tokens['md.comp.switch.track.width']}; double get trackWidth => ${getToken('md.comp.switch.track.width')};
// The thumb size at the middle of the track. Hand coded default based on the animation specs. // The thumb size at the middle of the track. Hand coded default based on the animation specs.
@override @override
......
...@@ -73,7 +73,7 @@ class _${blockName}PrimaryDefaultsM3 extends TabBarTheme { ...@@ -73,7 +73,7 @@ class _${blockName}PrimaryDefaultsM3 extends TabBarTheme {
@override @override
TabAlignment? get tabAlignment => isScrollable ? TabAlignment.start : TabAlignment.fill; TabAlignment? get tabAlignment => isScrollable ? TabAlignment.start : TabAlignment.fill;
static double indicatorWeight = ${tokens['md.comp.primary-navigation-tab.active-indicator.height']}; static double indicatorWeight = ${getToken('md.comp.primary-navigation-tab.active-indicator.height')};
} }
class _${blockName}SecondaryDefaultsM3 extends TabBarTheme { class _${blockName}SecondaryDefaultsM3 extends TabBarTheme {
......
...@@ -4,8 +4,11 @@ ...@@ -4,8 +4,11 @@
import 'dart:io'; import 'dart:io';
import 'token_logger.dart';
/// Base class for code generation templates.
abstract class TokenTemplate { abstract class TokenTemplate {
const TokenTemplate(this.blockName, this.fileName, this.tokens, { const TokenTemplate(this.blockName, this.fileName, this._tokens, {
this.colorSchemePrefix = 'Theme.of(context).colorScheme.', this.colorSchemePrefix = 'Theme.of(context).colorScheme.',
this.textThemePrefix = 'Theme.of(context).textTheme.' this.textThemePrefix = 'Theme.of(context).textTheme.'
}); });
...@@ -19,7 +22,7 @@ abstract class TokenTemplate { ...@@ -19,7 +22,7 @@ abstract class TokenTemplate {
final String fileName; final String fileName;
/// Map of token data extracted from the Material Design token database. /// Map of token data extracted from the Material Design token database.
final Map<String, dynamic> tokens; final Map<String, dynamic> _tokens;
/// Optional prefix prepended to color definitions. /// Optional prefix prepended to color definitions.
/// ///
...@@ -31,6 +34,15 @@ abstract class TokenTemplate { ...@@ -31,6 +34,15 @@ abstract class TokenTemplate {
/// Defaults to 'Theme.of(context).textTheme.' /// Defaults to 'Theme.of(context).textTheme.'
final String textThemePrefix; final String textThemePrefix;
/// Check if a token is available.
bool tokenAvailable(String tokenName) => _tokens.containsKey(tokenName);
/// Resolve a token while logging its usage.
dynamic getToken(String tokenName) {
tokenLogger.log(tokenName);
return _tokens[tokenName];
}
static const String beginGeneratedComment = ''' static const String beginGeneratedComment = '''
// BEGIN GENERATED TOKEN PROPERTIES'''; // BEGIN GENERATED TOKEN PROPERTIES''';
...@@ -78,7 +90,6 @@ abstract class TokenTemplate { ...@@ -78,7 +90,6 @@ abstract class TokenTemplate {
final StringBuffer buffer = StringBuffer(contentBeforeBlock); final StringBuffer buffer = StringBuffer(contentBeforeBlock);
buffer.write(beginComment); buffer.write(beginComment);
buffer.write(headerComment); buffer.write(headerComment);
buffer.write('// Token database version: ${tokens['version']}\n\n');
buffer.write(generate()); buffer.write(generate());
buffer.write(endComment); buffer.write(endComment);
buffer.write(contentAfterBlock); buffer.write(contentAfterBlock);
...@@ -102,8 +113,8 @@ abstract class TokenTemplate { ...@@ -102,8 +113,8 @@ abstract class TokenTemplate {
/// See also: /// See also:
/// * [componentColor], that provides support for an optional opacity. /// * [componentColor], that provides support for an optional opacity.
String color(String colorToken, [String defaultValue = 'null']) { String color(String colorToken, [String defaultValue = 'null']) {
return tokens.containsKey(colorToken) return tokenAvailable(colorToken)
? '$colorSchemePrefix${tokens[colorToken]}' ? '$colorSchemePrefix${getToken(colorToken)}'
: defaultValue; : defaultValue;
} }
...@@ -133,19 +144,22 @@ abstract class TokenTemplate { ...@@ -133,19 +144,22 @@ abstract class TokenTemplate {
/// * [color], that provides support for looking up a raw color token. /// * [color], that provides support for looking up a raw color token.
String componentColor(String componentToken) { String componentColor(String componentToken) {
final String colorToken = '$componentToken.color'; final String colorToken = '$componentToken.color';
if (!tokens.containsKey(colorToken)) { if (!tokenAvailable(colorToken)) {
return 'null'; return 'null';
} }
String value = color(colorToken); String value = color(colorToken);
final String opacityToken = '$componentToken.opacity'; final String opacityToken = '$componentToken.opacity';
if (tokens.containsKey(opacityToken)) { if (tokenAvailable(opacityToken)) {
value += '.withOpacity(${opacity(opacityToken)})'; value += '.withOpacity(${opacity(opacityToken)})';
} }
return value; return value;
} }
/// Generate the opacity value for the given token. /// Generate the opacity value for the given token.
String? opacity(String token) => _numToString(tokens[token]); String? opacity(String token) {
tokenLogger.log(token);
return _numToString(getToken(token));
}
String? _numToString(Object? value, [int? digits]) { String? _numToString(Object? value, [int? digits]) {
if (value == null) { if (value == null) {
...@@ -157,12 +171,12 @@ abstract class TokenTemplate { ...@@ -157,12 +171,12 @@ abstract class TokenTemplate {
} }
return digits == null ? value.toString() : value.toStringAsFixed(digits); return digits == null ? value.toString() : value.toStringAsFixed(digits);
} }
return tokens[value].toString(); return getToken(value as String).toString();
} }
/// Generate an elevation value for the given component token. /// Generate an elevation value for the given component token.
String elevation(String componentToken) { String elevation(String componentToken) {
return tokens[tokens['$componentToken.elevation']!]!.toString(); return getToken(getToken('$componentToken.elevation')! as String)!.toString();
} }
/// Generate a size value for the given component token. /// Generate a size value for the given component token.
...@@ -170,17 +184,17 @@ abstract class TokenTemplate { ...@@ -170,17 +184,17 @@ abstract class TokenTemplate {
/// Non-square sizes are specified as width and height. /// Non-square sizes are specified as width and height.
String size(String componentToken) { String size(String componentToken) {
final String sizeToken = '$componentToken.size'; final String sizeToken = '$componentToken.size';
if (!tokens.containsKey(sizeToken)) { if (!tokenAvailable(sizeToken)) {
final String widthToken = '$componentToken.width'; final String widthToken = '$componentToken.width';
final String heightToken = '$componentToken.height'; final String heightToken = '$componentToken.height';
if (!tokens.containsKey(widthToken) && !tokens.containsKey(heightToken)) { if (!tokenAvailable(widthToken) && !tokenAvailable(heightToken)) {
throw Exception('Unable to find width, height, or size tokens for $componentToken'); throw Exception('Unable to find width, height, or size tokens for $componentToken');
} }
final String? width = _numToString(tokens.containsKey(widthToken) ? tokens[widthToken]! as num : double.infinity, 0); final String? width = _numToString(tokenAvailable(widthToken) ? getToken(widthToken)! as num : double.infinity, 0);
final String? height = _numToString(tokens.containsKey(heightToken) ? tokens[heightToken]! as num : double.infinity, 0); final String? height = _numToString(tokenAvailable(heightToken) ? getToken(heightToken)! as num : double.infinity, 0);
return 'const Size($width, $height)'; return 'const Size($width, $height)';
} }
return 'const Size.square(${_numToString(tokens[sizeToken])})'; return 'const Size.square(${_numToString(getToken(sizeToken))})';
} }
/// Generate a shape constant for the given component token. /// Generate a shape constant for the given component token.
...@@ -189,7 +203,8 @@ abstract class TokenTemplate { ...@@ -189,7 +203,8 @@ abstract class TokenTemplate {
/// - "SHAPE_FAMILY_ROUNDED_CORNERS" which maps to [RoundedRectangleBorder]. /// - "SHAPE_FAMILY_ROUNDED_CORNERS" which maps to [RoundedRectangleBorder].
/// - "SHAPE_FAMILY_CIRCULAR" which maps to a [StadiumBorder]. /// - "SHAPE_FAMILY_CIRCULAR" which maps to a [StadiumBorder].
String shape(String componentToken, [String prefix = 'const ']) { String shape(String componentToken, [String prefix = 'const ']) {
final Map<String, dynamic> shape = tokens[tokens['$componentToken.shape']!]! as Map<String, dynamic>;
final Map<String, dynamic> shape = getToken(getToken('$componentToken.shape') as String) as Map<String, dynamic>;
switch (shape['family']) { switch (shape['family']) {
case 'SHAPE_FAMILY_ROUNDED_CORNERS': case 'SHAPE_FAMILY_ROUNDED_CORNERS':
final double topLeft = shape['topLeft'] as double; final double topLeft = shape['topLeft'] as double;
...@@ -224,25 +239,28 @@ abstract class TokenTemplate { ...@@ -224,25 +239,28 @@ abstract class TokenTemplate {
/// Generate a [BorderSide] for the given component. /// Generate a [BorderSide] for the given component.
String border(String componentToken) { String border(String componentToken) {
if (!tokens.containsKey('$componentToken.color')) {
if (!tokenAvailable('$componentToken.color')) {
return 'null'; return 'null';
} }
final String borderColor = componentColor(componentToken); final String borderColor = componentColor(componentToken);
final double width = (tokens['$componentToken.width'] ?? tokens['$componentToken.height'] ?? 1.0) as double; final double width = (getToken('$componentToken.width') ?? getToken('$componentToken.height') ?? 1.0) as double;
return 'BorderSide(color: $borderColor${width != 1.0 ? ", width: $width" : ""})'; return 'BorderSide(color: $borderColor${width != 1.0 ? ", width: $width" : ""})';
} }
/// Generate a [TextTheme] text style name for the given component token. /// Generate a [TextTheme] text style name for the given component token.
String textStyle(String componentToken) { String textStyle(String componentToken) {
return '$textThemePrefix${tokens["$componentToken.text-style"]}';
return '$textThemePrefix${getToken("$componentToken.text-style")}';
} }
String textStyleWithColor(String componentToken) { String textStyleWithColor(String componentToken) {
if (!tokens.containsKey('$componentToken.text-style')) {
if (!tokenAvailable('$componentToken.text-style')) {
return 'null'; return 'null';
} }
String style = textStyle(componentToken); String style = textStyle(componentToken);
if (tokens.containsKey('$componentToken.color')) { if (tokenAvailable('$componentToken.color')) {
style = '$style?.copyWith(color: ${componentColor(componentToken)})'; style = '$style?.copyWith(color: ${componentColor(componentToken)})';
} }
return style; return style;
......
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:collection';
import 'dart:io';
final TokenLogger tokenLogger = TokenLogger();
/// Class to keep track of used tokens and versions.
class TokenLogger {
TokenLogger();
void init({
required Map<String, dynamic> allTokens,
required Map<String, List<String>> versionMap
}){
_allTokens = allTokens;
_versionMap = versionMap;
}
/// Map of all tokens to their values.
late Map<String, dynamic> _allTokens;
// Map of versions to their token files.
late Map<String, List<String>> _versionMap;
// Sorted set of used tokens.
final SplayTreeSet<String> _usedTokens = SplayTreeSet<String>();
void clear() {
_allTokens.clear();
_versionMap.clear();
_usedTokens.clear();
}
/// Logs a token.
void log(String token) {
if (!_allTokens.containsKey(token)) {
print('\x1B[31m' 'Token unavailable: $token' '\x1B[0m');
return;
}
_usedTokens.add(token);
}
/// Prints version usage to the console.
void printVersionUsage({required bool verbose}) {
final String versionsString = 'Versions used: ${_versionMap.keys.join(', ')}';
print(versionsString);
if (verbose) {
for (final String version in _versionMap.keys) {
print(' $version:');
final List<String> files = List<String>.from(_versionMap[version]!);
files.sort();
for (final String file in files) {
print(' $file');
}
}
print('');
}
}
/// Prints tokens usage to the console.
void printTokensUsage({required bool verbose}) {
final Set<String> allTokensSet = _allTokens.keys.toSet();
if (verbose) {
for (final String token in SplayTreeSet<String>.from(allTokensSet).toList()) {
if (_usedTokens.contains(token)) {
print('✅ $token');
} else {
print('❌ $token');
}
}
print('');
}
print('Tokens used: ${_usedTokens.length}/${_allTokens.length}');
}
/// Dumps version and tokens usage to a file.
void dumpToFile(String path) {
final File file = File(path);
file.createSync(recursive: true);
final String versionsString = 'Versions used, ${_versionMap.keys.join(', ')}';
file.writeAsStringSync('$versionsString\n${_usedTokens.join(',\n')}\n');
}
}
...@@ -41,13 +41,13 @@ class _M3Typography { ...@@ -41,13 +41,13 @@ class _M3Typography {
return theme.toString(); return theme.toString();
} }
String _textStyleDef(String tokenName, String debugLabel, String baseline) { String _textStyleDef(String tokenPrefix, String debugLabel, String baseline) {
final StringBuffer style = StringBuffer("TextStyle(debugLabel: '$debugLabel'"); final StringBuffer style = StringBuffer("TextStyle(debugLabel: '$debugLabel'");
style.write(', inherit: false'); style.write(', inherit: false');
style.write(', fontSize: ${_fontSize(tokenName)}'); style.write(', fontSize: ${_fontSize(tokenPrefix)}');
style.write(', fontWeight: ${_fontWeight(tokenName)}'); style.write(', fontWeight: ${_fontWeight(tokenPrefix)}');
style.write(', letterSpacing: ${_fontSpacing(tokenName)}'); style.write(', letterSpacing: ${_fontSpacing(tokenPrefix)}');
style.write(', height: ${_fontHeight(tokenName)}'); style.write(', height: ${_fontHeight(tokenPrefix)}');
style.write(', textBaseline: TextBaseline.$baseline'); style.write(', textBaseline: TextBaseline.$baseline');
style.write(', leadingDistribution: TextLeadingDistribution.even'); style.write(', leadingDistribution: TextLeadingDistribution.even');
style.write(')'); style.write(')');
...@@ -55,21 +55,21 @@ class _M3Typography { ...@@ -55,21 +55,21 @@ class _M3Typography {
} }
String _fontSize(String textStyleTokenName) { String _fontSize(String textStyleTokenName) {
return tokens['$textStyleTokenName.size']!.toString(); return getToken('$textStyleTokenName.size').toString();
} }
String _fontWeight(String textStyleTokenName) { String _fontWeight(String textStyleTokenName) {
final String weightValue = tokens[tokens['$textStyleTokenName.weight']!]!.toString(); final String weightValue = getToken(getToken('$textStyleTokenName.weight') as String).toString();
return 'FontWeight.w$weightValue'; return 'FontWeight.w$weightValue';
} }
String _fontSpacing(String textStyleTokenName) { String _fontSpacing(String textStyleTokenName) {
return tokens['$textStyleTokenName.tracking']!.toString(); return getToken('$textStyleTokenName.tracking').toString();
} }
String _fontHeight(String textStyleTokenName) { String _fontHeight(String textStyleTokenName) {
final double size = tokens['$textStyleTokenName.size']! as double; final double size = getToken('$textStyleTokenName.size') as double;
final double lineHeight = tokens['$textStyleTokenName.line-height']! as double; final double lineHeight = getToken('$textStyleTokenName.line-height') as double;
return (lineHeight / size).toStringAsFixed(2); return (lineHeight / size).toStringAsFixed(2);
} }
} }
...@@ -6,6 +6,7 @@ environment: ...@@ -6,6 +6,7 @@ environment:
sdk: '>=3.0.0-0 <4.0.0' sdk: '>=3.0.0-0 <4.0.0'
dependencies: dependencies:
args: 2.4.2
dev_dependencies: dev_dependencies:
path: 1.8.3 path: 1.8.3
...@@ -13,7 +14,6 @@ dev_dependencies: ...@@ -13,7 +14,6 @@ dev_dependencies:
_fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" _fe_analyzer_shared: 61.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" analyzer: 5.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 2.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.17.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
......
Versions used, v1.0.0, v2.0.0
bar,
foo
...@@ -2,13 +2,18 @@ ...@@ -2,13 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:gen_defaults/template.dart'; import 'package:gen_defaults/template.dart';
import 'package:gen_defaults/token_logger.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:test/test.dart'; import 'package:test/test.dart';
void main() { void main() {
final TokenLogger logger = tokenLogger;
logger.init(allTokens: <String, dynamic>{}, versionMap: <String, List<String>>{});
test('Templates will append to the end of a file', () { test('Templates will append to the end of a file', () {
final Directory tempDir = Directory.systemTemp.createTempSync('gen_defaults'); final Directory tempDir = Directory.systemTemp.createTempSync('gen_defaults');
try { try {
...@@ -38,8 +43,6 @@ void main() { ...@@ -38,8 +43,6 @@ void main() {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: 0.0
static final String tokenFoo = 'Foobar'; static final String tokenFoo = 'Foobar';
static final String tokenBar = 'Barfoo'; static final String tokenBar = 'Barfoo';
...@@ -69,8 +72,6 @@ static final String tokenBar = 'Barfoo'; ...@@ -69,8 +72,6 @@ static final String tokenBar = 'Barfoo';
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: 0.0
static final String tokenFoo = 'Foobar'; static final String tokenFoo = 'Foobar';
static final String tokenBar = 'Barfoo'; static final String tokenBar = 'Barfoo';
...@@ -94,8 +95,6 @@ static final String tokenBar = 'Barfoo'; ...@@ -94,8 +95,6 @@ static final String tokenBar = 'Barfoo';
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: 0.0
static final String tokenFoo = 'foo'; static final String tokenFoo = 'foo';
static final String tokenBar = 'bar'; static final String tokenBar = 'bar';
...@@ -136,8 +135,6 @@ static final String tokenBar = 'bar'; ...@@ -136,8 +135,6 @@ static final String tokenBar = 'bar';
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: 0.0
static final String tokenFoo = 'foo'; static final String tokenFoo = 'foo';
static final String tokenBar = 'bar'; static final String tokenBar = 'bar';
...@@ -162,8 +159,6 @@ static final String tokenBar = 'bar'; ...@@ -162,8 +159,6 @@ static final String tokenBar = 'bar';
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: 0.0
static final String tokenFoo = 'foo'; static final String tokenFoo = 'foo';
static final String tokenBar = 'bar'; static final String tokenBar = 'bar';
...@@ -176,8 +171,6 @@ static final String tokenBar = 'bar'; ...@@ -176,8 +171,6 @@ static final String tokenBar = 'bar';
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: 0.0
static final String tokenFoo = 'bar'; static final String tokenFoo = 'bar';
static final String tokenBar = 'foo'; static final String tokenBar = 'foo';
...@@ -202,8 +195,6 @@ static final String tokenBar = 'foo'; ...@@ -202,8 +195,6 @@ static final String tokenBar = 'foo';
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: 0.0
static final String tokenFoo = 'FOO'; static final String tokenFoo = 'FOO';
static final String tokenBar = 'BAR'; static final String tokenBar = 'BAR';
...@@ -216,8 +207,6 @@ static final String tokenBar = 'BAR'; ...@@ -216,8 +207,6 @@ static final String tokenBar = 'BAR';
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: 0.0
static final String tokenFoo = 'bar'; static final String tokenFoo = 'bar';
static final String tokenBar = 'foo'; static final String tokenBar = 'foo';
...@@ -248,6 +237,127 @@ static final String tokenBar = 'foo'; ...@@ -248,6 +237,127 @@ static final String tokenBar = 'foo';
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('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()'); expect(template.shape('bar'), 'const StadiumBorder()');
}); });
group('Tokens logger', () {
final List<String> printLog = List<String>.empty(growable: true);
final Map<String, List<String>> versionMap = <String, List<String>>{};
final Map<String, dynamic> allTokens = <String, dynamic>{};
// Add to printLog instead of printing to stdout
void Function() overridePrint(void Function() testFn) => () {
final ZoneSpecification spec = ZoneSpecification(
print: (_, __, ___, String msg) {
printLog.add(msg);
}
);
return Zone.current.fork(specification: spec).run<void>(testFn);
};
setUp(() {
logger.init(allTokens: allTokens, versionMap: versionMap);
});
tearDown(() {
logger.clear();
printLog.clear();
versionMap.clear();
allTokens.clear();
});
String errorColoredString(String str) => '\x1B[31m$str\x1B[0m';
const Map<String, List<String>> testVersions = <String, List<String>>{
'v1.0.0': <String>['file_1.json'],
'v2.0.0': <String>['file_2.json, file_3.json'],
};
test('can print empty usage', overridePrint(() {
logger.printVersionUsage(verbose: true);
expect(printLog, contains('Versions used: '));
logger.printTokensUsage(verbose: true);
expect(printLog, contains('Tokens used: 0/0'));
}));
test('can print version usage', overridePrint(() {
versionMap.addAll(testVersions);
logger.printVersionUsage(verbose: false);
expect(printLog, contains('Versions used: v1.0.0, v2.0.0'));
}));
test('can print version usage (verbose)', overridePrint(() {
versionMap.addAll(testVersions);
logger.printVersionUsage(verbose: true);
expect(printLog, contains('Versions used: v1.0.0, v2.0.0'));
expect(printLog, contains(' v1.0.0:'));
expect(printLog, contains(' file_1.json'));
expect(printLog, contains(' v2.0.0:'));
expect(printLog, contains(' file_2.json, file_3.json'));
}));
test('can log and print tokens usage', overridePrint(() {
allTokens['foo'] = 'value';
logger.log('foo');
logger.printTokensUsage(verbose: false);
expect(printLog, contains('Tokens used: 1/1'));
}));
test('can log and print tokens usage (verbose)', overridePrint(() {
allTokens['foo'] = 'value';
logger.log('foo');
logger.printTokensUsage(verbose: true);
expect(printLog, contains(' foo'));
expect(printLog, contains('Tokens used: 1/1'));
}));
test('detects invalid logs', overridePrint(() {
allTokens['foo'] = 'value';
logger.log('baz');
logger.log('foobar');
logger.printTokensUsage(verbose: true);
expect(printLog, contains(errorColoredString('Token unavailable: baz')));
expect(printLog, contains(errorColoredString('Token unavailable: foobar')));
expect(printLog, contains(' foo'));
expect(printLog, contains('Tokens used: 0/1'));
}));
test('can log and dump versions & tokens to a file', overridePrint(() {
versionMap.addAll(testVersions);
allTokens['foo'] = 'value';
allTokens['bar'] = 'value';
logger.log('foo');
logger.log('bar');
logger.dumpToFile('test.json');
final String fileContent = File('test.json').readAsStringSync();
expect(fileContent, contains('Versions used, v1.0.0, v2.0.0'));
expect(fileContent, contains('bar,'));
expect(fileContent, contains('foo'));
}));
test('integration test', overridePrint(() {
allTokens['foo'] = 'value';
allTokens['bar'] = 'value';
TestTemplate('block', 'filename', allTokens).generate();
logger.printTokensUsage(verbose: true);
expect(printLog, contains(' foo'));
expect(printLog, contains(' bar'));
expect(printLog, contains('Tokens used: 2/2'));
}));
});
} }
class TestTemplate extends TokenTemplate { class TestTemplate extends TokenTemplate {
...@@ -255,7 +365,7 @@ class TestTemplate extends TokenTemplate { ...@@ -255,7 +365,7 @@ class TestTemplate extends TokenTemplate {
@override @override
String generate() => ''' String generate() => '''
static final String tokenFoo = '${tokens['foo']}'; static final String tokenFoo = '${getToken('foo')}';
static final String tokenBar = '${tokens['bar']}'; static final String tokenBar = '${getToken('bar')}';
'''; ''';
} }
...@@ -214,8 +214,6 @@ class ActionChip extends StatelessWidget implements ChipAttributes, TappableChip ...@@ -214,8 +214,6 @@ class ActionChip extends StatelessWidget implements ChipAttributes, TappableChip
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _ActionChipDefaultsM3 extends ChipThemeData { class _ActionChipDefaultsM3 extends ChipThemeData {
_ActionChipDefaultsM3(this.context, this.isEnabled, this._chipVariant) _ActionChipDefaultsM3(this.context, this.isEnabled, this._chipVariant)
: super( : super(
......
...@@ -2329,8 +2329,6 @@ class _AppBarDefaultsM2 extends AppBarTheme { ...@@ -2329,8 +2329,6 @@ class _AppBarDefaultsM2 extends AppBarTheme {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _AppBarDefaultsM3 extends AppBarTheme { class _AppBarDefaultsM3 extends AppBarTheme {
_AppBarDefaultsM3(this.context) _AppBarDefaultsM3(this.context)
: super( : super(
......
...@@ -287,8 +287,6 @@ class _RenderBadge extends RenderAligningShiftedBox { ...@@ -287,8 +287,6 @@ class _RenderBadge extends RenderAligningShiftedBox {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _BadgeDefaultsM3 extends BadgeThemeData { class _BadgeDefaultsM3 extends BadgeThemeData {
_BadgeDefaultsM3(this.context) : super( _BadgeDefaultsM3(this.context) : super(
smallSize: 6.0, smallSize: 6.0,
......
...@@ -464,8 +464,6 @@ class _BannerDefaultsM2 extends MaterialBannerThemeData { ...@@ -464,8 +464,6 @@ class _BannerDefaultsM2 extends MaterialBannerThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _BannerDefaultsM3 extends MaterialBannerThemeData { class _BannerDefaultsM3 extends MaterialBannerThemeData {
_BannerDefaultsM3(this.context) _BannerDefaultsM3(this.context)
: super(elevation: 1.0); : super(elevation: 1.0);
......
...@@ -296,8 +296,6 @@ class _BottomAppBarDefaultsM2 extends BottomAppBarTheme { ...@@ -296,8 +296,6 @@ class _BottomAppBarDefaultsM2 extends BottomAppBarTheme {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _BottomAppBarDefaultsM3 extends BottomAppBarTheme { class _BottomAppBarDefaultsM3 extends BottomAppBarTheme {
_BottomAppBarDefaultsM3(this.context) _BottomAppBarDefaultsM3(this.context)
: super( : super(
......
...@@ -1339,8 +1339,6 @@ class _BottomSheetGestureDetector extends StatelessWidget { ...@@ -1339,8 +1339,6 @@ class _BottomSheetGestureDetector extends StatelessWidget {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _BottomSheetDefaultsM3 extends BottomSheetThemeData { class _BottomSheetDefaultsM3 extends BottomSheetThemeData {
_BottomSheetDefaultsM3(this.context) _BottomSheetDefaultsM3(this.context)
: super( : super(
......
...@@ -215,8 +215,6 @@ class _CardDefaultsM2 extends CardTheme { ...@@ -215,8 +215,6 @@ class _CardDefaultsM2 extends CardTheme {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _CardDefaultsM3 extends CardTheme { class _CardDefaultsM3 extends CardTheme {
_CardDefaultsM3(this.context) _CardDefaultsM3(this.context)
: super( : super(
......
...@@ -895,8 +895,6 @@ class _CheckboxDefaultsM2 extends CheckboxThemeData { ...@@ -895,8 +895,6 @@ class _CheckboxDefaultsM2 extends CheckboxThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _CheckboxDefaultsM3 extends CheckboxThemeData { class _CheckboxDefaultsM3 extends CheckboxThemeData {
_CheckboxDefaultsM3(BuildContext context) _CheckboxDefaultsM3(BuildContext context)
: _theme = Theme.of(context), : _theme = Theme.of(context),
......
...@@ -2185,8 +2185,6 @@ bool _hitIsOnDeleteIcon({ ...@@ -2185,8 +2185,6 @@ bool _hitIsOnDeleteIcon({
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _ChipDefaultsM3 extends ChipThemeData { class _ChipDefaultsM3 extends ChipThemeData {
_ChipDefaultsM3(this.context, this.isEnabled) _ChipDefaultsM3(this.context, this.isEnabled)
: super( : super(
......
...@@ -240,8 +240,6 @@ class ChoiceChip extends StatelessWidget ...@@ -240,8 +240,6 @@ class ChoiceChip extends StatelessWidget
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _ChoiceChipDefaultsM3 extends ChipThemeData { class _ChoiceChipDefaultsM3 extends ChipThemeData {
_ChoiceChipDefaultsM3( _ChoiceChipDefaultsM3(
this.context, this.context,
......
...@@ -789,8 +789,6 @@ class _DatePickerDefaultsM2 extends DatePickerThemeData { ...@@ -789,8 +789,6 @@ class _DatePickerDefaultsM2 extends DatePickerThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _DatePickerDefaultsM3 extends DatePickerThemeData { class _DatePickerDefaultsM3 extends DatePickerThemeData {
_DatePickerDefaultsM3(this.context) _DatePickerDefaultsM3(this.context)
: super( : super(
......
...@@ -1628,8 +1628,6 @@ class _DialogDefaultsM2 extends DialogTheme { ...@@ -1628,8 +1628,6 @@ class _DialogDefaultsM2 extends DialogTheme {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _DialogDefaultsM3 extends DialogTheme { class _DialogDefaultsM3 extends DialogTheme {
_DialogDefaultsM3(this.context) _DialogDefaultsM3(this.context)
: super( : super(
...@@ -1673,8 +1671,6 @@ class _DialogDefaultsM3 extends DialogTheme { ...@@ -1673,8 +1671,6 @@ class _DialogDefaultsM3 extends DialogTheme {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _DialogFullscreenDefaultsM3 extends DialogTheme { class _DialogFullscreenDefaultsM3 extends DialogTheme {
const _DialogFullscreenDefaultsM3(this.context); const _DialogFullscreenDefaultsM3(this.context);
......
...@@ -328,8 +328,6 @@ class _DividerDefaultsM2 extends DividerThemeData { ...@@ -328,8 +328,6 @@ class _DividerDefaultsM2 extends DividerThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _DividerDefaultsM3 extends DividerThemeData { class _DividerDefaultsM3 extends DividerThemeData {
const _DividerDefaultsM3(this.context) : super( const _DividerDefaultsM3(this.context) : super(
space: 16, space: 16,
......
...@@ -839,8 +839,6 @@ class _DrawerDefaultsM2 extends DrawerThemeData { ...@@ -839,8 +839,6 @@ class _DrawerDefaultsM2 extends DrawerThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _DrawerDefaultsM3 extends DrawerThemeData { class _DrawerDefaultsM3 extends DrawerThemeData {
_DrawerDefaultsM3(this.context) _DrawerDefaultsM3(this.context)
: super(elevation: 1.0); : super(elevation: 1.0);
......
...@@ -543,8 +543,6 @@ class _ElevatedButtonWithIconChild extends StatelessWidget { ...@@ -543,8 +543,6 @@ class _ElevatedButtonWithIconChild extends StatelessWidget {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _ElevatedButtonDefaultsM3 extends ButtonStyle { class _ElevatedButtonDefaultsM3 extends ButtonStyle {
_ElevatedButtonDefaultsM3(this.context) _ElevatedButtonDefaultsM3(this.context)
: super( : super(
......
...@@ -156,8 +156,6 @@ class _ElevationOpacity { ...@@ -156,8 +156,6 @@ class _ElevationOpacity {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
// Surface tint opacities based on elevations according to the // Surface tint opacities based on elevations according to the
// Material Design 3 specification: // Material Design 3 specification:
// https://m3.material.io/styles/color/the-color-system/color-roles // https://m3.material.io/styles/color/the-color-system/color-roles
......
...@@ -759,8 +759,6 @@ class _ExpansionTileDefaultsM2 extends ExpansionTileThemeData { ...@@ -759,8 +759,6 @@ class _ExpansionTileDefaultsM2 extends ExpansionTileThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _ExpansionTileDefaultsM3 extends ExpansionTileThemeData { class _ExpansionTileDefaultsM3 extends ExpansionTileThemeData {
_ExpansionTileDefaultsM3(this.context); _ExpansionTileDefaultsM3(this.context);
......
...@@ -553,8 +553,6 @@ class _FilledButtonWithIconChild extends StatelessWidget { ...@@ -553,8 +553,6 @@ class _FilledButtonWithIconChild extends StatelessWidget {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _FilledButtonDefaultsM3 extends ButtonStyle { class _FilledButtonDefaultsM3 extends ButtonStyle {
_FilledButtonDefaultsM3(this.context) _FilledButtonDefaultsM3(this.context)
: super( : super(
...@@ -677,8 +675,6 @@ class _FilledButtonDefaultsM3 extends ButtonStyle { ...@@ -677,8 +675,6 @@ class _FilledButtonDefaultsM3 extends ButtonStyle {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _FilledTonalButtonDefaultsM3 extends ButtonStyle { class _FilledTonalButtonDefaultsM3 extends ButtonStyle {
_FilledTonalButtonDefaultsM3(this.context) _FilledTonalButtonDefaultsM3(this.context)
: super( : super(
......
...@@ -240,8 +240,6 @@ class FilterChip extends StatelessWidget ...@@ -240,8 +240,6 @@ class FilterChip extends StatelessWidget
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _FilterChipDefaultsM3 extends ChipThemeData { class _FilterChipDefaultsM3 extends ChipThemeData {
_FilterChipDefaultsM3( _FilterChipDefaultsM3(
this.context, this.context,
......
...@@ -771,8 +771,6 @@ class _FABDefaultsM2 extends FloatingActionButtonThemeData { ...@@ -771,8 +771,6 @@ class _FABDefaultsM2 extends FloatingActionButtonThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _FABDefaultsM3 extends FloatingActionButtonThemeData { class _FABDefaultsM3 extends FloatingActionButtonThemeData {
_FABDefaultsM3(this.context, this.type, this.hasChild) _FABDefaultsM3(this.context, this.type, this.hasChild)
: super( : super(
......
...@@ -1081,8 +1081,6 @@ class _IconButtonDefaultMouseCursor extends MaterialStateProperty<MouseCursor?> ...@@ -1081,8 +1081,6 @@ class _IconButtonDefaultMouseCursor extends MaterialStateProperty<MouseCursor?>
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _IconButtonDefaultsM3 extends ButtonStyle { class _IconButtonDefaultsM3 extends ButtonStyle {
_IconButtonDefaultsM3(this.context, this.toggleable) _IconButtonDefaultsM3(this.context, this.toggleable)
: super( : super(
...@@ -1204,8 +1202,6 @@ class _IconButtonDefaultsM3 extends ButtonStyle { ...@@ -1204,8 +1202,6 @@ class _IconButtonDefaultsM3 extends ButtonStyle {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _FilledIconButtonDefaultsM3 extends ButtonStyle { class _FilledIconButtonDefaultsM3 extends ButtonStyle {
_FilledIconButtonDefaultsM3(this.context, this.toggleable) _FilledIconButtonDefaultsM3(this.context, this.toggleable)
: super( : super(
...@@ -1352,8 +1348,6 @@ class _FilledIconButtonDefaultsM3 extends ButtonStyle { ...@@ -1352,8 +1348,6 @@ class _FilledIconButtonDefaultsM3 extends ButtonStyle {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _FilledTonalIconButtonDefaultsM3 extends ButtonStyle { class _FilledTonalIconButtonDefaultsM3 extends ButtonStyle {
_FilledTonalIconButtonDefaultsM3(this.context, this.toggleable) _FilledTonalIconButtonDefaultsM3(this.context, this.toggleable)
: super( : super(
...@@ -1500,8 +1494,6 @@ class _FilledTonalIconButtonDefaultsM3 extends ButtonStyle { ...@@ -1500,8 +1494,6 @@ class _FilledTonalIconButtonDefaultsM3 extends ButtonStyle {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _OutlinedIconButtonDefaultsM3 extends ButtonStyle { class _OutlinedIconButtonDefaultsM3 extends ButtonStyle {
_OutlinedIconButtonDefaultsM3(this.context, this.toggleable) _OutlinedIconButtonDefaultsM3(this.context, this.toggleable)
: super( : super(
......
...@@ -246,8 +246,6 @@ class InputChip extends StatelessWidget ...@@ -246,8 +246,6 @@ class InputChip extends StatelessWidget
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _InputChipDefaultsM3 extends ChipThemeData { class _InputChipDefaultsM3 extends ChipThemeData {
_InputChipDefaultsM3(this.context, this.isEnabled, this.isSelected) _InputChipDefaultsM3(this.context, this.isEnabled, this.isSelected)
: super( : super(
......
...@@ -4531,8 +4531,6 @@ class _InputDecoratorDefaultsM2 extends InputDecorationTheme { ...@@ -4531,8 +4531,6 @@ class _InputDecoratorDefaultsM2 extends InputDecorationTheme {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _InputDecoratorDefaultsM3 extends InputDecorationTheme { class _InputDecoratorDefaultsM3 extends InputDecorationTheme {
_InputDecoratorDefaultsM3(this.context) _InputDecoratorDefaultsM3(this.context)
: super(); : super();
......
...@@ -1557,8 +1557,6 @@ class _LisTileDefaultsM2 extends ListTileThemeData { ...@@ -1557,8 +1557,6 @@ class _LisTileDefaultsM2 extends ListTileThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _LisTileDefaultsM3 extends ListTileThemeData { class _LisTileDefaultsM3 extends ListTileThemeData {
_LisTileDefaultsM3(this.context) _LisTileDefaultsM3(this.context)
: super( : super(
......
...@@ -3584,8 +3584,6 @@ bool _platformSupportsAccelerators() { ...@@ -3584,8 +3584,6 @@ bool _platformSupportsAccelerators() {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _MenuBarDefaultsM3 extends MenuStyle { class _MenuBarDefaultsM3 extends MenuStyle {
_MenuBarDefaultsM3(this.context) _MenuBarDefaultsM3(this.context)
: super( : super(
......
...@@ -1349,8 +1349,6 @@ class _NavigationBarDefaultsM2 extends NavigationBarThemeData { ...@@ -1349,8 +1349,6 @@ class _NavigationBarDefaultsM2 extends NavigationBarThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _NavigationBarDefaultsM3 extends NavigationBarThemeData { class _NavigationBarDefaultsM3 extends NavigationBarThemeData {
_NavigationBarDefaultsM3(this.context) _NavigationBarDefaultsM3(this.context)
: super( : super(
......
...@@ -671,8 +671,6 @@ bool _isForwardOrCompleted(Animation<double> animation) { ...@@ -671,8 +671,6 @@ bool _isForwardOrCompleted(Animation<double> animation) {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _NavigationDrawerDefaultsM3 extends NavigationDrawerThemeData { class _NavigationDrawerDefaultsM3 extends NavigationDrawerThemeData {
_NavigationDrawerDefaultsM3(this.context) _NavigationDrawerDefaultsM3(this.context)
: super( : super(
......
...@@ -1049,8 +1049,6 @@ class _NavigationRailDefaultsM2 extends NavigationRailThemeData { ...@@ -1049,8 +1049,6 @@ class _NavigationRailDefaultsM2 extends NavigationRailThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _NavigationRailDefaultsM3 extends NavigationRailThemeData { class _NavigationRailDefaultsM3 extends NavigationRailThemeData {
_NavigationRailDefaultsM3(this.context) _NavigationRailDefaultsM3(this.context)
: super( : super(
......
...@@ -474,8 +474,6 @@ class _OutlinedButtonWithIconChild extends StatelessWidget { ...@@ -474,8 +474,6 @@ class _OutlinedButtonWithIconChild extends StatelessWidget {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _OutlinedButtonDefaultsM3 extends ButtonStyle { class _OutlinedButtonDefaultsM3 extends ButtonStyle {
_OutlinedButtonDefaultsM3(this.context) _OutlinedButtonDefaultsM3(this.context)
: super( : super(
......
...@@ -1415,8 +1415,6 @@ class _PopupMenuDefaultsM2 extends PopupMenuThemeData { ...@@ -1415,8 +1415,6 @@ class _PopupMenuDefaultsM2 extends PopupMenuThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _PopupMenuDefaultsM3 extends PopupMenuThemeData { class _PopupMenuDefaultsM3 extends PopupMenuThemeData {
_PopupMenuDefaultsM3(this.context) _PopupMenuDefaultsM3(this.context)
: super(elevation: 3.0); : super(elevation: 3.0);
......
...@@ -1041,8 +1041,6 @@ class _LinearProgressIndicatorDefaultsM2 extends ProgressIndicatorThemeData { ...@@ -1041,8 +1041,6 @@ class _LinearProgressIndicatorDefaultsM2 extends ProgressIndicatorThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _CircularProgressIndicatorDefaultsM3 extends ProgressIndicatorThemeData { class _CircularProgressIndicatorDefaultsM3 extends ProgressIndicatorThemeData {
_CircularProgressIndicatorDefaultsM3(this.context); _CircularProgressIndicatorDefaultsM3(this.context);
......
...@@ -629,8 +629,6 @@ class _RadioDefaultsM2 extends RadioThemeData { ...@@ -629,8 +629,6 @@ class _RadioDefaultsM2 extends RadioThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _RadioDefaultsM3 extends RadioThemeData { class _RadioDefaultsM3 extends RadioThemeData {
_RadioDefaultsM3(this.context); _RadioDefaultsM3(this.context);
......
...@@ -1274,8 +1274,6 @@ class _SearchBarState extends State<SearchBar> { ...@@ -1274,8 +1274,6 @@ class _SearchBarState extends State<SearchBar> {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _SearchBarDefaultsM3 extends SearchBarThemeData { class _SearchBarDefaultsM3 extends SearchBarThemeData {
_SearchBarDefaultsM3(this.context); _SearchBarDefaultsM3(this.context);
...@@ -1346,8 +1344,6 @@ class _SearchBarDefaultsM3 extends SearchBarThemeData { ...@@ -1346,8 +1344,6 @@ class _SearchBarDefaultsM3 extends SearchBarThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _SearchViewDefaultsM3 extends SearchViewThemeData { class _SearchViewDefaultsM3 extends SearchViewThemeData {
_SearchViewDefaultsM3(this.context, {required this.isFullScreen}); _SearchViewDefaultsM3(this.context, {required this.isFullScreen});
......
...@@ -714,8 +714,6 @@ class _RenderSegmentedButton<T> extends RenderBox with ...@@ -714,8 +714,6 @@ class _RenderSegmentedButton<T> extends RenderBox with
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _SegmentedButtonDefaultsM3 extends SegmentedButtonThemeData { class _SegmentedButtonDefaultsM3 extends SegmentedButtonThemeData {
_SegmentedButtonDefaultsM3(this.context); _SegmentedButtonDefaultsM3(this.context);
final BuildContext context; final BuildContext context;
......
...@@ -1977,8 +1977,6 @@ class _SliderDefaultsM2 extends SliderThemeData { ...@@ -1977,8 +1977,6 @@ class _SliderDefaultsM2 extends SliderThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _SliderDefaultsM3 extends SliderThemeData { class _SliderDefaultsM3 extends SliderThemeData {
_SliderDefaultsM3(this.context) _SliderDefaultsM3(this.context)
: super(trackHeight: 4.0); : super(trackHeight: 4.0);
......
...@@ -885,8 +885,6 @@ class _SnackbarDefaultsM2 extends SnackBarThemeData { ...@@ -885,8 +885,6 @@ class _SnackbarDefaultsM2 extends SnackBarThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _SnackbarDefaultsM3 extends SnackBarThemeData { class _SnackbarDefaultsM3 extends SnackBarThemeData {
_SnackbarDefaultsM3(this.context); _SnackbarDefaultsM3(this.context);
......
...@@ -1757,8 +1757,6 @@ class _SwitchDefaultsM2 extends SwitchThemeData { ...@@ -1757,8 +1757,6 @@ class _SwitchDefaultsM2 extends SwitchThemeData {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _SwitchDefaultsM3 extends SwitchThemeData { class _SwitchDefaultsM3 extends SwitchThemeData {
_SwitchDefaultsM3(this.context); _SwitchDefaultsM3(this.context);
......
...@@ -2165,8 +2165,6 @@ class _TabsDefaultsM2 extends TabBarTheme { ...@@ -2165,8 +2165,6 @@ class _TabsDefaultsM2 extends TabBarTheme {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _TabsPrimaryDefaultsM3 extends TabBarTheme { class _TabsPrimaryDefaultsM3 extends TabBarTheme {
_TabsPrimaryDefaultsM3(this.context, this.isScrollable) _TabsPrimaryDefaultsM3(this.context, this.isScrollable)
: super(indicatorSize: TabBarIndicatorSize.label); : super(indicatorSize: TabBarIndicatorSize.label);
......
...@@ -535,8 +535,6 @@ class _TextButtonWithIconChild extends StatelessWidget { ...@@ -535,8 +535,6 @@ class _TextButtonWithIconChild extends StatelessWidget {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _TextButtonDefaultsM3 extends ButtonStyle { class _TextButtonDefaultsM3 extends ButtonStyle {
_TextButtonDefaultsM3(this.context) _TextButtonDefaultsM3(this.context)
: super( : super(
......
...@@ -1503,8 +1503,6 @@ TextStyle _m2CounterErrorStyle(BuildContext context) => ...@@ -1503,8 +1503,6 @@ TextStyle _m2CounterErrorStyle(BuildContext context) =>
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
TextStyle? _m3StateInputStyle(BuildContext context) => MaterialStateTextStyle.resolveWith((Set<MaterialState> states) { TextStyle? _m3StateInputStyle(BuildContext context) => MaterialStateTextStyle.resolveWith((Set<MaterialState> states) {
if (states.contains(MaterialState.disabled)) { if (states.contains(MaterialState.disabled)) {
return TextStyle(color: Theme.of(context).textTheme.bodyLarge!.color?.withOpacity(0.38)); return TextStyle(color: Theme.of(context).textTheme.bodyLarge!.color?.withOpacity(0.38));
......
...@@ -2721,8 +2721,6 @@ class VisualDensity with Diagnosticable { ...@@ -2721,8 +2721,6 @@ class VisualDensity with Diagnosticable {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
const ColorScheme _colorSchemeLightM3 = ColorScheme( const ColorScheme _colorSchemeLightM3 = ColorScheme(
brightness: Brightness.light, brightness: Brightness.light,
primary: Color(0xFF6750A4), primary: Color(0xFF6750A4),
......
...@@ -3322,8 +3322,6 @@ class _TimePickerDefaultsM2 extends _TimePickerDefaults { ...@@ -3322,8 +3322,6 @@ class _TimePickerDefaultsM2 extends _TimePickerDefaults {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _TimePickerDefaultsM3 extends _TimePickerDefaults { class _TimePickerDefaultsM3 extends _TimePickerDefaults {
_TimePickerDefaultsM3(this.context); _TimePickerDefaultsM3(this.context);
......
...@@ -748,8 +748,6 @@ class Typography with Diagnosticable { ...@@ -748,8 +748,6 @@ class Typography with Diagnosticable {
// Design token database by the script: // Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart. // dev/tools/gen_defaults/bin/gen_defaults.dart.
// Token database version: v0_162
class _M3Typography { class _M3Typography {
_M3Typography._(); _M3Typography._();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment