feat: previous/next buttons on mobile controls

close #130
This commit is contained in:
edde746
2025-12-20 15:07:41 +01:00
parent d340536578
commit c018cfef03
2 changed files with 26 additions and 0 deletions
@@ -32,6 +32,8 @@ class MobileVideoControls extends StatelessWidget {
final VoidCallback? onCancelAutoHide;
final VoidCallback? onStartAutoHide;
final VoidCallback? onBack;
final VoidCallback? onNext;
final VoidCallback? onPrevious;
/// Whether the user can control playback (false in host-only mode for non-host).
final bool canControl;
@@ -51,6 +53,8 @@ class MobileVideoControls extends StatelessWidget {
this.onCancelAutoHide,
this.onStartAutoHide,
this.onBack,
this.onNext,
this.onPrevious,
this.canControl = true,
});
@@ -102,6 +106,16 @@ class MobileVideoControls extends StatelessWidget {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// Previous episode button (hidden when unavailable)
if (onPrevious != null) ...[
_buildCircularButton(
semanticLabel: t.videoControls.previousButton,
icon: Symbols.skip_previous_rounded,
iconSize: 48,
onPressed: onPrevious!,
),
const SizedBox(width: 16),
],
_buildCircularButton(
semanticLabel: t.videoControls.seekBackwardButton(seconds: seekTimeSmall),
icon: getReplayIcon(seekTimeSmall),
@@ -136,6 +150,16 @@ class MobileVideoControls extends StatelessWidget {
onSeekCompleted?.call(newPosition);
},
),
// Next episode button (hidden when unavailable)
if (onNext != null) ...[
const SizedBox(width: 16),
_buildCircularButton(
semanticLabel: t.videoControls.nextButton,
icon: Symbols.skip_next_rounded,
iconSize: 48,
onPressed: onNext!,
),
],
],
);
},
@@ -1225,6 +1225,8 @@ class _PlexVideoControlsState extends State<PlexVideoControls> with WindowListen
onCancelAutoHide: () => _hideTimer?.cancel(),
onStartAutoHide: _startHideTimer,
onBack: widget.onBack,
onNext: widget.onNext,
onPrevious: widget.onPrevious,
canControl: widget.canControl,
),
)