33 lines
1.7 KiB
Markdown
33 lines
1.7 KiB
Markdown
# 播放位置连续性
|
|
|
|
## 目标
|
|
|
|
- 首页进入详情、详情返回首页、详情再进播放器时保持同一集同一秒。
|
|
- 新增进程内最近播放位置缓存,优先于服务端旧记录。
|
|
- 跨剧、跨集不串位;锁定/票据失败不因缓存强行起播;进程重启仍回服务端。
|
|
|
|
## 实施步骤
|
|
|
|
1. 新增 `PlaybackPositionCache`,按 episodeId 保存 dramaId/position/duration/updatedAt。
|
|
2. App Provider 注入单一缓存实例,PlayerPage 与详情页共享。
|
|
3. PlayerLogic 进度监听、saveCurrentProgress 写入缓存;loadResumePoint 优先命中缓存。
|
|
4. preparePlayer 对每个待准备集按 dramaId 校验缓存,并继续使用现有位置钳位。
|
|
5. 详情页续看状态优先使用该剧最新缓存,未命中再请求服务端。
|
|
6. 补缓存、缓存命中不请求服务端、跨剧隔离、服务端回落和详情返回位置测试。
|
|
7. 执行 `dart analyze lib test` 与 `flutter test --no-pub`,回填 PROGRESS 后提交合并。
|
|
|
|
## 风险 / 待确认
|
|
|
|
- 缓存仅保存在进程内,App 重启后自动回落到服务端观看记录。
|
|
- 片尾附近继续复用现有 `clampResumePosition` 完成保护。
|
|
|
|
## 执行结果
|
|
|
|
- 新增进程内按集缓存并通过 Provider 全局共享,详情页与播放器共用。
|
|
- 进度监听、`saveCurrentProgress` 和进入详情前会写入缓存。
|
|
- `loadResumePoint` 优先缓存,未命中或跨剧时才请求服务端。
|
|
- 详情页继续观看与 CTA 优先进缓存集;返回首页保持原播放器与位置。
|
|
- 已覆盖缓存读写/过期、跨剧隔离、缓存命中去网络、服务端回落和详情往返。
|
|
- `dart analyze lib test` 零告警,`flutter test --no-pub` 589 项全过。
|
|
- 未启停服务,未操作真机。
|