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