createYaruDarkTheme function
Helper function to create a new Yaru dark theme
Implementation
ThemeData createYaruDarkTheme({
required Color primaryColor,
Color? elevatedButtonColor,
Color? elevatedButtonTextColor,
bool? useMaterial3 = true,
bool highContrast = false,
}) {
final secondary = primaryColor.scale(lightness: -0.3, saturation: -0.15);
final secondaryContainer = primaryColor
.scale(lightness: -0.6, saturation: -0.75)
.capDown(lightness: .175);
final tertiary = primaryColor.scale(lightness: -0.5, saturation: -0.25);
final tertiaryContainer = primaryColor
.scale(lightness: -0.5, saturation: -0.65)
.capDown(lightness: .2);
final colorScheme = ColorScheme.fromSeed(
seedColor: primaryColor,
error: YaruColors.dark.error,
onError: Colors.white,
brightness: Brightness.dark,
primary: primaryColor,
primaryContainer: YaruColors.coolGrey,
onPrimary: contrastColor(primaryColor),
onPrimaryContainer: YaruColors.porcelain,
inversePrimary: YaruColors.porcelain,
secondary: secondary,
onSecondary: contrastColor(primaryColor.scale(lightness: -0.25)),
secondaryContainer: secondaryContainer,
onSecondaryContainer: Colors.white,
background: YaruColors.darkJet,
onBackground: YaruColors.porcelain,
surface: YaruColors.jet,
onSurface: YaruColors.porcelain,
inverseSurface: YaruColors.porcelain,
onInverseSurface: YaruColors.inkstone,
surfaceTint: YaruColors.coolGrey,
surfaceVariant: const Color.fromARGB(255, 34, 34, 34),
tertiary: tertiary,
onTertiary: YaruColors.porcelain,
tertiaryContainer: tertiaryContainer,
onTertiaryContainer: YaruColors.porcelain,
onSurfaceVariant: YaruColors.warmGrey,
outline: const Color.fromARGB(255, 68, 68, 68),
outlineVariant: Colors.white,
scrim: Colors.black,
);
return createYaruTheme(
colorScheme: colorScheme,
dividerColor: colorScheme.isHighContrast ? null : kDividerColorDark,
elevatedButtonColor: elevatedButtonColor,
elevatedButtonTextColor: elevatedButtonTextColor,
useMaterial3: useMaterial3,
);
}