diff --git a/docs/plans/2026-10-17-K11.md b/docs/plans/2026-10-17-K11.md new file mode 100644 index 0000000..412fb96 --- /dev/null +++ b/docs/plans/2026-10-17-K11.md @@ -0,0 +1,63 @@ +# 2026-10-17 K11 首页网格 3 列 + 分类首位「全部」 + +## 一、目标与边界 + +在 K9 首页「全部剧目」网格上做最小修订:每行从 2 个改为 3 个,分类首个仍绑定 +`CategoryController.allCode`,文案改为「全部 / All / Semua」。 + +- 客户端分支:`feature/flutter-k11-home-grid-3col`,基线 `develop 0466b4b`。 +- 文档分支:`docs/k11-home-grid-3col`,FruitServer 基线任务书 `2a06190`。 +- 不改轮播、空态、三态、数据源、接口、分页或其他页面。 +- 不跑真机;设备侧 3 列布局、分类切换和详情跳转由用户验收。 + +## 二、实现方案 + +1. `home_drama_grid.dart`: + - `crossAxisCount: 3` + - `mainAxisSpacing: 14` + - `crossAxisSpacing: 10` + - `childAspectRatio: 2 / 3` 不变 +2. 3 列下卡片仍只保留标题最多 2 行、类型最多 1 行;由现有 `Text` 的 + `maxLines` / `ellipsis` 保证不溢出。 +3. `discover_view.dart` 分类第一项 code 保持 `CategoryController.allCode`, + label 从 `l10n.forYou` 改为 `l10n.all`。 +4. 已核对三份 ARB 已存在 `all` key: + - en:All + - zh:全部 + - id:Semua + +因此直接复用现有 l10n,不重复插入 JSON key;热门、最新和服务端分类顺序不变。 + +## 三、测试 + +- 更新 K9 网格断言:`crossAxisCount == 3`、`crossAxisSpacing == 10`、 + `mainAxisSpacing == 14`、比例仍为 2/3。 +- 新增首个分类 chip 文案断言为 `All`;切换分类时仍能更新网格。 +- K9/K10 既有测试保留,不删除用例;只更新本次行为明确变化的参数断言。 +- 组件/页面空态测试保持通过。 + +## 四、影响文件 + +- `ReelShort/lib/pages/discover/widgets/home_drama_grid.dart` +- `ReelShort/lib/pages/discover/discover_view.dart` +- `ReelShort/test/discover/home_all_dramas_grid_test.dart` +- `FruitServer/docs/plans/2026-10-17-K11.md` +- `FruitServer/docs/plans/PROGRESS.md` +- `FruitServer/docs/plans/INBOX.md` + +## 五、门禁与 Git + +1. 先更新测试取得与 3 列/全部文案相关的红灯。 +2. 实现后运行定向测试。 +3. 运行 `dart analyze lib test`、`flutter test`、`flutter build apk --debug`。 +4. 当前有 Android `flutter run` 会话,不主动终止;构建前检查进程,必要时使用 + 独立工作区副本构建,避免争用原项目 `build/`。 +5. 完成后 `merge --no-ff` 回客户端 `develop` 并 push;FruitServer 文档同样 + 合并推送。作者与提交者统一为 + `Zhou Weidong <502333560@qq.com>`。 + +## 六、风险与待确认 + +- 3 列后单卡宽度变窄,长标题和类型必须继续 ellipsis,不允许改变卡片结构。 +- 现有 `all` l10n 已具备三语,新增重复 key 会破坏 ARB;本批复用现有 key。 +- 用户正在运行的 Flutter `run` 不终止;APK 构建需隔离原 `build/`。 diff --git a/docs/plans/INBOX.md b/docs/plans/INBOX.md index 4d6b6f7..3829712 100644 --- a/docs/plans/INBOX.md +++ b/docs/plans/INBOX.md @@ -20,7 +20,7 @@ --- -## [待处理] 2026-10-17 | K11 首页网格 3 列 + 分类首位「全部」 +## [已处理·待用户验收] 2026-10-17 | K11 首页网格 3 列 + 分类首位「全部」 **用户指令(2026-10-17)**:「现在改首页,一行显示 3 个,而且我要的全部是显示在分类的第一个」。 @@ -55,6 +55,28 @@ - 先写 `FruitServer/docs/plans/2026-10-17-K11.md`;每步「叙述 + 命令 + 原始输出 + 解读」追加到 `PROGRESS.md`;完成后停住写回执。 - 提交作者与提交者统一 `Zhou Weidong <502333560@qq.com>`。 +### 五、K11 完成回执(2026-10-17) + +**结论**:首页网格已改为 3 列,分类首项仍绑定 `CategoryController.allCode`, +文案改为「全部 / All / Semua」。未改轮播、空态、三态、数据源、接口或其他页面; +未跑真机。 + +- 客户端分支 `feature/flutter-k11-home-grid-3col` 从 `0466b4b` 完成并 + `--no-ff` 合并;功能提交 `f0db631`,合并提交 `b5a8656`,已推送 + `0466b4b..b5a8656 develop`。 +- `crossAxisCount: 3`、`mainAxisSpacing: 14`、`crossAxisSpacing: 10`, + `childAspectRatio: 2 / 3` 保持不变。 +- 三份 ARB 原本已有 `all` key,分别为 All / 全部 / Semua,本轮直接复用, + 未插入重复 JSON key。 +- K9 网格测试更新为 3 列并断言「全部」位于「热门」之前;两个既有首页壳层 + 用例只把旧分类文案断言改为「All/全部」,导航流程和用例均保留。 +- `dart analyze lib test` 零告警;`flutter test` 为 + `00:18 +302 ~1: All tests passed!`;Android debug APK 在独立副本中构建成功。 + +用户真机验证步骤与逐步预期、原始输出见 +`docs/plans/PROGRESS.md`「27. K11 首页 3 列与全部分类」。 +设备侧 3 列布局、分类切换与详情跳转验收由用户执行。 + --- ## [待处理] 2026-10-17 | K10 统一空列表占位(EmptyState) diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index 3d600be..8bb48dc 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -2359,6 +2359,142 @@ Running Gradle task 'assembleDebug'... 6.9s --- +## 2026-10-17 K11 首页 3 列与全部分类 + +### 27.1 范围、分支与计划 + +叙述:在 K9 首页「全部剧目」网格上做最小修订,每行 3 个,分类首项从 +`For You` 改为「全部」。只改网格参数、首个分类 label 和对应测试。 + +- 客户端分支:`feature/flutter-k11-home-grid-3col`,基线 `0466b4b`。 +- 文档分支:`docs/k11-home-grid-3col`,基线任务书 `2a06190`。 + +开工前先写并提交计划: + +```text +f97574b docs(plans): 增加 K11 首页三列网格实施计划 +``` + +### 27.2 先红:3 列与全部文案 + +先更新 K9 网格测试的期望值并执行: + +```text +$ flutter test test/discover/home_all_dramas_grid_test.dart +Expected: exactly one matching candidate + Actual: _TextWidgetFinder: + +00:01 +0 -1: Some tests failed. +``` + +解读:分类首项仍显示旧文案,3 列断言在首个失败处之后尚未执行;红灯与 K11 +目标一致。 + +### 27.3 实现 + +`home_drama_grid.dart`: + +```text +crossAxisCount: 3 +mainAxisSpacing: 14 +crossAxisSpacing: 10 +childAspectRatio: 2 / 3 +``` + +`discover_view.dart`: + +```text +(code: CategoryController.allCode, label: l10n.all) +``` + +已核对三份 ARB 原本已有 `all`: + +```text +lib/l10n/app_en.arb:49: "all": "All", +lib/l10n/app_zh.arb:49: "all": "全部", +lib/l10n/app_id.arb:49: "all": "Semua", +``` + +解读:直接复用现有三语 getter,未添加重复 JSON key,也未改动 l10n 生成文件。 + +### 27.4 定向绿灯 + +```text +$ flutter test test/discover/home_all_dramas_grid_test.dart +00:01 +5: All tests passed! +``` + +测试同时断言: + +- `crossAxisCount == 3` +- `crossAxisSpacing == 10` +- `mainAxisSpacing == 14` +- `childAspectRatio == 2/3` +- 首个 chip 为 `All`,且位于 `Hot` 左侧 +- 320px 小屏 3 列布局无溢出 + +两个既有首页壳层用例仍保留,只更新旧分类断言: + +```text +$ flutter test test/widget_test.dart +00:05 +17: All tests passed! +``` + +### 27.5 全量门禁与构建 + +```text +$ dart analyze lib test +Analyzing lib, test... +No issues found! +``` + +```text +$ flutter test +00:18 +302 ~1: All tests passed! +``` + +解读:302 项通过,1 项联调测试因客户端接口服务未启动按设计跳过。 + +用户 Android `flutter run` 仍在运行,未终止该会话。为避免争用原项目 +`build/`,将当前工作区同步到独立临时副本后执行: + +```text +$ flutter build apk --debug +Running Gradle task 'assembleDebug'... 21.8s +✓ Built build/app/outputs/flutter-apk/app-debug.apk +``` + +### 27.6 Git + +```text +f0db631 feat(flutter): 首页网格改为三列并首位显示全部 +b5a8656 merge: 合并 K11 首页三列网格 +0466b4b..b5a8656 develop -> develop +``` + +功能提交与合并提交 author/committer 均为 +`Zhou Weidong <502333560@qq.com>`。 + +### 27.7 用户真机验证步骤与预期 + +以下设备侧取证由用户执行,Codex 未跑真机。 + +1. 使用最新客户端 `develop` 进入首页。 + 预期:分类 chips 第一项显示「全部 / All / Semua」,其后仍是热门、最新和 + 服务端分类。 +2. 查看「全部剧目」列表。 + 预期:每行 3 个剧目,列间距 10、行间距 14,左右边距保持 16。 +3. 检查长标题和类型。 + 预期:标题最多 2 行、类型最多 1 行,不横向或纵向溢出。 +4. 点击「全部」及其他分类。 + 预期:网格内容按现有逻辑更新,点击卡片仍进入对应详情。 +5. 在 320px 宽设备或小屏模拟器滚动列表。 + 预期:3 列布局稳定,无卡片重叠或整页溢出。 + +设备侧截图、滚动和分类切换结果由用户执行。 + +--- + ## 2026-10-17 iOS 构建阻塞:固定 shared_preferences_foundation 2.5.6 ### 25.1 现象与根因