docs: 记录 K95.1 首次切换无感

This commit is contained in:
Zhou Weidong committed 2026-10-21 17:54:29 +08:00
1 parent 4049cfd2d0
commit b31784010c
2 files changed
+124

No files matched your search

+41
View File
@@ -24113,6 +24113,7 @@ Running Gradle task 'assembleDebug'... 24.8s
- 门禁:`dart analyze lib test` 零告警;`flutter test --no-pub` 539 项全过;
`flutter build apk --debug` 成功生成 `build/app/outputs/flutter-apk/app-debug.apk`。
- 未改后端、ReelShortWeb、specs;未安装或操作真机,等待用户验收。
- 已完成数据层:新增 `FeedPage`,`CatalogApi.feed` 与 `CatalogRepository.fetchFeed`
支持 types/cursor/size,并补齐所有测试仓库实现。
- 已完成 `HomeFeedChannel` 与 `HomeFeedController`:推荐 seed、三频道独立缓存、
@@ -24163,3 +24164,43 @@ Running Gradle task 'assembleDebug'... 27.9s
- 已先写计划 `docs/plans/2026-10-21-K95-feed-switch-loading.md`,明确频道请求归属、
loading/in-flight 状态、超时、Player feedRevision 与串行化方案。
- 不改后端、ReelShortWeb、specs;不安装或操作真机。
## 2026-10-21 K95.1 首次切换频道无感显示
- 已完整读取 K95.1 `docs/plans/INBOX.md`;本批次只改 ReelShort Flutter 客户端。
- 已从包含 K95 的最新 ReelShort `origin/develop` 创建
`fix/k95.1-seamless-first-switch` worktree。
- 已先写计划 `docs/plans/2026-10-21-K95.1-seamless-first-switch.md`,明确后台预取、
最近可见 feed、非阻断遮罩和原子切换策略。
- 已完成 `HomeFeedController.prefetchChannels()`:并行静默预取 anime/live 第一页,
只处理未加载且无在飞请求的频道;预取失败不抛异常、不影响推荐。
- 推荐首屏刷新成功后后台触发预取;预取成功首次切频道直接命中缓存,
预取期间切换会等待同一请求,不重复发请求。
- `_HomeTabsState` 保存最近一次非空 feed;目标频道首次加载时继续渲染上一个
`PlayerPage`,叠加 `IgnorePointer` 半透明遮罩和 24px 转圈
`home-feed-channel-loading`,数据到达后切到新频道第 1 个,空结果/失败显示空态。
- 已补控制器预取、失败隔离、不重复请求、首切保留播放器及空结果测试。
门禁原始输出:
```text
$ dart analyze lib test
Analyzing lib, test...
No issues found!
$ flutter test --no-pub
00:54 +544: All tests passed!
$ flutter build apk --debug
Running Gradle task 'assembleDebug'... 8.7s
✓ Built build/app/outputs/flutter-apk/app-debug.apk
```
解读:静态分析零告警,544 项全量测试通过,debug APK 构建成功。
### K95.1 交付结果
- ReelShort 功能提交:`677e49f fix(home): 首切频道预取并保留播放画面`。
- ReelShort develop 合并提交:`838ca2c merge: 合并 K95.1 首次切换频道无感`,
已推送 `dfa79be..838ca2c`;K95 与 K95.1 已统一合回 `develop`。
- 未改后端、ReelShortWeb、specs;未安装或操作真机,等待用户验收。