5.0 KiB
5.0 KiB
诗词答题页面主题色支持与代码重构设计文档
日期: 2026-04-03
状态: 待实现
作者: AI Assistant
1. 概述
1.1 目标
将诗词答题相关页面重构以支持动态主题色,并将代码分流到 poetry-page.dart,实现 UI 和逻辑的分离。
1.2 范围
涉及文件:
lib/views/profile/level/poetry.dart- 主页面(状态管理、网络请求)lib/views/profile/level/poetry-page.dart- UI 组件(选项、标签、布局)lib/views/profile/level/flow-anim.dart- 流动边框动画lib/views/profile/level/distinguish.dart- 答题记录页面lib/views/profile/level/level-jilu.dart- 业务逻辑管理器(无需修改)
2. 架构设计
2.1 文件结构
lib/views/profile/level/
├── poetry.dart # 主页面(状态管理、网络请求)
├── poetry-page.dart # UI 组件(选项、标签、布局)
├── level-jilu.dart # 业务逻辑管理器
├── flow-anim.dart # 流动边框动画
└── distinguish.dart # 答题记录页面
2.2 职责划分
poetry.dart 职责:
PoetryLevelPage类(StatefulWidget)_PoetryLevelPageState类- 状态变量管理
- 生命周期方法
- 业务逻辑方法(网络请求、数据处理)
build方法的主框架
poetry-page.dart 职责:
- UI 组件定义
- 主题色支持
- 深色模式适配
- 组件复用
3. 组件设计
3.1 PoetryOptionItem 组件
功能: 单个答题选项组件
参数:
option: dynamic - 选项数据isSelected: bool - 是否被选中isCorrect: bool - 是否正确isWrong: bool - 是否错误isSubmitting: bool - 是否正在提交showFeedback: bool - 是否显示反馈isAnswerCorrect: bool - 答案是否正确onTap: Function(int) - 点击回调
主题色支持:
- 使用
ThemeColors.getThemeColor(themeController.themeColorIndexRx.value)获取主题色 - 正确答案使用
Colors.green - 错误答案使用
Colors.red - 背景色根据深色模式动态调整
3.2 PoetryOptionsLayout 组件
功能: 选项布局组件(支持 2x2 和 1x4 布局)
参数:
options: List - 选项列表selectedAnswer: int? - 选中的答案showFeedback: bool - 是否显示反馈isAnswerCorrect: bool - 答案是否正确isSubmitting: bool - 是否正在提交onTap: Function(int) - 点击回调
布局逻辑:
- 检查所有选项是否都少于等于4个字
- 如果是且选项数>=4,使用 2x2 布局
- 否则使用 1x4 布局
3.3 PoetryTag 组件
功能: 标签组件(显示题目类型、年级、朝代)
参数:
label: String - 标签名称value: String - 标签值
主题色支持:
- 使用主题色作为背景色和文字颜色
4. 主题色支持策略
4.1 颜色替换规则
替换:
AppConstants.primaryColor→ThemeColors.getThemeColor(themeController.themeColorIndexRx.value)
保留:
- 正确答案:
Colors.green/AppColors.iosGreen - 错误答案:
Colors.red/AppColors.iosRed - 背景色:根据深色模式动态调整
4.2 深色模式支持
判断方式:
- 使用
themeController.isDarkModeRx.value判断深色模式
颜色调整:
- 背景色:
isDark ? Color(0xFF1A1A1A) : Colors.white - 文字颜色:
isDark ? Colors.grey[300] : Colors.grey[700] - 边框颜色:
isDark ? Colors.white.withAlpha(20) : Colors.black.withAlpha(10)
5. 实现步骤
5.1 创建 poetry-page.dart
- 创建
PoetryOptionItem组件 - 创建
PoetryOptionsLayout组件 - 创建
PoetryTag组件 - 添加主题色支持
- 添加深色模式支持
5.2 修改 poetry.dart
- 移除
_buildOptionItem方法 - 移除
_buildOptionsLayout方法 - 移除
_buildTag方法 - 导入
poetry-page.dart - 使用新组件替换原有方法
- 添加主题色支持
5.3 修改 flow-anim.dart
- 添加主题色支持
- 使用
ThemeColors.getThemeColor()替换硬编码颜色
5.4 修改 distinguish.dart
- 添加主题色支持
- 使用
ThemeColors.getThemeColor()替换硬编码颜色
6. 测试要点
6.1 功能测试
- 选项点击正常
- 答案提交正常
- 反馈显示正常
- 布局切换正常(2x2 和 1x4)
6.2 主题色测试
- 主题色切换正常
- 所有组件颜色同步更新
- 深色模式切换正常
6.3 兼容性测试
- 关怀模式正常显示
- 底部导航栏不遮挡内容
- 动画效果正常
7. 注意事项
- 保持布局不变:重构过程中不修改页面布局
- 代码平衡:确保两个文件代码量相近
- 性能优化:使用
Obx进行响应式更新,避免不必要的重建 - 向后兼容:确保现有功能不受影响
8. 后续优化
- 考虑将更多组件提取到
poetry-page.dart - 添加单元测试
- 优化性能,减少不必要的重建
- 添加更多主题色选项