feat: add IPTV player screen with support for live, VOD, and series streams using iframe-based playback.

This commit is contained in:
Michael committed 2026-01-01 19:27:32 +01:00
1 parent b6a0016c00
commit 440f15faa6
1 file changed
+6 -6
+6 -6
View File
@@ -348,6 +348,7 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
top: _showControls ? 24 : -100, top: _showControls ? 24 : -100,
left: 24, left: 24,
right: 24, right: 24,
child: PointerInterceptor(
child: GlassContainer( child: GlassContainer(
height: 72, height: 72,
borderRadius: 24, borderRadius: 24,
@@ -402,6 +403,7 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
), ),
), ),
), ),
),
// Bottom Controls for Live TV (Channel Zapping + Play/Pause) // Bottom Controls for Live TV (Channel Zapping + Play/Pause)
if (_showControls) if (_showControls)
@@ -410,6 +412,7 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
bottom: 40, bottom: 40,
left: 0, left: 0,
right: 0, right: 0,
child: PointerInterceptor(
child: Center( child: Center(
child: GlassContainer( child: GlassContainer(
borderRadius: 30, borderRadius: 30,
@@ -457,6 +460,7 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
), ),
), ),
), ),
),
// EPG Overlay // EPG Overlay
if (widget.streamType == StreamType.live) if (widget.streamType == StreamType.live)
@@ -724,11 +728,8 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
double size = 48, double size = 48,
double iconSize = 24, double iconSize = 24,
}) { }) {
// Simplified button with direct Material/InkWell and PointerInterceptor // Button with direct Material/InkWell - PointerInterceptor is on outer container
// Simplified button with direct Material/InkWell and PointerInterceptor return Material(
// We wrap the specific button to ensure it catches events over the iframe
return PointerInterceptor(
child: Material(
color: transparent ? Colors.transparent : Colors.white.withOpacity(0.1), color: transparent ? Colors.transparent : Colors.white.withOpacity(0.1),
shape: const CircleBorder(), shape: const CircleBorder(),
child: InkWell( child: InkWell(
@@ -750,7 +751,6 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
child: Icon(icon, color: Colors.white, size: iconSize), child: Icon(icon, color: Colors.white, size: iconSize),
), ),
), ),
),
); );
} }
} }