From 8a59b0577727b089b0d0d9e656133a22fc7c4961 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Fri, 4 Aug 2023 22:33:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=8B=E6=8C=87=E6=BB=91=E5=8A=A8?= =?UTF-8?q?=E5=BF=AB=E8=BF=9B=E3=80=81=E5=BF=AB=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../video/detail/widgets/header_control.dart | 4 +-- lib/plugin/pl_player/controller.dart | 5 ++-- lib/plugin/pl_player/view.dart | 28 +++++++++++++++++-- .../pl_player/widgets/bottom_control.dart | 2 ++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/pages/video/detail/widgets/header_control.dart b/lib/pages/video/detail/widgets/header_control.dart index 54eecc4b..bedcd008 100644 --- a/lib/pages/video/detail/widgets/header_control.dart +++ b/lib/pages/video/detail/widgets/header_control.dart @@ -4,7 +4,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; import 'package:pilipala/models/video/play/quality.dart'; import 'package:pilipala/models/video/play/url.dart'; -import 'package:pilipala/pages/home/index.dart'; +import 'package:pilipala/pages/main/index.dart'; import 'package:pilipala/pages/video/detail/index.dart'; import 'package:pilipala/plugin/pl_player/index.dart'; @@ -403,7 +403,7 @@ class _HeaderControlState extends State { size: 15, color: Colors.white, ), - fuc: () => Get.offAll(const HomePage()), + fuc: () => Get.offAll(const MainApp()), ), const Spacer(), // ComBtn( diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index a7c8676a..50be2477 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -505,15 +505,16 @@ class PlPlayerController { } void onChangedSliderStart() { - feedBack(); _isSliderMoving.value = true; } - void onUodatedSliderProgress(value) { + void onUodatedSliderProgress(Duration value) { _sliderTempPosition.value = value; + _sliderPosition.value = value; } void onChangedSliderEnd() { + feedBack(); _isSliderMoving.value = false; _hideTaskControls(); } diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 4b69a5b9..f359b5c5 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -57,6 +57,8 @@ class _PLVideoPlayerState extends State Timer? _volumeTimer; double _distance = 0.0; + // 初始手指落下位置 + double _initTapPositoin = 0.0; bool _volumeInterceptEventStream = false; @@ -464,8 +466,28 @@ class _PLVideoPlayerState extends State _.setPlaybackSpeed(currentSpeed / 2); }, // 水平位置 快进 - onHorizontalDragUpdate: (DragUpdateDetails details) {}, - onHorizontalDragEnd: (DragEndDetails details) {}, + onHorizontalDragUpdate: (DragUpdateDetails details) { + final tapPosition = details.localPosition.dx; + int curSliderPosition = _.sliderPosition.value.inSeconds; + late int result; + if (tapPosition - _initTapPositoin > 0) { + // 快进 + /// TODO 优化屏幕越小效果越明显 + result = (curSliderPosition + 1) + .clamp(0, _.duration.value.inSeconds); + } else { + // 快退 + result = (curSliderPosition - 1) + .clamp(0, _.duration.value.inSeconds); + } + _.onUodatedSliderProgress(Duration(seconds: result)); + _.onChangedSliderStart(); + _initTapPositoin = tapPosition; + }, + onHorizontalDragEnd: (DragEndDetails details) { + _.onChangedSliderEnd(); + _.seekTo(_.sliderPosition.value); + }, // 垂直方向 音量/亮度调节 onVerticalDragUpdate: (DragUpdateDetails details) async { final totalWidth = MediaQuery.of(context).size.width; @@ -546,7 +568,7 @@ class _PLVideoPlayerState extends State return Container(); } return Positioned( - bottom: -3, + bottom: -3.5, left: 0, right: 0, child: SlideTransition( diff --git a/lib/plugin/pl_player/widgets/bottom_control.dart b/lib/plugin/pl_player/widgets/bottom_control.dart index 32b98a19..0fd6c95d 100644 --- a/lib/plugin/pl_player/widgets/bottom_control.dart +++ b/lib/plugin/pl_player/widgets/bottom_control.dart @@ -4,6 +4,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; import 'package:pilipala/plugin/pl_player/index.dart'; import 'package:pilipala/plugin/pl_player/widgets/play_pause_btn.dart'; +import 'package:pilipala/utils/feed_back.dart'; class BottomControl extends StatelessWidget implements PreferredSizeWidget { final PlPlayerController? controller; @@ -55,6 +56,7 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget { barHeight: 3.0, thumbRadius: 5.5, onDragStart: (duration) { + feedBack(); _.onChangedSliderStart(); }, onDragUpdate: (duration) {