feat: 手指滑动快进、快退

This commit is contained in:
guozhigq
2023-08-04 22:33:38 +08:00
parent 1454190f43
commit 8a59b05777
4 changed files with 32 additions and 7 deletions

View File

@ -4,7 +4,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:pilipala/models/video/play/quality.dart'; import 'package:pilipala/models/video/play/quality.dart';
import 'package:pilipala/models/video/play/url.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/pages/video/detail/index.dart';
import 'package:pilipala/plugin/pl_player/index.dart'; import 'package:pilipala/plugin/pl_player/index.dart';
@ -403,7 +403,7 @@ class _HeaderControlState extends State<HeaderControl> {
size: 15, size: 15,
color: Colors.white, color: Colors.white,
), ),
fuc: () => Get.offAll(const HomePage()), fuc: () => Get.offAll(const MainApp()),
), ),
const Spacer(), const Spacer(),
// ComBtn( // ComBtn(

View File

@ -505,15 +505,16 @@ class PlPlayerController {
} }
void onChangedSliderStart() { void onChangedSliderStart() {
feedBack();
_isSliderMoving.value = true; _isSliderMoving.value = true;
} }
void onUodatedSliderProgress(value) { void onUodatedSliderProgress(Duration value) {
_sliderTempPosition.value = value; _sliderTempPosition.value = value;
_sliderPosition.value = value;
} }
void onChangedSliderEnd() { void onChangedSliderEnd() {
feedBack();
_isSliderMoving.value = false; _isSliderMoving.value = false;
_hideTaskControls(); _hideTaskControls();
} }

View File

@ -57,6 +57,8 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
Timer? _volumeTimer; Timer? _volumeTimer;
double _distance = 0.0; double _distance = 0.0;
// 初始手指落下位置
double _initTapPositoin = 0.0;
bool _volumeInterceptEventStream = false; bool _volumeInterceptEventStream = false;
@ -464,8 +466,28 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
_.setPlaybackSpeed(currentSpeed / 2); _.setPlaybackSpeed(currentSpeed / 2);
}, },
// 水平位置 快进 // 水平位置 快进
onHorizontalDragUpdate: (DragUpdateDetails details) {}, onHorizontalDragUpdate: (DragUpdateDetails details) {
onHorizontalDragEnd: (DragEndDetails 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 { onVerticalDragUpdate: (DragUpdateDetails details) async {
final totalWidth = MediaQuery.of(context).size.width; final totalWidth = MediaQuery.of(context).size.width;
@ -546,7 +568,7 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
return Container(); return Container();
} }
return Positioned( return Positioned(
bottom: -3, bottom: -3.5,
left: 0, left: 0,
right: 0, right: 0,
child: SlideTransition( child: SlideTransition(

View File

@ -4,6 +4,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:pilipala/plugin/pl_player/index.dart'; import 'package:pilipala/plugin/pl_player/index.dart';
import 'package:pilipala/plugin/pl_player/widgets/play_pause_btn.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 { class BottomControl extends StatelessWidget implements PreferredSizeWidget {
final PlPlayerController? controller; final PlPlayerController? controller;
@ -55,6 +56,7 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget {
barHeight: 3.0, barHeight: 3.0,
thumbRadius: 5.5, thumbRadius: 5.5,
onDragStart: (duration) { onDragStart: (duration) {
feedBack();
_.onChangedSliderStart(); _.onChangedSliderStart();
}, },
onDragUpdate: (duration) { onDragUpdate: (duration) {