mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-11 17:30:00 +02:00
Onglet Enregistrements : - TabBar à 3 vues : Guide TV (programmer depuis l'EPG), liste des enregistrements, Season Passes. _EpgGuideView et _SeasonPassesView (~800 lignes fonctionnelles) n'étaient plus instanciés depuis une refonte — programmer depuis le guide et les enregistrements récurrents étaient devenus inaccessibles - Confirmation avant suppression d'un enregistrement (la corbeille supprimait immédiatement, sans retour ni annulation) - Erreur de chargement avec bouton Réessayer Favoris : - Bouton cœur sur les tuiles chaînes desktop (overlay) et mobile : toggleFavorite() n'était appelé nulle part, le filtre « Favoris » affichait toujours une liste vide Reprise de lecture : - Films et épisodes lisent playbackPositionsProvider et passent startTime au player : les positions étaient écrites mais jamais relues, tout repartait de zéro - Plus de sauvegarde de position en live (une entrée bidon par chaîne zappée) Mobile : - 5e onglet REC réutilisant RecordingsTab - IndexedStack au lieu du switch : les onglets conservent scroll et catalogues chargés (aligné sur le dashboard desktop) Dashboard : - Menu profil sur l'avatar de la sidebar (nom d'utilisateur + déconnexion) : le bouton était mort, aucune déconnexion possible depuis le dashboard desktop - Erreur de chargement des chaînes avec bouton Réessayer Validé : flutter analyze (202 issues, identique à la baseline main, 0 erreur/warning), flutter test (OK), flutter build web --release (OK). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015oEu9QayWsw7hCKhenxgVa
55 lines
1.7 KiB
Dart
55 lines
1.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import '../../../../core/models/playlist_config.dart';
|
|
import '../../../widgets/mobile_scaffold.dart';
|
|
import '../../../theme/mobile_theme.dart';
|
|
import '../../../../features/iptv/widgets/recordings_tab.dart';
|
|
import '../widgets/mobile_live_tv_tab.dart';
|
|
import '../widgets/mobile_movies_tab.dart';
|
|
import '../widgets/mobile_series_tab.dart';
|
|
import '../widgets/mobile_settings_tab.dart';
|
|
|
|
class MobileDashboardScreen extends ConsumerStatefulWidget {
|
|
final PlaylistConfig playlist;
|
|
|
|
const MobileDashboardScreen({
|
|
super.key,
|
|
required this.playlist,
|
|
});
|
|
|
|
@override
|
|
ConsumerState<MobileDashboardScreen> createState() => _MobileDashboardScreenState();
|
|
}
|
|
|
|
class _MobileDashboardScreenState extends ConsumerState<MobileDashboardScreen> {
|
|
int _currentIndex = 0;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Theme(
|
|
data: MobileTheme.darkTheme,
|
|
child: MobileScaffold(
|
|
currentIndex: _currentIndex,
|
|
onIndexChanged: (index) {
|
|
setState(() {
|
|
_currentIndex = index;
|
|
});
|
|
},
|
|
// IndexedStack conserve l'état des onglets (position de scroll,
|
|
// catalogues chargés) : l'ancien switch reconstruisait tout à chaque
|
|
// changement d'onglet. Même approche que le dashboard desktop.
|
|
child: IndexedStack(
|
|
index: _currentIndex,
|
|
children: [
|
|
MobileLiveTVTab(playlist: widget.playlist),
|
|
MobileMoviesTab(playlist: widget.playlist),
|
|
MobileSeriesTab(playlist: widget.playlist),
|
|
RecordingsTab(playlist: widget.playlist),
|
|
const MobileSettingsTab(),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|