createYaruDarkTheme function

ThemeData createYaruDarkTheme({
  1. required Color primaryColor,
  2. Color lightBaseColor = YaruColors.porcelain,
  3. Color darkBaseColor = YaruColors.jet,
  4. Color? errorColor,
  5. Color? elevatedButtonColor,
  6. Color? elevatedButtonTextColor,
  7. bool? useMaterial3 = true,
  8. bool highContrast = false,
})

Helper function to create a new Yaru dark theme

Implementation

ThemeData createYaruDarkTheme({
  required Color primaryColor,
  Color lightBaseColor = YaruColors.porcelain,
  Color darkBaseColor = YaruColors.jet,
  Color? errorColor,
  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: errorColor ?? YaruColors.dark.error,
    onError: Colors.white,
    brightness: Brightness.dark,
    primary: primaryColor,
    primaryContainer: darkBaseColor.scale(lightness: 0.1),
    onPrimary: contrastColor(primaryColor),
    onPrimaryContainer: lightBaseColor,
    inversePrimary: lightBaseColor,
    secondary: secondary,
    onSecondary: contrastColor(primaryColor.scale(lightness: -0.25)),
    secondaryContainer: secondaryContainer,
    onSecondaryContainer: contrastColor(secondaryContainer),
    surface: darkBaseColor,
    surfaceTint: darkBaseColor,
    onSurface: lightBaseColor,
    inverseSurface: lightBaseColor,
    onInverseSurface: darkBaseColor,
    tertiary: tertiary,
    onTertiary: lightBaseColor,
    tertiaryContainer: tertiaryContainer,
    onTertiaryContainer: lightBaseColor,
    onSurfaceVariant: lightBaseColor.scale(
      lightness: -0.1,
      saturation: 0.1,
    ),
    outline: primaryColor == Colors.black
        ? Colors.white
        : darkBaseColor.scale(lightness: 0.14),
    outlineVariant: Colors.white,
    scrim: Colors.black,
  );
  return createYaruTheme(
    colorScheme: colorScheme,
    elevatedButtonColor: elevatedButtonColor,
    elevatedButtonTextColor: elevatedButtonTextColor,
    useMaterial3: useMaterial3,
  );
}