Files
LBJ_Console/lib/themes/app_theme.dart
2025-09-06 00:02:46 +08:00

176 lines
5.8 KiB
Dart

import 'package:flutter/material.dart';
class AppTheme {
static ThemeData get darkTheme {
return ThemeData(
useMaterial3: true,
brightness: Brightness.dark,
scaffoldBackgroundColor: Colors.black,
canvasColor: Colors.black,
cardColor: const Color(0xFF121212),
primaryColor: Colors.blue,
colorScheme: ColorScheme.dark(
primary: Colors.blue,
secondary: Colors.blueAccent,
surface: const Color(0xFF121212),
background: Colors.black,
onSurface: Colors.white,
onBackground: Colors.white,
),
appBarTheme: const AppBarTheme(
backgroundColor: Colors.black,
elevation: 0,
titleTextStyle: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
),
iconTheme: IconThemeData(color: Colors.white),
),
bottomNavigationBarTheme: const BottomNavigationBarThemeData(
backgroundColor: Color(0xFF121212),
selectedItemColor: Colors.blue,
unselectedItemColor: Colors.grey,
type: BottomNavigationBarType.fixed,
),
cardTheme: CardThemeData(
color: const Color(0xFF1E1E1E),
elevation: 2,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
textTheme: const TextTheme(
headlineLarge: TextStyle(
color: Colors.white, fontSize: 32, fontWeight: FontWeight.bold),
headlineMedium: TextStyle(
color: Colors.white, fontSize: 28, fontWeight: FontWeight.bold),
headlineSmall: TextStyle(
color: Colors.white, fontSize: 24, fontWeight: FontWeight.bold),
titleLarge: TextStyle(
color: Colors.white, fontSize: 20, fontWeight: FontWeight.w600),
titleMedium: TextStyle(
color: Colors.white, fontSize: 18, fontWeight: FontWeight.w500),
titleSmall: TextStyle(
color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500),
bodyLarge: TextStyle(color: Colors.white, fontSize: 16),
bodyMedium: TextStyle(color: Colors.white70, fontSize: 14),
bodySmall: TextStyle(color: Colors.white60, fontSize: 12),
labelLarge: TextStyle(
color: Colors.white, fontSize: 14, fontWeight: FontWeight.w500),
labelMedium: TextStyle(color: Colors.white70, fontSize: 12),
labelSmall: TextStyle(color: Colors.white60, fontSize: 10),
),
iconTheme: const IconThemeData(color: Colors.white),
dividerTheme: const DividerThemeData(
color: Color(0xFF2A2A2A),
thickness: 1,
),
switchTheme: SwitchThemeData(
thumbColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.selected)) {
return Colors.blue;
}
return Colors.grey;
}),
trackColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.selected)) {
return Colors.blue.withOpacity(0.5);
}
return Colors.grey.withOpacity(0.5);
}),
),
dialogTheme: DialogThemeData(
backgroundColor: const Color(0xFF1E1E1E),
elevation: 8,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
titleTextStyle: const TextStyle(
color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold),
contentTextStyle: const TextStyle(color: Colors.white70, fontSize: 16),
),
floatingActionButtonTheme: const FloatingActionButtonThemeData(
backgroundColor: Colors.blue,
foregroundColor: Colors.white,
),
);
}
static const Color primaryBlack = Colors.black;
static const Color secondaryBlack = Color(0xFF121212);
static const Color tertiaryBlack = Color(0xFF1E1E1E);
static const Color dividerColor = Color(0xFF2A2A2A);
static const Color textPrimary = Colors.white;
static const Color textSecondary = Color(0xFFB3B3B3);
static const Color textTertiary = Color(0xFF808080);
static const Color accentBlue = Colors.blue;
static const Color accentBlueLight = Color(0xFF64B5F6);
static const Color errorRed = Color(0xFFCF6679);
static const Color successGreen = Color(0xFF4CAF50);
static const Color warningOrange = Color(0xFFFF9800);
static const TextStyle titleLarge = TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: textPrimary,
);
static const TextStyle titleMedium = TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: textPrimary,
);
static const TextStyle bodyLarge = TextStyle(
fontSize: 16,
color: textPrimary,
);
static const TextStyle bodyMedium = TextStyle(
fontSize: 14,
color: textSecondary,
);
static const TextStyle caption = TextStyle(
fontSize: 12,
color: textTertiary,
);
static const TextStyle labelLarge = TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
color: textPrimary,
);
static const double spacingXS = 4.0;
static const double spacingS = 8.0;
static const double spacingM = 16.0;
static const double spacingL = 24.0;
static const double spacingXL = 32.0;
static const double spacingXXL = 48.0;
static const double radiusS = 4.0;
static const double radiusM = 8.0;
static const double radiusL = 12.0;
static const double radiusXL = 16.0;
static List<BoxShadow> get cardShadow => [
BoxShadow(
color: Colors.black.withOpacity(0.3),
blurRadius: 8,
offset: const Offset(0, 2),
),
];
static List<BoxShadow> get buttonShadow => [
BoxShadow(
color: Colors.black.withOpacity(0.2),
blurRadius: 4,
offset: const Offset(0, 2),
),
];
}