viewer: apply modified video quick actions without leaving

This commit is contained in:
Thibault Deckers 2022-02-25 10:49:38 +09:00
parent 24fcb20616
commit 67efa82fe2
2 changed files with 62 additions and 50 deletions

View file

@ -26,37 +26,43 @@ class VideoSection extends StatelessWidget {
@override
Widget build(BuildContext context) {
final currentShowVideos = context.select<Settings, bool>((s) => !s.hiddenFilters.contains(MimeFilter.video));
final currentEnableVideoHardwareAcceleration = context.select<Settings, bool>((s) => s.enableVideoHardwareAcceleration);
final currentEnableVideoAutoPlay = context.select<Settings, bool>((s) => s.enableVideoAutoPlay);
final currentVideoLoopMode = context.select<Settings, VideoLoopMode>((s) => s.videoLoopMode);
final children = [
if (!standalonePage)
SwitchListTile(
value: currentShowVideos,
Selector<Settings, bool>(
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,
Selector<Settings, bool>(
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,
),
Selector<Settings, bool>(
selector: (context, s) => s.enableVideoAutoPlay,
builder: (context, current, child) => SwitchListTile(
value: current,
onChanged: (v) => settings.enableVideoAutoPlay = v,
title: Text(context.l10n.settingsVideoEnableAutoPlay),
),
ListTile(
),
Selector<Settings, VideoLoopMode>(
selector: (context, s) => s.videoLoopMode,
builder: (context, current, child) => ListTile(
title: Text(context.l10n.settingsVideoLoopModeTile),
subtitle: Text(currentVideoLoopMode.getName(context)),
subtitle: Text(current.getName(context)),
onTap: () async {
final value = await showDialog<VideoLoopMode>(
context: context,
builder: (context) => AvesSelectionDialog<VideoLoopMode>(
initialValue: currentVideoLoopMode,
initialValue: current,
options: Map.fromEntries(VideoLoopMode.values.map((v) => MapEntry(v, v.getName(context)))),
title: context.l10n.settingsVideoLoopModeTitle,
),
@ -66,6 +72,7 @@ class VideoSection extends StatelessWidget {
}
},
),
),
const SubtitleThemeTile(),
];

View file

@ -85,7 +85,10 @@ class _VideoControlOverlayState extends State<VideoControlOverlay> 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();
return Selector<Settings, List<VideoAction>>(
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,
@ -105,6 +108,8 @@ class _VideoControlOverlayState extends State<VideoControlOverlay> with SingleTi
);
},
);
},
);
}
return TooltipTheme(