mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-21 14:08:04 +02:00
feat: Add IPTV player screen supporting live, VOD, and series playback with interactive controls.
This commit is contained in:
1 parent
aa75347d0a
commit
e27fa6fec3
1 file changed
+21
-22
@@ -421,29 +421,24 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
// Bottom Controls
|
// Bottom Controls - styled like EPG
|
||||||
AnimatedPositioned(
|
AnimatedPositioned(
|
||||||
duration: const Duration(milliseconds: 200),
|
duration: const Duration(milliseconds: 200),
|
||||||
bottom: _showControls ? 0 : -150,
|
bottom: _showControls ? 130 : -100,
|
||||||
left: 0,
|
left: 0,
|
||||||
right: 0,
|
right: 0,
|
||||||
child: Container(
|
child: Center(
|
||||||
padding: const EdgeInsets.symmetric(
|
child: Container(
|
||||||
horizontal: 24, vertical: 24),
|
padding: const EdgeInsets.symmetric(
|
||||||
decoration: BoxDecoration(
|
horizontal: 24, vertical: 12),
|
||||||
gradient: LinearGradient(
|
decoration: BoxDecoration(
|
||||||
begin: Alignment.bottomCenter,
|
color: Colors.black.withOpacity(0.5),
|
||||||
end: Alignment.topCenter,
|
borderRadius: BorderRadius.circular(12),
|
||||||
colors: [
|
border: Border.all(
|
||||||
Colors.black.withOpacity(0.8),
|
color: Colors.white.withOpacity(0.1)),
|
||||||
Colors.transparent,
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
|
||||||
child: SafeArea(
|
|
||||||
top: false,
|
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
// Previous Channel
|
// Previous Channel
|
||||||
if (widget.channels != null &&
|
if (widget.channels != null &&
|
||||||
@@ -454,7 +449,9 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
|
|||||||
size: 48,
|
size: 48,
|
||||||
),
|
),
|
||||||
|
|
||||||
const SizedBox(width: 32),
|
if (widget.channels != null &&
|
||||||
|
widget.channels!.length > 1)
|
||||||
|
const SizedBox(width: 24),
|
||||||
|
|
||||||
// Play/Pause (Large)
|
// Play/Pause (Large)
|
||||||
_buildSimpleIconButton(
|
_buildSimpleIconButton(
|
||||||
@@ -462,12 +459,14 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
|
|||||||
? Icons.pause_rounded
|
? Icons.pause_rounded
|
||||||
: Icons.play_arrow_rounded,
|
: Icons.play_arrow_rounded,
|
||||||
onTap: _togglePlayPause,
|
onTap: _togglePlayPause,
|
||||||
size: 64,
|
size: 56,
|
||||||
iconSize: 36,
|
iconSize: 32,
|
||||||
highlighted: true,
|
highlighted: true,
|
||||||
),
|
),
|
||||||
|
|
||||||
const SizedBox(width: 32),
|
if (widget.channels != null &&
|
||||||
|
widget.channels!.length > 1)
|
||||||
|
const SizedBox(width: 24),
|
||||||
|
|
||||||
// Next Channel
|
// Next Channel
|
||||||
if (widget.channels != null &&
|
if (widget.channels != null &&
|
||||||
@@ -494,7 +493,7 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
|
|||||||
if (widget.streamType == StreamType.live)
|
if (widget.streamType == StreamType.live)
|
||||||
AnimatedPositioned(
|
AnimatedPositioned(
|
||||||
duration: const Duration(milliseconds: 200),
|
duration: const Duration(milliseconds: 200),
|
||||||
bottom: _showControls ? 120 : -140,
|
bottom: _showControls ? 24 : -140,
|
||||||
left: 24,
|
left: 24,
|
||||||
right: 24,
|
right: 24,
|
||||||
child: PointerInterceptor(
|
child: PointerInterceptor(
|
||||||
|
|||||||
Reference in new issue
Block a user