···
import 'constants/app_colors.dart';
import 'models/post.dart';
import 'providers/auth_provider.dart';
11
-
import 'providers/comments_provider.dart';
import 'providers/feed_provider.dart';
import 'providers/vote_provider.dart';
import 'screens/auth/login_screen.dart';
···
import 'screens/home/post_detail_screen.dart';
import 'screens/landing_screen.dart';
import 'services/comment_service.dart';
18
+
import 'services/comments_provider_cache.dart';
import 'services/streamable_service.dart';
import 'services/vote_service.dart';
import 'widgets/loading_error_states.dart';
···
return previous ?? FeedProvider(auth, voteProvider: vote);
78
-
ChangeNotifierProxyProvider2<
84
-
(context) => CommentsProvider(
86
-
voteProvider: context.read<VoteProvider>(),
87
-
commentService: commentService,
78
+
// CommentsProviderCache manages per-post CommentsProvider instances
79
+
// with LRU eviction and sign-out cleanup
80
+
ProxyProvider2<AuthProvider, VoteProvider, CommentsProviderCache>(
81
+
create: (context) => CommentsProviderCache(
82
+
authProvider: authProvider,
83
+
voteProvider: context.read<VoteProvider>(),
84
+
commentService: commentService,
update: (context, auth, vote, previous) {
90
-
// Reuse existing provider to maintain state across rebuilds
95
-
commentService: commentService,
87
+
// Reuse existing cache
88
+
return previous ?? CommentsProviderCache(
91
+
commentService: commentService,
94
+
dispose: (_, cache) => cache.dispose(),
// StreamableService for video embeds
Provider<StreamableService>(create: (_) => StreamableService()),