diff --git a/lib/pages/live_room/widgets/bottom_control.dart b/lib/pages/live_room/widgets/bottom_control.dart index 5f57920e..5a25a5c4 100644 --- a/lib/pages/live_room/widgets/bottom_control.dart +++ b/lib/pages/live_room/widgets/bottom_control.dart @@ -82,7 +82,7 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget { plPlayerController.toggleVideoFit(boxFit); }, child: Text( - "${PlPlayerController.videoFitType[boxFit.index]['desc']}", + boxFit.desc, style: const TextStyle(color: Colors.white, fontSize: 13), ), @@ -90,7 +90,7 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget { }).toList(); }, child: Text( - "${PlPlayerController.videoFitType[plPlayerController.videoFit.value.index]['desc']}", + plPlayerController.videoFit.value.desc, style: const TextStyle(color: Colors.white, fontSize: 13), ), ), diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 93e96e67..2caa4dbc 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -83,8 +83,7 @@ class PlPlayerController { final RxString _direction = 'horizontal'.obs; - final Rx _videoFit = Rx(videoFitType[1]['attr']); - final RxString _videoFitDesc = RxString(videoFitType[1]['desc']); + final Rx _videoFit = Rx(BoxFit.contain); late StreamSubscription _dataListenerForVideoFit; late StreamSubscription _dataListenerForEnterFullscreen; @@ -127,16 +126,6 @@ class PlPlayerController { // final Durations durations; - static List> videoFitType = [ - {'attr': BoxFit.fill, 'desc': '拉伸', 'toast': '拉伸至播放器尺寸,将产生变形(竖屏改为自动)'}, - {'attr': BoxFit.contain, 'desc': '自动', 'toast': '缩放至播放器尺寸,保留黑边'}, - {'attr': BoxFit.cover, 'desc': '裁剪', 'toast': '缩放至填满播放器,裁剪超出部分'}, - {'attr': BoxFit.fitWidth, 'desc': '等宽', 'toast': '缩放至撑满播放器宽度'}, - {'attr': BoxFit.fitHeight, 'desc': '等高', 'toast': '缩放至撑满播放器高度'}, - {'attr': BoxFit.none, 'desc': '原始', 'toast': '不缩放,以视频原始尺寸显示'}, - {'attr': BoxFit.scaleDown, 'desc': '限制', 'toast': '仅超出时缩小至播放器尺寸'}, - ]; - String get bvid => _bvid; int get cid => _cid; @@ -212,7 +201,6 @@ class PlPlayerController { /// 视频比例 Rx get videoFit => _videoFit; - RxString get videoFitDEsc => _videoFitDesc; /// 后台播放 RxBool get continuePlayInBackground => _continuePlayInBackground; @@ -1221,25 +1209,22 @@ class PlPlayerController { /// Toggle Change the videofit accordingly void toggleVideoFit(BoxFit value) { - _videoFit.value = videoFitType[value.index]['attr']; - _videoFitDesc.value = videoFitType[value.index]['desc']; + _videoFit.value = value; setVideoFit(); getPlayerKey?.call().currentState?.update(fit: value); } /// 缓存fit Future setVideoFit() async { - List attrs = videoFitType.map((e) => e['attr']).toList(); - int index = attrs.indexOf(_videoFit.value); - SmartDialog.showToast(videoFitType[index]['toast'], + SmartDialog.showToast(_videoFit.value.toast, displayTime: const Duration(seconds: 1)); - video.put(VideoBoxKey.cacheVideoFit, index); + video.put(VideoBoxKey.cacheVideoFit, _videoFit.value.index); } /// 读取fit Future getVideoFit() async { int fitValue = video.get(VideoBoxKey.cacheVideoFit, defaultValue: 1); - var attr = videoFitType[fitValue]['attr']; + var attr = BoxFit.values[fitValue]; // 由于none与scaleDown涉及视频原始尺寸,需要等待视频加载后再设置,否则尺寸会变为0,出现错误; if (attr == BoxFit.none || attr == BoxFit.scaleDown) { if (buffered.value == Duration.zero) { @@ -1249,7 +1234,7 @@ class PlPlayerController { _dataListenerForVideoFit.cancel(); int fitValue = video.get(VideoBoxKey.cacheVideoFit, defaultValue: 1); - var attr = videoFitType[fitValue]['attr']; + var attr = BoxFit.values[fitValue]; if (attr == BoxFit.none || attr == BoxFit.scaleDown) { _videoFit.value = attr; } @@ -1261,7 +1246,6 @@ class PlPlayerController { attr = BoxFit.contain; } _videoFit.value = attr; - _videoFitDesc.value = videoFitType[fitValue]['desc']; } /// 设置后台播放 @@ -1585,3 +1569,17 @@ class PlPlayerController { late final RxList dmTrend = [].obs; late final RxBool showDmChart = true.obs; } + +extension BoxFitExt on BoxFit { + String get desc => const ['拉伸', '自动', '裁剪', '等宽', '等高', '原始', '限制'][index]; + + String get toast => const [ + '拉伸至播放器尺寸,将产生变形(竖屏改为自动)', + '缩放至播放器尺寸,保留黑边', + '缩放至填满播放器,裁剪超出部分', + '缩放至撑满播放器宽度', + '缩放至撑满播放器高度', + '不缩放,以视频原始尺寸显示', + '仅超出时缩小至播放器尺寸', + ][index]; +} diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 04e1234e..92260068 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -545,14 +545,14 @@ class _PLVideoPlayerState extends State plPlayerController.toggleVideoFit(boxFit); }, child: Text( - "${PlPlayerController.videoFitType[boxFit.index]['desc']}", + boxFit.desc, style: const TextStyle(color: Colors.white, fontSize: 13), ), ); }).toList(); }, child: Text( - "${PlPlayerController.videoFitType[plPlayerController.videoFit.value.index]['desc']}", + plPlayerController.videoFit.value.desc, style: const TextStyle(color: Colors.white, fontSize: 13), ), ),