mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-24 07:28: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;
|
bool _busy = false;
|
||||||
String? _error;
|
String? _error;
|
||||||
bool _showOffBein = false;
|
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.
|
// Dernier diagnostic serveur : source, diffusions, chaînes reliées.
|
||||||
Map<String, dynamic>? _diag;
|
Map<String, dynamic>? _diag;
|
||||||
|
|
||||||
@@ -1936,13 +1940,18 @@ class _AutoNbaViewState extends State<_AutoNbaView> {
|
|||||||
|
|
||||||
Future<void> _showSettings() async {
|
Future<void> _showSettings() async {
|
||||||
final rule = _rule;
|
final rule = _rule;
|
||||||
if (rule == null) return;
|
if (rule == null || _openingSettings) return;
|
||||||
|
setState(() => _openingSettings = true);
|
||||||
List<dynamic> channels = [];
|
List<dynamic> channels = [];
|
||||||
final r = await AuthedHttp.get(
|
try {
|
||||||
Uri.parse('/api/auto-rules/${rule['id']}/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;
|
if (r.statusCode == 200) {
|
||||||
|
channels = json.decode(r.body)['channels'] as List;
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (mounted) setState(() => _openingSettings = false);
|
||||||
}
|
}
|
||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
|
|
||||||
@@ -2485,12 +2494,21 @@ class _AutoNbaViewState extends State<_AutoNbaView> {
|
|||||||
onPressed: _busy ? null : _refreshNow,
|
onPressed: _busy ? null : _refreshNow,
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(
|
icon: _openingSettings
|
||||||
Icons.tune,
|
? const SizedBox(
|
||||||
color: AppColors.onSurfaceVariant,
|
width: 16,
|
||||||
),
|
height: 16,
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
strokeWidth: 2,
|
||||||
|
color: AppColors.onSurface,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: const Icon(
|
||||||
|
Icons.tune,
|
||||||
|
color: AppColors.onSurfaceVariant,
|
||||||
|
),
|
||||||
tooltip: 'Réglages',
|
tooltip: 'Réglages',
|
||||||
onPressed: _showSettings,
|
onPressed: _openingSettings ? null : _showSettings,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in new issue
Block a user