import 'package:flutter/material.dart'; class AppThemes { // Private constructor to prevent instantiation AppThemes._(); // Light theme colors static const Color _primaryColorLight = Color(0xFF1E88E5); // Blue 600 static const Color _secondaryColorLight = Color(0xFF26A69A); // Teal 400 static const Color _errorColorLight = Color(0xFFE53935); // Red 600 static const Color _surfaceColorLight = Colors.white; // Dark theme colors static const Color _primaryColorDark = Color(0xFF42A5F5); // Blue 400 static const Color _secondaryColorDark = Color(0xFF4DB6AC); // Teal 300 static const Color _errorColorDark = Color(0xFFEF5350); // Red 400 static const Color _surfaceColorDark = Color(0xFF1E1E1E); // Text themes static const TextTheme _textThemeLight = TextTheme( displayLarge: TextStyle( fontSize: 96, fontWeight: FontWeight.w300, color: Color(0xFF212121), fontFamily: 'Rubik', ), displayMedium: TextStyle( fontSize: 60, fontWeight: FontWeight.w300, color: Color(0xFF212121), fontFamily: 'Rubik', ), displaySmall: TextStyle( fontSize: 48, fontWeight: FontWeight.w400, color: Color(0xFF212121), fontFamily: 'Rubik', ), headlineMedium: TextStyle( fontSize: 34, fontWeight: FontWeight.w400, color: Color(0xFF212121), fontFamily: 'Rubik', ), headlineSmall: TextStyle( fontSize: 24, fontWeight: FontWeight.w400, color: Color(0xFF212121), fontFamily: 'Rubik', ), titleLarge: TextStyle( fontSize: 20, fontWeight: FontWeight.w500, color: Color(0xFF212121), fontFamily: 'Rubik', ), bodyLarge: TextStyle( fontSize: 16, fontWeight: FontWeight.w400, color: Color(0xFF212121), fontFamily: 'Rubik', ), bodyMedium: TextStyle( fontSize: 14, fontWeight: FontWeight.w400, color: Color(0xFF212121), fontFamily: 'Rubik', ), bodySmall: TextStyle( fontSize: 12, fontWeight: FontWeight.w400, color: Color(0xFF757575), fontFamily: 'Rubik', ), labelLarge: TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: Color(0xFF212121), fontFamily: 'Rubik', ), ); static final TextTheme _textThemeDark = _textThemeLight.copyWith( displayLarge: _textThemeLight.displayLarge?.copyWith(color: Colors.white), displayMedium: _textThemeLight.displayMedium?.copyWith(color: Colors.white), displaySmall: _textThemeLight.displaySmall?.copyWith(color: Colors.white), headlineMedium: _textThemeLight.headlineMedium?.copyWith(color: Colors.white), headlineSmall: _textThemeLight.headlineSmall?.copyWith(color: Colors.white), titleLarge: _textThemeLight.titleLarge?.copyWith(color: Colors.white), bodyLarge: _textThemeLight.bodyLarge?.copyWith(color: Colors.white), bodyMedium: _textThemeLight.bodyMedium?.copyWith(color: Colors.white), bodySmall: _textThemeLight.bodySmall?.copyWith(color: Colors.white70), labelLarge: _textThemeLight.labelLarge?.copyWith(color: Colors.white), ); // Light theme static final ThemeData lightTheme = ThemeData( useMaterial3: true, fontFamily: 'Rubik', colorScheme: const ColorScheme.light( primary: _primaryColorLight, secondary: _secondaryColorLight, error: _errorColorLight, surface: _surfaceColorLight, onPrimary: Colors.white, onSecondary: Colors.white, onSurface: Colors.black87, onError: Colors.white, brightness: Brightness.light, ), textTheme: _textThemeLight, appBarTheme: const AppBarTheme( elevation: 0, backgroundColor: _surfaceColorLight, foregroundColor: Color(0xFF212121), centerTitle: true, ), cardTheme: CardTheme( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( foregroundColor: Colors.white, backgroundColor: _primaryColorLight, elevation: 2, padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), outlinedButtonTheme: OutlinedButtonThemeData( style: OutlinedButton.styleFrom( foregroundColor: _primaryColorLight, side: const BorderSide(color: _primaryColorLight), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), textButtonTheme: TextButtonThemeData( style: TextButton.styleFrom( foregroundColor: _primaryColorLight, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), ), ), inputDecorationTheme: InputDecorationTheme( filled: true, fillColor: Colors.grey[100], contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide.none, ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide(color: Colors.grey[300]!), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: _primaryColorLight, width: 2), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: _errorColorLight, width: 2), ), labelStyle: const TextStyle(color: Colors.grey), ), bottomNavigationBarTheme: const BottomNavigationBarThemeData( selectedItemColor: _primaryColorLight, unselectedItemColor: Colors.grey, ), ); // Dark theme static final ThemeData darkTheme = ThemeData( fontFamily: 'Rubik', useMaterial3: true, colorScheme: const ColorScheme.dark( primary: _primaryColorDark, secondary: _secondaryColorDark, error: _errorColorDark, surface: _surfaceColorDark, onPrimary: Colors.black, onSecondary: Colors.black, onSurface: Colors.white, onError: Colors.black, brightness: Brightness.dark, ), textTheme: _textThemeDark, appBarTheme: const AppBarTheme( elevation: 0, backgroundColor: _surfaceColorDark, foregroundColor: Colors.white, centerTitle: true, ), cardTheme: CardTheme( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), color: const Color(0xFF2C2C2C), ), elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( foregroundColor: Colors.black, backgroundColor: _primaryColorDark, elevation: 2, padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), outlinedButtonTheme: OutlinedButtonThemeData( style: OutlinedButton.styleFrom( foregroundColor: _primaryColorDark, side: const BorderSide(color: _primaryColorDark), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), textButtonTheme: TextButtonThemeData( style: TextButton.styleFrom( foregroundColor: _primaryColorDark, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), ), ), inputDecorationTheme: InputDecorationTheme( filled: true, fillColor: const Color(0xFF2A2A2A), contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide.none, ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: Color(0xFF3A3A3A)), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: _primaryColorDark, width: 2), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: _errorColorDark, width: 2), ), labelStyle: const TextStyle(color: Colors.grey), ), bottomNavigationBarTheme: const BottomNavigationBarThemeData( selectedItemColor: _primaryColorDark, unselectedItemColor: Colors.grey, backgroundColor: _surfaceColorDark, ), ); }