Files
FruitServer/docs/plans/2026-10-17-K9.md
T

71 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-10-17 K9 首页剧目列表改造(2 列全部剧目)
## 一、目标与边界
首页(发现 tab)移除「继续观看」区块,在分类 chips 下方以懒构建的 2 列网格展示
当前分类的全部剧目;保留 header、轮播、分类、三态、空态和底部导航。
- 客户端分支:`feature/flutter-k9-home-grid`,基线 `develop 99f64ab`。
- 文档分支:`docs/k9-home-grid`,FruitServer 基线 K9 任务书 `b434f65`。
- 只改首页(发现页)、三语 l10n、对应 widget 测试与 `docs/plans/`。
- 不改接口、数据模型、CategoryController 过滤逻辑、轮播、通知、观看记录、
收藏、下载或底部导航。
- 不新增图片、依赖或分页;继续使用 `RemoteImage` 懒加载。
- 不跑真机,设备侧滚动、布局、分类切换和详情跳转由用户验收。
## 二、实现方案
1. 删除 `_continueHeader`、`_dramaContent`、`_continueTile`、`_ShowcaseCard`
与 `_cardsFor`,首页不再构建或保留「继续观看」文案和代码。
2. 将页面滚动容器改为 `CustomScrollView`,依次放置:
carousel `SliverToBoxAdapter`、分类与标题 `SliverToBoxAdapter`、状态
`SliverToBoxAdapter` 或剧目 `SliverGrid`、底部留白 `SliverToBoxAdapter`。
3. 剧目网格使用 `SliverGridDelegateWithFixedCrossAxisCount`:
`crossAxisCount: 2`、`crossAxisSpacing: 12`、`mainAxisSpacing: 16`、
`childAspectRatio: 2 / 3`;左右由 `SliverPadding` 保持 16。
4. 卡片封面使用 2:3 比例、14px 圆角、`RemoteImage` 和现有底部深色渐变;
标题最多 2 行,类型最多 1 行。点击调用现有
`logic.openCard(..., embedded, onDramaSelected, onAction)`。
5. 数据直接使用 `CategoryController.visibleDramas`;`For You` 使用其全量
去重结果。分类切换后由 ChangeNotifier 驱动 sliver 内容更新。
6. 保留 `categories.loading` 首载进度、`categories.error` 重试、
`noCategoryDramas` / `noSearchResults` 空态文案。
7. l10n 新增 `allDramas`:
`全部剧目` / `All Dramas` / `Semua Drama`,并重新生成 l10n。
## 三、影响文件
- `ReelShort/lib/pages/discover/discover_view.dart`
- `ReelShort/lib/l10n/app_en.arb`
- `ReelShort/lib/l10n/app_zh.arb`
- `ReelShort/lib/l10n/app_id.arb`
- `ReelShort/lib/l10n/app_localizations*.dart`(生成物)
- `ReelShort/test/discover/home_all_dramas_grid_test.dart`(新增)
- `ReelShort/test/widget_test.dart`(仅更新作废的「继续观看」断言)
- `FruitServer/docs/plans/2026-10-17-K9.md`
- `FruitServer/docs/plans/PROGRESS.md`
- `FruitServer/docs/plans/INBOX.md`
## 四、测试与门禁
1. 先新增 K9 首页 widget 测试并取得红灯。
2. 实现后验证:无「继续观看」、有「全部剧目」、2 列 sliver、左右/行列间距、
2:3 封面、分类切换更新、空态与失败态。
3. 运行 `dart analyze lib test`、`flutter test`、`flutter build apk --debug`;
构建前检查无并发 `flutter run/build`。
4. 完成后 `merge --no-ff` 回客户端 `develop` 并 push;FruitServer 文档同样
合并推送。作者与提交者统一为
`Zhou Weidong <502333560@qq.com>`。
## 五、风险与待确认
- 既有 `test/widget_test.dart` 有两个壳层用例断言首页出现
`Continue Watching`。K9 明确要求该文案彻底消失,因此原断言与
`find.text('Continue Watching'), findsNothing` 不可能同时成立。
处理方式:保留两个既有用例及完整导航流程,只把已作废的文案断言更新为
`All Dramas`,不删除任何测试用例。
- 首页 feed 可能一次返回较多剧目;必须使用 `SliverGrid` 懒构建,不能嵌套
`GridView(shrinkWrap: true)`。
- 2:3 卡片在小屏需要保持标题 2 行和类型 1 行不溢出;测试覆盖 320px 宽度。
- 不改 `CategoryController` 的数据语义;筛选仍由现有分区 code 决定。