Fix: Checklisten-Provider dauerhaft warm halten (markNeedsBuild during build)

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 <noreply@anthropic.com>
This commit is contained in:
cschlaefke 2026-07-23 22:16:39 +02:00
parent 36c2d5d19e
commit 6560232655
2 changed files with 20 additions and 0 deletions

View file

@ -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,

View file

@ -83,6 +83,21 @@ final dueTasksLoadingProvider = Provider<bool>((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<void>((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<DateTime?>((ref) {