diff --git a/packages/material_ui/lib/src/generated/theme_data_defaults.g.dart b/packages/material_ui/lib/src/generated/theme_data_defaults.g.dart new file mode 100644 index 000000000000..86893f9f60ad --- /dev/null +++ b/packages/material_ui/lib/src/generated/theme_data_defaults.g.dart @@ -0,0 +1,324 @@ +// Copyright 2013 The Flutter Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Do not edit by hand. The code is generated from data in the Material +// Design token database by the script: +// packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart. +part of '../theme_data.dart'; + +const ColorScheme _colorSchemeLightM3 = ColorScheme( + brightness: Brightness.light, + primary: Color(0xFF6750A4), + onPrimary: Color(0xFFFFFFFF), + primaryContainer: Color(0xFFEADDFF), + onPrimaryContainer: Color(0xFF4F378B), + primaryFixed: Color(0xFFEADDFF), + primaryFixedDim: Color(0xFFD0BCFF), + onPrimaryFixed: Color(0xFF21005D), + onPrimaryFixedVariant: Color(0xFF4F378B), + secondary: Color(0xFF625B71), + onSecondary: Color(0xFFFFFFFF), + secondaryContainer: Color(0xFFE8DEF8), + onSecondaryContainer: Color(0xFF4A4458), + secondaryFixed: Color(0xFFE8DEF8), + secondaryFixedDim: Color(0xFFCCC2DC), + onSecondaryFixed: Color(0xFF1D192B), + onSecondaryFixedVariant: Color(0xFF4A4458), + tertiary: Color(0xFF7D5260), + onTertiary: Color(0xFFFFFFFF), + tertiaryContainer: Color(0xFFFFD8E4), + onTertiaryContainer: Color(0xFF633B48), + tertiaryFixed: Color(0xFFFFD8E4), + tertiaryFixedDim: Color(0xFFEFB8C8), + onTertiaryFixed: Color(0xFF31111D), + onTertiaryFixedVariant: Color(0xFF633B48), + error: Color(0xFFB3261E), + onError: Color(0xFFFFFFFF), + errorContainer: Color(0xFFF9DEDC), + onErrorContainer: Color(0xFF8C1D18), + background: Color(0xFFFEF7FF), + onBackground: Color(0xFF1D1B20), + surface: Color(0xFFFEF7FF), + surfaceBright: Color(0xFFFEF7FF), + surfaceContainerLowest: Color(0xFFFFFFFF), + surfaceContainerLow: Color(0xFFF7F2FA), + surfaceContainer: Color(0xFFF3EDF7), + surfaceContainerHigh: Color(0xFFECE6F0), + surfaceContainerHighest: Color(0xFFE6E0E9), + surfaceDim: Color(0xFFDED8E1), + onSurface: Color(0xFF1D1B20), + surfaceVariant: Color(0xFFE7E0EC), + onSurfaceVariant: Color(0xFF49454F), + outline: Color(0xFF79747E), + outlineVariant: Color(0xFFCAC4D0), + shadow: Color(0xFF000000), + scrim: Color(0xFF000000), + inverseSurface: Color(0xFF322F35), + onInverseSurface: Color(0xFFF5EFF7), + inversePrimary: Color(0xFFD0BCFF), +); + +const ColorScheme _colorSchemeDarkM3 = ColorScheme( + brightness: Brightness.dark, + primary: Color(0xFFD0BCFF), + onPrimary: Color(0xFF381E72), + primaryContainer: Color(0xFF4F378B), + onPrimaryContainer: Color(0xFFEADDFF), + primaryFixed: Color(0xFFEADDFF), + primaryFixedDim: Color(0xFFD0BCFF), + onPrimaryFixed: Color(0xFF21005D), + onPrimaryFixedVariant: Color(0xFF4F378B), + secondary: Color(0xFFCCC2DC), + onSecondary: Color(0xFF332D41), + secondaryContainer: Color(0xFF4A4458), + onSecondaryContainer: Color(0xFFE8DEF8), + secondaryFixed: Color(0xFFE8DEF8), + secondaryFixedDim: Color(0xFFCCC2DC), + onSecondaryFixed: Color(0xFF1D192B), + onSecondaryFixedVariant: Color(0xFF4A4458), + tertiary: Color(0xFFEFB8C8), + onTertiary: Color(0xFF492532), + tertiaryContainer: Color(0xFF633B48), + onTertiaryContainer: Color(0xFFFFD8E4), + tertiaryFixed: Color(0xFFFFD8E4), + tertiaryFixedDim: Color(0xFFEFB8C8), + onTertiaryFixed: Color(0xFF31111D), + onTertiaryFixedVariant: Color(0xFF633B48), + error: Color(0xFFF2B8B5), + onError: Color(0xFF601410), + errorContainer: Color(0xFF8C1D18), + onErrorContainer: Color(0xFFF9DEDC), + background: Color(0xFF141218), + onBackground: Color(0xFFE6E0E9), + surface: Color(0xFF141218), + surfaceBright: Color(0xFF3B383E), + surfaceContainerLowest: Color(0xFF0F0D13), + surfaceContainerLow: Color(0xFF1D1B20), + surfaceContainer: Color(0xFF211F26), + surfaceContainerHigh: Color(0xFF2B2930), + surfaceContainerHighest: Color(0xFF36343B), + surfaceDim: Color(0xFF141218), + onSurface: Color(0xFFE6E0E9), + surfaceVariant: Color(0xFF49454F), + onSurfaceVariant: Color(0xFFCAC4D0), + outline: Color(0xFF938F99), + outlineVariant: Color(0xFF49454F), + shadow: Color(0xFF000000), + scrim: Color(0xFF000000), + inverseSurface: Color(0xFFE6E0E9), + onInverseSurface: Color(0xFF322F35), + inversePrimary: Color(0xFF6750A4), +); + +const ColorScheme _colorSchemeLightMediumContrastM3 = ColorScheme( + brightness: Brightness.light, + primary: Color(0xFF4F378B), + onPrimary: Color(0xFFFFFFFF), + primaryContainer: Color(0xFF6750A4), + onPrimaryContainer: Color(0xFFFFFFFF), + primaryFixed: Color(0xFF6750A4), + primaryFixedDim: Color(0xFF4F378B), + onPrimaryFixed: Color(0xFFFFFFFF), + onPrimaryFixedVariant: Color(0xFFFFFFFF), + secondary: Color(0xFF4A4458), + onSecondary: Color(0xFFFFFFFF), + secondaryContainer: Color(0xFF625B71), + onSecondaryContainer: Color(0xFFFFFFFF), + secondaryFixed: Color(0xFF625B71), + secondaryFixedDim: Color(0xFF4A4458), + onSecondaryFixed: Color(0xFFFFFFFF), + onSecondaryFixedVariant: Color(0xFFFFFFFF), + tertiary: Color(0xFF633B48), + onTertiary: Color(0xFFFFFFFF), + tertiaryContainer: Color(0xFF7D5260), + onTertiaryContainer: Color(0xFFFFFFFF), + tertiaryFixed: Color(0xFF7D5260), + tertiaryFixedDim: Color(0xFF633B48), + onTertiaryFixed: Color(0xFFFFFFFF), + onTertiaryFixedVariant: Color(0xFFFFFFFF), + error: Color(0xFF8C1D18), + onError: Color(0xFFFFFFFF), + errorContainer: Color(0xFFB3261E), + onErrorContainer: Color(0xFFFFFFFF), + onBackground: Color(0xFF000000), + onSurface: Color(0xFF000000), + onSurfaceVariant: Color(0xFF322F37), + outline: Color(0xFF49454F), + outlineVariant: Color(0xFF79747E), + onInverseSurface: Color(0xFFFFFFFF), + // The following color roles have the same values as the roles in the light color scheme _colorSchemeLightM3. + background: Color(0xFFFEF7FF), + surface: Color(0xFFFEF7FF), + surfaceBright: Color(0xFFFEF7FF), + surfaceContainerLowest: Color(0xFFFFFFFF), + surfaceContainerLow: Color(0xFFF7F2FA), + surfaceContainer: Color(0xFFF3EDF7), + surfaceContainerHigh: Color(0xFFECE6F0), + surfaceContainerHighest: Color(0xFFE6E0E9), + surfaceDim: Color(0xFFDED8E1), + surfaceVariant: Color(0xFFE7E0EC), + shadow: Color(0xFF000000), + scrim: Color(0xFF000000), + inverseSurface: Color(0xFF322F35), + inversePrimary: Color(0xFFD0BCFF), +); + +const ColorScheme _colorSchemeLightHighContrastM3 = ColorScheme( + brightness: Brightness.light, + primary: Color(0xFF381E72), + onPrimary: Color(0xFFFFFFFF), + primaryContainer: Color(0xFF4F378B), + onPrimaryContainer: Color(0xFFFFFFFF), + primaryFixed: Color(0xFF4F378B), + primaryFixedDim: Color(0xFF381E72), + onPrimaryFixed: Color(0xFFFFFFFF), + onPrimaryFixedVariant: Color(0xFFFFFFFF), + secondary: Color(0xFF332D41), + onSecondary: Color(0xFFFFFFFF), + secondaryContainer: Color(0xFF4A4458), + onSecondaryContainer: Color(0xFFFFFFFF), + secondaryFixed: Color(0xFF4A4458), + secondaryFixedDim: Color(0xFF332D41), + onSecondaryFixed: Color(0xFFFFFFFF), + onSecondaryFixedVariant: Color(0xFFFFFFFF), + tertiary: Color(0xFF492532), + onTertiary: Color(0xFFFFFFFF), + tertiaryContainer: Color(0xFF633B48), + onTertiaryContainer: Color(0xFFFFFFFF), + tertiaryFixed: Color(0xFF633B48), + tertiaryFixedDim: Color(0xFF492532), + onTertiaryFixed: Color(0xFFFFFFFF), + onTertiaryFixedVariant: Color(0xFFFFFFFF), + error: Color(0xFF601410), + onError: Color(0xFFFFFFFF), + errorContainer: Color(0xFF8C1D18), + onErrorContainer: Color(0xFFFFFFFF), + onBackground: Color(0xFF000000), + onSurface: Color(0xFF000000), + onSurfaceVariant: Color(0xFF000000), + outline: Color(0xFF322F37), + outlineVariant: Color(0xFF49454F), + onInverseSurface: Color(0xFFFFFFFF), + // The following color roles have the same values as the roles in the light color scheme _colorSchemeLightM3. + background: Color(0xFFFEF7FF), + surface: Color(0xFFFEF7FF), + surfaceBright: Color(0xFFFEF7FF), + surfaceContainerLowest: Color(0xFFFFFFFF), + surfaceContainerLow: Color(0xFFF7F2FA), + surfaceContainer: Color(0xFFF3EDF7), + surfaceContainerHigh: Color(0xFFECE6F0), + surfaceContainerHighest: Color(0xFFE6E0E9), + surfaceDim: Color(0xFFDED8E1), + surfaceVariant: Color(0xFFE7E0EC), + shadow: Color(0xFF000000), + scrim: Color(0xFF000000), + inverseSurface: Color(0xFF322F35), + inversePrimary: Color(0xFFD0BCFF), +); + +const ColorScheme _colorSchemeDarkMediumContrastM3 = ColorScheme( + brightness: Brightness.dark, + primary: Color(0xFFEADDFF), + onPrimary: Color(0xFF21005D), + primaryContainer: Color(0xFF9A82DB), + onPrimaryContainer: Color(0xFF000000), + primaryFixed: Color(0xFFEADDFF), + primaryFixedDim: Color(0xFFD0BCFF), + onPrimaryFixed: Color(0xFF000000), + onPrimaryFixedVariant: Color(0xFF381E72), + secondary: Color(0xFFE8DEF8), + onSecondary: Color(0xFF1D192B), + secondaryContainer: Color(0xFF958DA5), + onSecondaryContainer: Color(0xFF000000), + secondaryFixed: Color(0xFFE8DEF8), + secondaryFixedDim: Color(0xFFCCC2DC), + onSecondaryFixed: Color(0xFF000000), + onSecondaryFixedVariant: Color(0xFF332D41), + tertiary: Color(0xFFFFD8E4), + onTertiary: Color(0xFF31111D), + tertiaryContainer: Color(0xFFB58392), + onTertiaryContainer: Color(0xFF000000), + tertiaryFixed: Color(0xFFFFD8E4), + tertiaryFixedDim: Color(0xFFEFB8C8), + onTertiaryFixed: Color(0xFF000000), + onTertiaryFixedVariant: Color(0xFF492532), + error: Color(0xFFF9DEDC), + onError: Color(0xFF410E0B), + errorContainer: Color(0xFFE46962), + onErrorContainer: Color(0xFF000000), + onBackground: Color(0xFFFFFFFF), + onSurface: Color(0xFFFFFFFF), + onSurfaceVariant: Color(0xFFE7E0EC), + outline: Color(0xFFAEA9B4), + outlineVariant: Color(0xFF938F99), + onInverseSurface: Color(0xFF1D1B20), + inversePrimary: Color(0xFF4F378B), + // The following color roles have the same values as the roles in the dark color scheme _colorSchemeDarkM3. + background: Color(0xFF141218), + surface: Color(0xFF141218), + surfaceBright: Color(0xFF3B383E), + surfaceContainerLowest: Color(0xFF0F0D13), + surfaceContainerLow: Color(0xFF1D1B20), + surfaceContainer: Color(0xFF211F26), + surfaceContainerHigh: Color(0xFF2B2930), + surfaceContainerHighest: Color(0xFF36343B), + surfaceDim: Color(0xFF141218), + surfaceVariant: Color(0xFF49454F), + shadow: Color(0xFF000000), + scrim: Color(0xFF000000), + inverseSurface: Color(0xFFE6E0E9), +); + +const ColorScheme _colorSchemeDarkHighContrastM3 = ColorScheme( + brightness: Brightness.dark, + primary: Color(0xFFF6EDFF), + onPrimary: Color(0xFF000000), + primaryContainer: Color(0xFFD0BCFF), + onPrimaryContainer: Color(0xFF000000), + primaryFixed: Color(0xFFEADDFF), + primaryFixedDim: Color(0xFFD0BCFF), + onPrimaryFixed: Color(0xFF000000), + onPrimaryFixedVariant: Color(0xFF000000), + secondary: Color(0xFFF6EDFF), + onSecondary: Color(0xFF000000), + secondaryContainer: Color(0xFFCCC2DC), + onSecondaryContainer: Color(0xFF000000), + secondaryFixed: Color(0xFFE8DEF8), + secondaryFixedDim: Color(0xFFCCC2DC), + onSecondaryFixed: Color(0xFF000000), + onSecondaryFixedVariant: Color(0xFF000000), + tertiary: Color(0xFFFFECF1), + onTertiary: Color(0xFF000000), + tertiaryContainer: Color(0xFFEFB8C8), + onTertiaryContainer: Color(0xFF000000), + tertiaryFixed: Color(0xFFFFD8E4), + tertiaryFixedDim: Color(0xFFEFB8C8), + onTertiaryFixed: Color(0xFF000000), + onTertiaryFixedVariant: Color(0xFF000000), + error: Color(0xFFFCEEEE), + onError: Color(0xFF000000), + errorContainer: Color(0xFFF2B8B5), + onErrorContainer: Color(0xFF000000), + onBackground: Color(0xFFFFFFFF), + onSurface: Color(0xFFFFFFFF), + onSurfaceVariant: Color(0xFFFFFFFF), + outline: Color(0xFFF5EEFA), + outlineVariant: Color(0xFFCAC4D0), + onInverseSurface: Color(0xFF000000), + inversePrimary: Color(0xFF381E72), + // The following color roles have the same values as the roles in the dark color scheme _colorSchemeDarkM3. + background: Color(0xFF141218), + surface: Color(0xFF141218), + surfaceBright: Color(0xFF3B383E), + surfaceContainerLowest: Color(0xFF0F0D13), + surfaceContainerLow: Color(0xFF1D1B20), + surfaceContainer: Color(0xFF211F26), + surfaceContainerHigh: Color(0xFF2B2930), + surfaceContainerHighest: Color(0xFF36343B), + surfaceDim: Color(0xFF141218), + surfaceVariant: Color(0xFF49454F), + shadow: Color(0xFF000000), + scrim: Color(0xFF000000), + inverseSurface: Color(0xFFE6E0E9), +); diff --git a/packages/material_ui/lib/src/theme_data.dart b/packages/material_ui/lib/src/theme_data.dart index df5a0e2cd4ae..85c6f02d76af 100644 --- a/packages/material_ui/lib/src/theme_data.dart +++ b/packages/material_ui/lib/src/theme_data.dart @@ -78,6 +78,8 @@ import 'typography.dart'; export 'package:flutter/services.dart' show Brightness; +part 'generated/theme_data_defaults.g.dart'; + // Examples can assume: // late BuildContext context; @@ -182,6 +184,41 @@ enum MaterialTapTargetSize { shrinkWrap, } +/// A Material 3 color scheme contrast level. +/// +/// The named constants [standard], [medium], and [high] select the token-backed +/// default Material 3 color schemes. Use [ContrastLevel.new] to provide a +/// custom value between -1.0 and 1.0 when generating a color scheme from +/// [ThemeData.colorSchemeSeed]. +@immutable +class ContrastLevel { + /// Creates a custom contrast level. + const ContrastLevel(this.value) : assert(value >= -1.0 && value <= 1.0); + + /// Standard contrast, corresponding to a contrast level of 0.0. + static const ContrastLevel standard = ContrastLevel(0.0); + + /// Medium contrast, corresponding to a contrast level of 0.5. + static const ContrastLevel medium = ContrastLevel(0.5); + + /// High contrast, corresponding to a contrast level of 1.0. + static const ContrastLevel high = ContrastLevel(1.0); + + /// The numeric contrast level passed to color scheme generation. + final double value; + + @override + bool operator ==(Object other) { + return other is ContrastLevel && other.value == value; + } + + @override + int get hashCode => value.hashCode; + + @override + String toString() => 'ContrastLevel($value)'; +} + /// Defines the configuration of the overall visual [Theme] for a [MaterialApp] /// or a widget subtree within the app. /// @@ -244,6 +281,12 @@ class ThemeData with Diagnosticable { /// If [colorSchemeSeed] is non-null then [colorScheme], [primaryColor] and /// [primarySwatch] must all be null. /// + /// [contrastLevel] sets the contrast level for generated Material 3 color + /// schemes. Values must be between -1.0 and 1.0 inclusive. Use + /// [ContrastLevel.standard], [ContrastLevel.medium], or [ContrastLevel.high] + /// for the token-backed default Material 3 contrast levels. Other values are + /// applied when generating a color scheme from [colorSchemeSeed]. + /// /// The [textTheme] [TextStyle] colors are black if the color scheme's /// brightness is [Brightness.light], and white for [Brightness.dark]. /// @@ -287,6 +330,7 @@ class ThemeData with Diagnosticable { ColorScheme? colorScheme, Brightness? brightness, Color? colorSchemeSeed, + ContrastLevel? contrastLevel, // [colorScheme] is the preferred way to configure colors. The [Color] properties // listed below (as well as primarySwatch) will gradually be phased out, see // https://github.com/flutter/flutter/issues/91772. @@ -412,6 +456,7 @@ class ThemeData with Diagnosticable { visualDensity ??= VisualDensity.defaultDensityForPlatform(platform); useMaterial3 ??= true; useSystemColors ??= false; + contrastLevel ??= ContrastLevel.standard; final bool useInkSparkle = platform == TargetPlatform.android && !kIsWeb; splashFactory ??= useMaterial3 ? useInkSparkle @@ -439,9 +484,10 @@ class ThemeData with Diagnosticable { colorScheme = ColorScheme.fromSeed( seedColor: colorSchemeSeed, brightness: effectiveBrightness, + contrastLevel: contrastLevel.value, ); } - colorScheme ??= isDark ? _colorSchemeDarkM3 : _colorSchemeLightM3; + colorScheme ??= _defaultM3ColorScheme(effectiveBrightness, contrastLevel); // For surfaces that use primary color in light themes and surface color in dark final Color primarySurfaceColor = isDark ? colorScheme.surface : colorScheme.primary; @@ -2935,6 +2981,17 @@ class ThemeData with Diagnosticable { } } +ColorScheme _defaultM3ColorScheme(Brightness brightness, ContrastLevel contrastLevel) { + final isDark = brightness == Brightness.dark; + if (contrastLevel == ContrastLevel.medium) { + return isDark ? _colorSchemeDarkMediumContrastM3 : _colorSchemeLightMediumContrastM3; + } + if (contrastLevel == ContrastLevel.high) { + return isDark ? _colorSchemeDarkHighContrastM3 : _colorSchemeLightHighContrastM3; + } + return isDark ? _colorSchemeDarkM3 : _colorSchemeLightM3; +} + /// A [CupertinoThemeData] that defers unspecified theme attributes to an /// upstream Material [ThemeData]. /// @@ -3368,122 +3425,3 @@ class VisualDensity with Diagnosticable { return '${super.toStringShort()}(h: ${debugFormatDouble(horizontal)}, v: ${debugFormatDouble(vertical)})'; } } - -// BEGIN GENERATED TOKEN PROPERTIES - ColorScheme - -// Do not edit by hand. The code between the "BEGIN GENERATED" and -// "END GENERATED" comments are generated from data in the Material -// Design token database by the script: -// dev/tools/gen_defaults/bin/gen_defaults.dart. - -// dart format off -const ColorScheme _colorSchemeLightM3 = ColorScheme( - brightness: Brightness.light, - primary: Color(0xFF6750A4), - onPrimary: Color(0xFFFFFFFF), - primaryContainer: Color(0xFFEADDFF), - onPrimaryContainer: Color(0xFF4F378B), - primaryFixed: Color(0xFFEADDFF), - primaryFixedDim: Color(0xFFD0BCFF), - onPrimaryFixed: Color(0xFF21005D), - onPrimaryFixedVariant: Color(0xFF4F378B), - secondary: Color(0xFF625B71), - onSecondary: Color(0xFFFFFFFF), - secondaryContainer: Color(0xFFE8DEF8), - onSecondaryContainer: Color(0xFF4A4458), - secondaryFixed: Color(0xFFE8DEF8), - secondaryFixedDim: Color(0xFFCCC2DC), - onSecondaryFixed: Color(0xFF1D192B), - onSecondaryFixedVariant: Color(0xFF4A4458), - tertiary: Color(0xFF7D5260), - onTertiary: Color(0xFFFFFFFF), - tertiaryContainer: Color(0xFFFFD8E4), - onTertiaryContainer: Color(0xFF633B48), - tertiaryFixed: Color(0xFFFFD8E4), - tertiaryFixedDim: Color(0xFFEFB8C8), - onTertiaryFixed: Color(0xFF31111D), - onTertiaryFixedVariant: Color(0xFF633B48), - error: Color(0xFFB3261E), - onError: Color(0xFFFFFFFF), - errorContainer: Color(0xFFF9DEDC), - onErrorContainer: Color(0xFF8C1D18), - background: Color(0xFFFEF7FF), - onBackground: Color(0xFF1D1B20), - surface: Color(0xFFFEF7FF), - surfaceBright: Color(0xFFFEF7FF), - surfaceContainerLowest: Color(0xFFFFFFFF), - surfaceContainerLow: Color(0xFFF7F2FA), - surfaceContainer: Color(0xFFF3EDF7), - surfaceContainerHigh: Color(0xFFECE6F0), - surfaceContainerHighest: Color(0xFFE6E0E9), - surfaceDim: Color(0xFFDED8E1), - onSurface: Color(0xFF1D1B20), - surfaceVariant: Color(0xFFE7E0EC), - onSurfaceVariant: Color(0xFF49454F), - outline: Color(0xFF79747E), - outlineVariant: Color(0xFFCAC4D0), - shadow: Color(0xFF000000), - scrim: Color(0xFF000000), - inverseSurface: Color(0xFF322F35), - onInverseSurface: Color(0xFFF5EFF7), - inversePrimary: Color(0xFFD0BCFF), - // The surfaceTint color is set to the same color as the primary. - surfaceTint: Color(0xFF6750A4), -); - -const ColorScheme _colorSchemeDarkM3 = ColorScheme( - brightness: Brightness.dark, - primary: Color(0xFFD0BCFF), - onPrimary: Color(0xFF381E72), - primaryContainer: Color(0xFF4F378B), - onPrimaryContainer: Color(0xFFEADDFF), - primaryFixed: Color(0xFFEADDFF), - primaryFixedDim: Color(0xFFD0BCFF), - onPrimaryFixed: Color(0xFF21005D), - onPrimaryFixedVariant: Color(0xFF4F378B), - secondary: Color(0xFFCCC2DC), - onSecondary: Color(0xFF332D41), - secondaryContainer: Color(0xFF4A4458), - onSecondaryContainer: Color(0xFFE8DEF8), - secondaryFixed: Color(0xFFE8DEF8), - secondaryFixedDim: Color(0xFFCCC2DC), - onSecondaryFixed: Color(0xFF1D192B), - onSecondaryFixedVariant: Color(0xFF4A4458), - tertiary: Color(0xFFEFB8C8), - onTertiary: Color(0xFF492532), - tertiaryContainer: Color(0xFF633B48), - onTertiaryContainer: Color(0xFFFFD8E4), - tertiaryFixed: Color(0xFFFFD8E4), - tertiaryFixedDim: Color(0xFFEFB8C8), - onTertiaryFixed: Color(0xFF31111D), - onTertiaryFixedVariant: Color(0xFF633B48), - error: Color(0xFFF2B8B5), - onError: Color(0xFF601410), - errorContainer: Color(0xFF8C1D18), - onErrorContainer: Color(0xFFF9DEDC), - background: Color(0xFF141218), - onBackground: Color(0xFFE6E0E9), - surface: Color(0xFF141218), - surfaceBright: Color(0xFF3B383E), - surfaceContainerLowest: Color(0xFF0F0D13), - surfaceContainerLow: Color(0xFF1D1B20), - surfaceContainer: Color(0xFF211F26), - surfaceContainerHigh: Color(0xFF2B2930), - surfaceContainerHighest: Color(0xFF36343B), - surfaceDim: Color(0xFF141218), - onSurface: Color(0xFFE6E0E9), - surfaceVariant: Color(0xFF49454F), - onSurfaceVariant: Color(0xFFCAC4D0), - outline: Color(0xFF938F99), - outlineVariant: Color(0xFF49454F), - shadow: Color(0xFF000000), - scrim: Color(0xFF000000), - inverseSurface: Color(0xFFE6E0E9), - onInverseSurface: Color(0xFF322F35), - inversePrimary: Color(0xFF6750A4), - // The surfaceTint color is set to the same color as the primary. - surfaceTint: Color(0xFFD0BCFF), -); -// dart format on - -// END GENERATED TOKEN PROPERTIES - ColorScheme diff --git a/packages/material_ui/test/theme_data_test.dart b/packages/material_ui/test/theme_data_test.dart index aeba02fce14c..b441dfab9419 100644 --- a/packages/material_ui/test/theme_data_test.dart +++ b/packages/material_ui/test/theme_data_test.dart @@ -6,8 +6,8 @@ import 'dart:ui'; import 'package:cupertino_ui/cupertino_ui.dart'; import 'package:flutter/foundation.dart'; -import 'package:material_ui/material_ui.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:material_ui/material_ui.dart'; void main() { test('Theme data control test', () { @@ -127,6 +127,48 @@ void main() { ); }); + test('ThemeData supports Material 3 contrast levels', () { + final standardTheme = ThemeData(); + final mediumContrastTheme = ThemeData(contrastLevel: ContrastLevel.medium); + final highContrastTheme = ThemeData(contrastLevel: ContrastLevel.high); + final darkMediumContrastTheme = ThemeData( + brightness: Brightness.dark, + contrastLevel: ContrastLevel.medium, + ); + final darkHighContrastTheme = ThemeData( + brightness: Brightness.dark, + contrastLevel: ContrastLevel.high, + ); + + expect(standardTheme.colorScheme.primary, isNot(mediumContrastTheme.colorScheme.primary)); + expect(mediumContrastTheme.colorScheme.primary, const Color(0xFF4F378B)); + expect(mediumContrastTheme.colorScheme.onSurface, const Color(0xFF000000)); + expect(highContrastTheme.colorScheme.primary, const Color(0xFF381E72)); + expect(highContrastTheme.colorScheme.onSurfaceVariant, const Color(0xFF000000)); + expect(darkMediumContrastTheme.colorScheme.primary, const Color(0xFFEADDFF)); + expect(darkMediumContrastTheme.colorScheme.onSurface, const Color(0xFFFFFFFF)); + expect(darkHighContrastTheme.colorScheme.primary, const Color(0xFFF6EDFF)); + expect(darkHighContrastTheme.colorScheme.onSurfaceVariant, const Color(0xFFFFFFFF)); + }); + + test('ThemeData supports custom Material 3 contrast levels from seed colors', () { + const contrastLevel = ContrastLevel(0.25); + final theme = ThemeData(colorSchemeSeed: Colors.blue, contrastLevel: contrastLevel); + + expect( + theme.colorScheme, + ColorScheme.fromSeed(seedColor: Colors.blue, contrastLevel: contrastLevel.value), + ); + }); + + test('ThemeData defaults to standard Material 3 color scheme for custom contrast levels', () { + final standardTheme = ThemeData(); + const contrastLevel = ContrastLevel(0.25); + final customContrastTheme = ThemeData(contrastLevel: contrastLevel); + + expect(customContrastTheme.colorScheme, standardTheme.colorScheme); + }); + testWidgets( 'Defaults to MaterialTapTargetBehavior.padded on mobile platforms and MaterialTapTargetBehavior.shrinkWrap on desktop', (WidgetTester tester) async { @@ -367,7 +409,6 @@ void main() { expect(theme.colorScheme.onInverseSurface, const Color(0xfff5eff7)); expect(theme.colorScheme.inversePrimary, const Color(0xffd0bcff)); expect(theme.colorScheme.shadow, const Color(0xff000000)); - expect(theme.colorScheme.surfaceTint, const Color(0xff6750a4)); expect(theme.colorScheme.brightness, Brightness.light); expect(theme.primaryColor, theme.colorScheme.primary); @@ -843,7 +884,6 @@ void main() { expect(theme.colorScheme.onInverseSurface, const Color(0xfff5eff7)); expect(theme.colorScheme.inversePrimary, const Color(0xffd0bcff)); expect(theme.colorScheme.shadow, const Color(0xff000000)); - expect(theme.colorScheme.surfaceTint, const Color(0xff6750a4)); expect(theme.colorScheme.brightness, Brightness.light); expect(theme.primaryColor, theme.colorScheme.primary); @@ -905,7 +945,6 @@ void main() { expect(theme.colorScheme.onInverseSurface, const Color(0xff322f35)); expect(theme.colorScheme.inversePrimary, const Color(0xff6750a4)); expect(theme.colorScheme.shadow, const Color(0xff000000)); - expect(theme.colorScheme.surfaceTint, const Color(0xffd0bcff)); expect(theme.colorScheme.brightness, Brightness.dark); expect(theme.primaryColor, theme.colorScheme.surface); diff --git a/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart b/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart index 2da295bc4e99..8e00539223c3 100644 --- a/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart +++ b/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart @@ -12,8 +12,7 @@ import 'package:args/args.dart'; -// TODO(elliette): Import template files. -// import '../templates/x_template.dart'; +import '../templates/color_scheme_template.dart'; Future main(List args) async { // Parse arguments @@ -21,8 +20,7 @@ Future main(List args) async { parser.addFlag('verbose', abbr: 'v', help: 'Enable verbose output', negatable: false); final ArgResults argResults = parser.parse(args); // TODO(elliette): Add token logger when verbose flag is used. - // ignore: unused_local_variable final verbose = argResults['verbose'] as bool; - // TODO(elliette): Invoke template generators. - // const XTemplate().generateFile(verbose: verbose); + + const ColorSchemeTemplate().generateFile(verbose: verbose); } diff --git a/packages/material_ui/tool/gen_defaults/templates/color_scheme_template.dart b/packages/material_ui/tool/gen_defaults/templates/color_scheme_template.dart new file mode 100644 index 000000000000..b1cf75a7a12d --- /dev/null +++ b/packages/material_ui/tool/gen_defaults/templates/color_scheme_template.dart @@ -0,0 +1,339 @@ +// Copyright 2013 The Flutter Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import '../data/color.dart'; +import '../data/color_dark.dart'; +import '../data/color_dark_high_contrast.dart'; +import '../data/color_dark_medium_contrast.dart'; +import '../data/color_light_high_contrast.dart'; +import '../data/color_light_medium_contrast.dart'; +import 'template.dart'; + +class ColorSchemeTemplate extends M3TokenTemplate { + const ColorSchemeTemplate(); + + @override + String get name => 'theme_data'; + + @override + String generateContents() { + return ''' +const ColorScheme _colorSchemeLightM3 = ColorScheme( + brightness: Brightness.light, + primary: Color(${TokenColor.primary}), + onPrimary: Color(${TokenColor.onPrimary}), + primaryContainer: Color(${TokenColor.primaryContainer}), + onPrimaryContainer: Color(${TokenColor.onPrimaryContainer}), + primaryFixed: Color(${TokenColor.primaryFixed}), + primaryFixedDim: Color(${TokenColor.primaryFixedDim}), + onPrimaryFixed: Color(${TokenColor.onPrimaryFixed}), + onPrimaryFixedVariant: Color(${TokenColor.onPrimaryFixedVariant}), + secondary: Color(${TokenColor.secondary}), + onSecondary: Color(${TokenColor.onSecondary}), + secondaryContainer: Color(${TokenColor.secondaryContainer}), + onSecondaryContainer: Color(${TokenColor.onSecondaryContainer}), + secondaryFixed: Color(${TokenColor.secondaryFixed}), + secondaryFixedDim: Color(${TokenColor.secondaryFixedDim}), + onSecondaryFixed: Color(${TokenColor.onSecondaryFixed}), + onSecondaryFixedVariant: Color(${TokenColor.onSecondaryFixedVariant}), + tertiary: Color(${TokenColor.tertiary}), + onTertiary: Color(${TokenColor.onTertiary}), + tertiaryContainer: Color(${TokenColor.tertiaryContainer}), + onTertiaryContainer: Color(${TokenColor.onTertiaryContainer}), + tertiaryFixed: Color(${TokenColor.tertiaryFixed}), + tertiaryFixedDim: Color(${TokenColor.tertiaryFixedDim}), + onTertiaryFixed: Color(${TokenColor.onTertiaryFixed}), + onTertiaryFixedVariant: Color(${TokenColor.onTertiaryFixedVariant}), + error: Color(${TokenColor.error}), + onError: Color(${TokenColor.onError}), + errorContainer: Color(${TokenColor.errorContainer}), + onErrorContainer: Color(${TokenColor.onErrorContainer}), + background: Color(${TokenColor.background}), + onBackground: Color(${TokenColor.onBackground}), + surface: Color(${TokenColor.surface}), + surfaceBright: Color(${TokenColor.surfaceBright}), + surfaceContainerLowest: Color(${TokenColor.surfaceContainerLowest}), + surfaceContainerLow: Color(${TokenColor.surfaceContainerLow}), + surfaceContainer: Color(${TokenColor.surfaceContainer}), + surfaceContainerHigh: Color(${TokenColor.surfaceContainerHigh}), + surfaceContainerHighest: Color(${TokenColor.surfaceContainerHighest}), + surfaceDim: Color(${TokenColor.surfaceDim}), + onSurface: Color(${TokenColor.onSurface}), + surfaceVariant: Color(${TokenColor.surfaceVariant}), + onSurfaceVariant: Color(${TokenColor.onSurfaceVariant}), + outline: Color(${TokenColor.outline}), + outlineVariant: Color(${TokenColor.outlineVariant}), + shadow: Color(${TokenColor.shadow}), + scrim: Color(${TokenColor.scrim}), + inverseSurface: Color(${TokenColor.inverseSurface}), + onInverseSurface: Color(${TokenColor.inverseOnSurface}), + inversePrimary: Color(${TokenColor.inversePrimary}), +); + +const ColorScheme _colorSchemeDarkM3 = ColorScheme( + brightness: Brightness.dark, + primary: Color(${TokenColorDark.primary}), + onPrimary: Color(${TokenColorDark.onPrimary}), + primaryContainer: Color(${TokenColorDark.primaryContainer}), + onPrimaryContainer: Color(${TokenColorDark.onPrimaryContainer}), + primaryFixed: Color(${TokenColor.primaryFixed}), + primaryFixedDim: Color(${TokenColor.primaryFixedDim}), + onPrimaryFixed: Color(${TokenColor.onPrimaryFixed}), + onPrimaryFixedVariant: Color(${TokenColor.onPrimaryFixedVariant}), + secondary: Color(${TokenColorDark.secondary}), + onSecondary: Color(${TokenColorDark.onSecondary}), + secondaryContainer: Color(${TokenColorDark.secondaryContainer}), + onSecondaryContainer: Color(${TokenColorDark.onSecondaryContainer}), + secondaryFixed: Color(${TokenColor.secondaryFixed}), + secondaryFixedDim: Color(${TokenColor.secondaryFixedDim}), + onSecondaryFixed: Color(${TokenColor.onSecondaryFixed}), + onSecondaryFixedVariant: Color(${TokenColor.onSecondaryFixedVariant}), + tertiary: Color(${TokenColorDark.tertiary}), + onTertiary: Color(${TokenColorDark.onTertiary}), + tertiaryContainer: Color(${TokenColorDark.tertiaryContainer}), + onTertiaryContainer: Color(${TokenColorDark.onTertiaryContainer}), + tertiaryFixed: Color(${TokenColor.tertiaryFixed}), + tertiaryFixedDim: Color(${TokenColor.tertiaryFixedDim}), + onTertiaryFixed: Color(${TokenColor.onTertiaryFixed}), + onTertiaryFixedVariant: Color(${TokenColor.onTertiaryFixedVariant}), + error: Color(${TokenColorDark.error}), + onError: Color(${TokenColorDark.onError}), + errorContainer: Color(${TokenColorDark.errorContainer}), + onErrorContainer: Color(${TokenColorDark.onErrorContainer}), + background: Color(${TokenColorDark.background}), + onBackground: Color(${TokenColorDark.onBackground}), + surface: Color(${TokenColorDark.surface}), + surfaceBright: Color(${TokenColorDark.surfaceBright}), + surfaceContainerLowest: Color(${TokenColorDark.surfaceContainerLowest}), + surfaceContainerLow: Color(${TokenColorDark.surfaceContainerLow}), + surfaceContainer: Color(${TokenColorDark.surfaceContainer}), + surfaceContainerHigh: Color(${TokenColorDark.surfaceContainerHigh}), + surfaceContainerHighest: Color(${TokenColorDark.surfaceContainerHighest}), + surfaceDim: Color(${TokenColorDark.surfaceDim}), + onSurface: Color(${TokenColorDark.onSurface}), + surfaceVariant: Color(${TokenColorDark.surfaceVariant}), + onSurfaceVariant: Color(${TokenColorDark.onSurfaceVariant}), + outline: Color(${TokenColorDark.outline}), + outlineVariant: Color(${TokenColorDark.outlineVariant}), + shadow: Color(${TokenColorDark.shadow}), + scrim: Color(${TokenColorDark.scrim}), + inverseSurface: Color(${TokenColorDark.inverseSurface}), + onInverseSurface: Color(${TokenColorDark.inverseOnSurface}), + inversePrimary: Color(${TokenColorDark.inversePrimary}), +); + +const ColorScheme _colorSchemeLightMediumContrastM3 = ColorScheme( + brightness: Brightness.light, + primary: Color(${TokenColorLightMediumContrast.primary}), + onPrimary: Color(${TokenColorLightMediumContrast.onPrimary}), + primaryContainer: Color(${TokenColorLightMediumContrast.primaryContainer}), + onPrimaryContainer: Color(${TokenColorLightMediumContrast.onPrimaryContainer}), + primaryFixed: Color(${TokenColorLightMediumContrast.primaryFixed}), + primaryFixedDim: Color(${TokenColorLightMediumContrast.primaryFixedDim}), + onPrimaryFixed: Color(${TokenColorLightMediumContrast.onPrimaryFixed}), + onPrimaryFixedVariant: Color(${TokenColorLightMediumContrast.onPrimaryFixedVariant}), + secondary: Color(${TokenColorLightMediumContrast.secondary}), + onSecondary: Color(${TokenColorLightMediumContrast.onSecondary}), + secondaryContainer: Color(${TokenColorLightMediumContrast.secondaryContainer}), + onSecondaryContainer: Color(${TokenColorLightMediumContrast.onSecondaryContainer}), + secondaryFixed: Color(${TokenColorLightMediumContrast.secondaryFixed}), + secondaryFixedDim: Color(${TokenColorLightMediumContrast.secondaryFixedDim}), + onSecondaryFixed: Color(${TokenColorLightMediumContrast.onSecondaryFixed}), + onSecondaryFixedVariant: Color(${TokenColorLightMediumContrast.onSecondaryFixedVariant}), + tertiary: Color(${TokenColorLightMediumContrast.tertiary}), + onTertiary: Color(${TokenColorLightMediumContrast.onTertiary}), + tertiaryContainer: Color(${TokenColorLightMediumContrast.tertiaryContainer}), + onTertiaryContainer: Color(${TokenColorLightMediumContrast.onTertiaryContainer}), + tertiaryFixed: Color(${TokenColorLightMediumContrast.tertiaryFixed}), + tertiaryFixedDim: Color(${TokenColorLightMediumContrast.tertiaryFixedDim}), + onTertiaryFixed: Color(${TokenColorLightMediumContrast.onTertiaryFixed}), + onTertiaryFixedVariant: Color(${TokenColorLightMediumContrast.onTertiaryFixedVariant}), + error: Color(${TokenColorLightMediumContrast.error}), + onError: Color(${TokenColorLightMediumContrast.onError}), + errorContainer: Color(${TokenColorLightMediumContrast.errorContainer}), + onErrorContainer: Color(${TokenColorLightMediumContrast.onErrorContainer}), + onBackground: Color(${TokenColorLightMediumContrast.onBackground}), + onSurface: Color(${TokenColorLightMediumContrast.onSurface}), + onSurfaceVariant: Color(${TokenColorLightMediumContrast.onSurfaceVariant}), + outline: Color(${TokenColorLightMediumContrast.outline}), + outlineVariant: Color(${TokenColorLightMediumContrast.outlineVariant}), + onInverseSurface: Color(${TokenColorLightMediumContrast.inverseOnSurface}), + // The following color roles have the same values as the roles in the light color scheme _colorSchemeLightM3. + background: Color(${TokenColor.background}), + surface: Color(${TokenColor.surface}), + surfaceBright: Color(${TokenColor.surfaceBright}), + surfaceContainerLowest: Color(${TokenColor.surfaceContainerLowest}), + surfaceContainerLow: Color(${TokenColor.surfaceContainerLow}), + surfaceContainer: Color(${TokenColor.surfaceContainer}), + surfaceContainerHigh: Color(${TokenColor.surfaceContainerHigh}), + surfaceContainerHighest: Color(${TokenColor.surfaceContainerHighest}), + surfaceDim: Color(${TokenColor.surfaceDim}), + surfaceVariant: Color(${TokenColor.surfaceVariant}), + shadow: Color(${TokenColor.shadow}), + scrim: Color(${TokenColor.scrim}), + inverseSurface: Color(${TokenColor.inverseSurface}), + inversePrimary: Color(${TokenColor.inversePrimary}), +); + +const ColorScheme _colorSchemeLightHighContrastM3 = ColorScheme( + brightness: Brightness.light, + primary: Color(${TokenColorLightHighContrast.primary}), + onPrimary: Color(${TokenColorLightHighContrast.onPrimary}), + primaryContainer: Color(${TokenColorLightHighContrast.primaryContainer}), + onPrimaryContainer: Color(${TokenColorLightHighContrast.onPrimaryContainer}), + primaryFixed: Color(${TokenColorLightHighContrast.primaryFixed}), + primaryFixedDim: Color(${TokenColorLightHighContrast.primaryFixedDim}), + onPrimaryFixed: Color(${TokenColorLightHighContrast.onPrimaryFixed}), + onPrimaryFixedVariant: Color(${TokenColorLightHighContrast.onPrimaryFixedVariant}), + secondary: Color(${TokenColorLightHighContrast.secondary}), + onSecondary: Color(${TokenColorLightHighContrast.onSecondary}), + secondaryContainer: Color(${TokenColorLightHighContrast.secondaryContainer}), + onSecondaryContainer: Color(${TokenColorLightHighContrast.onSecondaryContainer}), + secondaryFixed: Color(${TokenColorLightHighContrast.secondaryFixed}), + secondaryFixedDim: Color(${TokenColorLightHighContrast.secondaryFixedDim}), + onSecondaryFixed: Color(${TokenColorLightHighContrast.onSecondaryFixed}), + onSecondaryFixedVariant: Color(${TokenColorLightHighContrast.onSecondaryFixedVariant}), + tertiary: Color(${TokenColorLightHighContrast.tertiary}), + onTertiary: Color(${TokenColorLightHighContrast.onTertiary}), + tertiaryContainer: Color(${TokenColorLightHighContrast.tertiaryContainer}), + onTertiaryContainer: Color(${TokenColorLightHighContrast.onTertiaryContainer}), + tertiaryFixed: Color(${TokenColorLightHighContrast.tertiaryFixed}), + tertiaryFixedDim: Color(${TokenColorLightHighContrast.tertiaryFixedDim}), + onTertiaryFixed: Color(${TokenColorLightHighContrast.onTertiaryFixed}), + onTertiaryFixedVariant: Color(${TokenColorLightHighContrast.onTertiaryFixedVariant}), + error: Color(${TokenColorLightHighContrast.error}), + onError: Color(${TokenColorLightHighContrast.onError}), + errorContainer: Color(${TokenColorLightHighContrast.errorContainer}), + onErrorContainer: Color(${TokenColorLightHighContrast.onErrorContainer}), + onBackground: Color(${TokenColorLightHighContrast.onBackground}), + onSurface: Color(${TokenColorLightHighContrast.onSurface}), + onSurfaceVariant: Color(${TokenColorLightHighContrast.onSurfaceVariant}), + outline: Color(${TokenColorLightHighContrast.outline}), + outlineVariant: Color(${TokenColorLightHighContrast.outlineVariant}), + onInverseSurface: Color(${TokenColorLightHighContrast.inverseOnSurface}), + // The following color roles have the same values as the roles in the light color scheme _colorSchemeLightM3. + background: Color(${TokenColor.background}), + surface: Color(${TokenColor.surface}), + surfaceBright: Color(${TokenColor.surfaceBright}), + surfaceContainerLowest: Color(${TokenColor.surfaceContainerLowest}), + surfaceContainerLow: Color(${TokenColor.surfaceContainerLow}), + surfaceContainer: Color(${TokenColor.surfaceContainer}), + surfaceContainerHigh: Color(${TokenColor.surfaceContainerHigh}), + surfaceContainerHighest: Color(${TokenColor.surfaceContainerHighest}), + surfaceDim: Color(${TokenColor.surfaceDim}), + surfaceVariant: Color(${TokenColor.surfaceVariant}), + shadow: Color(${TokenColor.shadow}), + scrim: Color(${TokenColor.scrim}), + inverseSurface: Color(${TokenColor.inverseSurface}), + inversePrimary: Color(${TokenColor.inversePrimary}), +); + +const ColorScheme _colorSchemeDarkMediumContrastM3 = ColorScheme( + brightness: Brightness.dark, + primary: Color(${TokenColorDarkMediumContrast.primary}), + onPrimary: Color(${TokenColorDarkMediumContrast.onPrimary}), + primaryContainer: Color(${TokenColorDarkMediumContrast.primaryContainer}), + onPrimaryContainer: Color(${TokenColorDarkMediumContrast.onPrimaryContainer}), + primaryFixed: Color(${TokenColorDarkMediumContrast.primaryFixed}), + primaryFixedDim: Color(${TokenColorDarkMediumContrast.primaryFixedDim}), + onPrimaryFixed: Color(${TokenColorDarkMediumContrast.onPrimaryFixed}), + onPrimaryFixedVariant: Color(${TokenColorDarkMediumContrast.onPrimaryFixedVariant}), + secondary: Color(${TokenColorDarkMediumContrast.secondary}), + onSecondary: Color(${TokenColorDarkMediumContrast.onSecondary}), + secondaryContainer: Color(${TokenColorDarkMediumContrast.secondaryContainer}), + onSecondaryContainer: Color(${TokenColorDarkMediumContrast.onSecondaryContainer}), + secondaryFixed: Color(${TokenColorDarkMediumContrast.secondaryFixed}), + secondaryFixedDim: Color(${TokenColorDarkMediumContrast.secondaryFixedDim}), + onSecondaryFixed: Color(${TokenColorDarkMediumContrast.onSecondaryFixed}), + onSecondaryFixedVariant: Color(${TokenColorDarkMediumContrast.onSecondaryFixedVariant}), + tertiary: Color(${TokenColorDarkMediumContrast.tertiary}), + onTertiary: Color(${TokenColorDarkMediumContrast.onTertiary}), + tertiaryContainer: Color(${TokenColorDarkMediumContrast.tertiaryContainer}), + onTertiaryContainer: Color(${TokenColorDarkMediumContrast.onTertiaryContainer}), + tertiaryFixed: Color(${TokenColorDarkMediumContrast.tertiaryFixed}), + tertiaryFixedDim: Color(${TokenColorDarkMediumContrast.tertiaryFixedDim}), + onTertiaryFixed: Color(${TokenColorDarkMediumContrast.onTertiaryFixed}), + onTertiaryFixedVariant: Color(${TokenColorDarkMediumContrast.onTertiaryFixedVariant}), + error: Color(${TokenColorDarkMediumContrast.error}), + onError: Color(${TokenColorDarkMediumContrast.onError}), + errorContainer: Color(${TokenColorDarkMediumContrast.errorContainer}), + onErrorContainer: Color(${TokenColorDarkMediumContrast.onErrorContainer}), + onBackground: Color(${TokenColorDarkMediumContrast.onBackground}), + onSurface: Color(${TokenColorDarkMediumContrast.onSurface}), + onSurfaceVariant: Color(${TokenColorDarkMediumContrast.onSurfaceVariant}), + outline: Color(${TokenColorDarkMediumContrast.outline}), + outlineVariant: Color(${TokenColorDarkMediumContrast.outlineVariant}), + onInverseSurface: Color(${TokenColorDarkMediumContrast.inverseOnSurface}), + inversePrimary: Color(${TokenColorDarkMediumContrast.inversePrimary}), + // The following color roles have the same values as the roles in the dark color scheme _colorSchemeDarkM3. + background: Color(${TokenColorDark.background}), + surface: Color(${TokenColorDark.surface}), + surfaceBright: Color(${TokenColorDark.surfaceBright}), + surfaceContainerLowest: Color(${TokenColorDark.surfaceContainerLowest}), + surfaceContainerLow: Color(${TokenColorDark.surfaceContainerLow}), + surfaceContainer: Color(${TokenColorDark.surfaceContainer}), + surfaceContainerHigh: Color(${TokenColorDark.surfaceContainerHigh}), + surfaceContainerHighest: Color(${TokenColorDark.surfaceContainerHighest}), + surfaceDim: Color(${TokenColorDark.surfaceDim}), + surfaceVariant: Color(${TokenColorDark.surfaceVariant}), + shadow: Color(${TokenColorDark.shadow}), + scrim: Color(${TokenColorDark.scrim}), + inverseSurface: Color(${TokenColorDark.inverseSurface}), +); + +const ColorScheme _colorSchemeDarkHighContrastM3 = ColorScheme( + brightness: Brightness.dark, + primary: Color(${TokenColorDarkHighContrast.primary}), + onPrimary: Color(${TokenColorDarkHighContrast.onPrimary}), + primaryContainer: Color(${TokenColorDarkHighContrast.primaryContainer}), + onPrimaryContainer: Color(${TokenColorDarkHighContrast.onPrimaryContainer}), + primaryFixed: Color(${TokenColorDarkHighContrast.primaryFixed}), + primaryFixedDim: Color(${TokenColorDarkHighContrast.primaryFixedDim}), + onPrimaryFixed: Color(${TokenColorDarkHighContrast.onPrimaryFixed}), + onPrimaryFixedVariant: Color(${TokenColorDarkHighContrast.onPrimaryFixedVariant}), + secondary: Color(${TokenColorDarkHighContrast.secondary}), + onSecondary: Color(${TokenColorDarkHighContrast.onSecondary}), + secondaryContainer: Color(${TokenColorDarkHighContrast.secondaryContainer}), + onSecondaryContainer: Color(${TokenColorDarkHighContrast.onSecondaryContainer}), + secondaryFixed: Color(${TokenColorDarkHighContrast.secondaryFixed}), + secondaryFixedDim: Color(${TokenColorDarkHighContrast.secondaryFixedDim}), + onSecondaryFixed: Color(${TokenColorDarkHighContrast.onSecondaryFixed}), + onSecondaryFixedVariant: Color(${TokenColorDarkHighContrast.onSecondaryFixedVariant}), + tertiary: Color(${TokenColorDarkHighContrast.tertiary}), + onTertiary: Color(${TokenColorDarkHighContrast.onTertiary}), + tertiaryContainer: Color(${TokenColorDarkHighContrast.tertiaryContainer}), + onTertiaryContainer: Color(${TokenColorDarkHighContrast.onTertiaryContainer}), + tertiaryFixed: Color(${TokenColorDarkHighContrast.tertiaryFixed}), + tertiaryFixedDim: Color(${TokenColorDarkHighContrast.tertiaryFixedDim}), + onTertiaryFixed: Color(${TokenColorDarkHighContrast.onTertiaryFixed}), + onTertiaryFixedVariant: Color(${TokenColorDarkHighContrast.onTertiaryFixedVariant}), + error: Color(${TokenColorDarkHighContrast.error}), + onError: Color(${TokenColorDarkHighContrast.onError}), + errorContainer: Color(${TokenColorDarkHighContrast.errorContainer}), + onErrorContainer: Color(${TokenColorDarkHighContrast.onErrorContainer}), + onBackground: Color(${TokenColorDarkHighContrast.onBackground}), + onSurface: Color(${TokenColorDarkHighContrast.onSurface}), + onSurfaceVariant: Color(${TokenColorDarkHighContrast.onSurfaceVariant}), + outline: Color(${TokenColorDarkHighContrast.outline}), + outlineVariant: Color(${TokenColorDarkHighContrast.outlineVariant}), + onInverseSurface: Color(${TokenColorDarkHighContrast.inverseOnSurface}), + inversePrimary: Color(${TokenColorDarkHighContrast.inversePrimary}), + // The following color roles have the same values as the roles in the dark color scheme _colorSchemeDarkM3. + background: Color(${TokenColorDark.background}), + surface: Color(${TokenColorDark.surface}), + surfaceBright: Color(${TokenColorDark.surfaceBright}), + surfaceContainerLowest: Color(${TokenColorDark.surfaceContainerLowest}), + surfaceContainerLow: Color(${TokenColorDark.surfaceContainerLow}), + surfaceContainer: Color(${TokenColorDark.surfaceContainer}), + surfaceContainerHigh: Color(${TokenColorDark.surfaceContainerHigh}), + surfaceContainerHighest: Color(${TokenColorDark.surfaceContainerHighest}), + surfaceDim: Color(${TokenColorDark.surfaceDim}), + surfaceVariant: Color(${TokenColorDark.surfaceVariant}), + shadow: Color(${TokenColorDark.shadow}), + scrim: Color(${TokenColorDark.scrim}), + inverseSurface: Color(${TokenColorDark.inverseSurface}), +); +'''; + } +} diff --git a/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart b/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart index 91053fcd959d..d5833155b0ee 100644 --- a/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart +++ b/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart @@ -5,6 +5,7 @@ import 'dart:io'; import 'package:test/test.dart'; +import '../templates/color_scheme_template.dart'; import 'test_fixtures/test_templates.dart'; void main() { @@ -66,6 +67,27 @@ void main() { expect(file.readAsStringSync(), contains(formattedClass)); }); + test('ColorSchemeTemplate generates existing M3 color scheme constants', () { + final String contents = const ColorSchemeTemplate().generateContents(); + + expect(contents, contains('const ColorScheme _colorSchemeLightM3 = ColorScheme(')); + expect(contents, contains('const ColorScheme _colorSchemeDarkM3 = ColorScheme(')); + expect( + contents, + contains('const ColorScheme _colorSchemeLightMediumContrastM3 = ColorScheme('), + ); + expect( + contents, + contains('const ColorScheme _colorSchemeLightHighContrastM3 = ColorScheme('), + ); + expect( + contents, + contains('const ColorScheme _colorSchemeDarkMediumContrastM3 = ColorScheme('), + ); + expect(contents, contains('const ColorScheme _colorSchemeDarkHighContrastM3 = ColorScheme(')); + expect(contents, isNot(contains('_colorSchemeLightM3E'))); + }); + test('materialLib path resolves correctly based on MaterialVersion', () { final m3Template = TestM3Template(); final m3ExpressiveTemplate = TestM3ExpressiveTemplate();