import 'package:flutter/material.dart'; class AppThemeColors { const AppThemeColors({ required this.primarySeed, required this.secondarySeed, required this.scaffoldGradientStart, required this.scaffoldGradientEnd, required this.shellSurface, required this.shellBorder, required this.accent, required this.webViewBorder, required this.webViewBackground, required this.controlsGradientStart, required this.controlsGradientEnd, required this.controlsShadow, required this.statusText, }); final Color primarySeed; final Color secondarySeed; final Color scaffoldGradientStart; final Color scaffoldGradientEnd; final Color shellSurface; final Color shellBorder; final Color accent; final Color webViewBorder; final Color webViewBackground; final Color controlsGradientStart; final Color controlsGradientEnd; final Color controlsShadow; final Color statusText; } class AppThemeBusinessObject { static const AppThemeColors lightColors = AppThemeColors( primarySeed: Color(0xFFE36A18), secondarySeed: Color(0xFF1663C7), scaffoldGradientStart: Color(0xFFFFF3E3), scaffoldGradientEnd: Color(0xFFE6F2FF), shellSurface: Color(0xF7FFFFFF), shellBorder: Color(0x1A1A4D86), accent: Color(0xFF0F5DB6), webViewBorder: Color(0x261A4D86), webViewBackground: Color(0xFFFFFFFF), controlsGradientStart: Color(0xFFFFB465), controlsGradientEnd: Color(0xFF69ADFF), controlsShadow: Color(0x24114B7A), statusText: Color(0xFF13243D), ); static const AppThemeColors darkColors = AppThemeColors( primarySeed: Color(0xFFFF9D59), secondarySeed: Color(0xFF76B8FF), scaffoldGradientStart: Color(0xFF0F1C30), scaffoldGradientEnd: Color(0xFF31190C), shellSurface: Color(0xD9162438), shellBorder: Color(0x3366AAFF), accent: Color(0xFFFFBC7E), webViewBorder: Color(0x3378B7FF), webViewBackground: Color(0xFF0C1420), controlsGradientStart: Color(0xFF275792), controlsGradientEnd: Color(0xFF9A4F1F), controlsShadow: Color(0x44000000), statusText: Color(0xFFF4F7FF), ); static bool isDarkMode(BuildContext context) { return MediaQuery.platformBrightnessOf(context) == Brightness.dark; } static AppThemeColors colorsFor(BuildContext context) { return isDarkMode(context) ? darkColors : lightColors; } static ThemeData lightTheme() { final ColorScheme scheme = ColorScheme.fromSeed( seedColor: lightColors.primarySeed, brightness: Brightness.light, ).copyWith( primary: lightColors.primarySeed, secondary: lightColors.secondarySeed, tertiary: const Color(0xFF2C85E1), surface: const Color(0xFFFFFBF7), onSurface: lightColors.statusText, ); return ThemeData( useMaterial3: true, colorScheme: scheme, scaffoldBackgroundColor: scheme.surface, elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: scheme.primary, foregroundColor: scheme.onPrimary, padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 14), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), ), ), ); } static ThemeData darkTheme() { final ColorScheme scheme = ColorScheme.fromSeed( seedColor: darkColors.primarySeed, brightness: Brightness.dark, ).copyWith( primary: darkColors.primarySeed, secondary: darkColors.secondarySeed, tertiary: const Color(0xFF4E97E8), surface: const Color(0xFF111A27), onSurface: darkColors.statusText, ); return ThemeData( useMaterial3: true, colorScheme: scheme, scaffoldBackgroundColor: scheme.surface, elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: scheme.primary, foregroundColor: scheme.onPrimary, padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 14), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), ), ), ); } }