feat: implement Live TV tab with grouped channels, pagination, and state management

This commit is contained in:
Michael committed 2025-12-06 00:20:31 +01:00
1 parent 4e97c8aefb
commit e05b63cbc7
3 files changed
+13 -3

No files matched your search

@@ -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);
@@ -28,7 +28,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
void initState() {
super.initState();
_tabs = [
const LiveTVTab(),
LiveTVTab(playlist: widget.playlist),
MoviesTab(playlist: widget.playlist),
SeriesTab(playlist: widget.playlist),
const SettingsTab(),
+6 -2
View File
@@ -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<LiveTVTab> createState() => _LiveTVTabState();
@@ -26,7 +29,8 @@ class _LiveTVTabState extends ConsumerState<LiveTVTab>
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) {