- Dark / light mode a funcionar no lado do aluno
- Atualização dos ficheiros markdown.
This commit is contained in:
@@ -25,22 +25,16 @@ class ThemeNotifier extends StateNotifier<ThemeMode> {
|
||||
|
||||
/// Change theme mode
|
||||
Future<void> setThemeMode(ThemeMode themeMode) async {
|
||||
// For now, only allow light mode
|
||||
// Future: Allow dark mode when available
|
||||
if (themeMode == ThemeMode.light || ThemeService.isDarkModeAvailable()) {
|
||||
state = themeMode;
|
||||
await ThemeService.setThemeMode(themeMode);
|
||||
}
|
||||
state = themeMode;
|
||||
await ThemeService.setThemeMode(themeMode);
|
||||
}
|
||||
|
||||
/// Toggle between light and dark mode (for future use)
|
||||
/// Toggle between light and dark mode
|
||||
Future<void> toggleTheme() async {
|
||||
if (ThemeService.isDarkModeAvailable()) {
|
||||
final newTheme = state == ThemeMode.light
|
||||
? ThemeMode.dark
|
||||
: ThemeMode.light;
|
||||
await setThemeMode(newTheme);
|
||||
}
|
||||
final newTheme = state == ThemeMode.light
|
||||
? ThemeMode.dark
|
||||
: ThemeMode.light;
|
||||
await setThemeMode(newTheme);
|
||||
}
|
||||
|
||||
/// Reset to default theme
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// EPVC School Color Palette - New Color Scheme
|
||||
/// EPVC School Color Palette - New Color Scheme with Light/Dark Mode Support
|
||||
class AppColors {
|
||||
// Primary Brand Colors
|
||||
// Primary Brand Colors (same for both modes)
|
||||
static const Color primaryTeal = Color(
|
||||
0xFF82C9BD,
|
||||
); // Main teal color - PRIMARY
|
||||
@@ -10,17 +10,30 @@ class AppColors {
|
||||
0xFFF68D2D,
|
||||
); // Accent orange - SECONDARY
|
||||
|
||||
// Gradient Colors
|
||||
// Gradient Colors (same for both modes)
|
||||
static const Color gradientStart = Color(0xFF82C9BD); // Teal gradient start
|
||||
static const Color gradientEnd = Color(
|
||||
0xFF6AB8A8,
|
||||
); // Darker teal gradient end
|
||||
|
||||
// Secondary Colors
|
||||
// Secondary Colors (same for both modes)
|
||||
static const Color secondaryTeal = Color(0xFF6AB8A8); // Darker teal
|
||||
static const Color accentTeal = Color(0xFF5AA69A); // Lighter teal accent
|
||||
static const Color lightOrange = Color(0xFFF7A960); // Lighter orange
|
||||
|
||||
// Status Colors (same for both modes)
|
||||
static const Color success = Color(0xFF10B981); // Green for success
|
||||
static const Color warning = Color(0xFFF59E0B); // Amber for warnings
|
||||
static const Color error = Color(0xFFEF4444); // Red for errors
|
||||
static const Color info = Color(0xFF3B82F6); // Blue for info
|
||||
|
||||
// Legacy compatibility (for existing code)
|
||||
@deprecated
|
||||
static const Color primaryBlue = primaryTeal; // Map old primaryBlue to new primaryTeal
|
||||
}
|
||||
|
||||
/// Light Mode Colors
|
||||
class LightColors {
|
||||
// Neutral Colors
|
||||
static const Color background = Color(0xFFF8F9FA); // Light gray background
|
||||
static const Color surface = Color(0xFFFFFFFF); // White surfaces
|
||||
@@ -31,38 +44,68 @@ class AppColors {
|
||||
static const Color textSecondary = Color(0xFF6B7280); // Secondary text
|
||||
static const Color textHint = Color(0xFF9CA3AF); // Hint text
|
||||
|
||||
// Status Colors
|
||||
static const Color success = Color(0xFF10B981); // Green for success
|
||||
static const Color warning = Color(0xFFF59E0B); // Amber for warnings
|
||||
static const Color error = Color(0xFFEF4444); // Red for errors
|
||||
static const Color info = Color(0xFF3B82F6); // Blue for info
|
||||
|
||||
// Interactive Colors
|
||||
static const Color buttonPrimary = Color(0xFF82C9BD); // Primary button (teal)
|
||||
static const Color buttonAccent = Color(0xFFF68D2D); // Accent button (orange)
|
||||
static const Color buttonPrimary =
|
||||
AppColors.primaryTeal; // Primary button (teal)
|
||||
static const Color buttonAccent =
|
||||
AppColors.primaryOrange; // Accent button (orange)
|
||||
static const Color buttonSecondary = Color(0xFFE5E7EB); // Secondary button
|
||||
static const Color iconActive = Color(0xFF82C9BD); // Active icons (teal)
|
||||
static const Color iconActive = AppColors.primaryTeal; // Active icons (teal)
|
||||
static const Color iconInactive = Color(0xFF9CA3AF); // Inactive icons
|
||||
|
||||
// Chat Specific Colors
|
||||
static const Color chatBubbleStudent = Color(
|
||||
0xFF82C9BD,
|
||||
); // Student messages (teal)
|
||||
static const Color chatBubbleStudent =
|
||||
AppColors.primaryTeal; // Student messages (teal)
|
||||
static const Color chatBubbleAI = Color(0xFFF3F4F6); // AI messages
|
||||
static const Color chatInputBackground = Color(
|
||||
0xFFF8F9FA,
|
||||
); // Input background
|
||||
static const Color chatSendButton = Color(0xFF82C9BD); // Send button (teal)
|
||||
static const Color chatSendButton =
|
||||
AppColors.primaryTeal; // Send button (teal)
|
||||
|
||||
// Dark Mode Colors
|
||||
static const Color darkBackground = Color(0xFF1F2937); // Dark background
|
||||
static const Color darkSurface = Color(0xFF374151); // Dark surface
|
||||
static const Color darkTextPrimary = Color(0xFFF9FAFB); // Dark primary text
|
||||
static const Color darkTextSecondary = Color(
|
||||
0xFFD1D5DB,
|
||||
); // Dark secondary text
|
||||
// Border Colors
|
||||
static const Color border = Color(0xFFE2E8F0); // Border color
|
||||
static const Color divider = Color(0xFFE5E7EB); // Divider color
|
||||
|
||||
// Legacy compatibility (for existing code)
|
||||
@deprecated
|
||||
static const Color primaryBlue = primaryTeal; // Map old primaryBlue to new primaryTeal
|
||||
// Overlay Colors
|
||||
static const Color overlay = Color(0x80000000); // Overlay color
|
||||
}
|
||||
|
||||
/// Dark Mode Colors
|
||||
class DarkColors {
|
||||
// Neutral Colors
|
||||
static const Color background = Color(0xFF1F2937); // Dark background
|
||||
static const Color surface = Color(0xFF374151); // Dark surface
|
||||
static const Color cardBackground = Color(0xFF374151); // Dark cards
|
||||
|
||||
// Text Colors
|
||||
static const Color textPrimary = Color(0xFFF9FAFB); // Dark primary text
|
||||
static const Color textSecondary = Color(0xFFD1D5DB); // Dark secondary text
|
||||
static const Color textHint = Color(0xFF9CA3AF); // Hint text
|
||||
|
||||
// Interactive Colors
|
||||
static const Color buttonPrimary =
|
||||
AppColors.primaryTeal; // Primary button (teal)
|
||||
static const Color buttonAccent =
|
||||
AppColors.primaryOrange; // Accent button (orange)
|
||||
static const Color buttonSecondary = Color(0xFF4B5563); // Secondary button
|
||||
static const Color iconActive = AppColors.primaryTeal; // Active icons (teal)
|
||||
static const Color iconInactive = Color(0xFF6B7280); // Inactive icons
|
||||
|
||||
// Chat Specific Colors
|
||||
static const Color chatBubbleStudent =
|
||||
AppColors.primaryTeal; // Student messages (teal)
|
||||
static const Color chatBubbleAI = Color(0xFF4B5563); // AI messages (darker)
|
||||
static const Color chatInputBackground = Color(
|
||||
0xFF374151,
|
||||
); // Input background
|
||||
static const Color chatSendButton =
|
||||
AppColors.primaryTeal; // Send button (teal)
|
||||
|
||||
// Border Colors
|
||||
static const Color border = Color(0xFF4B5563); // Border color
|
||||
static const Color divider = Color(0xFF4B5563); // Divider color
|
||||
|
||||
// Overlay Colors
|
||||
static const Color overlay = Color(0x80000000); // Overlay color
|
||||
}
|
||||
|
||||
@@ -9,24 +9,24 @@ class AppTheme {
|
||||
useMaterial3: true,
|
||||
brightness: Brightness.light,
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
seedColor: AppColors.primaryBlue,
|
||||
seedColor: AppColors.primaryTeal,
|
||||
brightness: Brightness.light,
|
||||
primary: AppColors.primaryBlue,
|
||||
secondary: AppColors.primaryTeal,
|
||||
surface: AppColors.surface,
|
||||
background: AppColors.background,
|
||||
primary: AppColors.primaryTeal,
|
||||
secondary: AppColors.primaryOrange,
|
||||
surface: LightColors.surface,
|
||||
background: LightColors.background,
|
||||
error: AppColors.error,
|
||||
),
|
||||
|
||||
// App Bar Theme
|
||||
appBarTheme: const AppBarTheme(
|
||||
backgroundColor: AppColors.surface,
|
||||
foregroundColor: AppColors.textPrimary,
|
||||
backgroundColor: LightColors.surface,
|
||||
foregroundColor: LightColors.textPrimary,
|
||||
elevation: 0,
|
||||
centerTitle: true,
|
||||
systemOverlayStyle: SystemUiOverlayStyle.dark,
|
||||
titleTextStyle: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
@@ -34,7 +34,7 @@ class AppTheme {
|
||||
|
||||
// Card Theme
|
||||
cardTheme: CardThemeData(
|
||||
color: AppColors.cardBackground,
|
||||
color: LightColors.cardBackground,
|
||||
elevation: 2,
|
||||
shadowColor: Colors.black.withOpacity(0.08),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
|
||||
@@ -44,10 +44,10 @@ class AppTheme {
|
||||
// Elevated Button Theme
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: AppColors.buttonPrimary,
|
||||
backgroundColor: LightColors.buttonPrimary,
|
||||
foregroundColor: Colors.white,
|
||||
elevation: 2,
|
||||
shadowColor: AppColors.primaryBlue.withOpacity(0.3),
|
||||
shadowColor: AppColors.primaryTeal.withOpacity(0.3),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
@@ -59,8 +59,8 @@ class AppTheme {
|
||||
// Outlined Button Theme
|
||||
outlinedButtonTheme: OutlinedButtonThemeData(
|
||||
style: OutlinedButton.styleFrom(
|
||||
foregroundColor: AppColors.primaryBlue,
|
||||
side: BorderSide(color: AppColors.primaryBlue.withOpacity(0.3)),
|
||||
foregroundColor: AppColors.primaryTeal,
|
||||
side: BorderSide(color: AppColors.primaryTeal.withOpacity(0.3)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
@@ -72,7 +72,7 @@ class AppTheme {
|
||||
// Text Button Theme
|
||||
textButtonTheme: TextButtonThemeData(
|
||||
style: TextButton.styleFrom(
|
||||
foregroundColor: AppColors.primaryBlue,
|
||||
foregroundColor: AppColors.primaryTeal,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
|
||||
textStyle: const TextStyle(fontSize: 14, fontWeight: FontWeight.w600),
|
||||
@@ -82,18 +82,18 @@ class AppTheme {
|
||||
// Input Field Theme
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
filled: true,
|
||||
fillColor: AppColors.surface,
|
||||
fillColor: LightColors.surface,
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(color: AppColors.primaryBlue.withOpacity(0.3)),
|
||||
borderSide: BorderSide(color: AppColors.primaryTeal.withOpacity(0.3)),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(color: AppColors.primaryBlue.withOpacity(0.3)),
|
||||
borderSide: BorderSide(color: AppColors.primaryTeal.withOpacity(0.3)),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: const BorderSide(color: AppColors.primaryBlue, width: 2),
|
||||
borderSide: const BorderSide(color: AppColors.primaryTeal, width: 2),
|
||||
),
|
||||
errorBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
@@ -103,9 +103,9 @@ class AppTheme {
|
||||
horizontal: 16,
|
||||
vertical: 12,
|
||||
),
|
||||
hintStyle: const TextStyle(color: AppColors.textHint, fontSize: 14),
|
||||
hintStyle: const TextStyle(color: LightColors.textHint, fontSize: 14),
|
||||
labelStyle: const TextStyle(
|
||||
color: AppColors.textSecondary,
|
||||
color: LightColors.textSecondary,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
@@ -113,85 +113,85 @@ class AppTheme {
|
||||
|
||||
// Text Field Theme
|
||||
textSelectionTheme: TextSelectionThemeData(
|
||||
cursorColor: AppColors.primaryBlue,
|
||||
selectionColor: AppColors.primaryBlue.withOpacity(0.3),
|
||||
selectionHandleColor: AppColors.primaryBlue,
|
||||
cursorColor: AppColors.primaryTeal,
|
||||
selectionColor: AppColors.primaryTeal.withOpacity(0.3),
|
||||
selectionHandleColor: AppColors.primaryTeal,
|
||||
),
|
||||
|
||||
// Text Theme
|
||||
textTheme: const TextTheme(
|
||||
displayLarge: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 32,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
displayMedium: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 28,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
displaySmall: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
headlineLarge: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
headlineMedium: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
headlineSmall: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
titleLarge: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
titleMedium: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
titleSmall: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
bodyLarge: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
bodyMedium: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
bodySmall: TextStyle(
|
||||
color: AppColors.textSecondary,
|
||||
color: LightColors.textSecondary,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
labelLarge: TextStyle(
|
||||
color: AppColors.textPrimary,
|
||||
color: LightColors.textPrimary,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
labelMedium: TextStyle(
|
||||
color: AppColors.textSecondary,
|
||||
color: LightColors.textSecondary,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
labelSmall: TextStyle(
|
||||
color: AppColors.textHint,
|
||||
color: LightColors.textHint,
|
||||
fontSize: 10,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
@@ -199,9 +199,9 @@ class AppTheme {
|
||||
|
||||
// Bottom Navigation Bar Theme
|
||||
bottomNavigationBarTheme: const BottomNavigationBarThemeData(
|
||||
backgroundColor: AppColors.surface,
|
||||
selectedItemColor: AppColors.primaryBlue,
|
||||
unselectedItemColor: AppColors.iconInactive,
|
||||
backgroundColor: LightColors.surface,
|
||||
selectedItemColor: AppColors.primaryTeal,
|
||||
unselectedItemColor: LightColors.iconInactive,
|
||||
type: BottomNavigationBarType.fixed,
|
||||
elevation: 8,
|
||||
selectedLabelStyle: TextStyle(
|
||||
@@ -216,7 +216,7 @@ class AppTheme {
|
||||
|
||||
// Floating Action Button Theme
|
||||
floatingActionButtonTheme: FloatingActionButtonThemeData(
|
||||
backgroundColor: AppColors.primaryBlue,
|
||||
backgroundColor: AppColors.primaryTeal,
|
||||
foregroundColor: Colors.white,
|
||||
elevation: 4,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
|
||||
@@ -224,28 +224,28 @@ class AppTheme {
|
||||
|
||||
// Divider Theme
|
||||
dividerTheme: const DividerThemeData(
|
||||
color: AppColors.buttonSecondary,
|
||||
color: LightColors.divider,
|
||||
thickness: 1,
|
||||
space: 1,
|
||||
),
|
||||
|
||||
// Icon Theme
|
||||
iconTheme: const IconThemeData(color: AppColors.iconActive, size: 24),
|
||||
iconTheme: const IconThemeData(color: LightColors.iconActive, size: 24),
|
||||
|
||||
// Progress Indicator Theme
|
||||
progressIndicatorTheme: const ProgressIndicatorThemeData(
|
||||
color: AppColors.primaryBlue,
|
||||
linearTrackColor: AppColors.buttonSecondary,
|
||||
circularTrackColor: AppColors.buttonSecondary,
|
||||
color: AppColors.primaryTeal,
|
||||
linearTrackColor: LightColors.buttonSecondary,
|
||||
circularTrackColor: LightColors.buttonSecondary,
|
||||
),
|
||||
|
||||
// Chip Theme
|
||||
chipTheme: ChipThemeData(
|
||||
backgroundColor: AppColors.buttonSecondary,
|
||||
selectedColor: AppColors.primaryBlue.withOpacity(0.1),
|
||||
disabledColor: AppColors.buttonSecondary.withOpacity(0.5),
|
||||
labelStyle: const TextStyle(color: AppColors.textPrimary),
|
||||
secondaryLabelStyle: const TextStyle(color: AppColors.textPrimary),
|
||||
backgroundColor: LightColors.buttonSecondary,
|
||||
selectedColor: AppColors.primaryTeal.withOpacity(0.1),
|
||||
disabledColor: LightColors.buttonSecondary.withOpacity(0.5),
|
||||
labelStyle: const TextStyle(color: LightColors.textPrimary),
|
||||
secondaryLabelStyle: const TextStyle(color: LightColors.textPrimary),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
||||
),
|
||||
@@ -257,52 +257,90 @@ class AppTheme {
|
||||
useMaterial3: true,
|
||||
brightness: Brightness.dark,
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
seedColor: AppColors.primaryBlue,
|
||||
seedColor: AppColors.primaryTeal,
|
||||
brightness: Brightness.dark,
|
||||
primary: AppColors.primaryBlue,
|
||||
secondary: AppColors.primaryTeal,
|
||||
surface: AppColors.darkSurface,
|
||||
background: AppColors.darkBackground,
|
||||
primary: AppColors.primaryTeal,
|
||||
secondary: AppColors.primaryOrange,
|
||||
surface: DarkColors.surface,
|
||||
background: DarkColors.background,
|
||||
error: AppColors.error,
|
||||
),
|
||||
|
||||
// Dark mode specific overrides would go here
|
||||
appBarTheme: const AppBarTheme(
|
||||
backgroundColor: AppColors.darkSurface,
|
||||
foregroundColor: AppColors.darkTextPrimary,
|
||||
backgroundColor: DarkColors.surface,
|
||||
foregroundColor: DarkColors.textPrimary,
|
||||
elevation: 0,
|
||||
centerTitle: true,
|
||||
systemOverlayStyle: SystemUiOverlayStyle.light,
|
||||
titleTextStyle: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
|
||||
cardTheme: CardThemeData(
|
||||
color: AppColors.darkSurface,
|
||||
color: DarkColors.cardBackground,
|
||||
elevation: 2,
|
||||
shadowColor: Colors.black.withOpacity(0.3),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
|
||||
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||
),
|
||||
|
||||
// Elevated Button Theme for Dark Mode
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: DarkColors.buttonPrimary,
|
||||
foregroundColor: Colors.white,
|
||||
elevation: 2,
|
||||
shadowColor: AppColors.primaryTeal.withOpacity(0.3),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
||||
textStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
||||
),
|
||||
),
|
||||
|
||||
// Outlined Button Theme for Dark Mode
|
||||
outlinedButtonTheme: OutlinedButtonThemeData(
|
||||
style: OutlinedButton.styleFrom(
|
||||
foregroundColor: AppColors.primaryTeal,
|
||||
side: BorderSide(color: AppColors.primaryTeal.withOpacity(0.3)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
||||
textStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
||||
),
|
||||
),
|
||||
|
||||
// Text Button Theme for Dark Mode
|
||||
textButtonTheme: TextButtonThemeData(
|
||||
style: TextButton.styleFrom(
|
||||
foregroundColor: AppColors.primaryTeal,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
|
||||
textStyle: const TextStyle(fontSize: 14, fontWeight: FontWeight.w600),
|
||||
),
|
||||
),
|
||||
|
||||
// Input Field Theme for Dark Mode
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
filled: true,
|
||||
fillColor: AppColors.darkSurface,
|
||||
fillColor: DarkColors.surface,
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(color: AppColors.primaryBlue.withOpacity(0.3)),
|
||||
borderSide: BorderSide(color: AppColors.primaryTeal.withOpacity(0.3)),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(color: AppColors.primaryBlue.withOpacity(0.3)),
|
||||
borderSide: BorderSide(color: AppColors.primaryTeal.withOpacity(0.3)),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: const BorderSide(color: AppColors.primaryBlue, width: 2),
|
||||
borderSide: const BorderSide(color: AppColors.primaryTeal, width: 2),
|
||||
),
|
||||
errorBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
@@ -313,11 +351,11 @@ class AppTheme {
|
||||
vertical: 12,
|
||||
),
|
||||
hintStyle: const TextStyle(
|
||||
color: AppColors.darkTextSecondary,
|
||||
color: DarkColors.textSecondary,
|
||||
fontSize: 14,
|
||||
),
|
||||
labelStyle: const TextStyle(
|
||||
color: AppColors.darkTextSecondary,
|
||||
color: DarkColors.textSecondary,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
@@ -325,88 +363,141 @@ class AppTheme {
|
||||
|
||||
// Text Field Theme for Dark Mode
|
||||
textSelectionTheme: TextSelectionThemeData(
|
||||
cursorColor: AppColors.primaryBlue,
|
||||
selectionColor: AppColors.primaryBlue.withOpacity(0.3),
|
||||
selectionHandleColor: AppColors.primaryBlue,
|
||||
cursorColor: AppColors.primaryTeal,
|
||||
selectionColor: AppColors.primaryTeal.withOpacity(0.3),
|
||||
selectionHandleColor: AppColors.primaryTeal,
|
||||
),
|
||||
|
||||
textTheme: const TextTheme(
|
||||
displayLarge: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 32,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
displayMedium: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 28,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
displaySmall: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
headlineLarge: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
headlineMedium: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
headlineSmall: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
titleLarge: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
titleMedium: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
titleSmall: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
bodyLarge: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
bodyMedium: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
bodySmall: TextStyle(
|
||||
color: AppColors.darkTextSecondary,
|
||||
color: DarkColors.textSecondary,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
labelLarge: TextStyle(
|
||||
color: AppColors.darkTextPrimary,
|
||||
color: DarkColors.textPrimary,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
labelMedium: TextStyle(
|
||||
color: AppColors.darkTextSecondary,
|
||||
color: DarkColors.textSecondary,
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
labelSmall: TextStyle(
|
||||
color: AppColors.darkTextSecondary,
|
||||
color: DarkColors.textSecondary,
|
||||
fontSize: 10,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
|
||||
// Bottom Navigation Bar Theme for Dark Mode
|
||||
bottomNavigationBarTheme: const BottomNavigationBarThemeData(
|
||||
backgroundColor: DarkColors.surface,
|
||||
selectedItemColor: AppColors.primaryTeal,
|
||||
unselectedItemColor: DarkColors.iconInactive,
|
||||
type: BottomNavigationBarType.fixed,
|
||||
elevation: 8,
|
||||
selectedLabelStyle: TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
unselectedLabelStyle: TextStyle(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
|
||||
// Floating Action Button Theme for Dark Mode
|
||||
floatingActionButtonTheme: FloatingActionButtonThemeData(
|
||||
backgroundColor: AppColors.primaryTeal,
|
||||
foregroundColor: Colors.white,
|
||||
elevation: 4,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
|
||||
),
|
||||
|
||||
// Divider Theme for Dark Mode
|
||||
dividerTheme: const DividerThemeData(
|
||||
color: DarkColors.divider,
|
||||
thickness: 1,
|
||||
space: 1,
|
||||
),
|
||||
|
||||
// Icon Theme for Dark Mode
|
||||
iconTheme: const IconThemeData(color: DarkColors.iconActive, size: 24),
|
||||
|
||||
// Progress Indicator Theme for Dark Mode
|
||||
progressIndicatorTheme: const ProgressIndicatorThemeData(
|
||||
color: AppColors.primaryTeal,
|
||||
linearTrackColor: DarkColors.buttonSecondary,
|
||||
circularTrackColor: DarkColors.buttonSecondary,
|
||||
),
|
||||
|
||||
// Chip Theme for Dark Mode
|
||||
chipTheme: ChipThemeData(
|
||||
backgroundColor: DarkColors.buttonSecondary,
|
||||
selectedColor: AppColors.primaryTeal.withOpacity(0.1),
|
||||
disabledColor: DarkColors.buttonSecondary.withOpacity(0.5),
|
||||
labelStyle: const TextStyle(color: DarkColors.textPrimary),
|
||||
secondaryLabelStyle: const TextStyle(color: DarkColors.textPrimary),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user