deleteMessage method
Delete a message and its associated media (if any)
Implementation
Future<void> deleteMessage(String chatId, String messageId) async {
try {
DocumentReference messageRef = _firestore
.collection('chats')
.doc(chatId)
.collection('messages')
.doc(messageId);
DocumentSnapshot messageSnapshot = await messageRef.get();
if (messageSnapshot.exists) {
Message message =
Message.fromMap(messageSnapshot.data() as Map<String, dynamic>);
// If the message has a media URL, delete the media file
if (message.mediaUrl != null && message.mediaUrl!.isNotEmpty) {
await _storageService.deleteMedia(message.mediaUrl!);
}
_firestore.collection('chats').doc(chatId).set({
'lastMessage': 'deleted',
'lastMessageType': MessageType.text.toString(),
'lastMessageTime': FieldValue.serverTimestamp(),
'lastMessageSender': message.senderId, // Store sender's ID
'users': [message.senderId, message.receiverId],
'unreadMessageCount': {
'${message.receiverId}': FieldValue.increment(1)
},
}, SetOptions(merge: true));
// Delete the message from Firestore
await messageRef.update({
'isDeleted': true,
});
// Update chat summary
}
} catch (e) {
print('Error deleting message: $e');
}
}