sendMessage method
Future<void>
sendMessage({
- required PeamanMessage message,
- dynamic onSuccess()?,
- dynamic onError(
- dynamic
Implementation
Future<void> sendMessage({
required final PeamanMessage message,
final Function(PeamanMessage)? onSuccess,
final Function(dynamic)? onError,
}) async {
assert(
message.senderId != null && message.receiverIds.isNotEmpty,
);
try {
final _currentMillis = DateTime.now().millisecondsSinceEpoch;
final _chatRef = PeamanReferenceHelper.chatsCol.doc(message.chatId);
final _messagesRef =
PeamanReferenceHelper.messagesCol(chatId: _chatRef.id);
final _messagesDocs = await _messagesRef.limit(2).get();
if (_messagesDocs.docs.isEmpty) {
await _chatRef.set({
'id': _chatRef.id,
'visibility': true,
'created_at': _currentMillis,
});
}
final _chatUpdateData = <String, dynamic>{};
_chatUpdateData['total_sent_messages'] = FieldValue.increment(1);
_chatUpdateData['z_${message.senderId}_sent_messages'] =
FieldValue.increment(1);
message.receiverIds.forEach((receiverId) {
_chatUpdateData['z_${receiverId}_unread_messages'] =
FieldValue.increment(1);
});
final _lastMsgRef = _messagesRef.doc();
final _message = message.copyWith(
id: _lastMsgRef.id,
chatId: _chatRef.id,
createdAt: message.createdAt ?? _currentMillis,
updatedAt: message.updatedAt ?? _currentMillis,
);
final _futures = <Future>[];
final _lastMsgFuture = _lastMsgRef.set(_message.toJson());
_futures.add(_lastMsgFuture);
_chatUpdateData['updated_at'] = _currentMillis;
_chatUpdateData['last_message_id'] = _message.id;
final _chatUpdateFuture = _chatRef.update(_chatUpdateData);
_futures.add(_chatUpdateFuture);
if (_messagesDocs.docs.isEmpty) {
final _additionalPropertiesFuture = _sendAdditionalProperties(
message: _message,
);
_futures.add(_additionalPropertiesFuture);
}
if (_message.files.isNotEmpty) {
final _mediaInfoFuture = _sendMediaInformation(message: _message);
_futures.add(_mediaInfoFuture);
}
await Future.wait(_futures);
onSuccess?.call(_message);
print('Success: Sending message to ${message.receiverIds}');
} catch (e) {
print(e);
print('Error: Sending message to ${message.receiverIds}');
onError?.call(e);
}
}