136 lines
4.2 KiB
Dart
136 lines
4.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
class AppThemeColors {
|
|
const AppThemeColors({
|
|
required this.primarySeed,
|
|
required this.secondarySeed,
|
|
required this.scaffoldGradientStart,
|
|
required this.scaffoldGradientEnd,
|
|
required this.shellSurface,
|
|
required this.shellBorder,
|
|
required this.accent,
|
|
required this.webViewBorder,
|
|
required this.webViewBackground,
|
|
required this.controlsGradientStart,
|
|
required this.controlsGradientEnd,
|
|
required this.controlsShadow,
|
|
required this.statusText,
|
|
});
|
|
|
|
final Color primarySeed;
|
|
final Color secondarySeed;
|
|
final Color scaffoldGradientStart;
|
|
final Color scaffoldGradientEnd;
|
|
final Color shellSurface;
|
|
final Color shellBorder;
|
|
final Color accent;
|
|
final Color webViewBorder;
|
|
final Color webViewBackground;
|
|
final Color controlsGradientStart;
|
|
final Color controlsGradientEnd;
|
|
final Color controlsShadow;
|
|
final Color statusText;
|
|
}
|
|
|
|
class AppThemeBusinessObject {
|
|
static const AppThemeColors lightColors = AppThemeColors(
|
|
primarySeed: Color(0xFFE36A18),
|
|
secondarySeed: Color(0xFF1663C7),
|
|
scaffoldGradientStart: Color(0xFFFFF3E3),
|
|
scaffoldGradientEnd: Color(0xFFE6F2FF),
|
|
shellSurface: Color(0xF7FFFFFF),
|
|
shellBorder: Color(0x1A1A4D86),
|
|
accent: Color(0xFF0F5DB6),
|
|
webViewBorder: Color(0x261A4D86),
|
|
webViewBackground: Color(0xFFFFFFFF),
|
|
controlsGradientStart: Color(0xFFFFB465),
|
|
controlsGradientEnd: Color(0xFF69ADFF),
|
|
controlsShadow: Color(0x24114B7A),
|
|
statusText: Color(0xFF13243D),
|
|
);
|
|
|
|
static const AppThemeColors darkColors = AppThemeColors(
|
|
primarySeed: Color(0xFFFF9D59),
|
|
secondarySeed: Color(0xFF76B8FF),
|
|
scaffoldGradientStart: Color(0xFF0F1C30),
|
|
scaffoldGradientEnd: Color(0xFF31190C),
|
|
shellSurface: Color(0xD9162438),
|
|
shellBorder: Color(0x3366AAFF),
|
|
accent: Color(0xFFFFBC7E),
|
|
webViewBorder: Color(0x3378B7FF),
|
|
webViewBackground: Color(0xFF0C1420),
|
|
controlsGradientStart: Color(0xFF275792),
|
|
controlsGradientEnd: Color(0xFF9A4F1F),
|
|
controlsShadow: Color(0x44000000),
|
|
statusText: Color(0xFFF4F7FF),
|
|
);
|
|
|
|
static bool isDarkMode(BuildContext context) {
|
|
return MediaQuery.platformBrightnessOf(context) == Brightness.dark;
|
|
}
|
|
|
|
static AppThemeColors colorsFor(BuildContext context) {
|
|
return isDarkMode(context) ? darkColors : lightColors;
|
|
}
|
|
|
|
static ThemeData lightTheme() {
|
|
final ColorScheme scheme =
|
|
ColorScheme.fromSeed(
|
|
seedColor: lightColors.primarySeed,
|
|
brightness: Brightness.light,
|
|
).copyWith(
|
|
primary: lightColors.primarySeed,
|
|
secondary: lightColors.secondarySeed,
|
|
tertiary: const Color(0xFF2C85E1),
|
|
surface: const Color(0xFFFFFBF7),
|
|
onSurface: lightColors.statusText,
|
|
);
|
|
|
|
return ThemeData(
|
|
useMaterial3: true,
|
|
colorScheme: scheme,
|
|
scaffoldBackgroundColor: scheme.surface,
|
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: scheme.primary,
|
|
foregroundColor: scheme.onPrimary,
|
|
padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 14),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(16),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
static ThemeData darkTheme() {
|
|
final ColorScheme scheme =
|
|
ColorScheme.fromSeed(
|
|
seedColor: darkColors.primarySeed,
|
|
brightness: Brightness.dark,
|
|
).copyWith(
|
|
primary: darkColors.primarySeed,
|
|
secondary: darkColors.secondarySeed,
|
|
tertiary: const Color(0xFF4E97E8),
|
|
surface: const Color(0xFF111A27),
|
|
onSurface: darkColors.statusText,
|
|
);
|
|
|
|
return ThemeData(
|
|
useMaterial3: true,
|
|
colorScheme: scheme,
|
|
scaffoldBackgroundColor: scheme.surface,
|
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: scheme.primary,
|
|
foregroundColor: scheme.onPrimary,
|
|
padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 14),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(16),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|