Initial commit
This commit is contained in:
@@ -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),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user