Save and restore video player settings

This commit is contained in:
Ming Ming 2022-12-26 18:03:33 +08:00
parent 34ee7bbe19
commit 5468658bc2
2 changed files with 35 additions and 6 deletions

View file

@ -283,6 +283,20 @@ class Pref {
Future<bool> setSeedColor(int value) => _set<int>( Future<bool> setSeedColor(int value) => _set<int>(
PrefKey.seedColor, value, (key, value) => provider.setInt(key, value)); PrefKey.seedColor, value, (key, value) => provider.setInt(key, value));
bool? isVideoPlayerMute() => provider.getBool(PrefKey.isVideoPlayerMute);
bool isVideoPlayerMuteOr([bool def = false]) => isVideoPlayerMute() ?? def;
Future<bool> setVideoPlayerMute(bool value) => _set<bool>(
PrefKey.isVideoPlayerMute,
value,
(key, value) => provider.setBool(key, value));
bool? isVideoPlayerLoop() => provider.getBool(PrefKey.isVideoPlayerLoop);
bool isVideoPlayerLoopOr([bool def = false]) => isVideoPlayerLoop() ?? def;
Future<bool> setVideoPlayerLoop(bool value) => _set<bool>(
PrefKey.isVideoPlayerLoop,
value,
(key, value) => provider.setBool(key, value));
Future<bool> _set<T>(PrefKey key, T value, Future<bool> _set<T>(PrefKey key, T value,
Future<bool> Function(PrefKey key, T value) setFn) async { Future<bool> Function(PrefKey key, T value) setFn) async {
if (await setFn(key, value)) { if (await setFn(key, value)) {
@ -597,6 +611,8 @@ enum PrefKey {
hasShownSaveEditResultDialog, hasShownSaveEditResultDialog,
isSlideshowReverse, isSlideshowReverse,
seedColor, seedColor,
isVideoPlayerMute,
isVideoPlayerLoop,
// account pref // account pref
isEnableFaceRecognitionApp, isEnableFaceRecognitionApp,
@ -676,6 +692,10 @@ extension on PrefKey {
return "isSlideshowReverse"; return "isSlideshowReverse";
case PrefKey.seedColor: case PrefKey.seedColor:
return "seedColor"; return "seedColor";
case PrefKey.isVideoPlayerMute:
return "isVideoPlayerMute";
case PrefKey.isVideoPlayerLoop:
return "isVideoPlayerLoop";
// account pref // account pref
case PrefKey.isEnableFaceRecognitionApp: case PrefKey.isEnableFaceRecognitionApp:

View file

@ -1,9 +1,13 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:kiwi/kiwi.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart'; import 'package:nc_photos/account.dart';
import 'package:nc_photos/api/api.dart'; import 'package:nc_photos/api/api.dart';
import 'package:nc_photos/api/api_util.dart' as api_util; import 'package:nc_photos/api/api_util.dart' as api_util;
import 'package:nc_photos/app_localizations.dart'; import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/di_container.dart';
import 'package:nc_photos/entity/file_descriptor.dart'; import 'package:nc_photos/entity/file_descriptor.dart';
import 'package:nc_photos/exception_util.dart' as exception_util; import 'package:nc_photos/exception_util.dart' as exception_util;
import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/k.dart' as k;
@ -106,6 +110,9 @@ class _VideoViewerState extends State<VideoViewer>
}, },
); );
await _controller.initialize(); await _controller.initialize();
final c = KiwiContainer().resolve<DiContainer>();
unawaited(_controller.setVolume(c.pref.isVideoPlayerMuteOr() ? 0 : 1));
unawaited(_controller.setLooping(c.pref.isVideoPlayerLoopOr()));
widget.onLoaded?.call(); widget.onLoaded?.call();
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
if (_key.currentContext != null) { if (_key.currentContext != null) {
@ -283,13 +290,12 @@ class _VideoViewerState extends State<VideoViewer>
} }
void _onVolumnPressed() { void _onVolumnPressed() {
final willMute = _controller.value.volume != 0;
setState(() { setState(() {
if (_controller.value.volume == 0) { _controller.setVolume(willMute ? 0 : 1);
_controller.setVolume(1);
} else {
_controller.setVolume(0);
}
}); });
final c = KiwiContainer().resolve<DiContainer>();
c.pref.setVideoPlayerMute(willMute);
} }
void _play() { void _play() {
@ -338,9 +344,12 @@ class _LoopToggleState extends State<_LoopToggle> {
child: InkWell( child: InkWell(
borderRadius: const BorderRadius.all(Radius.circular(32)), borderRadius: const BorderRadius.all(Radius.circular(32)),
onTap: () { onTap: () {
final willLoop = !widget.controller.value.isLooping;
setState(() { setState(() {
widget.controller.setLooping(!widget.controller.value.isLooping); widget.controller.setLooping(willLoop);
}); });
final c = KiwiContainer().resolve<DiContainer>();
c.pref.setVideoPlayerLoop(willLoop);
}, },
child: Padding( child: Padding(
padding: const EdgeInsets.all(4), padding: const EdgeInsets.all(4),