Files
ReelShort/docs/plans/2026-10-22-playback-position-continuity.md

1.7 KiB

播放位置连续性

目标

  • 首页进入详情、详情返回首页、详情再进播放器时保持同一集同一秒。
  • 新增进程内最近播放位置缓存,优先于服务端旧记录。
  • 跨剧、跨集不串位;锁定/票据失败不因缓存强行起播;进程重启仍回服务端。

实施步骤

  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 项全过。
  • 未启停服务,未操作真机。