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:
parent
36c2d5d19e
commit
6560232655
2 changed files with 20 additions and 0 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue