diff --git a/lib/features/dashboard/widgets/energy_flow_card.dart b/lib/features/dashboard/widgets/energy_flow_card.dart index afd1766..e12765f 100644 --- a/lib/features/dashboard/widgets/energy_flow_card.dart +++ b/lib/features/dashboard/widgets/energy_flow_card.dart @@ -484,7 +484,12 @@ class _NodeLayerState extends State<_NodeLayer> icon: Icons.wb_sunny_rounded, color: solar, label: 'Solaire', - value: '${(d.pvPower / 1000).toStringAsFixed(1)} kW', + // ⚠️ `.abs()` ICI AUSSI. La correction du 2026-09-05 n'avait redressé que le + // nœud de la vue d'ensemble : le hub du détail production affichait toujours + // « -1.3 kW », vu sur appareil le 2026-09-06. Une même grandeur rendue à deux + // endroits, corrigée à un seul — le grep qui a servi cherchait `pvPower.abs` + // et non `pvPower`, donc il a montré la ligne déjà corrigée et caché l'autre. + value: '${(d.pvPower.abs() / 1000).toStringAsFixed(1)} kW', borderColor: EtmTokens.lineOf(context), ), )), diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index 82ff373..574f953 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -48,7 +48,18 @@ class _DashboardScreenState extends State { @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) => _lireBilan()); + WidgetsBinding.instance.addPostFrameCallback((_) { + _lireBilan(); + // ⚠️ La configuration des charges n'était chargée QUE par l'écran des rôles. Le + // détail de consommation en a besoin — c'est elle qui porte le `domain` de chaque + // charge — et sans elle il affichait « non publié » sur des charges que la box + // publiait bel et bien. Une absence côté app présentée comme une absence côté box : + // le défaut qu'on vient de corriger, reproduit un cran plus loin. + final svc = context.read(); + context.read() + ..attach(svc) + ..load(); + }); _tick = Timer.periodic(_periode, (_) => _lireBilan()); } diff --git a/test/flux_signe_test.dart b/test/flux_signe_test.dart index 974185e..2f51149 100644 --- a/test/flux_signe_test.dart +++ b/test/flux_signe_test.dart @@ -39,6 +39,24 @@ void main() { reason: 'un client lirait « mes panneaux consomment 9 kW »'); }); + testWidgets('le DÉTAIL production ne montre pas non plus un signe négatif', + (tester) async { + // La correction du 2026-09-05 n'avait redressé que la vue d'ensemble. Le hub du + // détail affichait toujours « -1.3 kW », vu sur appareil le lendemain : une même + // grandeur rendue à deux endroits, corrigée à un seul. + await _poser(tester, const EnergyData(pvPower: -1349.0, homePower: 3252)); + await tester.tap(find.text('Solaire')); + await tester.pump(const Duration(seconds: 2)); + + // Deux nœuds portent la valeur pendant la transition (vue d'ensemble et hub du + // détail) : c'est l'ABSENCE du signe qui est éprouvée ici, pas le compte. + expect(find.text('1.3 kW'), findsWidgets); + expect(find.text('-1.3 kW'), findsNothing); + // Et surtout : plus d'onduleurs fabriqués. + expect(find.textContaining('Onduleur'), findsNothing); + expect(find.textContaining('non publié par cette box'), findsOneWidget); + }); + testWidgets('zéro reste zéro — et ne prouve rien', (tester) async { // L'état du banc à 17:03, celui qui a rendu la correction invisible à l'écran. await _poser(tester,