fix(tableau de bord): les DEUX providers, pas un seul
Troisième tentative sur le même symptôme, et la bonne : le détail de consommation
croise la TÉLÉMÉTRIE (la mesure) et la CONFIGURATION (le domaine), et ni l'un ni
l'autre n'était attaché ailleurs que sur l'écran des rôles. Sur le tableau de
bord, `telemetry` était null ET `entries` vide.
Les deux correctifs précédents ne traitaient que la configuration — la moitié que
le premier diagnostic avait désignée. C'est la recherche auto-confirmante en
version « je n'ai regardé qu'un provider » : j'ai vérifié la partie que je venais
d'écrire, jamais l'autre, et l'écran a redit trois fois la même chose.
La donnée était pourtant sans ambiguïté à chaque étape : `chauffe-eau` → `ecs`,
`pac-terrain` → `heating`, et `{powerW: 0, source: "meter"}` sur les deux. Rien
ne manquait côté box ; tout manquait côté app, à l'endroit où on va chercher.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKM8FDNHZWogAsjjfB8pSw
This commit is contained in:
parent
b3da81d277
commit
cb114b62bd
@ -72,11 +72,9 @@ class _DashboardScreenState extends State<DashboardScreen> {
|
||||
// à l'écran le 2026-09-06 — le correctif « charger au montage » n'a rien changé.
|
||||
// Accroché au tick, il se rattrape de lui-même dès que la box répond.
|
||||
final cfg = context.read<LoadConfigProvider>();
|
||||
if (cfg.entries.isEmpty) {
|
||||
cfg
|
||||
..attach(svc)
|
||||
..load();
|
||||
}
|
||||
if (cfg.entries.isEmpty) cfg..attach(svc)..load();
|
||||
final tel = context.read<LoadTelemetryProvider>();
|
||||
if (tel.telemetry == null) tel..attach(svc)..load();
|
||||
// Les ratios de la box sont lus à côté du bilan, pas à sa place : ils ne couvrent pas
|
||||
// la même fenêtre, et c'est justement ce que l'écran doit pouvoir dire.
|
||||
final r = await svc.fetchEnergyRatios();
|
||||
@ -119,22 +117,32 @@ class _DashboardScreenState extends State<DashboardScreen> {
|
||||
return out;
|
||||
}
|
||||
|
||||
/// Vrai une fois la configuration demandée avec une box joignable — évite de relancer
|
||||
/// l'appel à chaque trame pendant que la réponse arrive.
|
||||
bool _configDemandee = false;
|
||||
/// Vrai une fois les deux providers demandés avec une box joignable — évite de relancer
|
||||
/// les appels à chaque trame pendant que les réponses arrivent.
|
||||
bool _chargesDemandees = false;
|
||||
|
||||
/// Le tick est à cinq minutes : trop lent pour un premier chargement. On se raccroche
|
||||
/// donc aussi au moment où la box devient joignable, une seule fois.
|
||||
void _assurerConfig(NymeaService service) {
|
||||
if (_configDemandee || !service.isConnected) return;
|
||||
/// **Les DEUX providers, pas un seul.**
|
||||
///
|
||||
/// Le détail de consommation croise la télémétrie (la mesure) et la configuration (le
|
||||
/// domaine). Or ni l'un ni l'autre n'était attaché ailleurs que sur l'écran des rôles :
|
||||
/// sur le tableau de bord, `telemetry` était `null` **et** `entries` vide.
|
||||
///
|
||||
/// Deux correctifs ont échoué avant celui-ci parce qu'ils ne traitaient que la
|
||||
/// configuration — la moitié que le premier diagnostic avait désignée. Vérifier le
|
||||
/// correctif sur la partie qu'on vient d'écrire ne dit rien de l'autre moitié :
|
||||
/// c'est la recherche auto-confirmante, en version « je n'ai regardé qu'un provider ».
|
||||
///
|
||||
/// Le tick à cinq minutes rattrape ; c'est ici que ça se joue au premier affichage.
|
||||
void _assurerCharges(NymeaService service) {
|
||||
if (_chargesDemandees || !service.isConnected) return;
|
||||
final cfg = context.read<LoadConfigProvider>();
|
||||
if (cfg.entries.isNotEmpty) return;
|
||||
_configDemandee = true;
|
||||
final tel = context.read<LoadTelemetryProvider>();
|
||||
if (cfg.entries.isNotEmpty && tel.telemetry != null) return;
|
||||
_chargesDemandees = true;
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!mounted) return;
|
||||
cfg
|
||||
..attach(service)
|
||||
..load();
|
||||
if (cfg.entries.isEmpty) cfg..attach(service)..load();
|
||||
if (tel.telemetry == null) tel..attach(service)..load();
|
||||
});
|
||||
}
|
||||
|
||||
@ -142,7 +150,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<NymeaService>(
|
||||
builder: (context, service, _) {
|
||||
_assurerConfig(service);
|
||||
_assurerCharges(service);
|
||||
final data = service.energyData;
|
||||
return Scaffold(
|
||||
backgroundColor: EtmTokens.bgOf(context),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user