fix(player): 记住拖动后的实际播放位置

This commit is contained in:
Zhou Weidong committed 2026-10-22 10:41:01 +08:00
1 parent 47ca21406a
commit 5268adc999
8 files changed
+352 -67

No files matched your search

@@ -2,6 +2,15 @@
const Duration _defaultMaxAge = Duration(hours: 12);
/// 将播放位置限制在当前媒体时长内。
Duration clampPlaybackPosition(Duration position, Duration duration) {
if (position <= Duration.zero || duration <= Duration.zero) {
return Duration.zero;
}
if (position >= duration) return duration;
return position;
}
/// 进程内最近播放位置。
class CachedPlaybackPosition {
const CachedPlaybackPosition({
@@ -37,13 +46,14 @@ class PlaybackPositionCache {
required Duration position,
required Duration duration,
}) {
if (episodeId.isEmpty || dramaId.isEmpty || position <= Duration.zero) {
final safePosition = clampPlaybackPosition(position, duration);
if (episodeId.isEmpty || dramaId.isEmpty || safePosition <= Duration.zero) {
return;
}
_positions[episodeId] = CachedPlaybackPosition(
episodeId: episodeId,
dramaId: dramaId,
position: position,
position: safePosition,
duration: duration,
updatedAt: _now(),
);
@@ -61,6 +61,9 @@ class VideoPlayerPort implements PlayerPort {
if (!_disposed && controller.value.isInitialized) await controller.pause();
}
/// 跳转到指定播放位置。
Future<void> seekTo(Duration position) => controller.seekTo(position);
@override
Future<void> dispose() async {
if (_disposed) return;