import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; class AppTheme { static ThemeData get light { return _buildTheme(_lightColorScheme, Brightness.light); } static ThemeData get dark { return _buildTheme(_darkColorScheme, Brightness.dark); } static const ColorScheme _lightColorScheme = ColorScheme( brightness: Brightness.light, primary: Color(0xFF0058be), //Color(0xFF000000), onPrimary: Color(0xFFFFFFFF), primaryContainer: Color(0xFF131B2E), onPrimaryContainer: Color(0xFF7C839B), secondary: Color(0xFF0058BE), onSecondary: Color(0xFFFFFFFF), secondaryContainer: Color(0xFF2170E4), onSecondaryContainer: Color(0xFFFEFCFF), tertiary: Color(0xFF000000), onTertiary: Color(0xFFFFFFFF), tertiaryContainer: Color(0xFF191C1E), onTertiaryContainer: Color(0xFF818486), error: Color(0xFFBA1A1A), onError: Color(0xFFFFFFFF), errorContainer: Color(0xFFFFDAD6), onErrorContainer: Color(0xFF93000A), surface: Color(0xFFF8F9FF), onSurface: Color(0xFF0B1C30), surfaceContainerHighest: Color(0xFFD3E4FE), onSurfaceVariant: Color(0xFF45464D), outline: Color(0xFF76777D), outlineVariant: Color(0xFFC6C6CD), inverseSurface: Color(0xFF213145), //inverseOnSurface: Color(0xFFEAF1FF), inversePrimary: Color(0xFFBEC6E0), surfaceTint: Color(0xFF565E74), ); static const ColorScheme _darkColorScheme = ColorScheme( brightness: Brightness.dark, primary: Color(0xFFBEC6E0), onPrimary: Color(0xFF131B2E), primaryContainer: Color(0xFF3F465C), onPrimaryContainer: Color(0xFFDAE2FD), secondary: Color(0xFFADC6FF), onSecondary: Color(0xFF001A42), secondaryContainer: Color(0xFF004395), onSecondaryContainer: Color(0xFFD8E2FF), tertiary: Color(0xFFC4C7C9), onTertiary: Color(0xFF191C1E), tertiaryContainer: Color(0xFF444749), onTertiaryContainer: Color(0xFFE0E3E5), error: Color(0xFFFFB4AB), onError: Color(0xFF690005), errorContainer: Color(0xFF93000A), onErrorContainer: Color(0xFFFFDAD6), surface: Color(0xFF111318), onSurface: Color(0xFFEAF1FF), surfaceContainerHighest: Color(0xFF2D3138), onSurfaceVariant: Color(0xFFC6C6CD), outline: Color(0xFF8E9099), outlineVariant: Color(0xFF45464D), inverseSurface: Color(0xFFEAF1FF), //inverseOnSurface: Color(0xFF213145), inversePrimary: Color(0xFF000000), surfaceTint: Color(0xFF565E74), ); static ThemeData _buildTheme(ColorScheme colorScheme, Brightness brightness) { final textTheme = GoogleFonts.interTextTheme( brightness == Brightness.dark ? ThemeData.dark().textTheme : ThemeData.light().textTheme, ); return ThemeData( useMaterial3: true, colorScheme: colorScheme, textTheme: textTheme.copyWith( displayLarge: textTheme.displayLarge?.copyWith( fontSize: 48, height: 56 / 48, letterSpacing: -0.02, fontWeight: FontWeight.w700, ), headlineLarge: textTheme.headlineLarge?.copyWith( fontSize: 32, height: 40 / 32, letterSpacing: -0.02, fontWeight: FontWeight.w700, ), headlineMedium: textTheme.headlineMedium?.copyWith( fontSize: 24, height: 32 / 24, fontWeight: FontWeight.w600, ), titleLarge: textTheme.titleLarge?.copyWith( fontSize: 20, height: 28 / 20, fontWeight: FontWeight.w600, ), bodyLarge: textTheme.bodyLarge?.copyWith( fontSize: 16, height: 24 / 16, fontWeight: FontWeight.w400, ), bodyMedium: textTheme.bodyMedium?.copyWith( fontSize: 14, height: 20 / 14, fontWeight: FontWeight.w400, ), labelMedium: textTheme.labelMedium?.copyWith( fontSize: 12, height: 16 / 12, fontWeight: FontWeight.w600, ), ), appBarTheme: AppBarTheme( centerTitle: false, elevation: 0, scrolledUnderElevation: 1, backgroundColor: colorScheme.surface, foregroundColor: colorScheme.onSurface, ), cardTheme: CardThemeData( elevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), side: BorderSide(color: colorScheme.outlineVariant, width: 0.5), ), ), inputDecorationTheme: InputDecorationTheme( filled: true, fillColor: colorScheme.surface, border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide(color: colorScheme.outlineVariant), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide(color: colorScheme.outlineVariant), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide(color: colorScheme.secondary, width: 1), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide(color: colorScheme.error), ), contentPadding: const EdgeInsets.symmetric( horizontal: 16, vertical: 14, ), prefixIconColor: colorScheme.onSurfaceVariant, labelStyle: TextStyle(color: colorScheme.onSurfaceVariant), ), filledButtonTheme: FilledButtonThemeData( style: FilledButton.styleFrom( backgroundColor: colorScheme.primary, foregroundColor: colorScheme.onPrimary, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 14), textStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.w600), ), ), outlinedButtonTheme: OutlinedButtonThemeData( style: OutlinedButton.styleFrom( foregroundColor: colorScheme.secondary, side: BorderSide(color: colorScheme.secondary.withValues(alpha: 0.2)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), ), ), floatingActionButtonTheme: FloatingActionButtonThemeData( elevation: 2, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), ), navigationBarTheme: NavigationBarThemeData( elevation: 1, indicatorShape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), navigationRailTheme: NavigationRailThemeData( elevation: 1, indicatorShape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), dividerTheme: DividerThemeData( color: colorScheme.outlineVariant, thickness: 1, ), checkboxTheme: CheckboxThemeData( fillColor: WidgetStateProperty.resolveWith((states) { if (states.contains(WidgetState.selected)) { return colorScheme.secondary; } return Colors.transparent; }), checkColor: WidgetStateProperty.all(Colors.white), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4)), side: BorderSide(color: colorScheme.outlineVariant), ), ); } }