591 lines
31 KiB
Dart
591 lines
31 KiB
Dart
// 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 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
test('Theme data control test', () {
|
|
final ThemeData dark = ThemeData.dark();
|
|
|
|
expect(dark, hasOneLineDescription);
|
|
expect(dark, equals(dark.copyWith()));
|
|
expect(dark.hashCode, equals(dark.copyWith().hashCode));
|
|
|
|
final ThemeData light = ThemeData.light();
|
|
final ThemeData dawn = ThemeData.lerp(dark, light, 0.25);
|
|
|
|
expect(dawn.brightness, Brightness.dark);
|
|
expect(dawn.primaryColor, Color.lerp(dark.primaryColor, light.primaryColor, 0.25));
|
|
});
|
|
|
|
test('Defaults to the default typography for the platform', () {
|
|
for (final TargetPlatform platform in TargetPlatform.values) {
|
|
final ThemeData theme = ThemeData(platform: platform);
|
|
final Typography typography = Typography.material2018(platform: platform);
|
|
expect(theme.textTheme, typography.black.apply(decoration: TextDecoration.none),
|
|
reason: 'Not using default typography for $platform');
|
|
}
|
|
});
|
|
|
|
test('Default text theme contrasts with brightness', () {
|
|
final ThemeData lightTheme = ThemeData(brightness: Brightness.light);
|
|
final ThemeData darkTheme = ThemeData(brightness: Brightness.dark);
|
|
final Typography typography = Typography.material2018(platform: lightTheme.platform);
|
|
|
|
expect(lightTheme.textTheme.headline6!.color, typography.black.headline6!.color);
|
|
expect(darkTheme.textTheme.headline6!.color, typography.white.headline6!.color);
|
|
});
|
|
|
|
test('Default primary text theme contrasts with primary brightness', () {
|
|
final ThemeData lightTheme = ThemeData(primaryColorBrightness: Brightness.light);
|
|
final ThemeData darkTheme = ThemeData(primaryColorBrightness: Brightness.dark);
|
|
final Typography typography = Typography.material2018(platform: lightTheme.platform);
|
|
|
|
expect(lightTheme.primaryTextTheme.headline6!.color, typography.black.headline6!.color);
|
|
expect(darkTheme.primaryTextTheme.headline6!.color, typography.white.headline6!.color);
|
|
});
|
|
|
|
test('Default accent text theme contrasts with accent brightness', () {
|
|
final ThemeData lightTheme = ThemeData(accentColorBrightness: Brightness.light);
|
|
final ThemeData darkTheme = ThemeData(accentColorBrightness: Brightness.dark);
|
|
final Typography typography = Typography.material2018(platform: lightTheme.platform);
|
|
|
|
expect(lightTheme.accentTextTheme.headline6!.color, typography.black.headline6!.color);
|
|
expect(darkTheme.accentTextTheme.headline6!.color, typography.white.headline6!.color);
|
|
});
|
|
|
|
test('Default chip label style gets a default bodyText1 if textTheme.bodyText1 is null', () {
|
|
const TextTheme noBodyText1TextTheme = TextTheme(bodyText1: null);
|
|
final ThemeData lightTheme = ThemeData(brightness: Brightness.light, textTheme: noBodyText1TextTheme);
|
|
final ThemeData darkTheme = ThemeData(brightness: Brightness.dark, textTheme: noBodyText1TextTheme);
|
|
final Typography typography = Typography.material2018(platform: lightTheme.platform);
|
|
|
|
expect(lightTheme.chipTheme.labelStyle.color, equals(typography.black.bodyText1!.color!.withAlpha(0xde)));
|
|
expect(darkTheme.chipTheme.labelStyle.color, equals(typography.white.bodyText1!.color!.withAlpha(0xde)));
|
|
});
|
|
|
|
test('Default icon theme contrasts with brightness', () {
|
|
final ThemeData lightTheme = ThemeData(brightness: Brightness.light);
|
|
final ThemeData darkTheme = ThemeData(brightness: Brightness.dark);
|
|
final Typography typography = Typography.material2018(platform: lightTheme.platform);
|
|
|
|
expect(lightTheme.textTheme.headline6!.color, typography.black.headline6!.color);
|
|
expect(darkTheme.textTheme.headline6!.color, typography.white.headline6!.color);
|
|
});
|
|
|
|
test('Default primary icon theme contrasts with primary brightness', () {
|
|
final ThemeData lightTheme = ThemeData(primaryColorBrightness: Brightness.light);
|
|
final ThemeData darkTheme = ThemeData(primaryColorBrightness: Brightness.dark);
|
|
final Typography typography = Typography.material2018(platform: lightTheme.platform);
|
|
|
|
expect(lightTheme.primaryTextTheme.headline6!.color, typography.black.headline6!.color);
|
|
expect(darkTheme.primaryTextTheme.headline6!.color, typography.white.headline6!.color);
|
|
});
|
|
|
|
test('Default accent icon theme contrasts with accent brightness', () {
|
|
final ThemeData lightTheme = ThemeData(accentColorBrightness: Brightness.light);
|
|
final ThemeData darkTheme = ThemeData(accentColorBrightness: Brightness.dark);
|
|
final Typography typography = Typography.material2018(platform: lightTheme.platform);
|
|
|
|
expect(lightTheme.accentTextTheme.headline6!.color, typography.black.headline6!.color);
|
|
expect(darkTheme.accentTextTheme.headline6!.color, typography.white.headline6!.color);
|
|
});
|
|
|
|
testWidgets('Defaults to MaterialTapTargetBehavior.padded on mobile platforms and MaterialTapTargetBehavior.shrinkWrap on desktop', (WidgetTester tester) async {
|
|
final ThemeData themeData = ThemeData(platform: defaultTargetPlatform);
|
|
switch (defaultTargetPlatform) {
|
|
case TargetPlatform.android:
|
|
case TargetPlatform.fuchsia:
|
|
case TargetPlatform.iOS:
|
|
expect(themeData.materialTapTargetSize, MaterialTapTargetSize.padded);
|
|
break;
|
|
case TargetPlatform.linux:
|
|
case TargetPlatform.macOS:
|
|
case TargetPlatform.windows:
|
|
expect(themeData.materialTapTargetSize, MaterialTapTargetSize.shrinkWrap);
|
|
break;
|
|
}
|
|
}, variant: TargetPlatformVariant.all());
|
|
|
|
test('Can control fontFamily default', () {
|
|
final ThemeData themeData = ThemeData(
|
|
fontFamily: 'Ahem',
|
|
textTheme: const TextTheme(
|
|
headline6: TextStyle(fontFamily: 'Roboto'),
|
|
),
|
|
);
|
|
|
|
expect(themeData.textTheme.bodyText1!.fontFamily, equals('Ahem'));
|
|
expect(themeData.primaryTextTheme.headline3!.fontFamily, equals('Ahem'));
|
|
expect(themeData.accentTextTheme.headline1!.fontFamily, equals('Ahem'));
|
|
|
|
// Shouldn't override the specified style's family
|
|
expect(themeData.textTheme.headline6!.fontFamily, equals('Roboto'));
|
|
});
|
|
|
|
test('Can estimate brightness - directly', () {
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.white), equals(Brightness.light));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.black), equals(Brightness.dark));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.blue), equals(Brightness.dark));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.yellow), equals(Brightness.light));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.deepOrange), equals(Brightness.dark));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.orange), equals(Brightness.light));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.lime), equals(Brightness.light));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.grey), equals(Brightness.light));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.teal), equals(Brightness.dark));
|
|
expect(ThemeData.estimateBrightnessForColor(Colors.indigo), equals(Brightness.dark));
|
|
});
|
|
|
|
test('Can estimate brightness - indirectly', () {
|
|
expect(ThemeData(primaryColor: Colors.white).primaryColorBrightness, equals(Brightness.light));
|
|
expect(ThemeData(primaryColor: Colors.black).primaryColorBrightness, equals(Brightness.dark));
|
|
expect(ThemeData(primaryColor: Colors.blue).primaryColorBrightness, equals(Brightness.dark));
|
|
expect(ThemeData(primaryColor: Colors.yellow).primaryColorBrightness, equals(Brightness.light));
|
|
expect(ThemeData(primaryColor: Colors.deepOrange).primaryColorBrightness, equals(Brightness.dark));
|
|
expect(ThemeData(primaryColor: Colors.orange).primaryColorBrightness, equals(Brightness.light));
|
|
expect(ThemeData(primaryColor: Colors.lime).primaryColorBrightness, equals(Brightness.light));
|
|
expect(ThemeData(primaryColor: Colors.grey).primaryColorBrightness, equals(Brightness.light));
|
|
expect(ThemeData(primaryColor: Colors.teal).primaryColorBrightness, equals(Brightness.dark));
|
|
expect(ThemeData(primaryColor: Colors.indigo).primaryColorBrightness, equals(Brightness.dark));
|
|
});
|
|
|
|
test('cursorColor', () {
|
|
expect(const TextSelectionThemeData(cursorColor: Colors.red).cursorColor, Colors.red);
|
|
});
|
|
|
|
testWidgets('ThemeData.from a light color scheme sets appropriate values', (WidgetTester tester) async {
|
|
const ColorScheme lightColors = ColorScheme.light();
|
|
final ThemeData theme = ThemeData.from(colorScheme: lightColors);
|
|
|
|
expect(theme.brightness, equals(Brightness.light));
|
|
expect(theme.primaryColor, equals(lightColors.primary));
|
|
expect(theme.accentColor, equals(lightColors.secondary));
|
|
expect(theme.cardColor, equals(lightColors.surface));
|
|
expect(theme.backgroundColor, equals(lightColors.background));
|
|
expect(theme.canvasColor, equals(lightColors.background));
|
|
expect(theme.scaffoldBackgroundColor, equals(lightColors.background));
|
|
expect(theme.dialogBackgroundColor, equals(lightColors.background));
|
|
expect(theme.errorColor, equals(lightColors.error));
|
|
expect(theme.applyElevationOverlayColor, isFalse);
|
|
});
|
|
|
|
testWidgets('ThemeData.from a dark color scheme sets appropriate values', (WidgetTester tester) async {
|
|
const ColorScheme darkColors = ColorScheme.dark();
|
|
final ThemeData theme = ThemeData.from(colorScheme: darkColors);
|
|
|
|
expect(theme.brightness, equals(Brightness.dark));
|
|
// in dark theme's the color used for main components is surface instead of primary
|
|
expect(theme.primaryColor, equals(darkColors.surface));
|
|
expect(theme.accentColor, equals(darkColors.secondary));
|
|
expect(theme.cardColor, equals(darkColors.surface));
|
|
expect(theme.backgroundColor, equals(darkColors.background));
|
|
expect(theme.canvasColor, equals(darkColors.background));
|
|
expect(theme.scaffoldBackgroundColor, equals(darkColors.background));
|
|
expect(theme.dialogBackgroundColor, equals(darkColors.background));
|
|
expect(theme.errorColor, equals(darkColors.error));
|
|
expect(theme.applyElevationOverlayColor, isTrue);
|
|
});
|
|
|
|
testWidgets('VisualDensity.adaptivePlatformDensity returns adaptive values', (WidgetTester tester) async {
|
|
switch (debugDefaultTargetPlatformOverride!) {
|
|
case TargetPlatform.android:
|
|
case TargetPlatform.iOS:
|
|
case TargetPlatform.fuchsia:
|
|
expect(VisualDensity.adaptivePlatformDensity, equals(const VisualDensity()));
|
|
break;
|
|
case TargetPlatform.linux:
|
|
case TargetPlatform.macOS:
|
|
case TargetPlatform.windows:
|
|
expect(VisualDensity.adaptivePlatformDensity, equals(VisualDensity.compact));
|
|
}
|
|
}, variant: TargetPlatformVariant.all());
|
|
|
|
testWidgets('VisualDensity in ThemeData defaults to "compact" on desktop and "standard" on mobile', (WidgetTester tester) async {
|
|
final ThemeData themeData = ThemeData();
|
|
switch (debugDefaultTargetPlatformOverride!) {
|
|
case TargetPlatform.android:
|
|
case TargetPlatform.iOS:
|
|
case TargetPlatform.fuchsia:
|
|
expect(themeData.visualDensity, equals(const VisualDensity()));
|
|
break;
|
|
case TargetPlatform.linux:
|
|
case TargetPlatform.macOS:
|
|
case TargetPlatform.windows:
|
|
expect(themeData.visualDensity, equals(VisualDensity.compact));
|
|
}
|
|
}, variant: TargetPlatformVariant.all());
|
|
|
|
testWidgets('ThemeData.copyWith correctly creates new ThemeData with all copied arguments', (WidgetTester tester) async {
|
|
|
|
final SliderThemeData sliderTheme = SliderThemeData.fromPrimaryColors(
|
|
primaryColor: Colors.black,
|
|
primaryColorDark: Colors.black,
|
|
primaryColorLight: Colors.black,
|
|
valueIndicatorTextStyle: const TextStyle(color: Colors.black),
|
|
);
|
|
|
|
final ChipThemeData chipTheme = ChipThemeData.fromDefaults(
|
|
primaryColor: Colors.black,
|
|
secondaryColor: Colors.white,
|
|
labelStyle: const TextStyle(color: Colors.black),
|
|
);
|
|
|
|
const PageTransitionsTheme pageTransitionTheme = PageTransitionsTheme(
|
|
builders: <TargetPlatform, PageTransitionsBuilder>{
|
|
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
|
|
TargetPlatform.macOS: CupertinoPageTransitionsBuilder(),
|
|
},
|
|
);
|
|
|
|
final ThemeData theme = ThemeData.raw(
|
|
visualDensity: const VisualDensity(),
|
|
primaryColor: Colors.black,
|
|
primaryColorBrightness: Brightness.dark,
|
|
primaryColorLight: Colors.black,
|
|
primaryColorDark: Colors.black,
|
|
accentColor: Colors.black,
|
|
accentColorBrightness: Brightness.dark,
|
|
canvasColor: Colors.black,
|
|
shadowColor: Colors.black,
|
|
scaffoldBackgroundColor: Colors.black,
|
|
bottomAppBarColor: Colors.black,
|
|
cardColor: Colors.black,
|
|
dividerColor: Colors.black,
|
|
focusColor: Colors.black,
|
|
hoverColor: Colors.black,
|
|
highlightColor: Colors.black,
|
|
splashColor: Colors.black,
|
|
splashFactory: InkRipple.splashFactory,
|
|
selectedRowColor: Colors.black,
|
|
unselectedWidgetColor: Colors.black,
|
|
disabledColor: Colors.black,
|
|
buttonTheme: const ButtonThemeData(colorScheme: ColorScheme.dark()),
|
|
toggleButtonsTheme: const ToggleButtonsThemeData(textStyle: TextStyle(color: Colors.black)),
|
|
buttonColor: Colors.black,
|
|
secondaryHeaderColor: Colors.black,
|
|
textSelectionColor: Colors.black,
|
|
cursorColor: Colors.black,
|
|
textSelectionHandleColor: Colors.black,
|
|
backgroundColor: Colors.black,
|
|
dialogBackgroundColor: Colors.black,
|
|
indicatorColor: Colors.black,
|
|
hintColor: Colors.black,
|
|
errorColor: Colors.black,
|
|
toggleableActiveColor: Colors.black,
|
|
textTheme: ThemeData.dark().textTheme,
|
|
primaryTextTheme: ThemeData.dark().textTheme,
|
|
accentTextTheme: ThemeData.dark().textTheme,
|
|
inputDecorationTheme: ThemeData.dark().inputDecorationTheme.copyWith(border: const OutlineInputBorder()),
|
|
iconTheme: ThemeData.dark().iconTheme,
|
|
primaryIconTheme: ThemeData.dark().iconTheme,
|
|
accentIconTheme: ThemeData.dark().iconTheme,
|
|
sliderTheme: sliderTheme,
|
|
tabBarTheme: const TabBarTheme(labelColor: Colors.black),
|
|
tooltipTheme: const TooltipThemeData(height: 100),
|
|
cardTheme: const CardTheme(color: Colors.black),
|
|
chipTheme: chipTheme,
|
|
platform: TargetPlatform.iOS,
|
|
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
|
applyElevationOverlayColor: false,
|
|
pageTransitionsTheme: pageTransitionTheme,
|
|
appBarTheme: const AppBarTheme(color: Colors.black),
|
|
bottomAppBarTheme: const BottomAppBarTheme(color: Colors.black),
|
|
colorScheme: const ColorScheme.light(),
|
|
dialogTheme: const DialogTheme(backgroundColor: Colors.black),
|
|
floatingActionButtonTheme: const FloatingActionButtonThemeData(backgroundColor: Colors.black),
|
|
navigationRailTheme: const NavigationRailThemeData(backgroundColor: Colors.black),
|
|
typography: Typography.material2018(platform: TargetPlatform.android),
|
|
cupertinoOverrideTheme: null,
|
|
snackBarTheme: const SnackBarThemeData(backgroundColor: Colors.black),
|
|
bottomSheetTheme: const BottomSheetThemeData(backgroundColor: Colors.black),
|
|
popupMenuTheme: const PopupMenuThemeData(color: Colors.black),
|
|
bannerTheme: const MaterialBannerThemeData(backgroundColor: Colors.black),
|
|
dividerTheme: const DividerThemeData(color: Colors.black),
|
|
buttonBarTheme: const ButtonBarThemeData(alignment: MainAxisAlignment.start),
|
|
bottomNavigationBarTheme: const BottomNavigationBarThemeData(type: BottomNavigationBarType.fixed),
|
|
timePickerTheme: const TimePickerThemeData(backgroundColor: Colors.black),
|
|
textButtonTheme: TextButtonThemeData(style: TextButton.styleFrom(primary: Colors.red)),
|
|
elevatedButtonTheme: ElevatedButtonThemeData(style: ElevatedButton.styleFrom(primary: Colors.green)),
|
|
outlinedButtonTheme: OutlinedButtonThemeData(style: OutlinedButton.styleFrom(primary: Colors.blue)),
|
|
textSelectionTheme: const TextSelectionThemeData(cursorColor: Colors.black),
|
|
dataTableTheme: const DataTableThemeData(),
|
|
fixTextFieldOutlineLabel: false,
|
|
useTextSelectionTheme: false,
|
|
);
|
|
|
|
final SliderThemeData otherSliderTheme = SliderThemeData.fromPrimaryColors(
|
|
primaryColor: Colors.white,
|
|
primaryColorDark: Colors.white,
|
|
primaryColorLight: Colors.white,
|
|
valueIndicatorTextStyle: const TextStyle(color: Colors.white),
|
|
);
|
|
|
|
final ChipThemeData otherChipTheme = ChipThemeData.fromDefaults(
|
|
primaryColor: Colors.white,
|
|
secondaryColor: Colors.black,
|
|
labelStyle: const TextStyle(color: Colors.white),
|
|
);
|
|
|
|
final ThemeData otherTheme = ThemeData.raw(
|
|
visualDensity: const VisualDensity(),
|
|
primaryColor: Colors.white,
|
|
primaryColorBrightness: Brightness.light,
|
|
primaryColorLight: Colors.white,
|
|
primaryColorDark: Colors.white,
|
|
accentColor: Colors.white,
|
|
accentColorBrightness: Brightness.light,
|
|
canvasColor: Colors.white,
|
|
shadowColor: Colors.white,
|
|
scaffoldBackgroundColor: Colors.white,
|
|
bottomAppBarColor: Colors.white,
|
|
cardColor: Colors.white,
|
|
dividerColor: Colors.white,
|
|
focusColor: Colors.white,
|
|
hoverColor: Colors.white,
|
|
highlightColor: Colors.white,
|
|
splashColor: Colors.white,
|
|
splashFactory: InkRipple.splashFactory,
|
|
selectedRowColor: Colors.white,
|
|
unselectedWidgetColor: Colors.white,
|
|
disabledColor: Colors.white,
|
|
buttonTheme: const ButtonThemeData(colorScheme: ColorScheme.light()),
|
|
toggleButtonsTheme: const ToggleButtonsThemeData(textStyle: TextStyle(color: Colors.white)),
|
|
buttonColor: Colors.white,
|
|
secondaryHeaderColor: Colors.white,
|
|
textSelectionColor: Colors.white,
|
|
cursorColor: Colors.white,
|
|
textSelectionHandleColor: Colors.white,
|
|
backgroundColor: Colors.white,
|
|
dialogBackgroundColor: Colors.white,
|
|
indicatorColor: Colors.white,
|
|
hintColor: Colors.white,
|
|
errorColor: Colors.white,
|
|
toggleableActiveColor: Colors.white,
|
|
textTheme: ThemeData.light().textTheme,
|
|
primaryTextTheme: ThemeData.light().textTheme,
|
|
accentTextTheme: ThemeData.light().textTheme,
|
|
inputDecorationTheme: ThemeData.light().inputDecorationTheme.copyWith(border: InputBorder.none),
|
|
iconTheme: ThemeData.light().iconTheme,
|
|
primaryIconTheme: ThemeData.light().iconTheme,
|
|
accentIconTheme: ThemeData.light().iconTheme,
|
|
sliderTheme: otherSliderTheme,
|
|
tabBarTheme: const TabBarTheme(labelColor: Colors.white),
|
|
tooltipTheme: const TooltipThemeData(height: 100),
|
|
cardTheme: const CardTheme(color: Colors.white),
|
|
chipTheme: otherChipTheme,
|
|
platform: TargetPlatform.android,
|
|
materialTapTargetSize: MaterialTapTargetSize.padded,
|
|
applyElevationOverlayColor: true,
|
|
pageTransitionsTheme: const PageTransitionsTheme(),
|
|
appBarTheme: const AppBarTheme(color: Colors.white),
|
|
bottomAppBarTheme: const BottomAppBarTheme(color: Colors.white),
|
|
colorScheme: const ColorScheme.light(),
|
|
dialogTheme: const DialogTheme(backgroundColor: Colors.white),
|
|
floatingActionButtonTheme: const FloatingActionButtonThemeData(backgroundColor: Colors.white),
|
|
navigationRailTheme: const NavigationRailThemeData(backgroundColor: Colors.white),
|
|
typography: Typography.material2018(platform: TargetPlatform.iOS),
|
|
cupertinoOverrideTheme: ThemeData.light().cupertinoOverrideTheme,
|
|
snackBarTheme: const SnackBarThemeData(backgroundColor: Colors.white),
|
|
bottomSheetTheme: const BottomSheetThemeData(backgroundColor: Colors.white),
|
|
popupMenuTheme: const PopupMenuThemeData(color: Colors.white),
|
|
bannerTheme: const MaterialBannerThemeData(backgroundColor: Colors.white),
|
|
dividerTheme: const DividerThemeData(color: Colors.white),
|
|
buttonBarTheme: const ButtonBarThemeData(alignment: MainAxisAlignment.end),
|
|
bottomNavigationBarTheme: const BottomNavigationBarThemeData(type: BottomNavigationBarType.shifting),
|
|
timePickerTheme: const TimePickerThemeData(backgroundColor: Colors.white),
|
|
textButtonTheme: const TextButtonThemeData(),
|
|
elevatedButtonTheme: const ElevatedButtonThemeData(),
|
|
outlinedButtonTheme: const OutlinedButtonThemeData(),
|
|
textSelectionTheme: const TextSelectionThemeData(cursorColor: Colors.white),
|
|
dataTableTheme: const DataTableThemeData(),
|
|
fixTextFieldOutlineLabel: true,
|
|
useTextSelectionTheme: true,
|
|
);
|
|
|
|
final ThemeData themeDataCopy = theme.copyWith(
|
|
primaryColor: otherTheme.primaryColor,
|
|
primaryColorBrightness: otherTheme.primaryColorBrightness,
|
|
primaryColorLight: otherTheme.primaryColorLight,
|
|
primaryColorDark: otherTheme.primaryColorDark,
|
|
accentColor: otherTheme.accentColor,
|
|
accentColorBrightness: otherTheme.accentColorBrightness,
|
|
canvasColor: otherTheme.canvasColor,
|
|
shadowColor: otherTheme.shadowColor,
|
|
scaffoldBackgroundColor: otherTheme.scaffoldBackgroundColor,
|
|
bottomAppBarColor: otherTheme.bottomAppBarColor,
|
|
cardColor: otherTheme.cardColor,
|
|
dividerColor: otherTheme.dividerColor,
|
|
focusColor: otherTheme.focusColor,
|
|
hoverColor: otherTheme.hoverColor,
|
|
highlightColor: otherTheme.highlightColor,
|
|
splashColor: otherTheme.splashColor,
|
|
splashFactory: otherTheme.splashFactory,
|
|
selectedRowColor: otherTheme.selectedRowColor,
|
|
unselectedWidgetColor: otherTheme.unselectedWidgetColor,
|
|
disabledColor: otherTheme.disabledColor,
|
|
buttonTheme: otherTheme.buttonTheme,
|
|
toggleButtonsTheme: otherTheme.toggleButtonsTheme,
|
|
buttonColor: otherTheme.buttonColor,
|
|
secondaryHeaderColor: otherTheme.secondaryHeaderColor,
|
|
textSelectionColor: otherTheme.textSelectionTheme.selectionColor,
|
|
cursorColor: otherTheme.textSelectionTheme.cursorColor,
|
|
textSelectionHandleColor: otherTheme.textSelectionTheme.selectionHandleColor,
|
|
backgroundColor: otherTheme.backgroundColor,
|
|
dialogBackgroundColor: otherTheme.dialogBackgroundColor,
|
|
indicatorColor: otherTheme.indicatorColor,
|
|
hintColor: otherTheme.hintColor,
|
|
errorColor: otherTheme.errorColor,
|
|
toggleableActiveColor: otherTheme.toggleableActiveColor,
|
|
textTheme: otherTheme.textTheme,
|
|
primaryTextTheme: otherTheme.primaryTextTheme,
|
|
accentTextTheme: otherTheme.accentTextTheme,
|
|
inputDecorationTheme: otherTheme.inputDecorationTheme,
|
|
iconTheme: otherTheme.iconTheme,
|
|
primaryIconTheme: otherTheme.primaryIconTheme,
|
|
accentIconTheme: otherTheme.accentIconTheme,
|
|
sliderTheme: otherTheme.sliderTheme,
|
|
tabBarTheme: otherTheme.tabBarTheme,
|
|
tooltipTheme: otherTheme.tooltipTheme,
|
|
cardTheme: otherTheme.cardTheme,
|
|
chipTheme: otherTheme.chipTheme,
|
|
platform: otherTheme.platform,
|
|
materialTapTargetSize: otherTheme.materialTapTargetSize,
|
|
applyElevationOverlayColor: otherTheme.applyElevationOverlayColor,
|
|
pageTransitionsTheme: otherTheme.pageTransitionsTheme,
|
|
appBarTheme: otherTheme.appBarTheme,
|
|
bottomAppBarTheme: otherTheme.bottomAppBarTheme,
|
|
colorScheme: otherTheme.colorScheme,
|
|
dialogTheme: otherTheme.dialogTheme,
|
|
floatingActionButtonTheme: otherTheme.floatingActionButtonTheme,
|
|
navigationRailTheme: otherTheme.navigationRailTheme,
|
|
typography: otherTheme.typography,
|
|
cupertinoOverrideTheme: otherTheme.cupertinoOverrideTheme,
|
|
snackBarTheme: otherTheme.snackBarTheme,
|
|
bottomSheetTheme: otherTheme.bottomSheetTheme,
|
|
popupMenuTheme: otherTheme.popupMenuTheme,
|
|
bannerTheme: otherTheme.bannerTheme,
|
|
dividerTheme: otherTheme.dividerTheme,
|
|
buttonBarTheme: otherTheme.buttonBarTheme,
|
|
bottomNavigationBarTheme: otherTheme.bottomNavigationBarTheme,
|
|
timePickerTheme: otherTheme.timePickerTheme,
|
|
textButtonTheme: otherTheme.textButtonTheme,
|
|
elevatedButtonTheme: otherTheme.elevatedButtonTheme,
|
|
outlinedButtonTheme: otherTheme.outlinedButtonTheme,
|
|
textSelectionTheme: otherTheme.textSelectionTheme,
|
|
fixTextFieldOutlineLabel: otherTheme.fixTextFieldOutlineLabel,
|
|
);
|
|
|
|
expect(themeDataCopy.brightness, equals(otherTheme.brightness));
|
|
expect(themeDataCopy.primaryColor, equals(otherTheme.primaryColor));
|
|
expect(themeDataCopy.primaryColorBrightness, equals(otherTheme.primaryColorBrightness));
|
|
expect(themeDataCopy.primaryColorLight, equals(otherTheme.primaryColorLight));
|
|
expect(themeDataCopy.primaryColorDark, equals(otherTheme.primaryColorDark));
|
|
expect(themeDataCopy.accentColor, equals(otherTheme.accentColor));
|
|
expect(themeDataCopy.accentColorBrightness, equals(otherTheme.accentColorBrightness));
|
|
expect(themeDataCopy.canvasColor, equals(otherTheme.canvasColor));
|
|
expect(themeDataCopy.shadowColor, equals(otherTheme.shadowColor));
|
|
expect(themeDataCopy.scaffoldBackgroundColor, equals(otherTheme.scaffoldBackgroundColor));
|
|
expect(themeDataCopy.bottomAppBarColor, equals(otherTheme.bottomAppBarColor));
|
|
expect(themeDataCopy.cardColor, equals(otherTheme.cardColor));
|
|
expect(themeDataCopy.dividerColor, equals(otherTheme.dividerColor));
|
|
expect(themeDataCopy.focusColor, equals(otherTheme.focusColor));
|
|
expect(themeDataCopy.focusColor, equals(otherTheme.focusColor));
|
|
expect(themeDataCopy.hoverColor, equals(otherTheme.hoverColor));
|
|
expect(themeDataCopy.highlightColor, equals(otherTheme.highlightColor));
|
|
expect(themeDataCopy.splashColor, equals(otherTheme.splashColor));
|
|
expect(themeDataCopy.splashFactory, equals(otherTheme.splashFactory));
|
|
expect(themeDataCopy.selectedRowColor, equals(otherTheme.selectedRowColor));
|
|
expect(themeDataCopy.unselectedWidgetColor, equals(otherTheme.unselectedWidgetColor));
|
|
expect(themeDataCopy.disabledColor, equals(otherTheme.disabledColor));
|
|
expect(themeDataCopy.buttonTheme, equals(otherTheme.buttonTheme));
|
|
expect(themeDataCopy.toggleButtonsTheme, equals(otherTheme.toggleButtonsTheme));
|
|
expect(themeDataCopy.buttonColor, equals(otherTheme.buttonColor));
|
|
expect(themeDataCopy.secondaryHeaderColor, equals(otherTheme.secondaryHeaderColor));
|
|
expect(themeDataCopy.textSelectionTheme.selectionColor, equals(otherTheme.textSelectionTheme.selectionColor));
|
|
expect(themeDataCopy.textSelectionTheme.cursorColor, equals(otherTheme.textSelectionTheme.cursorColor));
|
|
expect(themeDataCopy.textSelectionTheme.selectionColor, equals(otherTheme.textSelectionTheme.selectionColor));
|
|
expect(themeDataCopy.textSelectionTheme.cursorColor, equals(otherTheme.textSelectionTheme.cursorColor));
|
|
expect(themeDataCopy.textSelectionTheme.selectionHandleColor, equals(otherTheme.textSelectionTheme.selectionHandleColor));
|
|
expect(themeDataCopy.backgroundColor, equals(otherTheme.backgroundColor));
|
|
expect(themeDataCopy.dialogBackgroundColor, equals(otherTheme.dialogBackgroundColor));
|
|
expect(themeDataCopy.indicatorColor, equals(otherTheme.indicatorColor));
|
|
expect(themeDataCopy.hintColor, equals(otherTheme.hintColor));
|
|
expect(themeDataCopy.errorColor, equals(otherTheme.errorColor));
|
|
expect(themeDataCopy.toggleableActiveColor, equals(otherTheme.accentColor));
|
|
expect(themeDataCopy.textTheme, equals(otherTheme.textTheme));
|
|
expect(themeDataCopy.primaryTextTheme, equals(otherTheme.primaryTextTheme));
|
|
expect(themeDataCopy.accentTextTheme, equals(otherTheme.accentTextTheme));
|
|
expect(themeDataCopy.sliderTheme, equals(otherTheme.sliderTheme));
|
|
expect(themeDataCopy.tabBarTheme, equals(otherTheme.tabBarTheme));
|
|
expect(themeDataCopy.tooltipTheme, equals(otherTheme.tooltipTheme));
|
|
expect(themeDataCopy.cardTheme, equals(otherTheme.cardTheme));
|
|
expect(themeDataCopy.chipTheme, equals(otherTheme.chipTheme));
|
|
expect(themeDataCopy.platform, equals(otherTheme.platform));
|
|
expect(themeDataCopy.materialTapTargetSize, equals(otherTheme.materialTapTargetSize));
|
|
expect(themeDataCopy.applyElevationOverlayColor, equals(otherTheme.applyElevationOverlayColor));
|
|
expect(themeDataCopy.pageTransitionsTheme, equals(otherTheme.pageTransitionsTheme));
|
|
expect(themeDataCopy.appBarTheme, equals(otherTheme.appBarTheme));
|
|
expect(themeDataCopy.bottomAppBarTheme, equals(otherTheme.bottomAppBarTheme));
|
|
expect(themeDataCopy.colorScheme, equals(otherTheme.colorScheme));
|
|
expect(themeDataCopy.dialogTheme, equals(otherTheme.dialogTheme));
|
|
expect(themeDataCopy.floatingActionButtonTheme, equals(otherTheme.floatingActionButtonTheme));
|
|
expect(themeDataCopy.navigationRailTheme, equals(otherTheme.navigationRailTheme));
|
|
expect(themeDataCopy.typography, equals(otherTheme.typography));
|
|
expect(themeDataCopy.cupertinoOverrideTheme, equals(otherTheme.cupertinoOverrideTheme));
|
|
expect(themeDataCopy.snackBarTheme, equals(otherTheme.snackBarTheme));
|
|
expect(themeDataCopy.bottomSheetTheme, equals(otherTheme.bottomSheetTheme));
|
|
expect(themeDataCopy.popupMenuTheme, equals(otherTheme.popupMenuTheme));
|
|
expect(themeDataCopy.bannerTheme, equals(otherTheme.bannerTheme));
|
|
expect(themeDataCopy.dividerTheme, equals(otherTheme.dividerTheme));
|
|
expect(themeDataCopy.buttonBarTheme, equals(otherTheme.buttonBarTheme));
|
|
expect(themeDataCopy.bottomNavigationBarTheme, equals(otherTheme.bottomNavigationBarTheme));
|
|
expect(themeDataCopy.timePickerTheme, equals(otherTheme.timePickerTheme));
|
|
expect(themeDataCopy.textButtonTheme, equals(otherTheme.textButtonTheme));
|
|
expect(themeDataCopy.elevatedButtonTheme, equals(otherTheme.elevatedButtonTheme));
|
|
expect(themeDataCopy.outlinedButtonTheme, equals(otherTheme.outlinedButtonTheme));
|
|
expect(themeDataCopy.textSelectionTheme, equals(otherTheme.textSelectionTheme));
|
|
expect(themeDataCopy.fixTextFieldOutlineLabel, equals(otherTheme.fixTextFieldOutlineLabel));
|
|
});
|
|
|
|
testWidgets('ThemeData.toString has less than 200 characters output', (WidgetTester tester) async {
|
|
// This test makes sure that the ThemeData debug output doesn't get too
|
|
// verbose, which has been a problem in the past.
|
|
|
|
const ColorScheme darkColors = ColorScheme.dark();
|
|
final ThemeData darkTheme = ThemeData.from(colorScheme: darkColors);
|
|
|
|
expect(darkTheme.toString().length, lessThan(200));
|
|
|
|
const ColorScheme lightColors = ColorScheme.light();
|
|
final ThemeData lightTheme = ThemeData.from(colorScheme: lightColors);
|
|
|
|
expect(lightTheme.toString().length, lessThan(200));
|
|
});
|
|
|
|
testWidgets('ThemeData brightness parameter overrides ColorScheme brightness', (WidgetTester tester) async {
|
|
const ColorScheme lightColors = ColorScheme.light();
|
|
expect(() => ThemeData(colorScheme: lightColors, brightness: Brightness.dark), throwsAssertionError);
|
|
});
|
|
|
|
testWidgets('ThemeData.copyWith brightness parameter overrides ColorScheme brightness', (WidgetTester tester) async {
|
|
const ColorScheme lightColors = ColorScheme.light();
|
|
final ThemeData theme = ThemeData.from(colorScheme: lightColors).copyWith(brightness: Brightness.dark);
|
|
|
|
// The brightness parameter only overrides ColorScheme.brightness.
|
|
expect(theme.brightness, equals(Brightness.dark));
|
|
expect(theme.colorScheme.brightness, equals(Brightness.dark));
|
|
expect(theme.primaryColor, equals(lightColors.primary));
|
|
expect(theme.accentColor, equals(lightColors.secondary));
|
|
expect(theme.cardColor, equals(lightColors.surface));
|
|
expect(theme.backgroundColor, equals(lightColors.background));
|
|
expect(theme.canvasColor, equals(lightColors.background));
|
|
expect(theme.scaffoldBackgroundColor, equals(lightColors.background));
|
|
expect(theme.dialogBackgroundColor, equals(lightColors.background));
|
|
expect(theme.errorColor, equals(lightColors.error));
|
|
expect(theme.applyElevationOverlayColor, isFalse);
|
|
});
|
|
}
|