From 2000d65df9d278e9b1c7d3395c93d5c1ccd4827a Mon Sep 17 00:00:00 2001 From: Rydmike Date: Tue, 5 Jul 2022 17:52:22 +0300 Subject: [PATCH] Add full support for surfaceTint color, so it is also used as FCS blend color. Needs tests! --- CHANGELOG.md | 11 ++-- lib/src/flex_color_scheme.dart | 88 +++++++++++++++++++++++-- lib/src/flex_scheme_color.dart | 2 +- lib/src/flex_theme_data_extensions.dart | 30 +++++++++ test/flex_color_scheme_test.dart | 2 +- 5 files changed, 122 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eb588b7..c4b2a5b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,9 @@ All notable changes to the **FlexColorScheme** package are documented here. **NEW** -* **Added** support for in Flutter 3.0.0 new `ColorScheme.surfaceTint` color. The support is - in this release at a basic level, it is set to primary color by default, as Flutter - and Material 3 does. Later release will add support in Themes Playground to customize - it, then also the FlexColorScheme surface blend color will become changeable and use the - `ColorScheme.surfaceTint` as its blend color instead of `ColorScheme.primary`. +* **Added** full support for in Flutter 3.0.0 new `ColorScheme.surfaceTint` color. It is set to + primary color by default, as Flutter and Material 3 does. If a custom `surfaceTint` color is + provided, it is also used as the blend color, instead of `primary` color for surface blend. * **Added** pass through API for using Flutter 3.0.0 theme extensions directly via FlexColorScheme API. It was added to avoid having to add theme extensions with a CopyWith on FlexColorScheme @@ -120,6 +118,9 @@ All notable changes to the **FlexColorScheme** package are documented here. the same issue the Playground app did, but the issue is a Flutter SDK issue that FlexColorScheme cannot fix. Most likely 99% of apps will never run into this issue. +* **TODO**: Add support in Themes Playground to customize `surfaceTint` color and hence also the + used color for surface blends. + ## v5.0.1 - April 29, 2022 **FIX** diff --git a/lib/src/flex_color_scheme.dart b/lib/src/flex_color_scheme.dart index 960bdac4..4f468741 100644 --- a/lib/src/flex_color_scheme.dart +++ b/lib/src/flex_color_scheme.dart @@ -565,6 +565,7 @@ class FlexColorScheme with Diagnosticable { this.onSurface, this.onBackground, this.onError, + this.surfaceTint, this.tabBarStyle = FlexTabBarStyle.forAppBar, this.appBarElevation = 0, this.bottomAppBarElevation = 0, @@ -886,6 +887,20 @@ class FlexColorScheme with Diagnosticable { /// color, and will be be black if it is light and white if it is dark. final Color? onError; + /// A color used as an overlay on a surface color to indicate a component's + /// elevation. + /// + /// You can use this property for convenience if you want to override the + /// color that this scheme color gets via the factory behavior. + /// If a [colorScheme] was provided where this corresponding color is + /// defined, this color property will override the same color in it. + /// + /// This color is used by M3 for colored elevation, it is also used as the + /// blend color for FlexColorScheme surface blends. + /// + /// If undefined it defaults to [primary] color. + final Color? surfaceTint; + /// Select preferred style for the default [TabBarTheme]. /// /// By default the TabBarTheme is made to fit with the style of the AppBar, @@ -1438,8 +1453,7 @@ class FlexColorScheme with Diagnosticable { /// [FlexColorScheme] and is available from version 4.2.0. It is useful if /// you already have a custom [ColorScheme] based color definition that /// you want to use with FlexColorScheme theming and its sub-theming - /// capabilities. This will become particularly useful when using Material 3 - /// based design and its seed generated color schemes. + /// capabilities. /// /// If you provide both a [ColorScheme] and some individual direct property /// values that also exist in a [ColorScheme], the individual property @@ -2090,6 +2104,20 @@ class FlexColorScheme with Diagnosticable { /// color that this scheme color gets via the factory behavior. final Color? onError, + /// A color used as an overlay on a surface color to indicate a component's + /// elevation. + /// + /// You can use this property for convenience if you want to override the + /// color that this scheme color gets via the factory behavior. + /// If a [colorScheme] was provided where this corresponding color is + /// defined, this color property will override the same color in it. + /// + /// This color is used by M3 for colored elevation, it is also used as the + /// blend color for FlexColorScheme surface blends. + /// + /// If undefined it defaults to [primary] color. + final Color? surfaceTint, + /// Makes the light theme backgrounds lighter or even white. /// /// Scaffold background will become white, and other surfaces also get @@ -2600,6 +2628,9 @@ class FlexColorScheme with Diagnosticable { errorContainer: seedScheme.errorContainer, ); } + // Get effective surfaceTint color, also used as blend color for surfaces. + final Color blendColor = + surfaceTint ?? colorScheme?.surfaceTint ?? effectiveColors.primary; // Compute surface blends, they are also be added to seeded surfaces. final FlexSchemeSurfaceColors surfaceSchemeColors = FlexSchemeSurfaceColors.blend( @@ -2608,6 +2639,14 @@ class FlexColorScheme with Diagnosticable { blendLevel: blendLevel, surfaceVariantBlendDivide: seed.useKeyColors ? 2 : 1, schemeColors: effectiveColors, + blendColors: FlexSchemeSurfaceColors( + surface: blendColor, + surfaceVariant: blendColor, + inverseSurface: blendColor, + dialogBackground: blendColor, + background: blendColor, + scaffoldBackground: blendColor, + ), surfaceColors: seed.useKeyColors // Using seed colors, starting surfaces are given by generated scheme. ? FlexSchemeSurfaceColors( @@ -2765,6 +2804,7 @@ class FlexColorScheme with Diagnosticable { onSurfaceVariant: onColors.onSurfaceVariant, inverseSurface: effectiveInverseSurfaceColor, onInverseSurface: onColors.onInverseSurface, + surfaceTint: surfaceTint, ) ?? // In order to avoid using a ColorScheme.light that sets // some opinionated defaults on deprecated members that we do not @@ -2813,6 +2853,7 @@ class FlexColorScheme with Diagnosticable { Brightness.light, effectiveColors.primary, effectiveSurfaceColor), shadow: Colors.black, outline: _outlineColor(Brightness.light, onColors.onBackground), + surfaceTint: surfaceTint ?? effectiveColors.primary, ); // Determine the effective AppBar color: @@ -2890,6 +2931,7 @@ class FlexColorScheme with Diagnosticable { onError: useMaterial3ErrorColors && !seed.useKeyColors ? FlexColor.material3LightOnError : onColors.onError, + surfaceTint: surfaceTint, tabBarStyle: tabBarStyle, appBarElevation: appBarElevation, bottomAppBarElevation: effectiveBottomAppBarElevation, @@ -3728,6 +3770,20 @@ class FlexColorScheme with Diagnosticable { /// color that this scheme color gets via the factory behavior. final Color? onError, + /// A color used as an overlay on a surface color to indicate a component's + /// elevation. + /// + /// You can use this property for convenience if you want to override the + /// color that this scheme color gets via the factory behavior. + /// If a [colorScheme] was provided where this corresponding color is + /// defined, this color property will override the same color in it. + /// + /// This color is used by M3 for colored elevation, it is also used as the + /// blend color for FlexColorScheme surface blends. + /// + /// If undefined it defaults to [primary] color. + final Color? surfaceTint, + /// Makes the dark theme backgrounds darker or even black. /// /// Scaffold background will become fully black, and other surfaces also get @@ -4264,6 +4320,9 @@ class FlexColorScheme with Diagnosticable { errorContainer: seedScheme.errorContainer, ); } + // Get effective surfaceTint color, also used as blend color for surfaces. + final Color blendColor = + surfaceTint ?? colorScheme?.surfaceTint ?? effectiveColors.primary; // Compute surface blends, they may also be added on seeded surfaces. final FlexSchemeSurfaceColors surfaceSchemeColors = FlexSchemeSurfaceColors.blend( @@ -4272,6 +4331,14 @@ class FlexColorScheme with Diagnosticable { blendLevel: blendLevel, surfaceVariantBlendDivide: seed.useKeyColors ? 2 : 1, schemeColors: effectiveColors, + blendColors: FlexSchemeSurfaceColors( + surface: blendColor, + surfaceVariant: blendColor, + inverseSurface: blendColor, + dialogBackground: blendColor, + background: blendColor, + scaffoldBackground: blendColor, + ), surfaceColors: seed.useKeyColors // Using seed colors, starting surfaces are given by generated scheme. ? FlexSchemeSurfaceColors( @@ -4429,6 +4496,7 @@ class FlexColorScheme with Diagnosticable { onSurfaceVariant: onColors.onSurfaceVariant, inverseSurface: effectiveInverseSurfaceColor, onInverseSurface: onColors.onInverseSurface, + surfaceTint: surfaceTint, ) ?? // In order to avoid using a ColorScheme.dark that sets // some opinionated defaults on deprecated members that we do not @@ -4477,6 +4545,7 @@ class FlexColorScheme with Diagnosticable { Brightness.dark, effectiveColors.primary, effectiveSurfaceColor), shadow: Colors.black, outline: _outlineColor(Brightness.dark, onColors.onBackground), + surfaceTint: surfaceTint ?? effectiveColors.primary, ); // Determine the effective AppBar color: @@ -4557,6 +4626,7 @@ class FlexColorScheme with Diagnosticable { onError: useMaterial3ErrorColors && !seed.useKeyColors ? FlexColor.material3DarkOnError : onColors.onError, + surfaceTint: surfaceTint, tabBarStyle: tabBarStyle, appBarElevation: appBarElevation, bottomAppBarElevation: effectiveBottomAppBarElevation, @@ -6649,8 +6719,11 @@ class FlexColorScheme with Diagnosticable { inversePrimary: colorScheme?.inversePrimary, shadow: colorScheme?.shadow, outline: colorScheme?.outline, - surfaceTint: colorScheme?.surfaceTint, + surfaceTint: + surfaceTint ?? colorScheme?.surfaceTint ?? colors.primary, ) ?? + // No passed in ColorScheme, we create one with the effective + // override properties, plus FlexColorScheme ColorScheme defaults. ColorScheme( brightness: usedBrightness, primary: usedPrimary, @@ -6681,7 +6754,7 @@ class FlexColorScheme with Diagnosticable { usedBrightness, colors.primary, effectiveSurfaceColor), shadow: Colors.black, outline: _outlineColor(usedBrightness, onColors.onBackground), - surfaceTint: usedPrimary, + surfaceTint: surfaceTint ?? usedPrimary, ); } @@ -6737,6 +6810,7 @@ class FlexColorScheme with Diagnosticable { Color? onSurface, Color? onBackground, Color? onError, + Color? surfaceTint, FlexTabBarStyle? tabBarStyle, double? appBarElevation, double? bottomAppBarElevation, @@ -6779,6 +6853,7 @@ class FlexColorScheme with Diagnosticable { onSurface: onSurface ?? this.onSurface, onBackground: onBackground ?? this.onBackground, onError: onError ?? this.onError, + surfaceTint: surfaceTint ?? this.surfaceTint, tabBarStyle: tabBarStyle ?? this.tabBarStyle, appBarElevation: appBarElevation ?? this.appBarElevation, bottomAppBarElevation: @@ -6831,6 +6906,7 @@ class FlexColorScheme with Diagnosticable { other.onSurface == onSurface && other.onBackground == onBackground && other.onError == onError && + other.surfaceTint == surfaceTint && other.tabBarStyle == tabBarStyle && other.appBarElevation == appBarElevation && other.bottomAppBarElevation == bottomAppBarElevation && @@ -6876,6 +6952,7 @@ class FlexColorScheme with Diagnosticable { onSurface, onBackground, onError, + surfaceTint, tabBarStyle, appBarElevation, bottomAppBarElevation, @@ -6923,6 +7000,7 @@ class FlexColorScheme with Diagnosticable { properties.add(ColorProperty('onSurface', onSurface)); properties.add(ColorProperty('onBackground', onBackground)); properties.add(ColorProperty('onError', onError)); + properties.add(ColorProperty('surfaceTint', surfaceTint)); properties.add(EnumProperty('tabBarStyle', tabBarStyle)); properties .add(DiagnosticsProperty('appBarElevation', appBarElevation)); @@ -7784,6 +7862,7 @@ class _Scheme { Color? onInverseSurface, Color? inversePrimary, Color? shadow, + Color? surfaceTint, }) { final _Scheme scheme; switch (brightness) { @@ -7836,6 +7915,7 @@ class _Scheme { onInverseSurface: onInverseSurface ?? Color(scheme.inverseOnSurface), inversePrimary: inversePrimary ?? Color(scheme.inversePrimary), shadow: shadow ?? Color(scheme.shadow), + surfaceTint: surfaceTint ?? Color(scheme.primary), brightness: brightness, ); } diff --git a/lib/src/flex_scheme_color.dart b/lib/src/flex_scheme_color.dart index abfd6628..06556e82 100644 --- a/lib/src/flex_scheme_color.dart +++ b/lib/src/flex_scheme_color.dart @@ -8,7 +8,7 @@ import 'flex_extensions.dart'; // ignore_for_file: comment_references /// Immutable color data class for the main scheme colors used in a -/// FlexColorScheme based color scheme and theming engine. +/// FlexColorScheme based color scheme and theming engine. /// /// The default constructor requires the main color properties. To make a /// [FlexSchemeColor] from a minimum of just the primary color, use the factory diff --git a/lib/src/flex_theme_data_extensions.dart b/lib/src/flex_theme_data_extensions.dart index debad17f..42f55762 100644 --- a/lib/src/flex_theme_data_extensions.dart +++ b/lib/src/flex_theme_data_extensions.dart @@ -727,6 +727,20 @@ extension FlexThemeData on ThemeData { /// color that this scheme color gets via the extensions factory behavior. final Color? onError, + /// A color used as an overlay on a surface color to indicate a component's + /// elevation. + /// + /// You can use this property for convenience if you want to override the + /// color that this scheme color gets via this extension behavior. + /// If a [colorScheme] was provided where this corresponding color is + /// defined, this color property will override the same color in it. + /// + /// This color is used by M3 for colored elevation, it is also used as the + /// blend color for FlexColorScheme surface blends. + /// + /// If undefined it defaults to [primary] color. + final Color? surfaceTint, + /// Makes the light theme backgrounds lighter or even white. /// /// Scaffold background will become white, and other surfaces also get @@ -1173,6 +1187,7 @@ extension FlexThemeData on ThemeData { onSurface: onSurface, onBackground: onBackground, onError: onError, + surfaceTint: surfaceTint, lightIsWhite: lightIsWhite, swapColors: swapColors, tooltipsMatchBackground: tooltipsMatchBackground, @@ -1871,6 +1886,20 @@ extension FlexThemeData on ThemeData { /// color that this scheme color gets via the extensions factory behavior. final Color? onError, + /// A color used as an overlay on a surface color to indicate a component's + /// elevation. + /// + /// You can use this property for convenience if you want to override the + /// color that this scheme color gets via this extension behavior. + /// If a [colorScheme] was provided where this corresponding color is + /// defined, this color property will override the same color in it. + /// + /// This color is used by M3 for colored elevation, it is also used as the + /// blend color for FlexColorScheme surface blends. + /// + /// If undefined it defaults to [primary] color. + final Color? surfaceTint, + /// Makes the dark theme backgrounds darker or even black. /// /// Scaffold background will become fully black, and other surfaces also get @@ -2317,6 +2346,7 @@ extension FlexThemeData on ThemeData { onSurface: onSurface, onBackground: onBackground, onError: onError, + surfaceTint: surfaceTint, darkIsTrueBlack: darkIsTrueBlack, swapColors: swapColors, tooltipsMatchBackground: tooltipsMatchBackground, diff --git a/test/flex_color_scheme_test.dart b/test/flex_color_scheme_test.dart index 3723f86e..46010eac 100644 --- a/test/flex_color_scheme_test.dart +++ b/test/flex_color_scheme_test.dart @@ -555,7 +555,7 @@ void main() { // ignore: lines_longer_than_80_chars equalsIgnoringHashCodes( // ignore: lines_longer_than_80_chars - 'FlexColorScheme#00000(colorScheme: null, brightness: light, primary: Color(0xff6200ee), primaryContainer: Color(0xffbb86fc), primaryVariant: null, secondary: Color(0xff03dac6), secondaryContainer: Color(0xffcefaf8), secondaryVariant: null, tertiary: Color(0xff018786), tertiaryContainer: Color(0xffa4f1ef), error: Color(0xffb00020), surface: Color(0xffffffff), background: Color(0xffffffff), scaffoldBackground: Color(0xffffffff), appBarBackground: Color(0xff6200ee), dialogBackground: Color(0xffffffff), onPrimary: Color(0xffffffff), onPrimaryContainer: Color(0xffffffff), onSecondary: Color(0xff000000), onSecondaryContainer: Color(0xff000000), onTertiary: Color(0xffffffff), onTertiaryContainer: Color(0xff000000), onSurface: Color(0xff000000), onBackground: Color(0xff000000), onError: Color(0xffffffff), tabBarStyle: forAppBar, appBarElevation: 1.0, bottomAppBarElevation: 2.0, tooltipsMatchBackground: true, transparentStatusBar: false, visualDensity: 0, v: 0.0), textTheme: TextTheme#00000(displayLarge: TextStyle(inherit: true, size: 80.0), displayMedium: null, displaySmall: null, headlineLarge: null, headlineMedium: null, headlineSmall: null, titleLarge: null, titleMedium: null, titleSmall: null, bodyLarge: null, bodyMedium: null, bodySmall: null, labelLarge: null, labelMedium: null, labelSmall: null), primaryTextTheme: TextTheme#00000(displayLarge: TextStyle(inherit: true, size: 80.0), displayMedium: null, displaySmall: null, headlineLarge: null, headlineMedium: null, headlineSmall: null, titleLarge: null, titleMedium: null, titleSmall: null, bodyLarge: null, bodyMedium: null, bodySmall: null, labelLarge: null, labelMedium: null, labelSmall: null), fontFamily: Roboto, platform: android, typography: Typography#00000(englishLike: TextTheme#00000(displayLarge: TextStyle(debugLabel: englishLike displayLarge 2018, inherit: true, size: 96.0, weight: 300, letterSpacing: -1.5, baseline: alphabetic), displayMedium: TextStyle(debugLabel: englishLike displayMedium 2018, inherit: true, size: 60.0, weight: 300, letterSpacing: -0.5, baseline: alphabetic), displaySmall: TextStyle(debugLabel: englishLike displaySmall 2018, inherit: true, size: 48.0, weight: 400, letterSpacing: 0.0, baseline: alphabetic), headlineLarge: TextStyle(debugLabel: englishLike headlineLarge 2018, inherit: true, size: 40.0, weight: 400, letterSpacing: 0.3, baseline: alphabetic), headlineMedium: TextStyle(debugLabel: englishLike headlineMedium 2018, inherit: true, size: 34.0, weight: 400, letterSpacing: 0.3, baseline: alphabetic), headlineSmall: TextStyle(debugLabel: englishLike headlineSmall 2018, inherit: true, size: 24.0, weight: 400, letterSpacing: 0.0, baseline: alphabetic), titleLarge: TextStyle(debugLabel: englishLike titleLarge 2018, inherit: true, size: 20.0, weight: 500, letterSpacing: 0.1, baseline: alphabetic), titleMedium: TextStyle(debugLabel: englishLike titleMedium 2018, inherit: true, size: 16.0, weight: 400, letterSpacing: 0.1, baseline: alphabetic), titleSmall: TextStyle(debugLabel: englishLike titleSmall 2018, inherit: true, size: 14.0, weight: 500, letterSpacing: 0.1, baseline: alphabetic), bodyLarge: TextStyle(debugLabel: englishLike bodyLarge 2018, inherit: true, size: 16.0, weight: 400, letterSpacing: 0.5, baseline: alphabetic), bodyMedium: TextStyle(debugLabel: englishLike bodyMedium 2018, inherit: true, size: 14.0, weight: 400, letterSpacing: 0.3, baseline: alphabetic), bodySmall: TextStyle(debugLabel: englishLike bodySmall 2018, inherit: true, size: 12.0, weight: 400, letterSpacing: 0.4, baseline: alphabetic), labelLarge: TextStyle(debugLabel: englishLike labelLarge 2018, inherit: true, size: 14.0, weight: 500, letterSpacing: 1.3, baseline: alphabetic), labelMedium: TextStyle(debugLabel: englishLike labelMedium 2018, inherit: true, size: 11.0, weight: 400, letterSpacing: 1.5, baseline: alphabetic), labelSmall: TextStyle(debugLabel: englishLike labelSmall 2018, inherit: true, size: 10.0, weight: 400, letterSpacing: 1.5, baseline: alphabetic)), dense: TextTheme#00000(displayLarge: TextStyle(debugLabel: dense displayLarge 2018, inherit: true, size: 96.0, weight: 100, baseline: ideographic), displayMedium: TextStyle(debugLabel: dense displayMedium 2018, inherit: true, size: 60.0, weight: 100, baseline: ideographic), displaySmall: TextStyle(debugLabel: dense displaySmall 2018, inherit: true, size: 48.0, weight: 400, baseline: ideographic), headlineLarge: TextStyle(debugLabel: dense headlineLarge 2018, inherit: true, size: 40.0, weight: 400, baseline: ideographic), headlineMedium: TextStyle(debugLabel: dense headlineMedium 2018, inherit: true, size: 34.0, weight: 400, baseline: ideographic), headlineSmall: TextStyle(debugLabel: dense headlineSmall 2018, inherit: true, size: 24.0, weight: 400, baseline: ideographic), titleLarge: TextStyle(debugLabel: dense titleLarge 2018, inherit: true, size: 21.0, weight: 500, baseline: ideographic), titleMedium: TextStyle(debugLabel: dense titleMedium 2018, inherit: true, size: 17.0, weight: 400, baseline: ideographic), titleSmall: TextStyle(debugLabel: dense titleSmall 2018, inherit: true, size: 15.0, weight: 500, baseline: ideographic), bodyLarge: TextStyle(debugLabel: dense bodyLarge 2018, inherit: true, size: 17.0, weight: 400, baseline: ideographic), bodyMedium: TextStyle(debugLabel: dense bodyMedium 2018, inherit: true, size: 15.0, weight: 400, baseline: ideographic), bodySmall: TextStyle(debugLabel: dense bodySmall 2018, inherit: true, size: 13.0, weight: 400, baseline: ideographic), labelLarge: TextStyle(debugLabel: dense labelLarge 2018, inherit: true, size: 15.0, weight: 500, baseline: ideographic), labelMedium: TextStyle(debugLabel: dense labelMedium 2018, inherit: true, size: 12.0, weight: 400, baseline: ideographic), labelSmall: TextStyle(debugLabel: dense labelSmall 2018, inherit: true, size: 11.0, weight: 400, baseline: ideographic)), tall: TextTheme#00000(displayLarge: TextStyle(debugLabel: tall displayLarge 2018, inherit: true, size: 96.0, weight: 400, baseline: alphabetic), displayMedium: TextStyle(debugLabel: tall displayMedium 2018, inherit: true, size: 60.0, weight: 400, baseline: alphabetic), displaySmall: TextStyle(debugLabel: tall displaySmall 2018, inherit: true, size: 48.0, weight: 400, baseline: alphabetic), headlineLarge: TextStyle(debugLabel: tall headlineLarge 2018, inherit: true, size: 40.0, weight: 400, baseline: alphabetic), headlineMedium: TextStyle(debugLabel: tall headlineMedium 2018, inherit: true, size: 34.0, weight: 400, baseline: alphabetic), headlineSmall: TextStyle(debugLabel: tall headlineSmall 2018, inherit: true, size: 24.0, weight: 400, baseline: alphabetic), titleLarge: TextStyle(debugLabel: tall titleLarge 2018, inherit: true, size: 21.0, weight: 700, baseline: alphabetic), titleMedium: TextStyle(debugLabel: tall titleMedium 2018, inherit: true, size: 17.0, weight: 400, baseline: alphabetic), titleSmall: TextStyle(debugLabel: tall titleSmall 2018, inherit: true, size: 15.0, weight: 500, baseline: alphabetic), bodyLarge: TextStyle(debugLabel: tall bodyLarge 2018, inherit: true, size: 17.0, weight: 700, baseline: alphabetic), bodyMedium: TextStyle(debugLabel: tall bodyMedium 2018, inherit: true, size: 15.0, weight: 400, baseline: alphabetic), bodySmall: TextStyle(debugLabel: tall bodySmall 2018, inherit: true, size: 13.0, weight: 400, baseline: alphabetic), labelLarge: TextStyle(debugLabel: tall labelLarge 2018, inherit: true, size: 15.0, weight: 700, baseline: alphabetic), labelMedium: TextStyle(debugLabel: tall labelMedium 2018, inherit: true, size: 12.0, weight: 400, baseline: alphabetic), labelSmall: TextStyle(debugLabel: tall labelSmall 2018, inherit: true, size: 11.0, weight: 400, baseline: alphabetic))), applyElevationOverlayColor: false, subThemesData: FlexSubThemesData#00000(interactionEffects: true, blendOnLevel : 0, blendOnColors: true, useFlutterDefaults: false, blendTextTheme: true, useTextTheme: true, defaultRadius: 20.0, buttonMinSize: Size(40.0, 40.0), buttonPadding: EdgeInsets(16.0, 0.0, 16.0, 0.0), thickBorderWidth: 2.0, thinBorderWidth: 1.5, textButtonRadius: null, elevatedButtonRadius: null, elevatedButtonElevation: 1.0, outlinedButtonRadius: null, toggleButtonsRadius: null, textButtonSchemeColor: null, elevatedButtonSchemeColor: null, outlinedButtonSchemeColor: null, materialButtonSchemeColor: null, toggleButtonsSchemeColor: null, switchSchemeColor: null, checkboxSchemeColor: null, radioSchemeColor: null, unselectedToggleIsColored: false, inputDecoratorRadius: null, inputDecoratorSchemeColor: null, inputDecoratorIsFilled: true, inputDecoratorFillColor: null, inputDecoratorBorderType: outline, inputDecoratorUnfocusedHasBorder: true, inputDecoratorUnfocusedBorderIsColored: true, fabRadius: null, fabUseShape: true, fabSchemeColor: null, chipRadius: null, chipSchemeColor: null, cardRadius: null, cardElevation: 0.0, popupMenuRadius: null, popupMenuElevation: 3.0, popupMenuOpacity: 1.0, dialogRadius: null, dialogElevation: 10.0, dialogBackgroundSchemeColor: null, timePickerDialogRadius: null, snackBarElevation: 4.0, snackBarBackgroundSchemeColor: null, appBarBackgroundSchemeColor: null, tabBarItemSchemeColor: null, tabBarIndicatorSchemeColor: null, bottomSheetRadius: null, bottomSheetElevation: 4.0, bottomSheetModalElevation: 8.0, bottomNavigationBarLabelTextStyle: null, bottomNavigationBarSelectedLabelSize: null, bottomNavigationBarUnselectedLabelSize: null, bottomNavigationBarSelectedLabelSchemeColor: null, bottomNavigationBarUnselectedLabelSchemeColor: null, bottomNavigationBarMutedUnselectedLabel: true, bottomNavigationBarSelectedIconSize: null, bottomNavigationBarUnselectedIconSize: null, bottomNavigationBarSelectedIconSchemeColor: null, bottomNavigationBarUnselectedIconSchemeColor: null, bottomNavigationBarMutedUnselectedIcon: true, bottomNavigationBarBackgroundSchemeColor: null, bottomNavigationBarOpacity: 1.0, bottomNavigationBarElevation: 0.0, bottomNavigationBarShowSelectedLabels: true, bottomNavigationBarShowUnselectedLabels: true, bottomNavigationBarType: fixed, bottomNavigationBarLandscapeLayout: null, navigationBarLabelTextStyle: null, navigationBarSelectedLabelSize: null, navigationBarUnselectedLabelSize: null, navigationBarSelectedLabelSchemeColor: null, navigationBarUnselectedLabelSchemeColor: null, navigationBarMutedUnselectedLabel: true, navigationBarSelectedIconSize: null, navigationBarUnselectedIconSize: null, navigationBarSelectedIconSchemeColor: null, navigationBarUnselectedIconSchemeColor: null, navigationBarMutedUnselectedIcon: true, navigationBarIndicatorSchemeColor: null, navigationBarHighlightOpacity: null, navigationBarBackgroundSchemeColor: null, navigationBarOpacity: 1.0, navigationBarHeight: null, navigationBarLabelBehavior: alwaysShow, navigationRailLabelTextStyle: null, navigationRailSelectedLabelSize: null, navigationRailUnselectedLabelSize: null, navigationRailSelectedLabelSchemeColor: null, navigationRailUnselectedLabelSchemeColor: null, navigationRailMutedUnselectedLabel: true, navigationRailSelectedIconSize: null, navigationRailUnselectedIconSize: null, navigationRailSelectedIconSchemeColor: null, navigationRailUnselectedIconSchemeColor: null, navigationRailMutedUnselectedIcon: true, navigationRailUseIndicator: true, navigationRailIndicatorSchemeColor: null, navigationRailIndicatorOpacity: null, navigationRailBackgroundSchemeColor: null, navigationRailOpacity: 1.0, navigationRailElevation: 0.0, navigationRailLabelType: all, navigationRailGroupAlignment: null), useMaterial3: false, extensions: null)')); + 'FlexColorScheme#00000(colorScheme: null, brightness: light, primary: Color(0xff6200ee), primaryContainer: Color(0xffbb86fc), primaryVariant: null, secondary: Color(0xff03dac6), secondaryContainer: Color(0xffcefaf8), secondaryVariant: null, tertiary: Color(0xff018786), tertiaryContainer: Color(0xffa4f1ef), error: Color(0xffb00020), surface: Color(0xffffffff), background: Color(0xffffffff), scaffoldBackground: Color(0xffffffff), appBarBackground: Color(0xff6200ee), dialogBackground: Color(0xffffffff), onPrimary: Color(0xffffffff), onPrimaryContainer: Color(0xffffffff), onSecondary: Color(0xff000000), onSecondaryContainer: Color(0xff000000), onTertiary: Color(0xffffffff), onTertiaryContainer: Color(0xff000000), onSurface: Color(0xff000000), onBackground: Color(0xff000000), onError: Color(0xffffffff), surfaceTint: null, tabBarStyle: forAppBar, appBarElevation: 1.0, bottomAppBarElevation: 2.0, tooltipsMatchBackground: true, transparentStatusBar: false, visualDensity: 0, v: 0.0), textTheme: TextTheme#00000(displayLarge: TextStyle(inherit: true, size: 80.0), displayMedium: null, displaySmall: null, headlineLarge: null, headlineMedium: null, headlineSmall: null, titleLarge: null, titleMedium: null, titleSmall: null, bodyLarge: null, bodyMedium: null, bodySmall: null, labelLarge: null, labelMedium: null, labelSmall: null), primaryTextTheme: TextTheme#00000(displayLarge: TextStyle(inherit: true, size: 80.0), displayMedium: null, displaySmall: null, headlineLarge: null, headlineMedium: null, headlineSmall: null, titleLarge: null, titleMedium: null, titleSmall: null, bodyLarge: null, bodyMedium: null, bodySmall: null, labelLarge: null, labelMedium: null, labelSmall: null), fontFamily: Roboto, platform: android, typography: Typography#00000(englishLike: TextTheme#00000(displayLarge: TextStyle(debugLabel: englishLike displayLarge 2018, inherit: true, size: 96.0, weight: 300, letterSpacing: -1.5, baseline: alphabetic), displayMedium: TextStyle(debugLabel: englishLike displayMedium 2018, inherit: true, size: 60.0, weight: 300, letterSpacing: -0.5, baseline: alphabetic), displaySmall: TextStyle(debugLabel: englishLike displaySmall 2018, inherit: true, size: 48.0, weight: 400, letterSpacing: 0.0, baseline: alphabetic), headlineLarge: TextStyle(debugLabel: englishLike headlineLarge 2018, inherit: true, size: 40.0, weight: 400, letterSpacing: 0.3, baseline: alphabetic), headlineMedium: TextStyle(debugLabel: englishLike headlineMedium 2018, inherit: true, size: 34.0, weight: 400, letterSpacing: 0.3, baseline: alphabetic), headlineSmall: TextStyle(debugLabel: englishLike headlineSmall 2018, inherit: true, size: 24.0, weight: 400, letterSpacing: 0.0, baseline: alphabetic), titleLarge: TextStyle(debugLabel: englishLike titleLarge 2018, inherit: true, size: 20.0, weight: 500, letterSpacing: 0.1, baseline: alphabetic), titleMedium: TextStyle(debugLabel: englishLike titleMedium 2018, inherit: true, size: 16.0, weight: 400, letterSpacing: 0.1, baseline: alphabetic), titleSmall: TextStyle(debugLabel: englishLike titleSmall 2018, inherit: true, size: 14.0, weight: 500, letterSpacing: 0.1, baseline: alphabetic), bodyLarge: TextStyle(debugLabel: englishLike bodyLarge 2018, inherit: true, size: 16.0, weight: 400, letterSpacing: 0.5, baseline: alphabetic), bodyMedium: TextStyle(debugLabel: englishLike bodyMedium 2018, inherit: true, size: 14.0, weight: 400, letterSpacing: 0.3, baseline: alphabetic), bodySmall: TextStyle(debugLabel: englishLike bodySmall 2018, inherit: true, size: 12.0, weight: 400, letterSpacing: 0.4, baseline: alphabetic), labelLarge: TextStyle(debugLabel: englishLike labelLarge 2018, inherit: true, size: 14.0, weight: 500, letterSpacing: 1.3, baseline: alphabetic), labelMedium: TextStyle(debugLabel: englishLike labelMedium 2018, inherit: true, size: 11.0, weight: 400, letterSpacing: 1.5, baseline: alphabetic), labelSmall: TextStyle(debugLabel: englishLike labelSmall 2018, inherit: true, size: 10.0, weight: 400, letterSpacing: 1.5, baseline: alphabetic)), dense: TextTheme#00000(displayLarge: TextStyle(debugLabel: dense displayLarge 2018, inherit: true, size: 96.0, weight: 100, baseline: ideographic), displayMedium: TextStyle(debugLabel: dense displayMedium 2018, inherit: true, size: 60.0, weight: 100, baseline: ideographic), displaySmall: TextStyle(debugLabel: dense displaySmall 2018, inherit: true, size: 48.0, weight: 400, baseline: ideographic), headlineLarge: TextStyle(debugLabel: dense headlineLarge 2018, inherit: true, size: 40.0, weight: 400, baseline: ideographic), headlineMedium: TextStyle(debugLabel: dense headlineMedium 2018, inherit: true, size: 34.0, weight: 400, baseline: ideographic), headlineSmall: TextStyle(debugLabel: dense headlineSmall 2018, inherit: true, size: 24.0, weight: 400, baseline: ideographic), titleLarge: TextStyle(debugLabel: dense titleLarge 2018, inherit: true, size: 21.0, weight: 500, baseline: ideographic), titleMedium: TextStyle(debugLabel: dense titleMedium 2018, inherit: true, size: 17.0, weight: 400, baseline: ideographic), titleSmall: TextStyle(debugLabel: dense titleSmall 2018, inherit: true, size: 15.0, weight: 500, baseline: ideographic), bodyLarge: TextStyle(debugLabel: dense bodyLarge 2018, inherit: true, size: 17.0, weight: 400, baseline: ideographic), bodyMedium: TextStyle(debugLabel: dense bodyMedium 2018, inherit: true, size: 15.0, weight: 400, baseline: ideographic), bodySmall: TextStyle(debugLabel: dense bodySmall 2018, inherit: true, size: 13.0, weight: 400, baseline: ideographic), labelLarge: TextStyle(debugLabel: dense labelLarge 2018, inherit: true, size: 15.0, weight: 500, baseline: ideographic), labelMedium: TextStyle(debugLabel: dense labelMedium 2018, inherit: true, size: 12.0, weight: 400, baseline: ideographic), labelSmall: TextStyle(debugLabel: dense labelSmall 2018, inherit: true, size: 11.0, weight: 400, baseline: ideographic)), tall: TextTheme#00000(displayLarge: TextStyle(debugLabel: tall displayLarge 2018, inherit: true, size: 96.0, weight: 400, baseline: alphabetic), displayMedium: TextStyle(debugLabel: tall displayMedium 2018, inherit: true, size: 60.0, weight: 400, baseline: alphabetic), displaySmall: TextStyle(debugLabel: tall displaySmall 2018, inherit: true, size: 48.0, weight: 400, baseline: alphabetic), headlineLarge: TextStyle(debugLabel: tall headlineLarge 2018, inherit: true, size: 40.0, weight: 400, baseline: alphabetic), headlineMedium: TextStyle(debugLabel: tall headlineMedium 2018, inherit: true, size: 34.0, weight: 400, baseline: alphabetic), headlineSmall: TextStyle(debugLabel: tall headlineSmall 2018, inherit: true, size: 24.0, weight: 400, baseline: alphabetic), titleLarge: TextStyle(debugLabel: tall titleLarge 2018, inherit: true, size: 21.0, weight: 700, baseline: alphabetic), titleMedium: TextStyle(debugLabel: tall titleMedium 2018, inherit: true, size: 17.0, weight: 400, baseline: alphabetic), titleSmall: TextStyle(debugLabel: tall titleSmall 2018, inherit: true, size: 15.0, weight: 500, baseline: alphabetic), bodyLarge: TextStyle(debugLabel: tall bodyLarge 2018, inherit: true, size: 17.0, weight: 700, baseline: alphabetic), bodyMedium: TextStyle(debugLabel: tall bodyMedium 2018, inherit: true, size: 15.0, weight: 400, baseline: alphabetic), bodySmall: TextStyle(debugLabel: tall bodySmall 2018, inherit: true, size: 13.0, weight: 400, baseline: alphabetic), labelLarge: TextStyle(debugLabel: tall labelLarge 2018, inherit: true, size: 15.0, weight: 700, baseline: alphabetic), labelMedium: TextStyle(debugLabel: tall labelMedium 2018, inherit: true, size: 12.0, weight: 400, baseline: alphabetic), labelSmall: TextStyle(debugLabel: tall labelSmall 2018, inherit: true, size: 11.0, weight: 400, baseline: alphabetic))), applyElevationOverlayColor: false, subThemesData: FlexSubThemesData#00000(interactionEffects: true, blendOnLevel : 0, blendOnColors: true, useFlutterDefaults: false, blendTextTheme: true, useTextTheme: true, defaultRadius: 20.0, buttonMinSize: Size(40.0, 40.0), buttonPadding: EdgeInsets(16.0, 0.0, 16.0, 0.0), thickBorderWidth: 2.0, thinBorderWidth: 1.5, textButtonRadius: null, elevatedButtonRadius: null, elevatedButtonElevation: 1.0, outlinedButtonRadius: null, toggleButtonsRadius: null, textButtonSchemeColor: null, elevatedButtonSchemeColor: null, outlinedButtonSchemeColor: null, materialButtonSchemeColor: null, toggleButtonsSchemeColor: null, switchSchemeColor: null, checkboxSchemeColor: null, radioSchemeColor: null, unselectedToggleIsColored: false, inputDecoratorRadius: null, inputDecoratorSchemeColor: null, inputDecoratorIsFilled: true, inputDecoratorFillColor: null, inputDecoratorBorderType: outline, inputDecoratorUnfocusedHasBorder: true, inputDecoratorUnfocusedBorderIsColored: true, fabRadius: null, fabUseShape: true, fabSchemeColor: null, chipRadius: null, chipSchemeColor: null, cardRadius: null, cardElevation: 0.0, popupMenuRadius: null, popupMenuElevation: 3.0, popupMenuOpacity: 1.0, dialogRadius: null, dialogElevation: 10.0, dialogBackgroundSchemeColor: null, timePickerDialogRadius: null, snackBarElevation: 4.0, snackBarBackgroundSchemeColor: null, appBarBackgroundSchemeColor: null, tabBarItemSchemeColor: null, tabBarIndicatorSchemeColor: null, bottomSheetRadius: null, bottomSheetElevation: 4.0, bottomSheetModalElevation: 8.0, bottomNavigationBarLabelTextStyle: null, bottomNavigationBarSelectedLabelSize: null, bottomNavigationBarUnselectedLabelSize: null, bottomNavigationBarSelectedLabelSchemeColor: null, bottomNavigationBarUnselectedLabelSchemeColor: null, bottomNavigationBarMutedUnselectedLabel: true, bottomNavigationBarSelectedIconSize: null, bottomNavigationBarUnselectedIconSize: null, bottomNavigationBarSelectedIconSchemeColor: null, bottomNavigationBarUnselectedIconSchemeColor: null, bottomNavigationBarMutedUnselectedIcon: true, bottomNavigationBarBackgroundSchemeColor: null, bottomNavigationBarOpacity: 1.0, bottomNavigationBarElevation: 0.0, bottomNavigationBarShowSelectedLabels: true, bottomNavigationBarShowUnselectedLabels: true, bottomNavigationBarType: fixed, bottomNavigationBarLandscapeLayout: null, navigationBarLabelTextStyle: null, navigationBarSelectedLabelSize: null, navigationBarUnselectedLabelSize: null, navigationBarSelectedLabelSchemeColor: null, navigationBarUnselectedLabelSchemeColor: null, navigationBarMutedUnselectedLabel: true, navigationBarSelectedIconSize: null, navigationBarUnselectedIconSize: null, navigationBarSelectedIconSchemeColor: null, navigationBarUnselectedIconSchemeColor: null, navigationBarMutedUnselectedIcon: true, navigationBarIndicatorSchemeColor: null, navigationBarHighlightOpacity: null, navigationBarBackgroundSchemeColor: null, navigationBarOpacity: 1.0, navigationBarHeight: null, navigationBarLabelBehavior: alwaysShow, navigationRailLabelTextStyle: null, navigationRailSelectedLabelSize: null, navigationRailUnselectedLabelSize: null, navigationRailSelectedLabelSchemeColor: null, navigationRailUnselectedLabelSchemeColor: null, navigationRailMutedUnselectedLabel: true, navigationRailSelectedIconSize: null, navigationRailUnselectedIconSize: null, navigationRailSelectedIconSchemeColor: null, navigationRailUnselectedIconSchemeColor: null, navigationRailMutedUnselectedIcon: true, navigationRailUseIndicator: true, navigationRailIndicatorSchemeColor: null, navigationRailIndicatorOpacity: null, navigationRailBackgroundSchemeColor: null, navigationRailOpacity: 1.0, navigationRailElevation: 0.0, navigationRailLabelType: all, navigationRailGroupAlignment: null), useMaterial3: false, extensions: null)')); }); test( 'FCS1.07a: Test toStringShort implemented via debugFillProperties '