mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-11 17:30:00 +02:00
feat: implement Live TV tab with grouped channels, pagination, and state management
This commit is contained in:
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();
|
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
|
/// Provider for VOD items (movies) grouped by category
|
||||||
final vodItemsProvider = FutureProvider.autoDispose((ref) async {
|
final vodItemsProvider = FutureProvider.autoDispose((ref) async {
|
||||||
final service = ref.watch(activeXtreamServiceProvider);
|
final service = ref.watch(activeXtreamServiceProvider);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_tabs = [
|
_tabs = [
|
||||||
const LiveTVTab(),
|
LiveTVTab(playlist: widget.playlist),
|
||||||
MoviesTab(playlist: widget.playlist),
|
MoviesTab(playlist: widget.playlist),
|
||||||
SeriesTab(playlist: widget.playlist),
|
SeriesTab(playlist: widget.playlist),
|
||||||
const SettingsTab(),
|
const SettingsTab(),
|
||||||
|
|||||||
@@ -4,10 +4,13 @@ import 'package:cached_network_image/cached_network_image.dart';
|
|||||||
import '../providers/xtream_provider.dart';
|
import '../providers/xtream_provider.dart';
|
||||||
import '../screens/player_screen.dart';
|
import '../screens/player_screen.dart';
|
||||||
import '../../../core/models/iptv_models.dart';
|
import '../../../core/models/iptv_models.dart';
|
||||||
|
import '../../../core/models/playlist_config.dart';
|
||||||
|
|
||||||
/// Live TV tab with group-based pagination
|
/// Live TV tab with group-based pagination
|
||||||
class LiveTVTab extends ConsumerStatefulWidget {
|
class LiveTVTab extends ConsumerStatefulWidget {
|
||||||
const LiveTVTab({super.key});
|
final PlaylistConfig playlist;
|
||||||
|
|
||||||
|
const LiveTVTab({super.key, required this.playlist});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ConsumerState<LiveTVTab> createState() => _LiveTVTabState();
|
ConsumerState<LiveTVTab> createState() => _LiveTVTabState();
|
||||||
@@ -26,7 +29,8 @@ class _LiveTVTabState extends ConsumerState<LiveTVTab>
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
super.build(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(
|
return channelsAsync.when(
|
||||||
data: (groupedChannels) {
|
data: (groupedChannels) {
|
||||||
|
|||||||
Reference in new issue
Block a user