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 模式,不影响功能
|