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

View file

@ -85,23 +85,28 @@ class _VideoControlOverlayState extends State<VideoControlOverlay> with SingleTi
builder: (context, mqWidth, child) { builder: (context, mqWidth, child) {
final buttonWidth = OverlayButton.getSize(context); final buttonWidth = OverlayButton.getSize(context);
final availableCount = ((mqWidth - outerPadding * 2) / (buttonWidth + innerPadding)).floor(); final availableCount = ((mqWidth - outerPadding * 2) / (buttonWidth + innerPadding)).floor();
final quickActions = settings.videoQuickActions.take(availableCount - 1).toList(); return Selector<Settings, List<VideoAction>>(
final menuActions = VideoActions.all.where((action) => !quickActions.contains(action)).toList(); selector: (context, s) => s.videoQuickActions,
return Column( builder: (context, videoQuickActions, child) {
mainAxisSize: MainAxisSize.min, final quickActions = videoQuickActions.take(availableCount - 1).toList();
crossAxisAlignment: CrossAxisAlignment.end, final menuActions = VideoActions.all.where((action) => !quickActions.contains(action)).toList();
children: [ return Column(
_ButtonRow( mainAxisSize: MainAxisSize.min,
quickActions: quickActions, crossAxisAlignment: CrossAxisAlignment.end,
menuActions: menuActions, children: [
scale: scale, _ButtonRow(
controller: controller, quickActions: quickActions,
onActionSelected: widget.onActionSelected, menuActions: menuActions,
onActionMenuOpened: widget.onActionMenuOpened, scale: scale,
), controller: controller,
const SizedBox(height: 8), onActionSelected: widget.onActionSelected,
_buildProgressBar(), onActionMenuOpened: widget.onActionMenuOpened,
], ),
const SizedBox(height: 8),
_buildProgressBar(),
],
);
},
); );
}, },
); );