sendMessage method
Sends a message to the Firestore. Accepts any partial message and a
room ID. If arbitraty data is provided in the partialMessage
does nothing.
Implementation
void sendMessage(dynamic partialMessage, String roomId) async {
if (firebaseUser == null) return;
types.Message? message;
if (partialMessage is types.PartialCustom) {
message = types.CustomMessage.fromPartial(
author: types.User(id: firebaseUser!.uid),
id: '',
partialCustom: partialMessage,
);
} else if (partialMessage is types.PartialFile) {
message = types.FileMessage.fromPartial(
author: types.User(id: firebaseUser!.uid),
id: '',
partialFile: partialMessage,
);
} else if (partialMessage is types.PartialImage) {
message = types.ImageMessage.fromPartial(
author: types.User(id: firebaseUser!.uid),
id: '',
partialImage: partialMessage,
);
} else if (partialMessage is types.PartialText) {
message = types.TextMessage.fromPartial(
author: types.User(id: firebaseUser!.uid),
id: '',
partialText: partialMessage,
);
}
if (message != null) {
final messageMap = message.toJson();
messageMap.removeWhere((key, value) => key == 'author' || key == 'id');
messageMap['authorId'] = firebaseUser!.uid;
messageMap['createdAt'] = FieldValue.serverTimestamp();
messageMap['updatedAt'] = FieldValue.serverTimestamp();
await getFirebaseFirestore()
.collection('${config.roomsCollectionName}/$roomId/messages')
.add(messageMap);
await getFirebaseFirestore()
.collection(config.roomsCollectionName)
.doc(roomId)
.update({'updatedAt': FieldValue.serverTimestamp()});
}
}