flutterNesTheme function

ThemeData flutterNesTheme({
  1. Color primaryColor = const Color(0xffb4b6f6),
  2. Brightness brightness = Brightness.light,
  3. NesTheme nesTheme = const NesTheme(pixelSize: 4),
  4. NesButtonTheme nesButtonTheme = const NesButtonTheme(normal: Color(0xffffffff), primary: Color(0xff209cee), success: Color(0xff92cc41), warning: Color(0xfff7d51d), error: Color(0xffe76e55), lightLabelColor: Color(0xffffffff), darkLabelColor: Color(0xff000000), lightIconTheme: NesIconTheme(primary: Color(0xffffffff), secondary: Color(0xff000000), accent: Color(0xff9badb7), shadow: Color(0xff696a6a)), darkIconTheme: NesIconTheme(primary: Color(0xff000000), secondary: Color(0xffffffff), accent: Color(0xff696a6a), shadow: Color(0xff9badb7))),
  5. NesIconTheme? nesIconTheme,
  6. NesSelectionListTheme nesSelectionListTheme = const NesSelectionListTheme(markerSize: Size(24, 24), itemMinHeight: 32),
  7. NesOverlayTransitionTheme? nesOverlayTransitionTheme,
  8. NesSnackbarTheme nesSnackbarTheme = const NesSnackbarTheme(normal: Color(0xffffffff), success: Color(0xff92cc41), warning: Color(0xfff7d51d), error: Color(0xffe76e55)),
  9. NesTooltipTheme? nesTooltipTheme,
  10. NesContainerTheme? nesContainerTheme,
  11. NesBottomSheetTheme? nesBottomSheetTheme,
  12. Iterable<ThemeExtension> customExtensions = const [],
})

Creates a Flutter Nes ThemeData.

Implementation

ThemeData flutterNesTheme({
  Color primaryColor = const Color(0xffb4b6f6),
  Brightness brightness = Brightness.light,
  NesTheme nesTheme = const NesTheme(pixelSize: 4),
  NesButtonTheme nesButtonTheme = const NesButtonTheme(
    normal: Color(0xffffffff),
    primary: Color(0xff209cee),
    success: Color(0xff92cc41),
    warning: Color(0xfff7d51d),
    error: Color(0xffe76e55),
    lightLabelColor: Color(0xffffffff),
    darkLabelColor: Color(0xff000000),
    lightIconTheme: NesIconTheme(
      primary: Color(0xffffffff),
      secondary: Color(0xff000000),
      accent: Color(0xff9badb7),
      shadow: Color(0xff696a6a),
    ),
    darkIconTheme: NesIconTheme(
      primary: Color(0xff000000),
      secondary: Color(0xffffffff),
      accent: Color(0xff696a6a),
      shadow: Color(0xff9badb7),
    ),
  ),
  NesIconTheme? nesIconTheme,
  NesSelectionListTheme nesSelectionListTheme = const NesSelectionListTheme(
    markerSize: Size(24, 24),
    itemMinHeight: 32,
  ),
  NesOverlayTransitionTheme? nesOverlayTransitionTheme,
  NesSnackbarTheme nesSnackbarTheme = const NesSnackbarTheme(
    normal: Color(0xffffffff),
    success: Color(0xff92cc41),
    warning: Color(0xfff7d51d),
    error: Color(0xffe76e55),
  ),
  NesTooltipTheme? nesTooltipTheme,
  NesContainerTheme? nesContainerTheme,
  NesBottomSheetTheme? nesBottomSheetTheme,
  Iterable<ThemeExtension<dynamic>> customExtensions = const [],
}) {
  final iconTheme = nesIconTheme ??
      (brightness == Brightness.light
          ? const NesIconTheme(
              primary: Color(0xff000000),
              secondary: Color(0xffffffff),
              accent: Color(0xff9badb7),
              shadow: Color(0xff696a6a),
            )
          : const NesIconTheme(
              primary: Color(0xff808080),
              secondary: Color(0xffe5e5e5),
              accent: Color(0xff696a6a),
              shadow: Color(0xff9badb7),
            ));

  final overlayTransitionTheme = nesOverlayTransitionTheme ??
      (brightness == Brightness.light
          ? const NesOverlayTransitionTheme(color: Color(0xff0d0d0d))
          : const NesOverlayTransitionTheme(color: Color(0xff8c8c8c)));

  final themeData = ThemeData(
    brightness: brightness,
    colorSchemeSeed: primaryColor,
  );

  final textTheme = GoogleFonts.pressStart2pTextTheme(
    themeData.textTheme,
  );

  final toolTipTheme = nesTooltipTheme ??
      NesTooltipTheme(
        background: textTheme.bodyMedium?.color ?? Colors.black,
        textColor: themeData.colorScheme.background,
      );

  final containerTheme = nesContainerTheme ??
      NesContainerTheme(
        backgroundColor: themeData.cardColor,
        borderColor: textTheme.labelMedium?.color ?? Colors.black,
        labelTextStyle: textTheme.labelMedium ?? const TextStyle(),
      );

  final bottomSheetTheme = nesBottomSheetTheme ??
      NesBottomSheetTheme(
        backgroundColor: themeData.cardColor,
        borderColor: textTheme.labelMedium?.color ?? Colors.black,
      );

  return themeData.copyWith(
    textTheme: textTheme,
    extensions: [
      nesTheme,
      nesButtonTheme,
      iconTheme,
      nesSelectionListTheme,
      overlayTransitionTheme,
      nesSnackbarTheme,
      toolTipTheme,
      containerTheme,
      bottomSheetTheme,
      ...customExtensions,
    ],
    dividerTheme: DividerThemeData(
      thickness: nesTheme.pixelSize.toDouble(),
      color: textTheme.bodyMedium?.color,
    ),
    inputDecorationTheme: InputDecorationTheme(
      border: NesInputBorder(
        borderSide: BorderSide(
          color: textTheme.bodyMedium?.color ?? Colors.black,
          width: nesTheme.pixelSize.toDouble(),
        ),
      ),
      enabledBorder: NesInputBorder(
        borderSide: BorderSide(
          color: textTheme.bodyMedium?.color ?? Colors.black,
          width: nesTheme.pixelSize.toDouble(),
        ),
      ),
      focusedBorder: NesInputBorder(
        borderSide: BorderSide(
          width: nesTheme.pixelSize.toDouble(),
          color: themeData.colorScheme.primary,
        ),
      ),
      errorBorder: NesInputBorder(
        borderSide: BorderSide(
          width: nesTheme.pixelSize.toDouble(),
          color: themeData.colorScheme.error,
        ),
      ),
      focusedErrorBorder: NesInputBorder(
        borderSide: BorderSide(
          width: nesTheme.pixelSize.toDouble(),
          color: themeData.colorScheme.error,
        ),
      ),
    ),
  );
}