From 67efa82fe2f810a6b58bc35cc52eb7040cbd5690 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Fri, 25 Feb 2022 10:49:38 +0900 Subject: [PATCH] viewer: apply modified video quick actions without leaving --- lib/widgets/settings/video/video.dart | 73 +++++++++++--------- lib/widgets/viewer/overlay/bottom/video.dart | 39 ++++++----- 2 files changed, 62 insertions(+), 50 deletions(-) diff --git a/lib/widgets/settings/video/video.dart b/lib/widgets/settings/video/video.dart index 800ac3def..5417112fa 100644 --- a/lib/widgets/settings/video/video.dart +++ b/lib/widgets/settings/video/video.dart @@ -26,45 +26,52 @@ class VideoSection extends StatelessWidget { @override Widget build(BuildContext context) { - final currentShowVideos = context.select((s) => !s.hiddenFilters.contains(MimeFilter.video)); - final currentEnableVideoHardwareAcceleration = context.select((s) => s.enableVideoHardwareAcceleration); - final currentEnableVideoAutoPlay = context.select((s) => s.enableVideoAutoPlay); - final currentVideoLoopMode = context.select((s) => s.videoLoopMode); - final children = [ if (!standalonePage) - SwitchListTile( - value: currentShowVideos, - onChanged: (v) => settings.changeFilterVisibility({MimeFilter.video}, v), - title: Text(context.l10n.settingsVideoShowVideos), + Selector( + selector: (context, s) => !s.hiddenFilters.contains(MimeFilter.video), + builder: (context, current, child) => SwitchListTile( + value: current, + onChanged: (v) => settings.changeFilterVisibility({MimeFilter.video}, v), + title: Text(context.l10n.settingsVideoShowVideos), + ), ), const VideoActionsTile(), - SwitchListTile( - value: currentEnableVideoHardwareAcceleration, - onChanged: (v) => settings.enableVideoHardwareAcceleration = v, - title: Text(context.l10n.settingsVideoEnableHardwareAcceleration), + Selector( + selector: (context, s) => s.enableVideoHardwareAcceleration, + builder: (context, current, child) => SwitchListTile( + value: current, + onChanged: (v) => settings.enableVideoHardwareAcceleration = v, + title: Text(context.l10n.settingsVideoEnableHardwareAcceleration), + ), ), - SwitchListTile( - value: currentEnableVideoAutoPlay, - onChanged: (v) => settings.enableVideoAutoPlay = v, - title: Text(context.l10n.settingsVideoEnableAutoPlay), + Selector( + selector: (context, s) => s.enableVideoAutoPlay, + builder: (context, current, child) => SwitchListTile( + value: current, + onChanged: (v) => settings.enableVideoAutoPlay = v, + title: Text(context.l10n.settingsVideoEnableAutoPlay), + ), ), - ListTile( - title: Text(context.l10n.settingsVideoLoopModeTile), - subtitle: Text(currentVideoLoopMode.getName(context)), - onTap: () async { - final value = await showDialog( - context: context, - builder: (context) => AvesSelectionDialog( - initialValue: currentVideoLoopMode, - options: Map.fromEntries(VideoLoopMode.values.map((v) => MapEntry(v, v.getName(context)))), - title: context.l10n.settingsVideoLoopModeTitle, - ), - ); - if (value != null) { - settings.videoLoopMode = value; - } - }, + Selector( + selector: (context, s) => s.videoLoopMode, + builder: (context, current, child) => ListTile( + title: Text(context.l10n.settingsVideoLoopModeTile), + subtitle: Text(current.getName(context)), + onTap: () async { + final value = await showDialog( + context: context, + builder: (context) => AvesSelectionDialog( + initialValue: current, + options: Map.fromEntries(VideoLoopMode.values.map((v) => MapEntry(v, v.getName(context)))), + title: context.l10n.settingsVideoLoopModeTitle, + ), + ); + if (value != null) { + settings.videoLoopMode = value; + } + }, + ), ), const SubtitleThemeTile(), ]; diff --git a/lib/widgets/viewer/overlay/bottom/video.dart b/lib/widgets/viewer/overlay/bottom/video.dart index 564325bd5..0d7b85e67 100644 --- a/lib/widgets/viewer/overlay/bottom/video.dart +++ b/lib/widgets/viewer/overlay/bottom/video.dart @@ -85,23 +85,28 @@ class _VideoControlOverlayState extends State with SingleTi builder: (context, mqWidth, child) { final buttonWidth = OverlayButton.getSize(context); final availableCount = ((mqWidth - outerPadding * 2) / (buttonWidth + innerPadding)).floor(); - final quickActions = settings.videoQuickActions.take(availableCount - 1).toList(); - final menuActions = VideoActions.all.where((action) => !quickActions.contains(action)).toList(); - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - _ButtonRow( - quickActions: quickActions, - menuActions: menuActions, - scale: scale, - controller: controller, - onActionSelected: widget.onActionSelected, - onActionMenuOpened: widget.onActionMenuOpened, - ), - const SizedBox(height: 8), - _buildProgressBar(), - ], + return Selector>( + selector: (context, s) => s.videoQuickActions, + builder: (context, videoQuickActions, child) { + final quickActions = videoQuickActions.take(availableCount - 1).toList(); + final menuActions = VideoActions.all.where((action) => !quickActions.contains(action)).toList(); + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + _ButtonRow( + quickActions: quickActions, + menuActions: menuActions, + scale: scale, + controller: controller, + onActionSelected: widget.onActionSelected, + onActionMenuOpened: widget.onActionMenuOpened, + ), + const SizedBox(height: 8), + _buildProgressBar(), + ], + ); + }, ); }, );