ExpandedControls: integrate player state
This commit is contained in:
parent
447bdd576d
commit
2d6e52651f
2 changed files with 63 additions and 20 deletions
|
|
@ -108,7 +108,9 @@ class _ExpandedControlsState extends State<ExpandedControls> {
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: ExpandedControlsPlayer(),
|
child: ExpandedControlsPlayer(
|
||||||
|
castFramework: widget.castFramework,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,23 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_cast_framework/cast.dart';
|
||||||
|
|
||||||
class ExpandedControlsPlayer extends StatelessWidget {
|
class ExpandedControlsPlayer extends StatelessWidget {
|
||||||
final VoidCallback? onClosedCaptionPressed;
|
final FlutterCastFramework castFramework;
|
||||||
final VoidCallback? onPrevPressed;
|
|
||||||
final VoidCallback? onPlayPausePressed;
|
|
||||||
final VoidCallback? onNextPressed;
|
|
||||||
final VoidCallback? onVolumePressed;
|
|
||||||
|
|
||||||
ExpandedControlsPlayer({
|
ExpandedControlsPlayer({
|
||||||
this.onClosedCaptionPressed,
|
required this.castFramework,
|
||||||
this.onPrevPressed,
|
|
||||||
this.onPlayPausePressed,
|
|
||||||
this.onNextPressed,
|
|
||||||
this.onVolumePressed,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
void _onPlayClicked() {
|
||||||
|
final sessionManager = castFramework.castContext.sessionManager;
|
||||||
|
sessionManager.remoteMediaClient.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onPauseClicked() {
|
||||||
|
final sessionManager = castFramework.castContext.sessionManager;
|
||||||
|
sessionManager.remoteMediaClient.pause();
|
||||||
|
}
|
||||||
|
|
||||||
Widget _getIconButton(IconData icon, VoidCallback? onPressed) {
|
Widget _getIconButton(IconData icon, VoidCallback? onPressed) {
|
||||||
return IconButton(
|
return IconButton(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
|
|
@ -31,19 +34,57 @@ class ExpandedControlsPlayer extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _getPlayPauseButton(PlayerState playerState) {
|
||||||
|
IconData icon;
|
||||||
|
VoidCallback? callback;
|
||||||
|
|
||||||
|
switch (playerState) {
|
||||||
|
case PlayerState.unknown:
|
||||||
|
icon = Icons.play_circle;
|
||||||
|
break;
|
||||||
|
case PlayerState.idle:
|
||||||
|
icon = Icons.play_circle;
|
||||||
|
break;
|
||||||
|
case PlayerState.playing:
|
||||||
|
icon = Icons.pause_circle;
|
||||||
|
callback = _onPauseClicked;
|
||||||
|
break;
|
||||||
|
case PlayerState.paused:
|
||||||
|
icon = Icons.play_circle;
|
||||||
|
callback = _onPlayClicked;
|
||||||
|
break;
|
||||||
|
case PlayerState.buffering:
|
||||||
|
icon = Icons.pause_circle;
|
||||||
|
callback = _onPauseClicked;
|
||||||
|
break;
|
||||||
|
case PlayerState.loading:
|
||||||
|
icon = Icons.play_circle;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _getBigIconButton(icon, callback);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final sessionManager = castFramework.castContext.sessionManager;
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 36, vertical: 0),
|
padding: const EdgeInsets.symmetric(horizontal: 36, vertical: 0),
|
||||||
child: Row(
|
child: ValueListenableBuilder(
|
||||||
|
valueListenable: sessionManager.playerState,
|
||||||
|
builder: (context, value, child) {
|
||||||
|
final playerState = value as PlayerState;
|
||||||
|
return Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
children: [
|
children: [
|
||||||
_getIconButton(Icons.closed_caption, onClosedCaptionPressed),
|
_getIconButton(Icons.closed_caption, null),
|
||||||
_getIconButton(Icons.skip_previous, onPrevPressed),
|
_getIconButton(Icons.skip_previous, null),
|
||||||
_getBigIconButton(Icons.pause_circle, onPlayPausePressed),
|
_getPlayPauseButton(playerState),
|
||||||
_getIconButton(Icons.skip_next, onNextPressed),
|
_getIconButton(Icons.skip_next, null),
|
||||||
_getIconButton(Icons.volume_up, onVolumePressed),
|
_getIconButton(Icons.volume_up, null),
|
||||||
],
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue