diff --git a/docs/plans/2026-10-21-K95.2-poster-transition.md b/docs/plans/2026-10-21-K95.2-poster-transition.md new file mode 100644 index 0000000..073ae00 --- /dev/null +++ b/docs/plans/2026-10-21-K95.2-poster-transition.md @@ -0,0 +1,54 @@ +# K95.2 首切频道用封面过渡 + +## 目标 + +- 首页频道切换后立即显示目标短剧封面,视频首帧就绪后再淡入。 +- 首页模式视频初始化期间不再显示 `player-session-loading` 大转圈。 +- 非首页播放器及票据加载状态保持现有行为。 + +## 分支 + +- ReelShort:`fix/k95.2-poster-transition`,从最新 `origin/develop` 创建。 +- FruitServer 仅写计划与 PROGRESS 留痕,不改后端功能代码。 + +## A. PlayerVideoSurface + +- 新增可选参数 `posterUrl = ''`。 +- 未 reveal 时: + - `posterUrl` 非空显示 `RemoteImage(path: posterUrl, fit: BoxFit.cover)`, + Key 为 `player-video-poster`。 + - `posterUrl` 为空继续显示黑色 `ColoredBox`,保留 + `player-fallback-background` Key。 +- 视频 reveal 后继续通过现有 200ms `AnimatedOpacity` 淡入覆盖封面。 + +## B. PlayerPage + +- `PlayerVideoSurface` 传入当前 `drama.posterUrl`。 +- `player-session-loading` 条件增加 `!widget.homeMode`: + - 首页模式视频初始化期间只显示封面。 + - 非首页播放器继续显示原 session loading。 +- 首页 `player-ticket-loading` 不变。 + +## C. 测试 + +- 视频表面:非空 poster 显示 `player-video-poster`,空 poster 保留黑底且无封面。 +- 首页模式:视频未就绪时不出现 `player-session-loading`。 +- 非首页模式:视频未就绪时仍出现 `player-session-loading`。 +- 复跑既有播放器、首页相关测试。 + +## 门禁 + +- `dart analyze lib test` +- `flutter test` +- `flutter build apk --debug` + +## Git + +- ReelShort 提交:`fix(home): 频道切换用封面过渡` +- `--no-ff` 合回 `develop` 并 push。 +- 作者 `Zhou Weidong <502333560@qq.com>`;禁止 `git add -A`。 + +## 约束 + +- 全程中文;不改后端、ReelShortWeb、specs。 +- 不安装或操作真机;完成后停住等待验收。 diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index 543ee51..60973f4 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -24204,3 +24204,42 @@ Running Gradle task 'assembleDebug'... 8.7s - ReelShort develop 合并提交:`838ca2c merge: 合并 K95.1 首次切换频道无感`, 已推送 `dfa79be..838ca2c`;K95 与 K95.1 已统一合回 `develop`。 - 未改后端、ReelShortWeb、specs;未安装或操作真机,等待用户验收。 + +## 2026-10-21 K95.2 首切频道用封面过渡 + +- 已完整读取 K95.2 `docs/plans/INBOX.md`;本批次只改 ReelShort Flutter 客户端。 +- 已从最新 `origin/develop` 创建 `fix/k95.2-poster-transition` worktree。 +- 已先写计划 `docs/plans/2026-10-21-K95.2-poster-transition.md`,明确封面底层、 + 视频淡入、首页隐藏 session 大转圈及非首页保持原行为。 +- 不改后端、ReelShortWeb、specs;不安装或操作真机。 +- 已完成 `PlayerVideoSurface(posterUrl)`:未 reveal 时优先显示 + `RemoteImage` 封面 `player-video-poster`,空封面继续保留黑色 + `player-fallback-background`;视频首帧仍用 200ms 淡入覆盖。 +- `PlayerPage` 已传入当前短剧 `posterUrl`,首页模式隐藏 + `player-session-loading`,非首页与本页 `player-ticket-loading` 行为不变。 +- 已补 poster 非空/为空、首页与非首页 session loading、既有播放页封面断言测试。 + +门禁原始输出: + +```text +$ dart analyze lib test +Analyzing lib, test... +No issues found! + +$ flutter test --no-pub +00:57 +547: All tests passed! + +$ flutter build apk --debug +Running Gradle task 'assembleDebug'... 27.6s +✓ Built build/app/outputs/flutter-apk/app-debug.apk +``` + +解读:静态分析零告警,547 项全量测试通过,debug APK 构建成功; +`pubspec.lock` 已还原,无依赖变更。 + +### K95.2 交付结果 + +- ReelShort 功能提交:`c9adf8b fix(home): 频道切换用封面过渡`。 +- ReelShort develop 合并提交:`a2a491d merge: 合并 K95.2 首切频道封面过渡`, + 已推送 `838ca2c..a2a491d`。 +- 未改后端、ReelShortWeb、specs;未安装或操作真机,等待用户验收。