createYaruLightTheme function

ThemeData createYaruLightTheme({
  1. required Color primaryColor,
  2. Color lightBaseColor = Colors.white,
  3. Color darkBaseColor = YaruColors.jet,
  4. Color? errorColor,
  5. Color? elevatedButtonColor,
  6. Color? elevatedButtonTextColor,
  7. bool? useMaterial3 = true,
})

Helper function to create a new Yaru light theme

Implementation

ThemeData createYaruLightTheme({
  required Color primaryColor,
  Color lightBaseColor = Colors.white,
  Color darkBaseColor = YaruColors.jet,
  Color? errorColor,
  Color? elevatedButtonColor,
  Color? elevatedButtonTextColor,
  bool? useMaterial3 = true,
}) {
  final secondary = primaryColor.scale(lightness: 0.2).cap(saturation: .9);
  final secondaryContainer =
      primaryColor.scale(lightness: 0.85).cap(saturation: .5);
  final tertiary = primaryColor.scale(lightness: 0.5).cap(saturation: .8);
  final tertiaryContainer =
      primaryColor.scale(lightness: 0.75).cap(saturation: .75);

  final colorScheme = ColorScheme.fromSeed(
    seedColor: primaryColor,
    error: errorColor ?? YaruColors.light.error,
    onError: lightBaseColor,
    brightness: Brightness.light,
    primary: primaryColor,
    onPrimary: contrastColor(primaryColor),
    primaryContainer: lightBaseColor,
    onPrimaryContainer: darkBaseColor,
    inversePrimary: darkBaseColor,
    secondary: secondary,
    onSecondary: contrastColor(secondary),
    secondaryContainer: secondaryContainer,
    onSecondaryContainer: contrastColor(secondaryContainer),
    surface: lightBaseColor,
    surfaceTint: lightBaseColor,
    onSurface: darkBaseColor.scale(lightness: 0.1),
    inverseSurface: darkBaseColor,
    onInverseSurface: lightBaseColor,
    tertiary: tertiary,
    onTertiary: contrastColor(tertiary),
    tertiaryContainer: tertiaryContainer,
    onTertiaryContainer: contrastColor(tertiaryContainer),
    onSurfaceVariant: darkBaseColor.scale(lightness: 0.2),
    outline: primaryColor == Colors.white
        ? Colors.black
        : lightBaseColor.scale(lightness: -0.2),
    outlineVariant: Colors.black,
    scrim: Colors.black,
  );

  return createYaruTheme(
    colorScheme: colorScheme,
    elevatedButtonColor: elevatedButtonColor,
    elevatedButtonTextColor: elevatedButtonTextColor,
    useMaterial3: useMaterial3,
  );
}