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/auth/presentation/bootstrap_gate.dart';
|
||||||
import 'features/household/data/household_providers.dart';
|
import 'features/household/data/household_providers.dart';
|
||||||
import 'features/notifications/data/push_registration_service.dart';
|
import 'features/notifications/data/push_registration_service.dart';
|
||||||
|
import 'features/today/application/due_tasks_provider.dart';
|
||||||
import 'l10n/generated/app_localizations.dart';
|
import 'l10n/generated/app_localizations.dart';
|
||||||
|
|
||||||
class LeafItToMeApp extends ConsumerWidget {
|
class LeafItToMeApp extends ConsumerWidget {
|
||||||
|
|
@ -24,6 +25,10 @@ class LeafItToMeApp extends ConsumerWidget {
|
||||||
// Trägt die eigene E-Mail in Alt-Haushalten nach (Besitzer-Anzeige).
|
// Trägt die eigene E-Mail in Alt-Haushalten nach (Besitzer-Anzeige).
|
||||||
ref.watch(memberEntrySyncProvider);
|
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(
|
return MaterialApp.router(
|
||||||
routerConfig: router,
|
routerConfig: router,
|
||||||
onGenerateTitle: (context) => AppLocalizations.of(context).appTitle,
|
onGenerateTitle: (context) => AppLocalizations.of(context).appTitle,
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,21 @@ final dueTasksLoadingProvider = Provider<bool>((ref) {
|
||||||
return false;
|
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
|
/// Das nächste zukünftige Fälligkeitsdatum über alle Haushalte – für den
|
||||||
/// "Alles versorgt"-Screen ("Nächste Aufgabe: Freitag").
|
/// "Alles versorgt"-Screen ("Nächste Aufgabe: Freitag").
|
||||||
final nextDueDateProvider = Provider<DateTime?>((ref) {
|
final nextDueDateProvider = Provider<DateTime?>((ref) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue