diff --git a/lib/pages/setting/models/play_settings.dart b/lib/pages/setting/models/play_settings.dart index cdd165a01..6eff199f2 100644 --- a/lib/pages/setting/models/play_settings.dart +++ b/lib/pages/setting/models/play_settings.dart @@ -29,13 +29,14 @@ List get playSettings => [ setKey: SettingBoxKey.enableShowDanmaku, defaultVal: true, ), - // const SettingsModel( - // settingsType: SettingsType.sw1tch, - // title: '启用点击弹幕', - // leading: Icon(Icons.touch_app_outlined), - // setKey: SettingBoxKey.enableTapDm, - // defaultVal: false, - // ), + if (Utils.isMobile) + const SettingsModel( + settingsType: SettingsType.sw1tch, + title: '启用点击弹幕', + leading: Icon(Icons.touch_app_outlined), + setKey: SettingBoxKey.enableTapDm, + defaultVal: true, + ), SettingsModel( settingsType: SettingsType.normal, onTap: (setState) => Get.toNamed('/playSpeedSet'), diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index e49a52d50..a934ef949 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -320,7 +320,7 @@ class PlPlayerController { } /// 弹幕权重 - late final enableTapDm = Pref.enableTapDm; + late final enableTapDm = Utils.isMobile && Pref.enableTapDm; late int danmakuWeight = Pref.danmakuWeight; late RuleFilter filters = Pref.danmakuFilterRule; // 关联弹幕控制器 diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 78c0fdb11..1e8467297 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -106,11 +106,6 @@ class PLVideoPlayer extends StatefulWidget { class _PLVideoPlayerState extends State with WidgetsBindingObserver, TickerProviderStateMixin { - @pragma("vm:prefer-inline") - bool get isMobile => kDebugMode || Utils.isMobile; - @pragma("vm:prefer-inline") - bool get isDesktop => !kDebugMode && Utils.isDesktop; - late AnimationController animationController; late VideoController videoController; late final CommonIntroController introController = widget.introController!; @@ -182,7 +177,7 @@ class _PLVideoPlayerState extends State ); videoController = plPlayerController.videoController!; - if (isMobile) { + if (Utils.isMobile) { Future.microtask(() async { try { FlutterVolumeController.updateShowSystemUI(true); @@ -223,7 +218,7 @@ class _PLVideoPlayerState extends State }); } - _tapGestureRecognizer = isMobile + _tapGestureRecognizer = plPlayerController.enableTapDm ? ImmediateTapGestureRecognizer( onTapDown: _onTapDown, onTapUp: _onTapUp, @@ -285,7 +280,7 @@ class _PLVideoPlayerState extends State _listener?.cancel(); _controlsListener?.cancel(); animationController.dispose(); - if (isMobile) { + if (Utils.isMobile) { FlutterVolumeController.removeListener(); } transformationController.dispose(); @@ -479,7 +474,7 @@ class _PLVideoPlayerState extends State videoDetailController.showVP.value = !videoDetailController.showVP.value; }, - onSecondaryTap: isMobile + onSecondaryTap: Utils.isMobile ? null : () => videoDetailController.showVP.value = !videoDetailController.showVP.value, @@ -918,7 +913,8 @@ class _PLVideoPlayerState extends State final double tapPosition = details.localFocalPoint.dx; final double sectionWidth = maxWidth / 3; if (tapPosition < sectionWidth) { - if (isDesktop || !plPlayerController.enableSlideVolumeBrightness) { + if (Utils.isDesktop || + !plPlayerController.enableSlideVolumeBrightness) { return; } // 左边区域 @@ -1117,7 +1113,7 @@ class _PLVideoPlayerState extends State void _onTapUp(TapUpDetails details) { switch (details.kind) { - case ui.PointerDeviceKind.mouse when isDesktop: + case ui.PointerDeviceKind.mouse when Utils.isDesktop: onTapDesktop(); break; default: @@ -1132,7 +1128,7 @@ class _PLVideoPlayerState extends State } void _onTapDown(TapDownDetails details) { - if (isMobile) { + if (Utils.isMobile) { final ctr = plPlayerController.danmakuController; if (ctr != null) { final pos = details.localPosition; @@ -1152,7 +1148,7 @@ class _PLVideoPlayerState extends State void _onDoubleTapDown(TapDownDetails details) { switch (details.kind) { - case ui.PointerDeviceKind.mouse when isDesktop: + case ui.PointerDeviceKind.mouse when Utils.isDesktop: onDoubleTapDesktop(); break; default: @@ -1171,7 +1167,7 @@ class _PLVideoPlayerState extends State late final DoubleTapGestureRecognizer _doubleTapGestureRecognizer; void _onPointerDown(PointerDownEvent event) { - if (isDesktop) { + if (Utils.isDesktop) { final buttons = event.buttons; final isSecondaryBtn = buttons == kSecondaryMouseButton; if (isSecondaryBtn || buttons == kMiddleMouseButton) { @@ -1304,10 +1300,11 @@ class _PLVideoPlayerState extends State _videoWidget, if (widget.danmuWidget case final danmaku?) - Positioned.fill(child: danmaku), + Positioned.fill(top: 4, child: danmaku), if (!isLive) Positioned.fill( + top: 4, child: IgnorePointer( ignoring: !plPlayerController.enableDragSubtitle, child: Obx( @@ -1321,15 +1318,20 @@ class _PLVideoPlayerState extends State ), ), - Builder( - builder: (context) { - _refreshDmCallback = () => ((context) as Element).markNeedsBuild(); - if (_dmOffset != null && _suspendedDm != null) { - return _buildDmAction(_suspendedDm!, _dmOffset!); - } - return const SizedBox.shrink(); - }, - ), + if (plPlayerController.enableTapDm) + Builder( + builder: (context) { + _refreshDmCallback = () { + if (context.mounted) { + ((context) as Element).markNeedsBuild(); + } + }; + if (_dmOffset != null && _suspendedDm != null) { + return _buildDmAction(_suspendedDm!, _dmOffset!); + } + return const SizedBox.shrink(); + }, + ), /// 长按倍速 toast if (!isLive) @@ -1741,7 +1743,7 @@ class _PLVideoPlayerState extends State ), ), ), - if (isMobile) + if (Utils.isMobile) buildViewPointWidget( videoDetailController, plPlayerController, @@ -1963,7 +1965,7 @@ class _PLVideoPlayerState extends State }), ], ); - if (isDesktop) { + if (Utils.isDesktop) { return Obx( () => MouseRegion( cursor: !plPlayerController.showControls.value && isFullScreen diff --git a/lib/utils/storage_pref.dart b/lib/utils/storage_pref.dart index f309cefdd..dbf9f1e29 100644 --- a/lib/utils/storage_pref.dart +++ b/lib/utils/storage_pref.dart @@ -860,5 +860,5 @@ abstract class Pref { _setting.get(SettingBoxKey.enablePlayAll, defaultValue: true); static bool get enableTapDm => - _setting.get(SettingBoxKey.enableTapDm, defaultValue: false); + _setting.get(SettingBoxKey.enableTapDm, defaultValue: true); }