diff --git a/lib/main.dart b/lib/main.dart index e629964c..38fe6824 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -279,10 +279,12 @@ class MyApp extends StatelessWidget { return; } - // if (plCtr.isDesktopPip) { - // plCtr.exitDesktopPip(); - // return; - // } + if (plCtr.isDesktopPip) { + plCtr.exitDesktopPip().whenComplete( + () => plCtr.initialFocalPoint = Offset.zero, + ); + return; + } } Get.back(); diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index ffa1e031..eeee8b22 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -262,14 +262,16 @@ class PlPlayerController { late bool isDesktopPip = false; late Rect _lastWindowBounds; - void exitDesktopPip() { - isDesktopPip = false; + Offset initialFocalPoint = Offset.zero; - windowManager - ..setTitleBarStyle(TitleBarStyle.normal) - ..setMinimumSize(const Size(400, 700)) - ..setBounds(_lastWindowBounds) - ..setAlwaysOnTop(false); + Future exitDesktopPip() async { + isDesktopPip = false; + await Future.wait([ + windowManager.setTitleBarStyle(TitleBarStyle.normal), + windowManager.setMinimumSize(const Size(400, 700)), + windowManager.setBounds(_lastWindowBounds), + windowManager.setAlwaysOnTop(false), + ]); } Future enterDesktopPip() async { diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index c303f306..df69fc34 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -123,7 +123,6 @@ class _PLVideoPlayerState extends State late final RxBool showRestoreScaleBtn = false.obs; - Offset _initialFocalPoint = Offset.zero; GestureType? _gestureType; //播放器放缩 @@ -810,7 +809,7 @@ class _PLVideoPlayerState extends State if (details.pointerCount == 2) { interacting = true; } - _initialFocalPoint = details.localFocalPoint; + plPlayerController.initialFocalPoint = details.localFocalPoint; // if (kDebugMode) { // debugPrint("_initialFocalPoint$_initialFocalPoint"); // } @@ -819,8 +818,11 @@ class _PLVideoPlayerState extends State void _onInteractionUpdate(ScaleUpdateDetails details) { showRestoreScaleBtn.value = transformationController.value.row0.x != 1.0; - if (interacting || _initialFocalPoint == Offset.zero) return; - Offset cumulativeDelta = details.localFocalPoint - _initialFocalPoint; + if (interacting || plPlayerController.initialFocalPoint == Offset.zero) { + return; + } + Offset cumulativeDelta = + details.localFocalPoint - plPlayerController.initialFocalPoint; if (details.pointerCount == 2 && cumulativeDelta.distance < 1.5) { interacting = true; _gestureType = null; @@ -955,7 +957,8 @@ class _PLVideoPlayerState extends State } else if (_gestureType == GestureType.center) { // 全屏 const double threshold = 2.5; // 滑动阈值 - double cumulativeDy = details.localFocalPoint.dy - _initialFocalPoint.dy; + double cumulativeDy = + details.localFocalPoint.dy - plPlayerController.initialFocalPoint.dy; void fullScreenTrigger(bool status) { plPlayerController.triggerFullScreen(status: status); @@ -1014,7 +1017,7 @@ class _PLVideoPlayerState extends State plPlayerController.onChangedSliderEnd(); } interacting = false; - _initialFocalPoint = Offset.zero; + plPlayerController.initialFocalPoint = Offset.zero; _gestureType = null; }