// lib/utils/position_guard.dart /// 位置回退保护。 /// /// 打开失败 / 重连瞬间,mpv 会短暂把 position 报成 0 或几秒。 /// 如果直接采用,界面进度会归零,恢复时也会"从头播"。 /// /// 规则:只有在"已经播过一段时间"且"新位置几乎归零"时才算异常回退; /// 用户 seek、切歌、我们自己的恢复流程都允许回退,不拦截。 bool shouldIgnorePositionRegression({ required Duration lastKnown, required Duration incoming, required bool isChangingTrack, required bool isRecovering, }) { if (isChangingTrack || isRecovering) return false; if (lastKnown <= const Duration(seconds: 10)) return false; if (incoming >= const Duration(seconds: 5)) return false; return (lastKnown - incoming) > const Duration(seconds: 5); }