深色模式、首页设置页面和功能优化

This commit is contained in:
Developer
2026-04-02 07:06:55 +08:00
parent f0a62ed68b
commit 954d173329
88 changed files with 12157 additions and 7578 deletions

View File

@@ -0,0 +1,135 @@
// 时间: 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,
);
}
}