MIF_E31232435/lib/theme/app_theme.dart

200 lines
6.7 KiB
Dart

import 'package:flutter/material.dart';
import 'colors.dart';
import 'text_styles.dart';
class AppTheme {
static ThemeData lightTheme() {
return ThemeData(
useMaterial3: true,
brightness: Brightness.light,
// Primary Colors
primaryColor: AppColors.primaryBrown,
scaffoldBackgroundColor: AppColors.bgLight,
// Color Scheme
colorScheme: ColorScheme.light(
primary: AppColors.primaryBrown,
secondary: AppColors.secondaryBlue,
tertiary: AppColors.secondaryGreen,
error: AppColors.secondaryRed,
onPrimary: AppColors.white,
onSecondary: AppColors.white,
onTertiary: AppColors.white,
onError: AppColors.white,
surface: AppColors.bgWhite,
onSurface: AppColors.textPrimary,
),
// AppBar Theme
appBarTheme: AppBarTheme(
elevation: 0,
backgroundColor: AppColors.primaryBrown,
foregroundColor: AppColors.white,
centerTitle: false,
titleTextStyle: AppTextStyles.appBarTitle,
iconTheme: const IconThemeData(color: AppColors.white),
),
// Text Theme
textTheme: TextTheme(
displayLarge: AppTextStyles.displayLarge,
displayMedium: AppTextStyles.displayMedium,
displaySmall: AppTextStyles.displaySmall,
headlineLarge: AppTextStyles.headlineLarge,
headlineMedium: AppTextStyles.headlineMedium,
headlineSmall: AppTextStyles.headlineSmall,
titleLarge: AppTextStyles.titleLarge,
titleMedium: AppTextStyles.titleMedium,
titleSmall: AppTextStyles.titleSmall,
bodyLarge: AppTextStyles.bodyLarge,
bodyMedium: AppTextStyles.bodyMedium,
bodySmall: AppTextStyles.bodySmall,
labelLarge: AppTextStyles.labelLarge,
labelMedium: AppTextStyles.labelMedium,
labelSmall: AppTextStyles.labelSmall,
),
// Button Theme
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.primaryBrown,
foregroundColor: AppColors.white,
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
textStyle: AppTextStyles.buttonText,
elevation: 0,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
),
),
outlinedButtonTheme: OutlinedButtonThemeData(
style: OutlinedButton.styleFrom(
foregroundColor: AppColors.primaryBrown,
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
textStyle: AppTextStyles.buttonText,
side: const BorderSide(color: AppColors.primaryBrown, width: 1.5),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
),
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
foregroundColor: AppColors.primaryBrown,
textStyle: AppTextStyles.labelLarge,
),
),
// Input Decoration Theme
inputDecorationTheme: InputDecorationTheme(
filled: true,
fillColor: AppColors.bgWhite,
contentPadding: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 12,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: const BorderSide(color: AppColors.grey300, width: 1),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: const BorderSide(color: AppColors.grey300, width: 1),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: const BorderSide(color: AppColors.primaryBrown, width: 2),
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: const BorderSide(color: AppColors.secondaryRed, width: 1),
),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: const BorderSide(color: AppColors.secondaryRed, width: 2),
),
hintStyle: AppTextStyles.hintText,
labelStyle: AppTextStyles.labelMedium,
errorStyle: AppTextStyles.errorText,
),
// Card Theme
cardTheme: CardTheme(
elevation: 0,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
color: AppColors.bgWhite,
margin: EdgeInsets.zero,
),
// Dialog Theme
dialogTheme: DialogTheme(
elevation: 4,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
backgroundColor: AppColors.bgWhite,
),
// Divider Theme
dividerTheme: const DividerThemeData(
color: AppColors.grey200,
thickness: 1,
space: 1,
),
// Chip Theme
chipTheme: ChipThemeData(
backgroundColor: AppColors.bgWhite,
selectedColor: AppColors.primaryBrown,
disabledColor: AppColors.grey200,
labelStyle: AppTextStyles.labelMedium,
secondaryLabelStyle: AppTextStyles.labelMedium.copyWith(
color: AppColors.white,
),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
showCheckmark: true,
),
// Progress Indicator Theme
progressIndicatorTheme: const ProgressIndicatorThemeData(
color: AppColors.primaryBrown,
circularTrackColor: AppColors.grey200,
),
// Floating Action Button Theme
floatingActionButtonTheme: FloatingActionButtonThemeData(
backgroundColor: AppColors.secondaryBlue,
foregroundColor: AppColors.white,
elevation: 4,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
),
// Bottom App Bar Theme
bottomAppBarTheme: const BottomAppBarTheme(
elevation: 8,
color: AppColors.bgWhite,
),
// Bottom Navigation Bar Theme
bottomNavigationBarTheme: BottomNavigationBarThemeData(
backgroundColor: AppColors.bgWhite,
selectedItemColor: AppColors.primaryBrown,
unselectedItemColor: AppColors.grey400,
type: BottomNavigationBarType.fixed,
elevation: 8,
selectedLabelStyle: AppTextStyles.labelSmall,
unselectedLabelStyle: AppTextStyles.labelSmall,
),
// Snack Bar Theme
snackBarTheme: SnackBarThemeData(
backgroundColor: AppColors.textPrimary,
contentTextStyle: AppTextStyles.bodyMedium.copyWith(
color: AppColors.white,
),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
behavior: SnackBarBehavior.floating,
elevation: 4,
),
);
}
}