···
import 'constants/app_colors.dart';
import 'models/post.dart';
import 'providers/auth_provider.dart';
-
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';
import 'services/streamable_service.dart';
import 'services/vote_service.dart';
import 'widgets/loading_error_states.dart';
···
return previous ?? FeedProvider(auth, voteProvider: vote);
-
ChangeNotifierProxyProvider2<
-
(context) => CommentsProvider(
-
voteProvider: context.read<VoteProvider>(),
-
commentService: commentService,
update: (context, auth, vote, previous) {
-
// Reuse existing provider to maintain state across rebuilds
-
commentService: commentService,
// StreamableService for video embeds
Provider<StreamableService>(create: (_) => StreamableService()),
···
import 'constants/app_colors.dart';
import 'models/post.dart';
import 'providers/auth_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';
+
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);
+
// CommentsProviderCache manages per-post CommentsProvider instances
+
// with LRU eviction and sign-out cleanup
+
ProxyProvider2<AuthProvider, VoteProvider, CommentsProviderCache>(
+
create: (context) => CommentsProviderCache(
+
authProvider: authProvider,
+
voteProvider: context.read<VoteProvider>(),
+
commentService: commentService,
update: (context, auth, vote, previous) {
+
// Reuse existing cache
+
return previous ?? CommentsProviderCache(
+
commentService: commentService,
+
dispose: (_, cache) => cache.dispose(),
// StreamableService for video embeds
Provider<StreamableService>(create: (_) => StreamableService()),