From 1bf0f654fb37c908ad47fa3d3e7e9327854ffa6c Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Sat, 17 Oct 2026 15:59:14 +0800 Subject: [PATCH] =?UTF-8?q?docs(plans):=20=E8=AE=B0=E5=BD=95=20K5=20?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=E4=B8=8E=E5=8D=B0=E5=B0=BC=E8=AF=AD=E5=AE=9E?= =?UTF-8?q?=E6=96=BD=E5=9B=9E=E6=89=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/plans/2026-10-17-K5.md | 82 +++++++++++++++++++++++++ docs/plans/INBOX.md | 119 +++++++++++++++++++++++++++++++++++- docs/plans/PROGRESS.md | 117 +++++++++++++++++++++++++++++++++++ 3 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 docs/plans/2026-10-17-K5.md diff --git a/docs/plans/2026-10-17-K5.md b/docs/plans/2026-10-17-K5.md new file mode 100644 index 0000000..fd2cfc9 --- /dev/null +++ b/docs/plans/2026-10-17-K5.md @@ -0,0 +1,82 @@ +# 2026-10-17 K5 客户端视觉:克莱因蓝主题 + 印尼市场适配 + +## 一、目标与边界 + +本轮只完成 Flutter 客户端的主题色、蓝色收敛、印尼语 locale 和回归测试: + +- K5-A:建立克莱因蓝 token 与浅色/深色显式 `ColorScheme`,主色统一 `#002FA7`。 +- K5-B:清理页面层的旧蓝字面量,统一使用 `AppColors` / `ColorScheme`;不改语义色。 +- K5-C:`LocaleController` 支持 `id`;未显式选择时跟随系统,非 `en/zh/id` 回退 `id`; + 两个现有语言入口增加 Bahasa Indonesia。 +- K5-D:补主题 token、对比度、硬编码扫描、locale 回退与语言切换测试, + 回归深色/浅色、三态和小屏布局。 + +不做 K4、支付、Google 登录、新接口、下载落盘、App 图标/启动图或信息架构调整; +不改后端、`ReelShortWeb`、specs。 + +## 二、用户裁定色值 + +| Token | 值 | 用途 | +| --- | --- | --- | +| `blue` | `#002FA7` | Klein Blue / IKB 主色 | +| `bluePressed` | `#00227A` | 按下/激活态与大面积蓝色背景 | +| `blueSoft` | `#5B7BE0` | 深色背景上的高亮/次级文字与图标 | +| `onPrimary` | `#FFFFFF` | 主色上的文字/图标 | +| `ink` | `#0B0C10` | 保持现值 | +| `bar` | `#101114` | 保持现值 | +| `card` | `#17191F` | 保持现值 | +| `muted` | `#B7BDC9` | 保持现值 | + +对比度口径:正文 ≥ 4.5:1,大字/图标 ≥ 3:1;错误红、成功绿、点赞红等语义色不改。 + +## 三、预计影响文件 + +- `lib/core/theme/app_colors.dart` +- `lib/app.dart` +- `lib/core/config/locale_controller.dart` +- `lib/pages/mine/mine_logic.dart` +- `lib/pages/home/widgets/home_quick_drawer.dart` +- `lib/pages/home/home_view.dart` +- `lib/pages/discover/discover_view.dart` +- `lib/pages/drama_detail/drama_detail_view.dart` +- `lib/pages/player/player_view.dart` +- `lib/pages/player/player_logic.dart` +- `lib/pages/player/widgets/seek_progress_bar.dart` +- `lib/pages/player/widgets/comment_tile.dart` +- `lib/pages/player/widgets/drama_comments_sheet.dart` +- `lib/pages/mine/mine_view.dart` +- `lib/pages/watch_records/watch_records_page.dart` +- `lib/pages/downloads/downloads_page.dart` +- `lib/pages/auth/auth_view.dart` +- `lib/core/widgets/auth_gate.dart` +- `lib/l10n/app_{en,zh,id}.arb` 与生成文件 +- `test/theme/*`、`test/config/*`、相关页面 widget 测试 + +实际改动以静态扫描结果为准;不改业务逻辑和页面布局。 + +## 四、TDD 顺序 + +1. 写主题 token/对比度、硬编码蓝色扫描、locale `id` 持久化与未知语言回退测试,确认红灯。 +2. K5-A:新增色值 token 和浅色/深色 `ColorScheme`,补主题测试转绿。 +3. K5-B:按扫描结果替换页面蓝色字面量,补语言入口和 widget 回归。 +4. K5-C:实现 `id` locale、系统语言跟随、未知系统语言回退 `id`,两个入口增加 + Bahasa Indonesia。 +5. K5-D:全量扫描、深色/浅色与小屏 widget 回归。 +6. 门禁:`dart analyze lib test`、`flutter test`、`flutter build apk --debug`。 +7. `--no-ff` 合并回 `develop` 并 push;FruitServer 仅提交 `docs/plans`。 + +## 五、风险与处理 + +- 克莱因蓝在浅色背景上作为文字可能对比不足:正文继续使用现有着色, + 主色主要用于按钮/图标/选中态;主色背景统一配 `onPrimary`。 +- `blueSoft` 仅用于深色背景高亮,避免在浅色背景当正文色造成低对比度。 +- 现有 `_orange` 等历史命名可能实际承载蓝色,替换时按语义改名,避免误导。 +- 直接替换主题色可能影响 FilledButton、Slider、Switch 等 Material 控件: + 通过显式 `ColorScheme` 和 widget 测试统一验证。 +- 语言入口两处需同步,避免“我的”和快捷抽屉行为不一致。 +- 真机、设备截图与系统语言切换证据由用户执行,Codex 不跑真机。 + +## 六、待确认 + +- 当前无产品歧义;按用户裁定的方案 A 色值执行。 +- specs 无成文色板,若后续提供 Stitch 视觉稿,再按新稿更新 token 与页面映射。 diff --git a/docs/plans/INBOX.md b/docs/plans/INBOX.md index 3281fbb..30053f0 100644 --- a/docs/plans/INBOX.md +++ b/docs/plans/INBOX.md @@ -20,7 +20,7 @@ --- -## [待处理] 2026-10-17 | K5 客户端视觉:克莱因蓝主题 + 印尼市场适配 +## [已处理·待用户验收] 2026-10-17 | K5 客户端视觉:克莱因蓝主题 + 印尼市场适配 **用户指令(2026-10-17)**:「改 UI 及 App 整体颜色,克莱因蓝,针对印尼市场,认真阅读文档严格执行」。 @@ -115,6 +115,123 @@ - 每步「叙述 + 命令 + 原始输出 + 解读」追加到 `docs/plans/PROGRESS.md`;完成后停住写回执(含用户验证步骤与预期)。 - 提交作者与提交者统一 `Zhou Weidong <502333560@qq.com>`。 +### 七、K5 完成回执(2026-10-17) + +**结论**:K5-A 主题 token/ColorScheme、K5-B 蓝色收敛、K5-C 印尼语适配、 +K5-D 回归均已完成并停止,未开始 K4,未接新接口,未跑真机。 + +#### 7.1 诊断分支收口 + +- iOS 首页诊断插桩已保留在未合并分支 + `feature/flutter-ios-home-diagnostics`,提交 + `7efbed97587dd3ed02967dcbbaa6fb85693c1883`。 +- K5 从干净的 ReelShort `develop e1147cf` 拉出,未夹带诊断插桩。 + +#### 7.2 色值、主题与蓝色收敛 + +- `AppColors.blue = #002FA7`、`bluePressed = #00227A`、 + `blueSoft = #5B7BE0`、`onPrimary = #FFFFFF`。 +- `AppTheme.light()` / `AppTheme.dark()` 使用显式 ColorScheme,两套主题 + `primary` 均为 `#002FA7`、`onPrimary` 均为白色;SnackBar 使用深蓝背景白字。 +- 深色表面的小图标、链接和轨道使用 `blueSoft`;大面积选中背景使用 + `bluePressed`;主按钮使用 `blue + onPrimary`。 +- 页面层旧蓝 `0xFF2F7BFF`、`0xFF8FB4FF`、`Colors.blue` 扫描结果为空。 +- 错误红、成功绿、点赞红等语义色未改;App 图标/启动图未改。 + +#### 7.3 印尼市场适配 + +- `LocaleController` 支持选择、持久化和恢复 `id`。 +- 未显式选择时跟随系统;系统语言非 `en/zh/id` 时回退 `id`。 +- “我的”语言弹层与首页快捷抽屉均增加 Bahasa Indonesia; + 快捷抽屉改为 Wrap,避免 320px 小屏溢出。 +- 新增 `bahasaIndonesia` 三语文案并重新生成 l10n。 +- 观看记录与下载授权的日期/时间改由 `MaterialLocalizations` 按当前 locale + 和系统 12/24 小时设置格式化。 + +#### 7.4 门禁原始结果 + +``` +$ cd /Users/jianghaifeng/Desktop/ReelShort/ReelShort +$ dart analyze lib test +Analyzing lib, test... +No issues found! + +$ flutter test +00:12 +251 ~1: All tests passed! + +$ flutter build apk --debug +Running Gradle task 'assembleDebug'... 26.6s +✓ Built build/app/outputs/flutter-apk/app-debug.apk +``` + +`~1` 是既有 live watch 用例在 8081 未启动时按机制跳过,不是失败。 + +新增测试覆盖: + +- Klein Blue token、白字/主色对比度、图标/深底对比度。 +- 浅色/深色 ColorScheme 与 widget 实际主题值。 +- `lib` 旧蓝字面量静态扫描。 +- locale `id` 选择、持久化、系统语言跟随与未知语言回退 `id`。 +- Bahasa Indonesia 选项、语言切换、印尼语日期/时间格式。 +- 320×568 深色小屏首页与“我的”页不溢出。 + +#### 7.5 Git + +- 功能提交:`10d448c8ba93aa2762e14babdb528805897b3992` + `feat(flutter): 应用克莱因蓝主题与印尼语适配` +- `--no-ff` 合并提交:`e52d81881c19202c7adc8d13a6f78f78e4f6182f` + `merge: 合并 K5 克莱因蓝主题与印尼语适配` +- 已推送:`e1147cf..e52d818 develop -> develop` +- author/committer 均为 `Zhou Weidong <502333560@qq.com>`;未操作 `main`。 + +#### 7.6 用户真机验证步骤与预期 + +前置:安装最新 debug APK,分别准备一套 Android 与 iOS 设备,保留系统深色/浅色 +切换条件。以下证据必须由用户在设备侧取得,Codex 未执行真机验证。 + +1. 浅色与深色系统下分别打开首页、发现、详情、播放、我的、收藏、记录和下载。 + +预期:页面可读、无溢出;主按钮为克莱因蓝白字;选中态/进度条可见; +深色底上的链接和图标使用较亮的蓝紫高亮;旧亮蓝 `#2F7BFF` 不再出现。 + +2. 对主按钮、进度条、选中 Tab 截图并用取色工具检查。 + +预期:主色接近 `#002FA7`;按下/激活大面积背景接近 `#00227A`; +主色按钮文字为 `#FFFFFF`。 + +3. 在 iPhone SE 级小屏打开首页与“我的”,展开语言入口。 + +预期:三个语言选项自动换行,不挤出屏幕;底栏文字和图标不重叠。 + +4. 从“我的 → 语言”选择 Bahasa Indonesia,再冷启动 App。 + +预期:界面切为印尼语,重启后仍保持印尼语。 + +5. 从首页快捷抽屉选择 Bahasa Indonesia。 + +预期:同样切为印尼语,两个入口行为一致。 + +6. 清除 App 数据/重新安装,把系统语言设为法语,且不手动选择语言。 + +预期:App 自动使用印尼语,不回退英语。 + +7. 在印尼语下查看观看记录与下载授权时间。 + +预期:日期/时间使用印尼地区 Material 格式;系统 12/24 小时设置变化时格式跟随。 + +8. 未登录点评论发布/点赞/举报,登录页按钮与错误/成功提示仍清晰可辨。 + +预期:业务流程不变;Klein Blue 按钮、蓝色 SnackBar 与红色错误提示对比度正常。 + +设备侧截图、系统语言切换日志与真机结果由用户执行;开发机检查不能替代这些证据。 + +#### 7.7 已知边界 + +- 现有主体页面保持 dark-first 设计,并显式使用 `AppTheme.dark()`; + 根部同时提供浅色/深色 ColorScheme,未重做信息架构或页面布局。 +- App 图标、启动图、Google 登录与支付不在本批范围。 +- K4 未开始。 + --- ## [已处理·待用户验收] 2026-10-17 | K3 客户端第三批:互动(评论 + 点赞 + 举报 + 分享) diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index 669a3e2..c62ed82 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -1667,3 +1667,120 @@ merge: 合并 K3 举报错误透传修复 ``` 解读:报告本人内容现在会把后端错误原样展示;author/committer 均保持统一。 + +--- + +## 2026-10-17 K5 克莱因蓝主题与印尼语适配(【Codex】) + +### 19.1 诊断分支收口 + +叙述:上一项 iOS 首页诊断插桩已提交在独立分支,不并入 K5,也不阻塞干净基线。 + +``` +$ git status --short --branch +## feature/flutter-ios-home-diagnostics + +$ git log -1 --oneline +7efbed9 chore(flutter): 增加首页加载失败诊断日志 +``` + +解读:诊断提交保留为未合并 feature 分支;K5 从 `develop e1147cf` 新建, +后续所有 K5 改动均在该基线上。 + +### 19.2 K5 计划 + +叙述:先写 `docs/plans/2026-10-17-K5.md`,记录方案 A 色值、影响文件、TDD、 +风险和待确认,再开始代码。 + +``` +Success. Updated the following files: +A docs/plans/2026-10-17-K5.md +``` + +### 19.3 K5 首次红灯 + +命令: + +``` +$ flutter test test/theme test/config/locale_controller_test.dart test/mine/mine_logic_test.dart test/widget_test.dart +``` + +原始输出(节选): + +``` +Error when reading 'lib/core/theme/app_theme.dart': No such file or directory +Member not found: 'bluePressed' +Member not found: 'onPrimary' +Method not found: 'resolveAppLocale' +Found 0 widgets with text "Bahasa Indonesia" +Expected: empty + Actual: [ + 'lib/core/theme/app_colors.dart:5: static const blue = Color(0xFF2F7BFF);', + ... + ] +00:07 +22 -5: Some tests failed. +``` + +解读:主题 token/ThemeData、locale 解析、语言选项和旧蓝扫描全部按预期红灯。 + +### 19.4 K5 实现与定向绿灯 + +实现内容: + +- `AppColors` 新增 `bluePressed/onPrimary`,更新 `blue/blueSoft`。 +- 新增 `AppTheme.light/dark` 显式 ColorScheme 和控件主题。 +- 页面旧蓝清理,深色高亮改 `blueSoft`,大面积选中态改 `bluePressed`。 +- `resolveAppLocale` 支持 en/zh/id,未知系统语言回退 id。 +- 两个语言入口增加 Bahasa Indonesia;快捷抽屉改 Wrap。 +- 日期/时间改用 `MaterialLocalizations`。 + +定向测试: + +``` +$ flutter test test/theme test/config test/formatting test/mine/mine_logic_test.dart test/widget_test.dart test/auth test/library test/watch test/download test/drama_detail +00:08 +97: All tests passed! +``` + +旧蓝扫描补跑: + +``` +$ rg -n '0xFF2F7BFF|0xFF8FB4FF|Colors\.blue|_orange|seedColor' lib -g '*.dart' +``` + +结果:无匹配(仅保留 `AppColors.blue/blueSoft/bluePressed` 等 token 引用)。 + +### 19.5 K5 最终门禁 + +``` +$ dart analyze lib test +Analyzing lib, test... +No issues found! + +$ flutter test +00:12 +251 ~1: All tests passed! + +$ flutter build apk --debug +Running Gradle task 'assembleDebug'... 26.6s +✓ Built build/app/outputs/flutter-apk/app-debug.apk +``` + +解读:全量测试除既有 live watch 跳过外全部通过,APK 构建成功。 + +### 19.6 Git + +``` +10d448c8ba93aa2762e14babdb528805897b3992 +author: Zhou Weidong <502333560@qq.com> +committer: Zhou Weidong <502333560@qq.com> +subject: feat(flutter): 应用克莱因蓝主题与印尼语适配 + +e52d81881c19202c7adc8d13a6f78f78e4f6182f +author: Zhou Weidong <502333560@qq.com> +committer: Zhou Weidong <502333560@qq.com> +subject: merge: 合并 K5 克莱因蓝主题与印尼语适配 + +To http://git.reelshort2.com/jianghaifeng/ReelShort.git + e1147cf..e52d818 develop -> develop +``` + +解读:K5 已以 `--no-ff` 合并到 ReelShort develop 并推送,未操作 main。