MotorSignal-App/lib/services/social/social_providers.dart

77 lines
2.6 KiB
Dart

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<RiderProfileService>((ref) {
return RiderProfileService();
});
/// Provider for FriendshipService.
final friendshipServiceProvider = Provider<FriendshipService>((ref) {
return FriendshipService();
});
/// Provider for RiderSearchService.
final riderSearchServiceProvider = Provider<RiderSearchService>((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<RiderProfile?>((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<List<FriendSummary>>((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<List<FriendRequest>>((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<List<FriendRequest>>((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<List<BlockedRider>>((ref) {
final user = ref.watch(currentUserProvider);
if (user == null || user.isAnonymous) {
return Stream.value([]);
}
final service = ref.watch(friendshipServiceProvider);
return service.blockedRidersStream(user.uid);
});