deleteMessage method

Future<EmptyResponse> deleteMessage(
  1. Message message,
  2. {bool? hard}
)

Deletes the message from the channel.

Implementation

Future<EmptyResponse> deleteMessage(Message message, {bool? hard}) async {
  final hardDelete = hard ?? false;

  // Directly deleting the local messages which are not yet sent to server
  if (message.status == MessageSendingStatus.sending ||
      message.status == MessageSendingStatus.failed) {
    state!.deleteMessage(
      message.copyWith(
        type: 'deleted',
        status: MessageSendingStatus.sent,
      ),
      hardDelete: hardDelete,
    );

    // Removing the attachments upload completer to stop the `sendMessage`
    // waiting for attachments to complete.
    _messageAttachmentsUploadCompleter
        .remove(message.id)
        ?.completeError(Exception('Message deleted'));
    return EmptyResponse();
  }

  try {
    // ignore: parameter_assignments
    message = message.copyWith(
      type: 'deleted',
      status: MessageSendingStatus.deleting,
      deletedAt: message.deletedAt ?? DateTime.now(),
    );

    state?.deleteMessage(message, hardDelete: hardDelete);

    final response = await _client.deleteMessage(message.id, hard: hard);

    state?.deleteMessage(
      message.copyWith(status: MessageSendingStatus.sent),
      hardDelete: hardDelete,
    );

    return response;
  } catch (e) {
    if (e is StreamChatNetworkError && e.isRetriable) {
      state!._retryQueue.add([message]);
    }
    rethrow;
  }
}