sendFriendRequest method
- String senderEmail,
- String receiverUserName,
- BuildContext context
Sends a friend request from senderEmail
to receiverUserName
.
Displays a success, error, or warning snackbar depending on the outcome.
Implementation
Future<void> sendFriendRequest(
String senderEmail, String receiverUserName, BuildContext context) async {
final usersRef = FirebaseFirestore.instance.collection('users');
final localizations = AppLocalizations.of(context)!;
final senderQuery =
await usersRef.where('email', isEqualTo: senderEmail).get();
final receiverQuery =
await usersRef.where('username', isEqualTo: receiverUserName).get();
if (senderQuery.docs.isEmpty || receiverQuery.docs.isEmpty) {
Helper.errorSnackBar(
title: localizations.tError,
message: localizations.tNoUserFound,
);
return;
}
final senderRef = senderQuery.docs.first.reference;
final receiverRef = receiverQuery.docs.first.reference;
final existing = await FirebaseFirestore.instance
.collection('friendships')
.where(Filter.or(
Filter.and(
Filter('sender', isEqualTo: senderRef),
Filter('receiver', isEqualTo: receiverRef)
),
Filter.and(
Filter('sender', isEqualTo: receiverRef),
Filter('receiver', isEqualTo: senderRef)
),
))
.get();
if (existing.docs.isEmpty) {
final docRef = await FirebaseFirestore.instance.collection('friendships').add({
'sender': senderRef,
'receiver': receiverRef,
'status': 'pending',
'since': FieldValue.serverTimestamp(),
});
final senderData = senderQuery.docs.first.data();
friends.add({
'username': senderData['username'],
'email': senderData['email'],
'fullName': senderData['fullName'],
'friendshipDocId': docRef.id,
'status': 'pending',
});
Helper.successSnackBar(
title: localizations.tSuccess,
message: '${localizations.tFriendRequestSentTo} $receiverUserName',
);
} else {
Helper.warningSnackBar(
title: localizations.tInfo,
message: localizations.tFriendshipAlreadyExists,
);
}
}