import 'package:PiliPlus/common/style.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:flutter/cupertino.dart' show CupertinoThemeData; import 'package:flutter/foundation.dart' show PlatformDispatcher; import 'package:flutter/material.dart'; abstract final class ThemeUtils { static late ThemeData lightTheme; static late ThemeData darkTheme; static late ThemeMode themeMode; static ThemeData get theme { if (themeMode == .dark || (themeMode == .system && PlatformDispatcher.instance.platformBrightness == .dark)) { return darkTheme; } return lightTheme; } static bool get isDarkMode => theme.isDark; static String themeUrl(bool isDark) => 'native.theme=${isDark ? 2 : 1}&night=${isDark ? 1 : 0}'; static ThemeData getThemeData({ required ColorScheme colorScheme, required bool isDynamic, bool isDark = false, }) { ThemeData themeData = ThemeData( colorScheme: colorScheme, useMaterial3: true, appBarTheme: AppBarTheme( elevation: 0, titleSpacing: 0, centerTitle: false, scrolledUnderElevation: 0, backgroundColor: colorScheme.surface, titleTextStyle: TextStyle( fontSize: 16, color: colorScheme.onSurface, ), ), navigationBarTheme: NavigationBarThemeData( surfaceTintColor: isDynamic ? colorScheme.onSurfaceVariant : null, ), snackBarTheme: SnackBarThemeData( actionTextColor: colorScheme.primary, backgroundColor: colorScheme.secondaryContainer, closeIconColor: colorScheme.secondary, contentTextStyle: TextStyle(color: colorScheme.onSecondaryContainer), elevation: 20, ), popupMenuTheme: PopupMenuThemeData( surfaceTintColor: isDynamic ? colorScheme.onSurfaceVariant : null, ), cardTheme: CardThemeData( elevation: 1, margin: EdgeInsets.zero, surfaceTintColor: isDynamic ? colorScheme.onSurfaceVariant : isDark ? colorScheme.onSurfaceVariant : null, shadowColor: Colors.transparent, ), progressIndicatorTheme: ProgressIndicatorThemeData( // ignore: deprecated_member_use year2023: false, refreshBackgroundColor: colorScheme.onSecondary, ), dialogTheme: DialogThemeData( titleTextStyle: TextStyle( fontSize: 18, color: colorScheme.onSurface, ), backgroundColor: colorScheme.surface, constraints: const BoxConstraints(minWidth: 280, maxWidth: 420), ), bottomSheetTheme: BottomSheetThemeData( backgroundColor: colorScheme.surface, shape: const RoundedRectangleBorder( borderRadius: Style.bottomSheetRadius, ), ), // ignore: deprecated_member_use sliderTheme: const SliderThemeData(year2023: false), tooltipTheme: TooltipThemeData( textStyle: const TextStyle( color: Colors.white, fontSize: 14, ), decoration: BoxDecoration( color: Colors.grey[700]!.withValues(alpha: 0.9), borderRadius: const BorderRadius.all(Radius.circular(4)), ), ), cupertinoOverrideTheme: CupertinoThemeData( selectionHandleColor: colorScheme.primary, ), switchTheme: const SwitchThemeData( padding: .zero, materialTapTargetSize: .shrinkWrap, thumbIcon: WidgetStateProperty.fromMap( { WidgetState.selected: Icon(Icons.done), WidgetState.any: null, }, ), ), pageTransitionsTheme: const PageTransitionsTheme( builders: { TargetPlatform.android: ZoomPageTransitionsBuilder(), }, ), ); return themeData; } }