From 6eed2352995a20adff2463f9f7d8b7824534f98f Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Sat, 6 Dec 2025 00:20:31 +0100 Subject: [PATCH] feat: implement Live TV tab with grouped channels, pagination, and state management --- lib/features/iptv/providers/xtream_provider.dart | 6 ++++++ lib/features/iptv/screens/dashboard_screen.dart | 2 +- lib/features/iptv/widgets/live_tv_tab.dart | 8 ++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/features/iptv/providers/xtream_provider.dart b/lib/features/iptv/providers/xtream_provider.dart index 9fbc690..f92f72d 100644 --- a/lib/features/iptv/providers/xtream_provider.dart +++ b/lib/features/iptv/providers/xtream_provider.dart @@ -38,6 +38,12 @@ final liveChannelsProvider = FutureProvider.autoDispose((ref) async { return await service.getLiveChannels(); }); +/// Provider for live TV channels by playlist (family provider) +final liveChannelsByPlaylistProvider = FutureProvider.family.autoDispose((ref, PlaylistConfig playlist) async { + final service = ref.watch(xtreamServiceProvider(playlist)); + return await service.getLiveChannels(); +}); + /// Provider for VOD items (movies) grouped by category final vodItemsProvider = FutureProvider.autoDispose((ref) async { final service = ref.watch(activeXtreamServiceProvider); diff --git a/lib/features/iptv/screens/dashboard_screen.dart b/lib/features/iptv/screens/dashboard_screen.dart index a32d88a..745414c 100644 --- a/lib/features/iptv/screens/dashboard_screen.dart +++ b/lib/features/iptv/screens/dashboard_screen.dart @@ -28,7 +28,7 @@ class _DashboardScreenState extends ConsumerState { void initState() { super.initState(); _tabs = [ - const LiveTVTab(), + LiveTVTab(playlist: widget.playlist), MoviesTab(playlist: widget.playlist), SeriesTab(playlist: widget.playlist), const SettingsTab(), diff --git a/lib/features/iptv/widgets/live_tv_tab.dart b/lib/features/iptv/widgets/live_tv_tab.dart index 6d7795c..59412f0 100644 --- a/lib/features/iptv/widgets/live_tv_tab.dart +++ b/lib/features/iptv/widgets/live_tv_tab.dart @@ -4,10 +4,13 @@ import 'package:cached_network_image/cached_network_image.dart'; import '../providers/xtream_provider.dart'; import '../screens/player_screen.dart'; import '../../../core/models/iptv_models.dart'; +import '../../../core/models/playlist_config.dart'; /// Live TV tab with group-based pagination class LiveTVTab extends ConsumerStatefulWidget { - const LiveTVTab({super.key}); + final PlaylistConfig playlist; + + const LiveTVTab({super.key, required this.playlist}); @override ConsumerState createState() => _LiveTVTabState(); @@ -26,7 +29,8 @@ class _LiveTVTabState extends ConsumerState Widget build(BuildContext context) { super.build(context); - final channelsAsync = ref.watch(liveChannelsProvider); + final service = ref.watch(xtreamServiceProvider(widget.playlist)); + final channelsAsync = ref.watch(liveChannelsByPlaylistProvider(widget.playlist)); return channelsAsync.when( data: (groupedChannels) {