listenToFriendships method
- String userId
Listens for changes to friendship documents where userId
is involved.
Updates the friends list with accepted or pending friends.
Implementation
void listenToFriendships(String userId) {
isLoadingFriends.value = true;
friends.clear();
final userRef = FirebaseFirestore.instance
.collection('users')
.doc(userId);
final friendshipsRef = FirebaseFirestore.instance.collection('friendships');
final senderQuery = friendshipsRef
.where('sender', isEqualTo: userRef)
.where('status', whereIn: ['accepted', 'pending'])
.snapshots();
final receiverQuery = friendshipsRef
.where('receiver', isEqualTo: userRef)
.where('status', isEqualTo: 'accepted')
.snapshots();
_friendsSubscription?.cancel();
_friendsSubscription = senderQuery.listen((senderSnapshot) async {
List<DocumentSnapshot> allDocs = List.from(senderSnapshot.docs);
final receiverDocs = await friendshipsRef
.where('receiver', isEqualTo: userRef)
.where('status', isEqualTo: 'accepted')
.get();
allDocs.addAll(receiverDocs.docs);
await _processNewFriendData(userId, allDocs);
receiverQuery.listen((receiverSnapshot) async {
List<DocumentSnapshot> combinedDocs = List.from(senderSnapshot.docs);
combinedDocs.addAll(receiverSnapshot.docs);
await _processNewFriendData(userId, combinedDocs);
});
});
}