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:
MichaelandClaude Opus 5.5 committed 2026-10-21 00:03:42 +02:00
1 parent 6d2a8aee59
commit 0f5b087eb7
1 file changed
+29 -11
+29 -11
View File
@@ -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,
),
],
],