Initial commit

This commit is contained in:
admin1
2026-07-14 11:11:36 +08:00
commit 656499cf94
604 changed files with 119518 additions and 0 deletions
@@ -0,0 +1,194 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../providers/player_engine_override_provider.dart';
import '../../../providers/player_settings_provider.dart';
import '../../../providers/version_priority_provider.dart';
import '../../player/gestures/gesture_action.dart' as g;
import '../widgets/player_engine_row.dart';
import '../widgets/settings_card.dart';
import '../widgets/settings_rows.dart';
import '../widgets/version_priority_section.dart';
class PlaybackSettingsTab extends ConsumerWidget {
const PlaybackSettingsTab({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final playerSettings = ref.watch(playerSettingsProvider);
final versionPriority = ref.watch(versionPriorityProvider);
final engineOverride = ref.watch(playerEngineOverrideProvider);
final theme = Theme.of(context);
return SettingsTabScroll(
children: [
engineOverride.when(
data: (current) => SettingsCard(
children: [
PlayerEngineRow(
value: current,
onChanged: (v) => ref
.read(playerEngineOverrideProvider.notifier)
.setOverride(v),
),
],
),
loading: () => const SizedBox.shrink(),
error: (e, _) => settingsLoadError(e),
),
playerSettings.when(
data: (data) => Column(
children: [
SettingsCard(
children: [
SeekDurationRow(
title: '快退时间',
seconds: data.seekBackwardSeconds,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setSeekBackwardSeconds(v),
),
SeekDurationRow(
title: '快进时间',
seconds: data.seekForwardSeconds,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setSeekForwardSeconds(v),
),
],
),
if (Platform.isAndroid)
SettingsCard(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(16, 10, 16, 4),
child: Text(
'触控',
style: theme.textTheme.labelLarge?.copyWith(
fontWeight: FontWeight.w600,
),
),
),
GestureSpeedRow(
title: '长按左侧倍速',
value: data.keyboardHoldLeftSpeed,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setKeyboardHoldLeftSpeed(v),
),
GestureSpeedRow(
title: '长按右侧倍速',
value: data.keyboardHoldRightSpeed,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setKeyboardHoldRightSpeed(v),
),
],
)
else ...[
SettingsCard(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(16, 10, 16, 4),
child: Text(
'键盘',
style: theme.textTheme.labelLarge?.copyWith(
fontWeight: FontWeight.w600,
),
),
),
GestureSpeedRow(
title: '长按左方向键倍速',
value: data.keyboardHoldLeftSpeed,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setKeyboardHoldLeftSpeed(v),
),
GestureSpeedRow(
title: '长按右方向键倍速',
value: data.keyboardHoldRightSpeed,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setKeyboardHoldRightSpeed(v),
),
],
),
SettingsCard(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(16, 10, 16, 4),
child: Text(
'鼠标',
style: theme.textTheme.labelLarge?.copyWith(
fontWeight: FontWeight.w600,
),
),
),
GestureActionRow(
title: '左键单击',
kind: g.GestureKind.leftClick,
value: data.mouseLeftClickAction,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setMouseLeftClickAction(v),
),
GestureActionRow(
title: '左键双击',
kind: g.GestureKind.leftDoubleClick,
value: data.mouseLeftDoubleClickAction,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setMouseLeftDoubleClickAction(v),
),
GestureActionRow(
title: '右键单击',
kind: g.GestureKind.rightClick,
value: data.mouseRightClickAction,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setMouseRightClickAction(v),
),
GestureActionRow(
title: '右键双击',
kind: g.GestureKind.rightDoubleClick,
value: data.mouseRightDoubleClickAction,
onChanged: (v) => ref
.read(playerSettingsProvider.notifier)
.setMouseRightDoubleClickAction(v),
),
],
),
],
],
),
loading: () => const SizedBox.shrink(),
error: (e, _) => settingsLoadError(e),
),
versionPriority.when(
data: (data) => SettingsCard(
children: [
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 12,
),
child: VersionPrioritySection(
activePriorities: data.activePriorities,
onToggle: (p) =>
ref.read(versionPriorityProvider.notifier).toggle(p),
onReorder: (list) => ref
.read(versionPriorityProvider.notifier)
.setPriorities(list),
),
),
],
),
loading: () => const SizedBox.shrink(),
error: (e, _) => settingsLoadError(e),
),
],
);
}
}