feat: add IPTV player screen supporting live, VOD, and series stream playback via embedded web players.

This commit is contained in:
Michael committed 2026-01-01 19:16:51 +01:00
1 parent 1547b376e0
commit e74aa822ad
1 file changed
+23 -23
+23 -23
View File
@@ -59,8 +59,6 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
bool _isSeeking = false; bool _isSeeking = false;
String _viewId = 'iptv-player'; String _viewId = 'iptv-player';
String? _currentStreamUrl; String? _currentStreamUrl;
String _statusMessage = 'Loading...';
String? _errorMessage;
String? _errorMessage; String? _errorMessage;
bool _isMuted = false; bool _isMuted = false;
bool _ignoreStatusUpdates = false; bool _ignoreStatusUpdates = false;
@@ -730,28 +728,30 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
double iconSize = 24, double iconSize = 24,
}) { }) {
// Simplified button with direct Material/InkWell and PointerInterceptor // Simplified button with direct Material/InkWell and PointerInterceptor
// Simplified button with direct Material/InkWell // Simplified button with direct Material/InkWell and PointerInterceptor
// Note: PointerInterceptor is handled by the parent container // We wrap the specific button to ensure it catches events over the iframe
return Material( return PointerInterceptor(
color: transparent ? Colors.transparent : Colors.white.withOpacity(0.1), child: Material(
shape: const CircleBorder(), color: transparent ? Colors.transparent : Colors.white.withOpacity(0.1),
child: InkWell( shape: const CircleBorder(),
onTap: () { child: InkWell(
print('[PlayerScreen] Button tapped: $icon'); onTap: () {
onTap(); print('[PlayerScreen] Button tapped: $icon');
}, onTap();
customBorder: const CircleBorder(), },
child: Container( customBorder: const CircleBorder(),
width: size, child: Container(
height: size, width: size,
alignment: Alignment.center, height: size,
decoration: BoxDecoration( alignment: Alignment.center,
shape: BoxShape.circle, decoration: BoxDecoration(
border: transparent shape: BoxShape.circle,
? null border: transparent
: Border.all(color: Colors.white.withOpacity(0.1)), ? null
: Border.all(color: Colors.white.withOpacity(0.1)),
),
child: Icon(icon, color: Colors.white, size: iconSize),
), ),
child: Icon(icon, color: Colors.white, size: iconSize),
), ),
), ),
); );