| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- 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(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),
- background: Color(0xFFF8F9FF),
- onBackground: Color(0xFF0B1C30),
- surface: Color(0xFFF8F9FF),
- onSurface: Color(0xFF0B1C30),
- surfaceVariant: 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),
- background: Color(0xFF111318),
- onBackground: Color(0xFFEAF1FF),
- surface: Color(0xFF111318),
- onSurface: Color(0xFFEAF1FF),
- surfaceVariant: 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),
- ),
- );
- }
- }
|