refactoring and checkpoint
This commit is contained in:
@@ -1,20 +1,116 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:afterwork/core/constants/colors.dart';
|
||||
|
||||
/// Classe qui définit les thèmes de l'application AfterWork.
|
||||
/// Elle gère à la fois le thème clair et le thème sombre, avec des personnalisations
|
||||
/// pour les couleurs, les boutons, les textes et d'autres éléments visuels.
|
||||
class AppTheme {
|
||||
/// Thème clair
|
||||
static final ThemeData lightTheme = ThemeData(
|
||||
primaryColor: Colors.blue,
|
||||
colorScheme: const ColorScheme.light(
|
||||
secondary: Colors.orange,
|
||||
),
|
||||
brightness: Brightness.light,
|
||||
buttonTheme: const ButtonThemeData(buttonColor: Colors.blue),
|
||||
primaryColor: AppColors.lightPrimary,
|
||||
scaffoldBackgroundColor: AppColors.lightBackground,
|
||||
appBarTheme: const AppBarTheme(
|
||||
color: AppColors.lightPrimary,
|
||||
iconTheme: IconThemeData(color: AppColors.lightOnPrimary),
|
||||
),
|
||||
iconTheme: const IconThemeData(color: AppColors.lightTextPrimary),
|
||||
colorScheme: const ColorScheme.light(
|
||||
primary: AppColors.lightPrimary,
|
||||
secondary: AppColors.lightSecondary,
|
||||
onPrimary: AppColors.lightOnPrimary,
|
||||
onSecondary: AppColors.lightOnSecondary,
|
||||
surface: AppColors.lightSurface,
|
||||
),
|
||||
buttonTheme: const ButtonThemeData(
|
||||
buttonColor: AppColors.lightPrimary,
|
||||
textTheme: ButtonTextTheme.primary,
|
||||
),
|
||||
textTheme: const TextTheme(
|
||||
bodyLarge: TextStyle(color: AppColors.lightTextPrimary),
|
||||
bodyMedium: TextStyle(color: AppColors.lightTextSecondary),
|
||||
titleLarge: TextStyle(color: AppColors.lightTextPrimary),
|
||||
),
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
filled: true,
|
||||
fillColor: AppColors.lightSurface,
|
||||
labelStyle: const TextStyle(color: AppColors.lightTextPrimary),
|
||||
hintStyle: const TextStyle(color: AppColors.lightTextSecondary),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: AppColors.lightPrimary),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.grey),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
),
|
||||
floatingActionButtonTheme: const FloatingActionButtonThemeData(
|
||||
backgroundColor: AppColors.lightPrimary,
|
||||
foregroundColor: AppColors.lightOnPrimary,
|
||||
),
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: AppColors.lightPrimary,
|
||||
foregroundColor: AppColors.lightOnPrimary,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
|
||||
textStyle: const TextStyle(fontSize: 18),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
/// Thème sombre
|
||||
static final ThemeData darkTheme = ThemeData(
|
||||
primaryColor: Colors.black,
|
||||
colorScheme: const ColorScheme.dark(
|
||||
secondary: Colors.red,
|
||||
),
|
||||
brightness: Brightness.dark,
|
||||
primaryColor: AppColors.darkPrimary,
|
||||
scaffoldBackgroundColor: AppColors.darkBackground,
|
||||
appBarTheme: const AppBarTheme(
|
||||
color: AppColors.darkPrimary,
|
||||
iconTheme: IconThemeData(color: AppColors.darkOnPrimary),
|
||||
),
|
||||
iconTheme: const IconThemeData(color: AppColors.darkTextPrimary),
|
||||
colorScheme: const ColorScheme.dark(
|
||||
primary: AppColors.darkPrimary,
|
||||
secondary: AppColors.darkSecondary,
|
||||
onPrimary: AppColors.darkOnPrimary,
|
||||
onSecondary: AppColors.darkOnSecondary,
|
||||
surface: AppColors.darkSurface,
|
||||
),
|
||||
buttonTheme: const ButtonThemeData(
|
||||
buttonColor: AppColors.darkSecondary,
|
||||
textTheme: ButtonTextTheme.primary,
|
||||
),
|
||||
textTheme: const TextTheme(
|
||||
bodyLarge: TextStyle(color: AppColors.darkTextPrimary),
|
||||
bodyMedium: TextStyle(color: AppColors.darkTextSecondary),
|
||||
titleLarge: TextStyle(color: AppColors.darkTextPrimary),
|
||||
),
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
filled: true,
|
||||
fillColor: AppColors.darkSurface,
|
||||
labelStyle: const TextStyle(color: AppColors.darkTextPrimary),
|
||||
hintStyle: const TextStyle(color: AppColors.darkTextSecondary),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: AppColors.darkSecondary),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: AppColors.darkTextSecondary),
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
),
|
||||
floatingActionButtonTheme: const FloatingActionButtonThemeData(
|
||||
backgroundColor: AppColors.darkSecondary,
|
||||
foregroundColor: AppColors.darkOnPrimary,
|
||||
),
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: AppColors.darkSecondary,
|
||||
foregroundColor: AppColors.darkOnPrimary,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
|
||||
textStyle: const TextStyle(fontSize: 18),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
18
lib/core/theme/theme_provider.dart
Normal file
18
lib/core/theme/theme_provider.dart
Normal file
@@ -0,0 +1,18 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'app_theme.dart'; // Importe tes définitions de thème
|
||||
|
||||
class ThemeProvider with ChangeNotifier {
|
||||
bool _isDarkMode = false; // Mode sombre par défaut désactivé
|
||||
|
||||
bool get isDarkMode => _isDarkMode;
|
||||
|
||||
void toggleTheme() {
|
||||
_isDarkMode = !_isDarkMode;
|
||||
notifyListeners(); // Notifie les widgets dépendants
|
||||
}
|
||||
|
||||
// Utilise AppTheme pour obtenir le thème courant
|
||||
ThemeData get currentTheme {
|
||||
return _isDarkMode ? AppTheme.darkTheme : AppTheme.lightTheme;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user