From b5134ef86d4b9ee0ca51f1eb1b816577e6854253 Mon Sep 17 00:00:00 2001 From: airkjw Date: Fri, 12 Jun 2026 22:49:24 +0900 Subject: [PATCH] fix: season list re-reads via provider dependency; ignore pid files seasonsProvider now watches seasonRefreshProvider instead of relying on a HomeScreen ref.listen, making the refresh ordering-independent. Removes the redundant listener from HomeScreen. Appends *.pid to .gitignore. Co-Authored-By: Claude Fable 5 --- .gitignore | 1 + lib/state/providers.dart | 10 +++++++--- lib/ui/screens/home_screen.dart | 5 ----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 6b5629d..7f97c5a 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ app.*.map.json lib/l10n/gen/ .superpowers/ CLAUDE.md +*.pid diff --git a/lib/state/providers.dart b/lib/state/providers.dart index cabff7f..34d1f52 100644 --- a/lib/state/providers.dart +++ b/lib/state/providers.dart @@ -41,9 +41,13 @@ final seasonFlowProvider = NotifierProvider( final contentRepositoryProvider = Provider((ref) => ContentRepository()); -final seasonsProvider = FutureProvider>( - (ref) => ref.read(contentRepositoryProvider).availableSeasons(), -); +final seasonsProvider = FutureProvider>((ref) { + // Watching (not awaiting) the one-shot sync makes this provider re-run + // once when the sync completes, picking up freshly cached packs. Local + // content loads immediately; the network never blocks this future. + ref.watch(seasonRefreshProvider); + return ref.read(contentRepositoryProvider).availableSeasons(); +}); /// One background content sync per app session. Home listens and refreshes /// the season list when new packs arrived. diff --git a/lib/ui/screens/home_screen.dart b/lib/ui/screens/home_screen.dart index 464ea9e..aa85a2d 100644 --- a/lib/ui/screens/home_screen.dart +++ b/lib/ui/screens/home_screen.dart @@ -21,11 +21,6 @@ class HomeScreen extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - ref.listen(seasonRefreshProvider, (_, next) { - if (next is AsyncData && next.value == true) { - ref.invalidate(seasonsProvider); - } - }); final l10n = AppLocalizations.of(context)!; final streak = ref.watch(streakProvider); final best = ref.watch(endlessBestProvider);