sendMessage method
Future<void>
sendMessage(
- RCIMIWMessage sendMessage, {
- bool isResend = false,
- bool isForward = false,
- 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);
},
));
}
}