91 lines
1.9 KiB
Markdown
91 lines
1.9 KiB
Markdown
|
|
# AppTheme 硬编码颜色且缺失 Dark Mode
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
|
|||
|
|
### 1. 颜色硬编码
|
|||
|
|
|
|||
|
|
`AppTheme` 和各组件大量直接引用 `AppColors` 静态常量,而非 `Theme.of(context).colorScheme`:
|
|||
|
|
|
|||
|
|
```dart
|
|||
|
|
// app_theme.dart
|
|||
|
|
appBarTheme: const AppBarTheme(
|
|||
|
|
backgroundColor: AppColors.background, // 硬编码
|
|||
|
|
foregroundColor: AppColors.slate900, // 硬编码
|
|||
|
|
),
|
|||
|
|
|
|||
|
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
|||
|
|
style: ElevatedButton.styleFrom(
|
|||
|
|
backgroundColor: AppColors.primary, // 硬编码
|
|||
|
|
foregroundColor: AppColors.primaryForeground,
|
|||
|
|
),
|
|||
|
|
),
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这导致:
|
|||
|
|
- 主题切换时颜色不会改变
|
|||
|
|
- 组件无法响应系统深色模式
|
|||
|
|
- 违反 Flutter Material Design 规范
|
|||
|
|
|
|||
|
|
### 2. 缺失 Dark Mode
|
|||
|
|
|
|||
|
|
`AppTheme` 只有 `light` getter,没有 `dark`:
|
|||
|
|
|
|||
|
|
```dart
|
|||
|
|
static ThemeData get light => ThemeData(...);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`LinksyApp` 硬编码使用 light:
|
|||
|
|
```dart
|
|||
|
|
theme: AppTheme.light,
|
|||
|
|
locale: const Locale('zh'),
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 正确做法
|
|||
|
|
|
|||
|
|
### 颜色应使用 ThemeData
|
|||
|
|
|
|||
|
|
```dart
|
|||
|
|
// 正确示例
|
|||
|
|
appBarTheme: AppBarTheme(
|
|||
|
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
|||
|
|
foregroundColor: Theme.of(context).colorScheme.onSurface,
|
|||
|
|
),
|
|||
|
|
|
|||
|
|
// ColorScheme 应由 ThemeData 生成
|
|||
|
|
colorScheme: ColorScheme.fromSeed(
|
|||
|
|
seedColor: AppColors.primary,
|
|||
|
|
brightness: Brightness.light, // 或 Brightness.dark
|
|||
|
|
),
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 支持 Dark Mode
|
|||
|
|
|
|||
|
|
```dart
|
|||
|
|
class AppTheme {
|
|||
|
|
static ThemeData get light => ThemeData(
|
|||
|
|
brightness: Brightness.light,
|
|||
|
|
colorScheme: ColorScheme.fromSeed(
|
|||
|
|
seedColor: AppColors.primary,
|
|||
|
|
brightness: Brightness.light,
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
static ThemeData get dark => ThemeData(
|
|||
|
|
brightness: Brightness.dark,
|
|||
|
|
colorScheme: ColorScheme.fromSeed(
|
|||
|
|
seedColor: AppColors.primary,
|
|||
|
|
brightness: Brightness.dark,
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 相关文件
|
|||
|
|
|
|||
|
|
- `apps/lib/core/theme/app_theme.dart`
|
|||
|
|
- `apps/lib/core/theme/design_tokens.dart`
|
|||
|
|
|
|||
|
|
## 修复优先级
|
|||
|
|
|
|||
|
|
**低** - 当前只有 light 模式,不影响功能
|