createGBSwitchTheme function

SwitchThemeData createGBSwitchTheme({
  1. required Color accentColor,
  2. required Color backgroundDisabled,
  3. SwitchThemeData? customTheme,
})

Creates default SwitchThemeData for GB UI Kit switches.

Implementation

SwitchThemeData createGBSwitchTheme({
  required Color accentColor,
  required Color backgroundDisabled,
  SwitchThemeData? customTheme,
}) {
  final defaultTheme = SwitchThemeData(
    thumbColor: WidgetStateProperty.resolveWith<Color>((states) {
      if (states.contains(WidgetState.disabled)) {
        return const Color(0xffb0b0b0);
      }
      return Colors.white;
    }),
    trackColor: WidgetStateProperty.resolveWith<Color>((states) {
      if (states.contains(WidgetState.selected)) {
        if (states.contains(WidgetState.disabled)) {
          return accentColor.withValues(alpha: 0.5);
        }
        return accentColor;
      }
      if (states.contains(WidgetState.disabled)) {
        return const Color(0xffe5e5e5);
      }
      return const Color(0xffe0e0e2);
    }),
    trackOutlineColor: WidgetStateProperty.resolveWith<Color>((states) {
      if (states.contains(WidgetState.selected)) {
        return Colors.transparent;
      }
      if (states.contains(WidgetState.disabled)) {
        return const Color(0xffd5d5d5);
      }
      return const Color(0xffc7c7cc);
    }),
    trackOutlineWidth: const WidgetStatePropertyAll<double>(1.0),
  );

  return customTheme != null
      ? defaultTheme.copyWith(
          thumbColor: customTheme.thumbColor,
          trackColor: customTheme.trackColor,
          trackOutlineColor: customTheme.trackOutlineColor,
          trackOutlineWidth: customTheme.trackOutlineWidth,
          materialTapTargetSize: customTheme.materialTapTargetSize,
          mouseCursor: customTheme.mouseCursor,
          overlayColor: customTheme.overlayColor,
          splashRadius: customTheme.splashRadius,
          thumbIcon: customTheme.thumbIcon,
        )
      : defaultTheme;
}