From 6560232655360381fa22e59f606bbecec9b0f498 Mon Sep 17 00:00:00 2001 From: cschlaefke Date: Thu, 23 Jul 2026 22:16:39 +0200 Subject: [PATCH] Fix: Checklisten-Provider dauerhaft warm halten (markNeedsBuild during build) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Riverpod 3 pausiert Provider ohne Zuhörer; beim Router-Wechsel Login → Heute wurde die veraltete Kette mitten im Widget-Build wiederbelebt und löste die Warnung weiter aus. checklistWarmupProvider hält die Kette aus app.dart heraus aktiv, damit sie beim Screen-Mount schon frisch ist. Co-Authored-By: Claude Fable 5 --- lib/app.dart | 5 +++++ .../today/application/due_tasks_provider.dart | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/lib/app.dart b/lib/app.dart index 01850fe..0ee55b9 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -7,6 +7,7 @@ import 'core/theme/app_theme.dart'; import 'features/auth/presentation/bootstrap_gate.dart'; import 'features/household/data/household_providers.dart'; import 'features/notifications/data/push_registration_service.dart'; +import 'features/today/application/due_tasks_provider.dart'; import 'l10n/generated/app_localizations.dart'; class LeafItToMeApp extends ConsumerWidget { @@ -24,6 +25,10 @@ class LeafItToMeApp extends ConsumerWidget { // Trägt die eigene E-Mail in Alt-Haushalten nach (Besitzer-Anzeige). ref.watch(memberEntrySyncProvider); + // Hält die Checklisten-Provider aktiv (verhindert „markNeedsBuild + // during build" beim Einhängen der Heute-Ansicht nach dem Login). + ref.watch(checklistWarmupProvider); + return MaterialApp.router( routerConfig: router, onGenerateTitle: (context) => AppLocalizations.of(context).appTitle, diff --git a/lib/features/today/application/due_tasks_provider.dart b/lib/features/today/application/due_tasks_provider.dart index fedb839..14b7acb 100644 --- a/lib/features/today/application/due_tasks_provider.dart +++ b/lib/features/today/application/due_tasks_provider.dart @@ -83,6 +83,21 @@ final dueTasksLoadingProvider = Provider((ref) { return false; }); +/// Hält die Provider-Kette der Checkliste dauerhaft aktiv (via app.dart). +/// +/// Riverpod 3 pausiert Provider ohne aktive Zuhörer. Wechselt der Router +/// von Login auf die Heute-Ansicht, würde deren Einhängen die pausierte, +/// inzwischen veraltete Kette mitten im Widget-Build wiederbeleben — das +/// löst „setState() or markNeedsBuild() called during build“ aus. Mit einem +/// dauerhaften Zuhörer läuft die Kette stattdessen sofort mit und ist beim +/// Einhängen der Screens bereits frisch. +final checklistWarmupProvider = Provider((ref) { + ref.watch(dueTasksProvider); + ref.watch(dueTasksLoadingProvider); + ref.watch(nextDueDateProvider); + ref.watch(myRoleProvider); +}); + /// Das nächste zukünftige Fälligkeitsdatum über alle Haushalte – für den /// "Alles versorgt"-Screen ("Nächste Aufgabe: Freitag"). final nextDueDateProvider = Provider((ref) {