sendMessage method
Future<V2TimValueCallback<V2TimMessage> >
sendMessage({
- String? id,
- V2TimMessage? message,
- void onSyncMsgID(
- String msgID
- required String? receiver,
- required String? groupID,
- int priority = 0,
- bool onlineUserOnly = false,
- OfflinePushInfo? offlinePushInfo,
- bool? isExcludedFromUnreadCount,
- bool? isExcludedFromLastMessage,
- bool? isSupportMessageExtension,
- bool? isExcludedFromContentModeration,
- bool? needReadReceipt,
- String? cloudCustomData,
- String? localCustomData,
- bool? isDisableCloudMessagePreHook,
- bool? isDisableCloudMessagePostHook,
Implementation
Future<V2TimValueCallback<V2TimMessage>> sendMessage({
String? id,
V2TimMessage? message,
void Function(String msgID)? onSyncMsgID,
required String? receiver,
required String? groupID,
int priority = 0,
bool onlineUserOnly = false,
OfflinePushInfo? offlinePushInfo,
bool? isExcludedFromUnreadCount,
bool? isExcludedFromLastMessage,
bool? isSupportMessageExtension,
bool? isExcludedFromContentModeration,
bool? needReadReceipt,
String? cloudCustomData,
String? localCustomData,
bool? isDisableCloudMessagePreHook,
bool? isDisableCloudMessagePostHook,
}) async {
if (!TIMManager.instance.isInitSDK()) {
return V2TimValueCallback<V2TimMessage>(code: TIMErrCode.ERR_SDK_NOT_INITIALIZED.value, desc: "sdk not init");
}
// 如果传入的 message 为空,则从 messageIDMap 中获取
if (message == null) {
if (id == null) {
print('sendMessage, message and id are both empty');
return V2TimValueCallback<V2TimMessage>.fromBool(false, 'message and id are both empty');
}
message = messageIDMap[id];
if (message == null) {
print('sendMessage, messageIDMap cannot find message of id: $id');
return V2TimValueCallback<V2TimMessage>.fromBool(false, 'messageIDMap cannot find message');
}
}
message.priority = priority;
message.isOnlineOnly = onlineUserOnly;
if (isExcludedFromUnreadCount != null) {
message.isExcludedFromUnreadCount = isExcludedFromUnreadCount;
}
if (isExcludedFromLastMessage != null) {
message.isExcludedFromLastMessage = isExcludedFromLastMessage;
}
if (isSupportMessageExtension != null) {
message.isSupportMessageExtension = isSupportMessageExtension;
}
if (needReadReceipt != null) {
message.needReadReceipt = needReadReceipt;
}
if (isDisableCloudMessagePreHook != null) {
message.isDisableCloudMessagePreHook = isDisableCloudMessagePreHook;
}
if (isDisableCloudMessagePostHook != null) {
message.isDisableCloudMessagePostHook = isDisableCloudMessagePostHook;
}
if (cloudCustomData != null) {
message.cloudCustomData = cloudCustomData;
}
if (localCustomData != null) {
message.localCustomData = localCustomData;
}
if (offlinePushInfo != null) {
message.offlinePushInfo = offlinePushInfo;
}
if ((receiver == null || receiver.isEmpty) && (groupID == null || groupID.isEmpty)) {
print('sendMessage, receiver and groupID cannot be empty at the same time');
return V2TimValueCallback<V2TimMessage>.fromBool(
false, 'sendMessage, receiver and groupID cannot be empty at the same time');
}
String convID = "";
TIMConvType timConvType = TIMConvType.kTIMConv_Group;
if (groupID != null && groupID.isNotEmpty) {
convID = groupID;
timConvType = TIMConvType.kTIMConv_Group;
} else {
convID = receiver!;
timConvType = TIMConvType.kTIMConv_C2C;
}
String userData = Tools.generateUserData('sendMessage');
Completer<V2TimValueCallback<V2TimMessage>> completer = Completer();
void handleApiCallback(Map jsonResult) {
V2TimValueCallback<V2TimMessage> callbackResult = V2TimValueCallback<V2TimMessage>.fromJson(jsonResult);
if (callbackResult.data != null) {
callbackResult.data!.id = id;
}
completer.complete(callbackResult);
}
NativeLibraryManager.timApiValueCallback2Future(userData, handleApiCallback);
Pointer<Char> pConvID = Tools.string2PointerChar(convID);
Pointer<Char> pMsgParam = Tools.string2PointerChar(json.encode(message!.toJson()));
Pointer<Void> pUserData = Tools.string2PointerVoid(userData);
Pointer<Char> pMessageID =
NativeLibraryManager.bindings.DartSendMessage(pConvID, timConvType, pMsgParam, pUserData);
String messageIDDart = Tools.pointerChar2String(pMessageID);
if (onSyncMsgID != null) {
onSyncMsgID.call(messageIDDart);
}
// 转发消息给多个人的时候,会重复使用一个 id
if (false == (message.isForwardMessage ?? false)) {
messageIDMap.remove(id);
}
return completer.future;
}