mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-21 05:58:05 +02:00
Auto NBA : un seul dialogue de réglages, chargement visible
La liste des chaînes se chargeait sans retour visuel : chaque clic sur Réglages ouvrait un dialogue de plus. Enregistrer celui du dessus découvrait l'ancienne sélection en dessous, et l'enregistrer à son tour rétablissait l'ancien choix de chaînes. Le bouton est désactivé pendant le chargement, comme « Rafraîchir maintenant », et affiche le petit indicateur des onglets Films et Séries (16 × 16, trait 2, AppColors.onSurface). Vérifié par un agent distinct, après calibration sur une copie portant une différence plantée. Aucun SDK Flutter sur cette machine : rien n'est compilé ni rendu ici, la CI compile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6d2a8aee59
commit
0f5b087eb7
1 file changed
+29
-11
@@ -1768,6 +1768,10 @@ class _AutoNbaViewState extends State<_AutoNbaView> {
|
||||
bool _busy = false;
|
||||
String? _error;
|
||||
bool _showOffBein = false;
|
||||
// Liste des chaînes en cours de chargement avant l'ouverture des réglages :
|
||||
// sans ce verrou, chaque clic ouvrait un dialogue de plus, et enregistrer
|
||||
// celui du dessus découvrait l'ancienne sélection en dessous.
|
||||
bool _openingSettings = false;
|
||||
// Dernier diagnostic serveur : source, diffusions, chaînes reliées.
|
||||
Map<String, dynamic>? _diag;
|
||||
|
||||
@@ -1936,13 +1940,18 @@ class _AutoNbaViewState extends State<_AutoNbaView> {
|
||||
|
||||
Future<void> _showSettings() async {
|
||||
final rule = _rule;
|
||||
if (rule == null) return;
|
||||
if (rule == null || _openingSettings) return;
|
||||
setState(() => _openingSettings = true);
|
||||
List<dynamic> channels = [];
|
||||
final r = await AuthedHttp.get(
|
||||
Uri.parse('/api/auto-rules/${rule['id']}/channels'),
|
||||
);
|
||||
if (r.statusCode == 200) {
|
||||
channels = json.decode(r.body)['channels'] as List;
|
||||
try {
|
||||
final r = await AuthedHttp.get(
|
||||
Uri.parse('/api/auto-rules/${rule['id']}/channels'),
|
||||
);
|
||||
if (r.statusCode == 200) {
|
||||
channels = json.decode(r.body)['channels'] as List;
|
||||
}
|
||||
} finally {
|
||||
if (mounted) setState(() => _openingSettings = false);
|
||||
}
|
||||
if (!mounted) return;
|
||||
|
||||
@@ -2485,12 +2494,21 @@ class _AutoNbaViewState extends State<_AutoNbaView> {
|
||||
onPressed: _busy ? null : _refreshNow,
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(
|
||||
Icons.tune,
|
||||
color: AppColors.onSurfaceVariant,
|
||||
),
|
||||
icon: _openingSettings
|
||||
? const SizedBox(
|
||||
width: 16,
|
||||
height: 16,
|
||||
child: CircularProgressIndicator(
|
||||
strokeWidth: 2,
|
||||
color: AppColors.onSurface,
|
||||
),
|
||||
)
|
||||
: const Icon(
|
||||
Icons.tune,
|
||||
color: AppColors.onSurfaceVariant,
|
||||
),
|
||||
tooltip: 'Réglages',
|
||||
onPressed: _showSettings,
|
||||
onPressed: _openingSettings ? null : _showSettings,
|
||||
),
|
||||
],
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user