import 'package:flutter/material.dart'; import '../constants/app_constants.dart'; class AppTheme { static ThemeData get lightTheme { return ThemeData( useMaterial3: true, colorScheme: ColorScheme.fromSeed( seedColor: AppConstants.primaryColor, brightness: Brightness.light, primary: AppConstants.primaryColor, secondary: AppConstants.secondaryColor, surface: AppConstants.surfaceColor, error: AppConstants.errorColor, ), // AppBar 主题 appBarTheme: const AppBarTheme( backgroundColor: AppConstants.primaryColor, foregroundColor: Colors.white, elevation: 0, centerTitle: true, titleTextStyle: TextStyle( color: Colors.white, fontSize: 18, fontWeight: FontWeight.w500, ), iconTheme: IconThemeData(color: Colors.white), ), // 按钮主题 elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: AppConstants.primaryColor, foregroundColor: Colors.white, elevation: 2, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), ), ), textButtonTheme: TextButtonThemeData( style: TextButton.styleFrom( foregroundColor: AppConstants.primaryColor, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), ), ), outlinedButtonTheme: OutlinedButtonThemeData( style: OutlinedButton.styleFrom( foregroundColor: AppConstants.primaryColor, side: const BorderSide(color: AppConstants.primaryColor), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), ), ), // 卡片主题 cardTheme: CardThemeData( elevation: 2, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), color: AppConstants.surfaceColor, ), // 输入框主题 inputDecorationTheme: InputDecorationTheme( border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: Colors.grey), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide( color: AppConstants.primaryColor, width: 2, ), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: AppConstants.errorColor), ), filled: true, fillColor: Colors.grey[50], contentPadding: const EdgeInsets.symmetric( horizontal: 16, vertical: 12, ), ), // 浮动按钮主题 floatingActionButtonTheme: const FloatingActionButtonThemeData( backgroundColor: AppConstants.primaryColor, foregroundColor: Colors.white, elevation: 4, ), // 底部导航栏主题 bottomNavigationBarTheme: const BottomNavigationBarThemeData( backgroundColor: AppConstants.surfaceColor, selectedItemColor: AppConstants.primaryColor, unselectedItemColor: Colors.grey, type: BottomNavigationBarType.fixed, elevation: 8, ), // 图标主题 iconTheme: const IconThemeData( color: AppConstants.primaryColor, size: 24, ), // 文本主题 textTheme: const TextTheme( displayLarge: TextStyle( fontSize: 32, fontWeight: FontWeight.bold, color: Colors.black87, ), displayMedium: TextStyle( fontSize: 28, fontWeight: FontWeight.bold, color: Colors.black87, ), displaySmall: TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: Colors.black87, ), headlineLarge: TextStyle( fontSize: 22, fontWeight: FontWeight.w600, color: Colors.black87, ), headlineMedium: TextStyle( fontSize: 20, fontWeight: FontWeight.w600, color: Colors.black87, ), headlineSmall: TextStyle( fontSize: 18, fontWeight: FontWeight.w600, color: Colors.black87, ), titleLarge: TextStyle( fontSize: 16, fontWeight: FontWeight.w500, color: Colors.black87, ), titleMedium: TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: Colors.black87, ), titleSmall: TextStyle( fontSize: 12, fontWeight: FontWeight.w500, color: Colors.black87, ), bodyLarge: TextStyle( fontSize: 16, fontWeight: FontWeight.normal, color: Colors.black87, ), bodyMedium: TextStyle( fontSize: 14, fontWeight: FontWeight.normal, color: Colors.black87, ), bodySmall: TextStyle( fontSize: 12, fontWeight: FontWeight.normal, color: Colors.black54, ), labelLarge: TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: Colors.black87, ), labelMedium: TextStyle( fontSize: 12, fontWeight: FontWeight.w500, color: Colors.black87, ), labelSmall: TextStyle( fontSize: 10, fontWeight: FontWeight.w500, color: Colors.black54, ), ), ); } static ThemeData get darkTheme { return ThemeData( useMaterial3: true, colorScheme: ColorScheme.fromSeed( seedColor: AppConstants.primaryColor, brightness: Brightness.dark, primary: AppConstants.primaryColor, secondary: AppConstants.secondaryColor, surface: const Color(0xFF1E1E1E), error: AppConstants.errorColor, ), // AppBar 主题 appBarTheme: const AppBarTheme( backgroundColor: Color(0xFF1E1E1E), foregroundColor: Colors.white, elevation: 0, centerTitle: true, titleTextStyle: TextStyle( color: Colors.white, fontSize: 18, fontWeight: FontWeight.w500, ), iconTheme: IconThemeData(color: Colors.white), ), // 卡片主题 cardTheme: CardThemeData( elevation: 2, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), color: const Color(0xFF1E1E1E), ), // 输入框主题 inputDecorationTheme: InputDecorationTheme( border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide(color: Colors.grey[600]!), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide( color: AppConstants.primaryColor, width: 2, ), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: AppConstants.errorColor), ), filled: true, fillColor: const Color(0xFF2A2A2A), contentPadding: const EdgeInsets.symmetric( horizontal: 16, vertical: 12, ), ), ); } }