Files
wushu/docs/superpowers/specs/2026-04-03-poetry-theme-refactor-design.md
Developer cba04235c8 release
2026-04-03 03:26:06 +08:00

5.0 KiB
Raw Blame History

诗词答题页面主题色支持与代码重构设计文档

日期: 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 职责:

  • PoetryLevelPageStatefulWidget
  • _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.primaryColorThemeColors.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

  1. 创建 PoetryOptionItem 组件
  2. 创建 PoetryOptionsLayout 组件
  3. 创建 PoetryTag 组件
  4. 添加主题色支持
  5. 添加深色模式支持

5.2 修改 poetry.dart

  1. 移除 _buildOptionItem 方法
  2. 移除 _buildOptionsLayout 方法
  3. 移除 _buildTag 方法
  4. 导入 poetry-page.dart
  5. 使用新组件替换原有方法
  6. 添加主题色支持

5.3 修改 flow-anim.dart

  1. 添加主题色支持
  2. 使用 ThemeColors.getThemeColor() 替换硬编码颜色

5.4 修改 distinguish.dart

  1. 添加主题色支持
  2. 使用 ThemeColors.getThemeColor() 替换硬编码颜色

6. 测试要点

6.1 功能测试

  • 选项点击正常
  • 答案提交正常
  • 反馈显示正常
  • 布局切换正常2x2 和 1x4

6.2 主题色测试

  • 主题色切换正常
  • 所有组件颜色同步更新
  • 深色模式切换正常

6.3 兼容性测试

  • 关怀模式正常显示
  • 底部导航栏不遮挡内容
  • 动画效果正常

7. 注意事项

  1. 保持布局不变:重构过程中不修改页面布局
  2. 代码平衡:确保两个文件代码量相近
  3. 性能优化:使用 Obx 进行响应式更新,避免不必要的重建
  4. 向后兼容:确保现有功能不受影响

8. 后续优化

  1. 考虑将更多组件提取到 poetry-page.dart
  2. 添加单元测试
  3. 优化性能,减少不必要的重建
  4. 添加更多主题色选项