diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 289bc4135..821cdbcbb 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -125,8 +125,13 @@ class _PLVideoPlayerState extends State } // 双击播放、暂停 - void onDoubleTapCenter() { - plPlayerController.videoPlayerController!.playOrPause(); + void onDoubleTapCenter() async { + if (plPlayerController.videoPlayerController!.state.completed) { + await plPlayerController.videoPlayerController!.seek(Duration.zero); + plPlayerController.videoPlayerController!.play(); + } else { + plPlayerController.videoPlayerController!.playOrPause(); + } } void doubleTapFuc(String type) { @@ -283,7 +288,7 @@ class _PLVideoPlayerState extends State /// 播放暂停 BottomControlType.playOrPause: PlayOrPauseButton( - controller: plPlayerController, + plPlayerController: plPlayerController, ), /// 下一集 diff --git a/lib/plugin/pl_player/widgets/play_pause_btn.dart b/lib/plugin/pl_player/widgets/play_pause_btn.dart index 7ab23ec1e..c49c1d33e 100644 --- a/lib/plugin/pl_player/widgets/play_pause_btn.dart +++ b/lib/plugin/pl_player/widgets/play_pause_btn.dart @@ -7,13 +7,13 @@ import 'package:PiliPlus/plugin/pl_player/index.dart'; class PlayOrPauseButton extends StatefulWidget { final double? iconSize; final Color? iconColor; - final PlPlayerController? controller; + final PlPlayerController plPlayerController; const PlayOrPauseButton({ super.key, this.iconSize, this.iconColor, - this.controller, + required this.plPlayerController, }); @override @@ -28,10 +28,12 @@ class PlayOrPauseButtonState extends State late Player player; bool isOpacity = false; + PlPlayerController get plPlayerController => widget.plPlayerController; + @override void initState() { super.initState(); - player = widget.controller!.videoPlayerController!; + player = plPlayerController.videoPlayerController!; animation = AnimationController( vsync: this, value: player.state.playing ? 1 : 0, @@ -67,13 +69,20 @@ class PlayOrPauseButtonState extends State width: 42, height: 34, child: InkWell( - onTap: player.playOrPause, + onTap: () async { + if (player.state.completed) { + await player.seek(Duration.zero); + player.play(); + } else { + player.playOrPause(); + } + }, // iconSize: widget.iconSize ?? _theme(context).buttonBarButtonSize, // color: widget.iconColor ?? _theme(context).buttonBarButtonColor, child: Center( child: AnimatedIcon( semanticLabel: - widget.controller!.videoPlayerController!.state.playing + plPlayerController.videoPlayerController!.state.playing ? '暂停' : '播放', progress: animation,