sendMessage method

Future<void> sendMessage(
  1. RCIMIWMessage sendMessage, {
  2. bool isResend = false,
  3. bool isForward = false,
  4. BuildContext? context,
})

Implementation

Future<void> sendMessage(RCIMIWMessage sendMessage,
    {bool isResend = false,
    bool isForward = false,
    BuildContext? context}) async {
  final targetEngine = engineProvider.engine;
  if (_disposed ||
      _sessionInvalid ||
      !_isSessionCurrent() ||
      targetEngine == null) {
    return;
  }
  final repository = engineProvider.readReceiptRepository;
  final userId = engineProvider.currentUserId;
  final originalNeedReceipt = sendMessage.needReceipt;
  if (!isResend) {
    await _prepareReadReceipt(sendMessage, originalNeedReceipt);
  }
  bool isCurrentSession() {
    return !_disposed &&
        identical(engineProvider.engine, targetEngine) &&
        identical(engineProvider.readReceiptRepository, repository) &&
        engineProvider.currentUserId == userId;
  }

  if (!isCurrentSession()) {
    sendMessage.needReceipt = originalNeedReceipt;
    return;
  }
  if (sendMessage is RCIMIWMediaMessage && !isForward) {
    if (sendMessage.local != null) {
      await targetEngine.sendMediaMessage(sendMessage,
          listener: RCIMIWSendMediaMessageListener(
              onMediaMessageSaved: (message) {
                if (!isCurrentSession()) return;
                _onMessageSaved(message, isResend: isResend);
              },
              onMediaMessageSending: (message, progress) {},
              onSendingMediaMessageCanceled: (message) {
                if (!isCurrentSession()) return;
                _syncMessageStatus(message);
              },
              onMediaMessageSent: (code, message) {
                if (!isCurrentSession()) return;
                _onMessageSent(code, message,
                    isResend: isResend, context: context);
              }));
    }
  } else {
    await targetEngine.sendMessage(sendMessage,
        callback: RCIMIWSendMessageCallback(
          onMessageSaved: (message) {
            if (!isCurrentSession()) return;
            _onMessageSaved(message, isResend: isResend);
          },
          onMessageSent: (code, message) {
            if (!isCurrentSession()) return;
            _onMessageSent(code, message, isResend: isResend);
          },
        ));
  }
}