opt: 长按倍速逻辑优化 issues #240

This commit is contained in:
guozhigq
2023-12-17 16:11:53 +08:00
parent b82c43c303
commit 3d6d0b0c44
3 changed files with 61 additions and 20 deletions

View File

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:pilipala/pages/setting/widgets/switch_item.dart';
import 'package:pilipala/plugin/pl_player/index.dart';
import 'package:pilipala/plugin/pl_player/models/play_speed.dart'; import 'package:pilipala/plugin/pl_player/models/play_speed.dart';
import 'package:pilipala/utils/storage.dart'; import 'package:pilipala/utils/storage.dart';
@ -13,9 +15,11 @@ class PlaySpeedPage extends StatefulWidget {
class _PlaySpeedPageState extends State<PlaySpeedPage> { class _PlaySpeedPageState extends State<PlaySpeedPage> {
Box videoStorage = GStrorage.video; Box videoStorage = GStrorage.video;
Box settingStorage = GStrorage.setting;
late double playSpeedDefault; late double playSpeedDefault;
late double longPressSpeedDefault; late double longPressSpeedDefault;
late List customSpeedsList; late List customSpeedsList;
late bool enableAutoLongPressSpeed;
List<Map<dynamic, dynamic>> sheetMenu = [ List<Map<dynamic, dynamic>> sheetMenu = [
{ {
'id': 1, 'id': 1,
@ -24,6 +28,7 @@ class _PlaySpeedPageState extends State<PlaySpeedPage> {
Icons.speed, Icons.speed,
size: 21, size: 21,
), ),
'show': true,
}, },
{ {
'id': 2, 'id': 2,
@ -32,6 +37,7 @@ class _PlaySpeedPageState extends State<PlaySpeedPage> {
Icons.speed_sharp, Icons.speed_sharp,
size: 21, size: 21,
), ),
'show': true,
}, },
{ {
'id': -1, 'id': -1,
@ -40,6 +46,7 @@ class _PlaySpeedPageState extends State<PlaySpeedPage> {
Icons.delete_outline, Icons.delete_outline,
size: 21, size: 21,
), ),
'show': true,
}, },
]; ];
@ -55,6 +62,15 @@ class _PlaySpeedPageState extends State<PlaySpeedPage> {
// 自定义倍速 // 自定义倍速
customSpeedsList = customSpeedsList =
videoStorage.get(VideoBoxKey.customSpeedsList, defaultValue: []); videoStorage.get(VideoBoxKey.customSpeedsList, defaultValue: []);
enableAutoLongPressSpeed = settingStorage
.get(SettingBoxKey.enableAutoLongPressSpeed, defaultValue: false);
if (enableAutoLongPressSpeed) {
Map newItem = sheetMenu[1];
newItem['show'] = false;
setState(() {
sheetMenu[1] = newItem;
});
}
} }
// 添加自定义倍速 // 添加自定义倍速
@ -120,19 +136,21 @@ class _PlaySpeedPageState extends State<PlaySpeedPage> {
//重要 //重要
itemCount: sheetMenu.length, itemCount: sheetMenu.length,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return ListTile( return sheetMenu[index]['show']
onTap: () { ? ListTile(
Navigator.pop(context); onTap: () {
menuAction(type, i, sheetMenu[index]['id']); Navigator.pop(context);
}, menuAction(type, i, sheetMenu[index]['id']);
minLeadingWidth: 0, },
iconColor: Theme.of(context).colorScheme.onSurface, minLeadingWidth: 0,
leading: sheetMenu[index]['leading'], iconColor: Theme.of(context).colorScheme.onSurface,
title: Text( leading: sheetMenu[index]['leading'],
sheetMenu[index]['title'], title: Text(
style: Theme.of(context).textTheme.titleSmall, sheetMenu[index]['title'],
), style: Theme.of(context).textTheme.titleSmall,
); ),
)
: const SizedBox();
}, },
), ),
); );
@ -210,11 +228,27 @@ class _PlaySpeedPageState extends State<PlaySpeedPage> {
title: const Text('默认倍速'), title: const Text('默认倍速'),
subtitle: Text(playSpeedDefault.toString()), subtitle: Text(playSpeedDefault.toString()),
), ),
ListTile( SetSwitchItem(
dense: false, title: '动态长按倍速',
title: const Text('默认长按倍速'), subTitle: '根据默认倍速长按时自动双倍',
subtitle: Text(longPressSpeedDefault.toString()), setKey: SettingBoxKey.enableAutoLongPressSpeed,
defaultVal: enableAutoLongPressSpeed,
callFn: (val) {
Map newItem = sheetMenu[1];
val ? newItem['show'] = false : newItem['show'] = true;
setState(() {
sheetMenu[1] = newItem;
enableAutoLongPressSpeed = val;
});
},
), ),
!enableAutoLongPressSpeed
? ListTile(
dense: false,
title: const Text('默认长按倍速'),
subtitle: Text(longPressSpeedDefault.toString()),
)
: const SizedBox(),
Padding( Padding(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
left: 14, left: 14,

View File

@ -220,6 +220,7 @@ class PlPlayerController {
late List speedsList; late List speedsList;
// 缓存 // 缓存
double? defaultDuration; double? defaultDuration;
late bool enableAutoLongPressSpeed = false;
// 播放顺序相关 // 播放顺序相关
PlayRepeat playRepeat = PlayRepeat.pause; PlayRepeat playRepeat = PlayRepeat.pause;
@ -249,8 +250,12 @@ class PlPlayerController {
); );
_playbackSpeed.value = _playbackSpeed.value =
videoStorage.get(VideoBoxKey.playSpeedDefault, defaultValue: 1.0); videoStorage.get(VideoBoxKey.playSpeedDefault, defaultValue: 1.0);
_longPressSpeed.value = enableAutoLongPressSpeed = setting
videoStorage.get(VideoBoxKey.longPressSpeedDefault, defaultValue: 2.0); .get(SettingBoxKey.enableAutoLongPressSpeed, defaultValue: false);
if (!enableAutoLongPressSpeed) {
_longPressSpeed.value = videoStorage
.get(VideoBoxKey.longPressSpeedDefault, defaultValue: 2.0);
}
List speedsListTemp = List speedsListTemp =
videoStorage.get(VideoBoxKey.customSpeedsList, defaultValue: []); videoStorage.get(VideoBoxKey.customSpeedsList, defaultValue: []);
speedsList = List.from(speedsListTemp); speedsList = List.from(speedsListTemp);
@ -858,7 +863,8 @@ class PlPlayerController {
} }
_doubleSpeedStatus.value = val; _doubleSpeedStatus.value = val;
if (val) { if (val) {
setPlaybackSpeed(longPressSpeed); setPlaybackSpeed(
enableAutoLongPressSpeed ? playbackSpeed * 2 : longPressSpeed);
} else { } else {
print(playbackSpeed); print(playbackSpeed);
setPlaybackSpeed(playbackSpeed); setPlaybackSpeed(playbackSpeed);

View File

@ -107,6 +107,7 @@ class SettingBoxKey {
static const String p1080 = 'p1080'; static const String p1080 = 'p1080';
static const String enableCDN = 'enableCDN'; static const String enableCDN = 'enableCDN';
static const String autoPiP = 'autoPiP'; static const String autoPiP = 'autoPiP';
static const String enableAutoLongPressSpeed = 'enableAutoLongPressSpeed';
// youtube 双击快进快退 // youtube 双击快进快退
static const String enableQuickDouble = 'enableQuickDouble'; static const String enableQuickDouble = 'enableQuickDouble';