diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 0258baf1e..6157ad000 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -1152,14 +1152,40 @@ class PlPlayerController { _isSliderMoving.value = true; } + double? slideDy; + bool? hasToast; + void updateSlideDy(double dy) { + slideDy ??= 0; + slideDy = slideDy! + dy; + if (slideDy!.abs() >= 100) { + if (hasToast != true) { + hasToast = true; + SmartDialog.showToast( + '取消${sliderPosition.value > position.value ? '快进' : '快退'}', + ); + } + } else { + if (hasToast == true) { + hasToast = null; + SmartDialog.showToast( + sliderPosition.value > position.value ? '快进' : '快退', + ); + } + } + } + void onUpdatedSliderProgress(Duration value) { _sliderTempPosition.value = value; _sliderPosition.value = value; updateSliderPositionSecond(); } - void onChangedSliderEnd() { - feedBack(); + void onChangedSliderEnd([bool? isCancel]) { + if (isCancel != true) { + feedBack(); + } + slideDy = null; + hasToast = null; _isSliderMoving.value = false; _hideTaskControls(); } diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index c57fb2ac0..09d0dea2f 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -771,6 +771,7 @@ class _PLVideoPlayerState extends State curSliderPosition + (delta.dx * scale).round()); final Duration result = pos.clamp(Duration.zero, plPlayerController.duration.value); + plPlayerController.updateSlideDy(delta.dy); plPlayerController.onUpdatedSliderProgress(result); plPlayerController.onChangedSliderStart(); if (plPlayerController.showSeekPreview) { @@ -778,7 +779,7 @@ class _PLVideoPlayerState extends State plPlayerController.previewDx.value = result.inMilliseconds / plPlayerController .durationSeconds.value.inMilliseconds * - context.size!.width; + renderBox.size.width; if (plPlayerController.showPreview.value.not) { plPlayerController.showPreview.value = true; } @@ -834,10 +835,19 @@ class _PLVideoPlayerState extends State plPlayerController.showPreview.value = false; } if (plPlayerController.isSliderMoving.value) { - plPlayerController.onChangedSliderEnd(); - plPlayerController.seekTo( + bool isCancel = plPlayerController.slideDy != null && + plPlayerController.slideDy!.abs() >= 100; + plPlayerController.onChangedSliderEnd(isCancel); + if (isCancel) { + plPlayerController.onUpdatedSliderProgress( + plPlayerController.position.value, + ); + } else { + plPlayerController.seekTo( plPlayerController.sliderPosition.value, - type: 'slider'); + type: 'slider', + ); + } } interacting = false; _initialFocalPoint = Offset.zero;