toMaterialTheme method

ThemeData toMaterialTheme()

ThemeData Material yang selaras dengan tema ini.

Implementation

ThemeData toMaterialTheme() {
  final IddsColors c = colors;
  final Color secondary = c.secondary.shade500;
  final ColorScheme scheme = ColorScheme(
    brightness: brightness,
    primary: c.primaryMain,
    onPrimary: c.onPrimary,
    secondary: secondary,
    onSecondary: IddsColorUtils.bestContrast(secondary, <Color>[c.baseWhite, c.baseBlack]),
    error: c.contentNegative,
    onError: c.baseWhite,
    surface: c.backgroundPrimary,
    onSurface: c.contentPrimary,
    onSurfaceVariant: c.contentSecondary,
    surfaceContainerLowest: c.backgroundPrimary,
    surfaceContainerLow: c.backgroundSecondary,
    surfaceContainer: c.backgroundSecondary,
    surfaceContainerHigh: c.backgroundTertiary,
    surfaceContainerHighest: c.backgroundTertiary,
    outline: c.strokeSecondary,
    outlineVariant: c.strokePrimary,
    scrim: c.backgroundOverlay,
  );
  final ThemeData base = ThemeData(
    colorScheme: scheme,
    brightness: brightness,
    fontFamily: fontFamily,
    fontFamilyFallback: fontFamilyFallback,
    scaffoldBackgroundColor: c.backgroundPrimary,
    dividerColor: c.strokePrimary,
  );
  final IddsTextStyleBuilder? builder = textStyleBuilder;
  if (builder == null) return base;
  // Teks widget Material ikut memakai font dari textStyleBuilder.
  TextStyle? f(TextStyle? s) => s == null ? null : builder(s);
  TextTheme map(TextTheme t) => TextTheme(
        displayLarge: f(t.displayLarge),
        displayMedium: f(t.displayMedium),
        displaySmall: f(t.displaySmall),
        headlineLarge: f(t.headlineLarge),
        headlineMedium: f(t.headlineMedium),
        headlineSmall: f(t.headlineSmall),
        titleLarge: f(t.titleLarge),
        titleMedium: f(t.titleMedium),
        titleSmall: f(t.titleSmall),
        bodyLarge: f(t.bodyLarge),
        bodyMedium: f(t.bodyMedium),
        bodySmall: f(t.bodySmall),
        labelLarge: f(t.labelLarge),
        labelMedium: f(t.labelMedium),
        labelSmall: f(t.labelSmall),
      );
  return base.copyWith(textTheme: map(base.textTheme), primaryTextTheme: map(base.primaryTextTheme));
}