mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
feat: custom for/backward duration
Closes #366 Closes #601 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -759,6 +759,15 @@ List<SettingsModel> get playSettings => [
|
||||
setKey: SettingBoxKey.enableSlideFS,
|
||||
defaultVal: true,
|
||||
),
|
||||
_getVideoFilterSelectModel(
|
||||
context: Get.context!,
|
||||
title: '快进/快退时长',
|
||||
suffix: 's',
|
||||
key: SettingBoxKey.fastForBackwardDuration,
|
||||
values: [5, 10, 15],
|
||||
defaultValue: 10,
|
||||
isFilter: false,
|
||||
),
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.normal,
|
||||
title: '自动启用字幕',
|
||||
@@ -2479,19 +2488,23 @@ SettingsModel _getVideoFilterSelectModel({
|
||||
String? suffix,
|
||||
required String key,
|
||||
required List<int> values,
|
||||
int defaultValue = 0,
|
||||
bool isFilter = true,
|
||||
}) {
|
||||
int value = GStorage.setting.get(key, defaultValue: 0);
|
||||
int value = GStorage.setting.get(key, defaultValue: defaultValue);
|
||||
return SettingsModel(
|
||||
settingsType: SettingsType.normal,
|
||||
title: '$title过滤',
|
||||
title: '$title${isFilter ? '过滤' : ''}',
|
||||
leading: const Icon(Icons.timelapse_outlined),
|
||||
getSubtitle: () => '过滤掉$title小于「$value${suffix ?? ""}」的视频',
|
||||
getSubtitle: () => isFilter
|
||||
? '过滤掉$title小于「$value${suffix ?? ""}」的视频'
|
||||
: '当前$title:「$value${suffix ?? ""}」',
|
||||
onTap: (setState) async {
|
||||
var result = await showDialog<int>(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
title: '选择$title(0即不过滤)',
|
||||
title: '选择$title${isFilter ? '(0即不过滤)' : ''}',
|
||||
value: value,
|
||||
values: (values
|
||||
..addIf(!values.contains(value), value)
|
||||
|
||||
@@ -257,6 +257,7 @@ class PlPlayerController {
|
||||
late final enableSlideVolumeBrightness = GStorage.enableSlideVolumeBrightness;
|
||||
late final enableSlideFS = GStorage.enableSlideFS;
|
||||
late final enableDragSubtitle = GStorage.enableDragSubtitle;
|
||||
late final fastForBackwardDuration = GStorage.fastForBackwardDuration;
|
||||
|
||||
/// 弹幕权重
|
||||
int danmakuWeight = 0;
|
||||
|
||||
@@ -1704,6 +1704,8 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
|
||||
child: child,
|
||||
),
|
||||
child: BackwardSeekIndicator(
|
||||
duration:
|
||||
plPlayerController.fastForBackwardDuration,
|
||||
onSubmitted: (Duration value) {
|
||||
_mountSeekBackwardButton.value = false;
|
||||
final Player player = widget
|
||||
@@ -1733,6 +1735,8 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
|
||||
child: child,
|
||||
),
|
||||
child: ForwardSeekIndicator(
|
||||
duration:
|
||||
plPlayerController.fastForBackwardDuration,
|
||||
onSubmitted: (Duration value) {
|
||||
_mountSeekForwardButton.value = false;
|
||||
final Player player = widget
|
||||
|
||||
@@ -4,11 +4,14 @@ import 'package:flutter/material.dart';
|
||||
|
||||
class BackwardSeekIndicator extends StatefulWidget {
|
||||
// final void Function(Duration) onChanged;
|
||||
final void Function(Duration) onSubmitted;
|
||||
final ValueChanged<Duration> onSubmitted;
|
||||
final int duration;
|
||||
|
||||
const BackwardSeekIndicator({
|
||||
super.key,
|
||||
// required this.onChanged,
|
||||
required this.onSubmitted,
|
||||
required this.duration,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -16,15 +19,16 @@ class BackwardSeekIndicator extends StatefulWidget {
|
||||
}
|
||||
|
||||
class BackwardSeekIndicatorState extends State<BackwardSeekIndicator> {
|
||||
Duration value = const Duration(seconds: 10);
|
||||
late Duration duration;
|
||||
|
||||
Timer? timer;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
duration = Duration(seconds: widget.duration);
|
||||
timer = Timer(const Duration(milliseconds: 400), () {
|
||||
widget.onSubmitted.call(value);
|
||||
widget.onSubmitted.call(duration);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -37,12 +41,12 @@ class BackwardSeekIndicatorState extends State<BackwardSeekIndicator> {
|
||||
void increment() {
|
||||
timer?.cancel();
|
||||
timer = Timer(const Duration(milliseconds: 400), () {
|
||||
widget.onSubmitted.call(value);
|
||||
widget.onSubmitted.call(duration);
|
||||
});
|
||||
// widget.onChanged.call(value);
|
||||
// 重复点击 快退秒数累加10
|
||||
setState(() {
|
||||
value += const Duration(seconds: 10);
|
||||
duration += Duration(seconds: widget.duration);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -75,7 +79,7 @@ class BackwardSeekIndicatorState extends State<BackwardSeekIndicator> {
|
||||
),
|
||||
const SizedBox(height: 8.0),
|
||||
Text(
|
||||
'快退${value.inSeconds}秒',
|
||||
'快退${duration.inSeconds}秒',
|
||||
style: const TextStyle(
|
||||
fontSize: 12.0,
|
||||
color: Colors.white,
|
||||
|
||||
@@ -4,11 +4,14 @@ import 'package:flutter/material.dart';
|
||||
|
||||
class ForwardSeekIndicator extends StatefulWidget {
|
||||
// final void Function(Duration) onChanged;
|
||||
final void Function(Duration) onSubmitted;
|
||||
final ValueChanged<Duration> onSubmitted;
|
||||
final int duration;
|
||||
|
||||
const ForwardSeekIndicator({
|
||||
super.key,
|
||||
// required this.onChanged,
|
||||
required this.onSubmitted,
|
||||
required this.duration,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -16,15 +19,16 @@ class ForwardSeekIndicator extends StatefulWidget {
|
||||
}
|
||||
|
||||
class ForwardSeekIndicatorState extends State<ForwardSeekIndicator> {
|
||||
Duration value = const Duration(seconds: 10);
|
||||
late Duration duration;
|
||||
|
||||
Timer? timer;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
duration = Duration(seconds: widget.duration);
|
||||
timer = Timer(const Duration(milliseconds: 400), () {
|
||||
widget.onSubmitted.call(value);
|
||||
widget.onSubmitted.call(duration);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -37,12 +41,12 @@ class ForwardSeekIndicatorState extends State<ForwardSeekIndicator> {
|
||||
void increment() {
|
||||
timer?.cancel();
|
||||
timer = Timer(const Duration(milliseconds: 400), () {
|
||||
widget.onSubmitted.call(value);
|
||||
widget.onSubmitted.call(duration);
|
||||
});
|
||||
// widget.onChanged.call(value);
|
||||
// 重复点击 快进秒数累加10
|
||||
setState(() {
|
||||
value += const Duration(seconds: 10);
|
||||
duration += Duration(seconds: widget.duration);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -74,7 +78,7 @@ class ForwardSeekIndicatorState extends State<ForwardSeekIndicator> {
|
||||
),
|
||||
const SizedBox(height: 8.0),
|
||||
Text(
|
||||
'快进${value.inSeconds}秒',
|
||||
'快进${duration.inSeconds}秒',
|
||||
style: const TextStyle(
|
||||
fontSize: 12.0,
|
||||
color: Colors.white,
|
||||
|
||||
@@ -439,6 +439,9 @@ class GStorage {
|
||||
static bool get enableDragSubtitle => GStorage.setting
|
||||
.get(SettingBoxKey.enableDragSubtitle, defaultValue: false);
|
||||
|
||||
static int get fastForBackwardDuration => GStorage.setting
|
||||
.get(SettingBoxKey.fastForBackwardDuration, defaultValue: 10);
|
||||
|
||||
static List<double> get dynamicDetailRatio => List<double>.from(setting
|
||||
.get(SettingBoxKey.dynamicDetailRatio, defaultValue: [60.0, 40.0]));
|
||||
|
||||
@@ -720,6 +723,7 @@ class SettingBoxKey {
|
||||
liveQualityCellular = 'liveQualityCellular',
|
||||
appFontWeight = 'appFontWeight',
|
||||
enableDragSubtitle = 'enableDragSubtitle',
|
||||
fastForBackwardDuration = 'fastForBackwardDuration',
|
||||
|
||||
// Sponsor Block
|
||||
enableSponsorBlock = 'enableSponsorBlock',
|
||||
|
||||
Reference in New Issue
Block a user