import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'social_feed_models.dart'; import 'social_feed_service.dart'; /// Provider for SocialFeedService singleton. final socialFeedServiceProvider = Provider((ref) { FirebaseFirestore? firestore; try { if (Firebase.apps.isNotEmpty) { firestore = FirebaseFirestore.instance; } } catch (_) { firestore = null; } final service = SocialFeedService(firestore: firestore); ref.onDispose(() { service.dispose(); }); return service; }); /// State provider for the active feed filter tab. final feedFilterStateProvider = StateProvider((ref) { return FeedFilter.allActivity; }); /// StateNotifier providing instant synchronous initial feed items and reacting to changes. class SocialFeedNotifier extends StateNotifier> { final SocialFeedService _service; final FeedFilter _filter; StreamSubscription>? _sub; SocialFeedNotifier(this._service, this._filter) : super(_service.getFilteredItems(filter: _filter)) { _sub = _service.getFeedStream(filter: _filter).listen((items) { state = items; }); } @override void dispose() { _sub?.cancel(); super.dispose(); } } /// Primary feed provider with zero-latency synchronous initial data. final socialFeedNotifierProvider = StateNotifierProvider.autoDispose>( (ref) { final service = ref.watch(socialFeedServiceProvider); final filter = ref.watch(feedFilterStateProvider); return SocialFeedNotifier(service, filter); }); /// Stream provider for the filtered community social feed (preserved for backwards compatibility). final socialFeedStreamProvider = StreamProvider.autoDispose>((ref) { final service = ref.watch(socialFeedServiceProvider); final filter = ref.watch(feedFilterStateProvider); return service.getFeedStream(filter: filter); });