import 'package:flutter/material.dart'; ThemeData buildLightTheme() { final scheme = ColorScheme.fromSeed( seedColor: const Color(0xFF1A1F2C), brightness: Brightness.light, ).copyWith( surface: Colors.white, surfaceContainerLowest: const Color(0xFFF7F8FA), surfaceContainerLow: const Color(0xFFF3F4F6), surfaceContainerHighest: const Color(0xFFE5E7EB), outline: const Color(0xFFD1D5DB), outlineVariant: const Color(0xFFE5E7EB), primary: const Color(0xFF1A1F2C), onPrimary: Colors.white, onSurface: const Color(0xFF111827), onSurfaceVariant: const Color(0xFF6B7280), ); return _buildTheme(scheme); } ThemeData buildDarkTheme() { final scheme = ColorScheme.fromSeed( seedColor: const Color(0xFF7DD3FC), brightness: Brightness.dark, ).copyWith( surface: const Color(0xFF0F172A), surfaceContainerLowest: const Color(0xFF020617), surfaceContainerLow: const Color(0xFF111827), surfaceContainerHighest: const Color(0xFF1F2937), outline: const Color(0xFF334155), outlineVariant: const Color(0xFF1E293B), primary: const Color(0xFFBAE6FD), onPrimary: const Color(0xFF082F49), onSurface: const Color(0xFFF8FAFC), onSurfaceVariant: const Color(0xFF94A3B8), ); return _buildTheme(scheme); } ThemeData _buildTheme(ColorScheme colorScheme) { final isDark = colorScheme.brightness == Brightness.dark; final base = ThemeData( useMaterial3: true, colorScheme: colorScheme, fontFamily: 'NotoSansKR', ); return base.copyWith( scaffoldBackgroundColor: colorScheme.surfaceContainerLowest, pageTransitionsTheme: const PageTransitionsTheme( builders: { TargetPlatform.android: NoTransitionsBuilder(), TargetPlatform.iOS: NoTransitionsBuilder(), TargetPlatform.linux: NoTransitionsBuilder(), TargetPlatform.macOS: NoTransitionsBuilder(), TargetPlatform.windows: NoTransitionsBuilder(), TargetPlatform.fuchsia: NoTransitionsBuilder(), }, ), appBarTheme: AppBarTheme( elevation: 0, centerTitle: false, backgroundColor: colorScheme.surface, foregroundColor: colorScheme.onSurface, surfaceTintColor: Colors.transparent, ), cardTheme: CardThemeData( color: colorScheme.surface, elevation: 0, surfaceTintColor: Colors.transparent, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), side: BorderSide(color: colorScheme.outlineVariant), ), ), dividerTheme: DividerThemeData( color: colorScheme.outlineVariant, thickness: 1, ), drawerTheme: DrawerThemeData( backgroundColor: colorScheme.surface, surfaceTintColor: Colors.transparent, ), dialogTheme: DialogThemeData( backgroundColor: colorScheme.surface, surfaceTintColor: Colors.transparent, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)), ), inputDecorationTheme: InputDecorationTheme( filled: true, fillColor: isDark ? colorScheme.surfaceContainerLow : colorScheme.surface, border: OutlineInputBorder( borderRadius: BorderRadius.circular(14), borderSide: BorderSide(color: colorScheme.outline), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(14), borderSide: BorderSide(color: colorScheme.outline), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(14), borderSide: BorderSide(color: colorScheme.primary, width: 1.4), ), labelStyle: TextStyle(color: colorScheme.onSurfaceVariant), hintStyle: TextStyle(color: colorScheme.onSurfaceVariant), prefixIconColor: colorScheme.onSurfaceVariant, ), filledButtonTheme: FilledButtonThemeData( style: FilledButton.styleFrom( minimumSize: const Size.fromHeight(50), backgroundColor: colorScheme.primary, foregroundColor: colorScheme.onPrimary, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)), ), ), outlinedButtonTheme: OutlinedButtonThemeData( style: OutlinedButton.styleFrom( foregroundColor: colorScheme.onSurface, side: BorderSide(color: colorScheme.outline), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)), ), ), tabBarTheme: TabBarThemeData( dividerColor: colorScheme.outlineVariant, labelColor: colorScheme.onSurface, unselectedLabelColor: colorScheme.onSurfaceVariant, indicatorColor: colorScheme.primary, ), ); } class NoTransitionsBuilder extends PageTransitionsBuilder { const NoTransitionsBuilder(); @override Widget buildTransitions( PageRoute route, BuildContext context, Animation animation, Animation secondaryAnimation, Widget child, ) { return child; } }