mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-24 15:38:04 +02:00
Multi-IPTV : changer d'IPTV depuis le rail reste sur le tableau de bord
La route /dashboard faisait ref.watch(selectedPlaylistProvider) avec le ref du routerProvider : le GoRouter entier dépendait de la playlist. Un choix dans le sélecteur du rail recréait le routeur, reparti de /login puis redirigé vers /playlists. Un Consumer limite la reconstruction à la route, et une clé par IPTV réinitialise les onglets, qui ne chargent leur catalogue qu'en initState. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ccd983d968
commit
a6322b57b8
1 file changed
+27
-14
@@ -72,21 +72,34 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/dashboard',
|
path: '/dashboard',
|
||||||
builder: (context, state) {
|
// Le `ref` du routeur ne doit pas surveiller la playlist : un
|
||||||
final playlist = ref.watch(selectedPlaylistProvider);
|
// `ref.watch` ici rend `routerProvider` dépendant de
|
||||||
if (playlist == null) {
|
// `selectedPlaylistProvider`, si bien que changer d'IPTV depuis le
|
||||||
return const Scaffold(
|
// tableau de bord recréait le GoRouter, reparti de `/login` puis
|
||||||
body: ThemedLoading(),
|
// redirigé vers `/playlists`. Le `Consumer` limite la reconstruction
|
||||||
);
|
// à cette seule route.
|
||||||
}
|
builder: (context, state) => Consumer(
|
||||||
|
builder: (context, ref, _) {
|
||||||
|
final playlist = ref.watch(selectedPlaylistProvider);
|
||||||
|
if (playlist == null) {
|
||||||
|
return const Scaffold(
|
||||||
|
body: ThemedLoading(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Adaptive layout without forcing a router rebuild on every pixel change
|
// Une clé par IPTV : les onglets chargent leur catalogue dans
|
||||||
final isMobile = MediaQuery.sizeOf(context).width < 768;
|
// `initState` et ignorent un changement de `playlist`. Sans elle,
|
||||||
if (isMobile) {
|
// le tableau de bord garderait le contenu de l'IPTV précédente.
|
||||||
return MobileDashboardScreen(playlist: playlist);
|
final key = ValueKey(playlist.id);
|
||||||
}
|
|
||||||
return DashboardScreen(playlist: playlist);
|
// Adaptive layout without forcing a router rebuild on every pixel change
|
||||||
},
|
final isMobile = MediaQuery.sizeOf(context).width < 768;
|
||||||
|
if (isMobile) {
|
||||||
|
return MobileDashboardScreen(key: key, playlist: playlist);
|
||||||
|
}
|
||||||
|
return DashboardScreen(key: key, playlist: playlist);
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/admin',
|
path: '/admin',
|
||||||
|
|||||||
Reference in new issue
Block a user