import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../auth/auth_providers.dart'; import 'friendship_service.dart'; import 'rider_profile_models.dart'; import 'rider_profile_service.dart'; import 'rider_search_service.dart'; /// Provider for RiderProfileService. final riderProfileServiceProvider = Provider((ref) { return RiderProfileService(); }); /// Provider for FriendshipService. final friendshipServiceProvider = Provider((ref) { return FriendshipService(); }); /// Provider for RiderSearchService. final riderSearchServiceProvider = Provider((ref) { final profileService = ref.watch(riderProfileServiceProvider); final friendshipService = ref.watch(friendshipServiceProvider); return RiderSearchService( profileService: profileService, friendshipService: friendshipService, ); }); /// Stream of the active user's RiderProfile. final myRiderProfileProvider = StreamProvider((ref) { final user = ref.watch(currentUserProvider); if (user == null || user.isAnonymous) { return Stream.value(null); } final service = ref.watch(riderProfileServiceProvider); return service.profileStream(user.uid); }); /// Stream of the active user's friends list. final myFriendsProvider = StreamProvider>((ref) { final user = ref.watch(currentUserProvider); if (user == null || user.isAnonymous) { return Stream.value([]); } final service = ref.watch(friendshipServiceProvider); return service.friendsStream(user.uid); }); /// Stream of incoming friend requests for the active user. final myIncomingRequestsProvider = StreamProvider>((ref) { final user = ref.watch(currentUserProvider); if (user == null || user.isAnonymous) { return Stream.value([]); } final service = ref.watch(friendshipServiceProvider); return service.incomingRequestsStream(user.uid); }); /// Stream of outgoing friend requests for the active user. final myOutgoingRequestsProvider = StreamProvider>((ref) { final user = ref.watch(currentUserProvider); if (user == null || user.isAnonymous) { return Stream.value([]); } final service = ref.watch(friendshipServiceProvider); return service.outgoingRequestsStream(user.uid); }); /// Stream of blocked riders for the active user. final myBlockedRidersProvider = StreamProvider>((ref) { final user = ref.watch(currentUserProvider); if (user == null || user.isAnonymous) { return Stream.value([]); } final service = ref.watch(friendshipServiceProvider); return service.blockedRidersStream(user.uid); });