dispatchMessage method
Future<MessageDispatchResult>
dispatchMessage(
- Message message, {
- required MessageDispatchCallback onDispatch,
Implementation
Future<MessageDispatchResult> dispatchMessage(
Message message, {
required MessageDispatchCallback onDispatch,
}) async {
final messageGroup = addMessage(
message.copyWith(isLoading: true, isFailed: false),
);
late final MessageDispatchResult dispatchResult;
late final Message? result;
result = await onDispatch(message);
final index = messageGroup.messages.indexWhere(
(element) => element.id == message.id,
);
if (result != null) {
messageGroup.messages[index] = result;
messageGroup.sortMessages();
dispatchResult = MessageDispatchResult(
message: message,
isSuccess: true,
exception: null,
);
if (!result.isSender) {
_newReceiveMessageController.add(result);
}
if (result.isRead == true) {
_unreadMessageIds.remove(result.id);
} else if (result.isRead == false) {
_unreadMessageIds.add(result.id);
}
notifyListeners();
} else {
dispatchResult = MessageDispatchResult(
message: message,
isSuccess: false,
exception: Exception("Failed to dispatch message"),
);
removeMessageGroupAt(messageGroup, index);
_failedMessageEntries[message.id] = FailedMessageEntry(
messageId: message.id,
messageGroup: messageGroup,
onDispatch: onDispatch,
);
addMessage(message.copyWith(isLoading: false, isFailed: true));
}
if (_dispatchResultController.isClosed) return dispatchResult;
_dispatchResultController.add(dispatchResult);
return dispatchResult;
}