# Seek 后播放位置保持 ## 目标 - 拖动进度条后,缓存与观看记录立即使用 seek 完成后的真实位置。 - 拖动后立即进详情/离开也不会回退到旧进度。 - 越界位置 clamp,锁定/票据失败不写无效缓存。 ## 实施步骤 1. 增加播放位置 clamp 纯函数,缓存写入统一限制在 `0..duration`。 2. VideoPlayerPort 暴露 seek 方法,PlayerLogic 等待 seek 完成后再读取 controller。 3. PlayerLogic 统一当前播放快照,监听、缓存和上报共用同一份 position/duration。 4. 增加 pending seek 屏障,saveCurrentProgress 与离开路径等待 seek 和上报完成。 5. 补 seek 缓存、越界 clamp、seek 后进详情并返回测试。 6. 执行 `dart analyze lib test` 与 `flutter test --no-pub`,回填 PROGRESS 后提交合并。 ## 风险 / 待确认 - 片尾与完成逻辑继续沿用现有 controller/播放器行为。 - 缓存仅在进程内,不改变服务端观看记录契约。