136 lines
3.5 KiB
Dart
136 lines
3.5 KiB
Dart
// 时间: 2026-04-02
|
||
// 功能: 深色模式主题模型
|
||
// 介绍: 定义主题模式枚举和相关数据结构
|
||
|
||
import 'package:flutter/material.dart';
|
||
|
||
/// 应用主题模式枚举
|
||
enum AppThemeMode {
|
||
/// 跟随系统
|
||
system,
|
||
/// 浅色模式
|
||
light,
|
||
/// 深色模式
|
||
dark,
|
||
}
|
||
|
||
/// 主题模式扩展方法
|
||
extension AppThemeModeExtension on AppThemeMode {
|
||
/// 获取主题模式对应的 ThemeMode
|
||
ThemeMode get themeMode {
|
||
switch (this) {
|
||
case AppThemeMode.system:
|
||
return ThemeMode.system;
|
||
case AppThemeMode.light:
|
||
return ThemeMode.light;
|
||
case AppThemeMode.dark:
|
||
return ThemeMode.dark;
|
||
}
|
||
}
|
||
|
||
/// 获取主题模式显示名称
|
||
String get displayName {
|
||
switch (this) {
|
||
case AppThemeMode.system:
|
||
return '跟随系统';
|
||
case AppThemeMode.light:
|
||
return '浅色模式';
|
||
case AppThemeMode.dark:
|
||
return '深色模式';
|
||
}
|
||
}
|
||
|
||
/// 获取主题模式图标
|
||
IconData get icon {
|
||
switch (this) {
|
||
case AppThemeMode.system:
|
||
return Icons.brightness_auto;
|
||
case AppThemeMode.light:
|
||
return Icons.brightness_high;
|
||
case AppThemeMode.dark:
|
||
return Icons.brightness_2;
|
||
}
|
||
}
|
||
}
|
||
|
||
/// 主题配置数据类
|
||
class ThemeConfig {
|
||
/// 是否启用深色模式(简化开关,true=深色, false=跟随系统或浅色)
|
||
final bool isDarkMode;
|
||
|
||
/// 主题模式
|
||
final AppThemeMode themeMode;
|
||
|
||
/// 主题色索引
|
||
final int themeColorIndex;
|
||
|
||
/// 强调色索引
|
||
final int accentColorIndex;
|
||
|
||
/// 字体大小索引 (0: 小, 1: 中, 2: 大)
|
||
final int fontSizeIndex;
|
||
|
||
/// 是否启用动画
|
||
final bool enableAnimation;
|
||
|
||
/// 是否启用模糊效果
|
||
final bool enableBlurEffect;
|
||
|
||
const ThemeConfig({
|
||
this.isDarkMode = false,
|
||
this.themeMode = AppThemeMode.system,
|
||
this.themeColorIndex = 0,
|
||
this.accentColorIndex = 0,
|
||
this.fontSizeIndex = 1,
|
||
this.enableAnimation = true,
|
||
this.enableBlurEffect = true,
|
||
});
|
||
|
||
/// 从 JSON 创建
|
||
factory ThemeConfig.fromJson(Map<String, dynamic> json) {
|
||
return ThemeConfig(
|
||
isDarkMode: json['isDarkMode'] ?? false,
|
||
themeMode: AppThemeMode.values[json['themeMode'] ?? 0],
|
||
themeColorIndex: json['themeColorIndex'] ?? 0,
|
||
accentColorIndex: json['accentColorIndex'] ?? 0,
|
||
fontSizeIndex: json['fontSizeIndex'] ?? 1,
|
||
enableAnimation: json['enableAnimation'] ?? true,
|
||
enableBlurEffect: json['enableBlurEffect'] ?? true,
|
||
);
|
||
}
|
||
|
||
/// 转换为 JSON
|
||
Map<String, dynamic> toJson() {
|
||
return {
|
||
'isDarkMode': isDarkMode,
|
||
'themeMode': themeMode.index,
|
||
'themeColorIndex': themeColorIndex,
|
||
'accentColorIndex': accentColorIndex,
|
||
'fontSizeIndex': fontSizeIndex,
|
||
'enableAnimation': enableAnimation,
|
||
'enableBlurEffect': enableBlurEffect,
|
||
};
|
||
}
|
||
|
||
/// 复制并修改
|
||
ThemeConfig copyWith({
|
||
bool? isDarkMode,
|
||
AppThemeMode? themeMode,
|
||
int? themeColorIndex,
|
||
int? accentColorIndex,
|
||
int? fontSizeIndex,
|
||
bool? enableAnimation,
|
||
bool? enableBlurEffect,
|
||
}) {
|
||
return ThemeConfig(
|
||
isDarkMode: isDarkMode ?? this.isDarkMode,
|
||
themeMode: themeMode ?? this.themeMode,
|
||
themeColorIndex: themeColorIndex ?? this.themeColorIndex,
|
||
accentColorIndex: accentColorIndex ?? this.accentColorIndex,
|
||
fontSizeIndex: fontSizeIndex ?? this.fontSizeIndex,
|
||
enableAnimation: enableAnimation ?? this.enableAnimation,
|
||
enableBlurEffect: enableBlurEffect ?? this.enableBlurEffect,
|
||
);
|
||
}
|
||
}
|