diff --git a/lib/pages/player/player_item_panel.dart b/lib/pages/player/player_item_panel.dart index 3ed9b5ef..dfe9f43b 100644 --- a/lib/pages/player/player_item_panel.dart +++ b/lib/pages/player/player_item_panel.dart @@ -61,6 +61,7 @@ class PlayerItemPanel extends StatefulWidget { class _PlayerItemPanelState extends State { Box setting = GStorage.setting; late bool haEnable; + late List PlaySpeedList; late Animation topOffsetAnimation; late Animation bottomOffsetAnimation; late Animation leftOffsetAnimation; @@ -172,7 +173,8 @@ class _PlayerItemPanelState extends State { spacing: 8, runSpacing: Utils.isDesktop() ? 8 : 0, children: [ - for (final double i in defaultPlaySpeedList) ...[ + + for (final double i in PlaySpeedList) ...[ if (i == currentSpeed) FilledButton( onPressed: () async { @@ -283,6 +285,8 @@ class _PlayerItemPanelState extends State { curve: Curves.easeInOut, )); haEnable = setting.get(SettingBoxKey.hAenable, defaultValue: true); + PlaySpeedList = + setting.get(SettingBoxKey.PlaySpeedList, defaultValue: defaultPlaySpeedList_L); } Widget forwardIcon() { @@ -1023,7 +1027,7 @@ class _PlayerItemPanelState extends State { }, menuChildren: [ for (final double i - in defaultPlaySpeedList) ...[ + in PlaySpeedList) ...[ MenuItemButton( onPressed: () async { await widget.setPlaybackSpeed(i); diff --git a/lib/pages/player/smallest_player_item_panel.dart b/lib/pages/player/smallest_player_item_panel.dart index 5560326c..bd7c5ba3 100644 --- a/lib/pages/player/smallest_player_item_panel.dart +++ b/lib/pages/player/smallest_player_item_panel.dart @@ -57,6 +57,7 @@ class SmallestPlayerItemPanel extends StatefulWidget { class _SmallestPlayerItemPanelState extends State { Box setting = GStorage.setting; late bool haEnable; + late List PlaySpeedList; late Animation topOffsetAnimation; late Animation bottomOffsetAnimation; late Animation leftOffsetAnimation; @@ -136,6 +137,7 @@ class _SmallestPlayerItemPanelState extends State { curve: Curves.easeInOut, )); haEnable = setting.get(SettingBoxKey.hAenable, defaultValue: true); + PlaySpeedList = setting.get(SettingBoxKey.PlaySpeedList, defaultValue: defaultPlaySpeedList_L); } Widget forwardIcon() { @@ -452,7 +454,7 @@ class _SmallestPlayerItemPanelState extends State { SubmenuButton( menuChildren: [ for (final double i - in defaultPlaySpeedList) ...[ + in PlaySpeedList) ...[ MenuItemButton( onPressed: () async { await widget.setPlaybackSpeed(i); diff --git a/lib/pages/settings/player_settings.dart b/lib/pages/settings/player_settings.dart index 260ad495..02058a0b 100644 --- a/lib/pages/settings/player_settings.dart +++ b/lib/pages/settings/player_settings.dart @@ -24,6 +24,7 @@ class _PlayerSettingsPageState extends State { late bool showPlayerError; late bool privateMode; late bool playerDebugMode; + late List PlaySpeedList; @override void initState() { @@ -39,6 +40,9 @@ class _PlayerSettingsPageState extends State { setting.get(SettingBoxKey.showPlayerError, defaultValue: true); playerDebugMode = setting.get(SettingBoxKey.playerDebugMode, defaultValue: false); + PlaySpeedList = + setting.get(SettingBoxKey.PlaySpeedList, defaultValue: defaultPlaySpeedList_L); + } void onBackPressed(BuildContext context) { @@ -161,7 +165,7 @@ class _PlayerSettingsPageState extends State { content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) { final List playSpeedList; - playSpeedList = defaultPlaySpeedList; + playSpeedList = PlaySpeedList; return Wrap( spacing: 8, runSpacing: Utils.isDesktop() ? 8 : 0, @@ -207,6 +211,67 @@ class _PlayerSettingsPageState extends State { }, child: const Text('默认设置'), ), + + TextButton( + onPressed: () async { + double newSpeed = defaultPlaySpeed; + + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('添加倍速'), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Text('输入你想要的视频倍速,例如:1.0'), + const SizedBox(height: 12), + TextField( + keyboardType: const TextInputType.numberWithOptions(decimal: true), + decoration: InputDecoration( + labelText: '自定义倍速', + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(6.0), + ), + ), + onChanged: (value) { + final parsed = double.tryParse(value); + if (parsed != null && parsed > 0 && parsed < 5) { + newSpeed = parsed; + } + }, + ), + ], + ), + actions: [ + TextButton( + onPressed: () => Navigator.pop(context), + child: const Text('取消'), + ), + TextButton( + onPressed: () { + PlaySpeedList.add(newSpeed); + updateDefaultPlaySpeed(newSpeed); + + setting.put( + SettingBoxKey.PlaySpeedList, + PlaySpeedList + ); + + setState(() {}); + + Navigator.pop(context); + }, + child: const Text('确认添加'), + ) + ], + ); + }, + ); + KazumiDialog.dismiss(); + }, + child: const Text('添加倍速'), + ), ], ); }); diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index bfe2d241..08e8c92f 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -107,7 +107,7 @@ const List mpvAnime4KShadersLite = [ ]; // 可选播放倍速 -const List defaultPlaySpeedList = [ +List defaultPlaySpeedList_L = [ 0.25, 0.5, 0.75, diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index a93dc9a0..f301338f 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -203,6 +203,7 @@ class SettingBoxKey { autoUpdate = 'autoUpdate', alwaysOntop = 'alwaysOntop', defaultPlaySpeed = 'defaultPlaySpeed', + PlaySpeedList = 'PlaySpeedList', danmakuEnhance = 'danmakuEnhance', danmakuBorder = 'danmakuBorder', danmakuOpacity = 'danmakuOpacity',