···
authProvider: authProvider,
67
-
ChangeNotifierProxyProvider2<AuthProvider, VoteProvider,
67
+
ChangeNotifierProxyProvider2<
(context) => MultiFeedProvider(
···
// CommentsProviderCache manages per-post CommentsProvider instances
// with LRU eviction and sign-out cleanup
ProxyProvider2<AuthProvider, VoteProvider, CommentsProviderCache>(
82
-
create: (context) => CommentsProviderCache(
83
-
authProvider: authProvider,
84
-
voteProvider: context.read<VoteProvider>(),
85
-
commentService: commentService,
86
+
(context) => CommentsProviderCache(
87
+
authProvider: authProvider,
88
+
voteProvider: context.read<VoteProvider>(),
89
+
commentService: commentService,
update: (context, auth, vote, previous) {
89
-
return previous ?? CommentsProviderCache(
92
-
commentService: commentService,
94
+
CommentsProviderCache(
97
+
commentService: commentService,
dispose: (_, cache) => cache.dispose(),
···
// Use injected service (for testing) or create new one (for production)
// Pass token getter, refresh handler, and sign out handler to API service
// for automatic fresh token retrieval and automatic token refresh on 401
36
-
_apiService = apiService ??
tokenGetter: _authProvider.getAccessToken,
tokenRefresher: _authProvider.refreshToken,
···
// Start loading, keep existing data visible
231
-
_feedStates[type] = currentState.copyWith(
232
+
_feedStates[type] = currentState.copyWith(isLoading: true, error: null);
237
-
_feedStates[type] = currentState.copyWith(
238
-
isLoadingMore: true,
235
+
_feedStates[type] = currentState.copyWith(isLoadingMore: true);
···
345
-
fetcher: () => _apiService.getTimeline(
347
-
timeframe: _timeframe,
348
-
cursor: refresh ? null : currentState.cursor,
342
+
() => _apiService.getTimeline(
344
+
timeframe: _timeframe,
345
+
cursor: refresh ? null : currentState.cursor,
···
364
-
fetcher: () => _apiService.getDiscover(
366
-
timeframe: _timeframe,
367
-
cursor: refresh ? null : currentState.cursor,
362
+
() => _apiService.getDiscover(
364
+
timeframe: _timeframe,
365
+
cursor: refresh ? null : currentState.cursor,