Files
kryz-go-flutter/lib/app_theme_business_object.dart
2026-05-01 02:29:20 +00:00

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),
),
),
),
);
}
}