import 'package:flutter/material.dart'; import '../tokens/app_colors.dart'; import '../tokens/app_typography.dart'; /// UnionFlow Mobile App - Thème Global /// Utilise la charte stricte (Vert/Blanc/Noir OLED) et force la petite typographie. class AppTheme { // --- THÈME CLAIR (Mode Jour) --- static final ThemeData lightTheme = ThemeData( useMaterial3: true, brightness: Brightness.light, primaryColor: AppColors.primaryGreen, scaffoldBackgroundColor: AppColors.lightSurface, colorScheme: const ColorScheme.light( primary: AppColors.primaryGreen, secondary: AppColors.brandGreenLight, surface: AppColors.lightBackground, error: AppColors.error, onPrimary: Colors.white, onSecondary: Colors.white, onSurface: AppColors.textPrimaryLight, onError: Colors.white, ), // Forcer la typographie standardisée textTheme: const TextTheme( titleMedium: AppTypography.headerSmall, bodyMedium: AppTypography.bodyTextSmall, bodySmall: AppTypography.subtitleSmall, labelLarge: AppTypography.actionText, labelSmall: AppTypography.badgeText, ), // Personnalisation des AppBar (Garder la minimaliste) appBarTheme: const AppBarTheme( backgroundColor: AppColors.lightBackground, foregroundColor: AppColors.textPrimaryLight, elevation: 0, centerTitle: true, iconTheme: IconThemeData(color: AppColors.textPrimaryLight, size: 20), titleTextStyle: AppTypography.headerSmall, ), // Boutons par défaut elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: AppColors.primaryGreen, foregroundColor: Colors.white, elevation: 0, textStyle: AppTypography.actionText, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), minimumSize: const Size(64, 32), padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), ), ), // BottomNavigationBar ultra-compacte bottomNavigationBarTheme: const BottomNavigationBarThemeData( backgroundColor: AppColors.lightBackground, selectedItemColor: AppColors.primaryGreen, unselectedItemColor: AppColors.textSecondaryLight, showSelectedLabels: false, showUnselectedLabels: false, elevation: 8, type: BottomNavigationBarType.fixed, ), dividerTheme: const DividerThemeData( color: AppColors.lightBorder, thickness: 1, space: 1, ), ); // --- THÈME SOMBRE (Mode Nuit OLED) --- static final ThemeData darkTheme = ThemeData( useMaterial3: true, brightness: Brightness.dark, primaryColor: AppColors.primaryGreen, scaffoldBackgroundColor: AppColors.darkBackground, // Noir OLED colorScheme: const ColorScheme.dark( primary: AppColors.primaryGreen, secondary: AppColors.brandGreenLight, surface: AppColors.darkSurface, // Gris très sombre error: AppColors.error, onPrimary: Colors.white, onSecondary: Colors.white, onSurface: AppColors.textPrimaryDark, onError: Colors.white, ), textTheme: const TextTheme( titleMedium: AppTypography.headerSmall, bodyMedium: AppTypography.bodyTextSmall, bodySmall: AppTypography.subtitleSmall, labelLarge: AppTypography.actionText, labelSmall: AppTypography.badgeText, ).apply( bodyColor: AppColors.textPrimaryDark, displayColor: AppColors.textPrimaryDark, ), appBarTheme: const AppBarTheme( backgroundColor: AppColors.darkBackground, foregroundColor: AppColors.textPrimaryDark, elevation: 0, centerTitle: true, iconTheme: IconThemeData(color: AppColors.textPrimaryDark, size: 20), titleTextStyle: AppTypography.headerSmall, // Remplace titleTextStyle ), elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: AppColors.primaryGreen, foregroundColor: Colors.white, elevation: 0, textStyle: AppTypography.actionText, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), minimumSize: const Size(64, 32), padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), ), ), bottomNavigationBarTheme: const BottomNavigationBarThemeData( backgroundColor: AppColors.darkBackground, selectedItemColor: AppColors.primaryGreen, unselectedItemColor: AppColors.textSecondaryDark, showSelectedLabels: false, showUnselectedLabels: false, elevation: 8, type: BottomNavigationBarType.fixed, ), dividerTheme: const DividerThemeData( color: AppColors.darkBorder, thickness: 1, space: 1, ), ); }