sendMessageForNew<T, F> method
Implementation
Future<V2TimValueCallback<V2TimMessage>> sendMessageForNew<T, F>({required Map<String, dynamic> params}) async {
String? id = params['id'];
var messageElem;
try {
final groupID = params['groupID'] ?? '';
final recveiver = params['receiver'] ?? '';
final haveTwoValues = groupID != '' && recveiver != '';
final messageMap = messageIDMap[id];
final messageInfo = messageMap["messageInfo"];
final type = messageMap["messageInfo"]["type"];
if (haveTwoValues) {
return CommonUtils.returnErrorForValueCb<V2TimMessage>({'code': 6017, 'desc': "receiver and groupID cannot set at the same time", 'data': V2TimMessage(elemType: 1).toJson()});
}
if (id == null || messageMap == null) {
return CommonUtils.returnErrorForValueCb<V2TimMessage>({'code': 6017, 'desc': "id cannot be empty or message cannot find", 'data': V2TimMessage(elemType: 1).toJson()});
}
final convType = groupID != '' ? 'GROUP' : 'C2C';
final sendToUserID = convType == 'GROUP' ? groupID : recveiver;
final needReadReceipt = params['needReadReceipt'];
final cloudCustomData = params['cloudCustomData'] ?? "";
switch (type) {
case "text":
{
String text = messageInfo["textElem"]["text"];
final createElemParams = CreateMessage.createTextMessage(userID: sendToUserID, text: text, cloudCustomData: cloudCustomData, convType: convType, needReadReceipt: needReadReceipt, priority: params['priority']);
messageElem = timeweb!.createTextMessage(createElemParams);
break;
}
case "custom":
{
final customMessage = CreateMessage.createCustomMessage(
userID: sendToUserID,
customData: messageInfo["customElem"]["data"],
convType: convType,
cloudCustomData: cloudCustomData,
needReadReceipt: needReadReceipt,
extension: messageInfo['customElem']['extension'],
description: messageInfo['customElem']['desc'],
priority: params['priority']);
messageElem = timeweb!.createCustomMessage(customMessage);
break;
}
case "face":
{
final faceMessage = CreateMessage.createFaceMessage(
userID: sendToUserID, data: messageInfo["faceElem"]["data"], index: messageInfo["faceElem"]["index"], cloudCustomData: cloudCustomData, needReadReceipt: needReadReceipt, convType: convType, priority: params['priority']);
messageElem = timeweb!.createFaceMessage(faceMessage);
break;
}
case "image":
{
final progressCallback = allowInterop((double progress) async {
final messageInstance = await V2TIMMessage.convertMessageFromWebToDart(messageElem);
if (messageListener.isNotEmpty) {
messageInstance['id'] = id;
for (var listener in messageListener.values) {
listener.onSendMessageProgress(V2TimMessage.fromJson(messageInstance), progress.toInt());
}
}
});
final createElemParams = CreateMessage.createImageMessage(
userID: sendToUserID, file: messageInfo["imageElem"]["file"], convType: convType, cloudCustomData: cloudCustomData, needReadReceipt: needReadReceipt, progressCallback: progressCallback, priority: params['priority']);
messageElem = timeweb!.createImageMessage(createElemParams);
break;
}
case "textAt":
{
final createElemParams = CreateMessage.createTextAtMessage(
groupID: sendToUserID, text: messageInfo["textElem"]['text'], priority: params['priority'], needReadReceipt: needReadReceipt, cloudCustomData: cloudCustomData, atList: messageInfo["textElem"]['atUserList']);
messageElem = timeweb!.createTextAtMessage(createElemParams);
break;
}
case "location":
{
final createElemParams = CreateMessage.createLocationMessage(
description: messageInfo["locationElem"]['description'],
longitude: messageInfo["locationElem"]['longitude'],
latitude: messageInfo["locationElem"]['latitude'],
cloudCustomData: cloudCustomData,
needReadReceipt: needReadReceipt,
priority: params['priority'],
userID: sendToUserID);
messageElem = timeweb!.createLocationMessage(createElemParams);
break;
}
case "mergeMessage":
{
List<String> msgList = messageInfo["mergerElem"]['msgIDList'];
List<dynamic> messageList = msgList.map((e) => timeweb!.findMessage(e)).toList();
String titile = messageInfo["mergerElem"]['title'];
List<String> abstractList = messageInfo["mergerElem"]['abstractList'];
String compatibleText = messageInfo["mergerElem"]['compatibleText'];
final createElemParams = CreateMessage.createMereMessage(
userID: sendToUserID,
messageList: messageList,
title: titile,
convType: convType,
cloudCustomData: cloudCustomData,
priority: params['priority'],
abstractList: abstractList,
needReadReceipt: needReadReceipt,
compatibleText: compatibleText);
messageElem = timeweb!.createMergerMessage(createElemParams);
break;
}
case "forwardMessage":
{
final msgID = messageInfo['msgID'];
final createElemParams = CreateMessage.createForwardMessage(
message: timeweb!.findMessage(msgID),
userID: sendToUserID,
cloudCustomData: cloudCustomData,
needReadReceipt: needReadReceipt,
priority: params['priority'],
);
messageElem = timeweb!.createForwardMessage(createElemParams);
break;
}
case "video":
{
final progressCallback = allowInterop((double progress) async {
final messageInstance = await V2TIMMessage.convertMessageFromWebToDart(messageElem);
if (messageListener.isNotEmpty) {
messageInstance['id'] = id;
for (var listener in messageListener.values) {
listener.onSendMessageProgress(V2TimMessage.fromJson(messageInstance), progress.toInt());
}
}
});
final createElemParams = CreateMessage.createVideoMessage(
userID: sendToUserID, file: messageInfo['videoElem']['file'], convType: convType, cloudCustomData: cloudCustomData, needReadReceipt: needReadReceipt, progressCallback: progressCallback, priority: params['priority']);
messageElem = timeweb!.createVideoMessage(createElemParams);
break;
}
case "file":
{
final progressCallback = allowInterop((double progress) async {
final messageInstance = await V2TIMMessage.convertMessageFromWebToDart(messageElem);
if (messageListener.isNotEmpty) {
messageInstance['id'] = id;
for (var listener in messageListener.values) {
listener.onSendMessageProgress(V2TimMessage.fromJson(messageInstance), progress.toInt());
}
}
});
final createElemParams = CreateMessage.createFileMessage(
userID: sendToUserID, file: messageInfo['fileElem']['file'], convType: convType, cloudCustomData: cloudCustomData, needReadReceipt: needReadReceipt, progressCallback: progressCallback, priority: params['priority']);
messageElem = timeweb!.createFileMessage(createElemParams);
break;
}
}
final res = await wrappedPromiseToFuture(timeweb!.sendMessage(
messageElem,
mapToJSObj({
"onlineUserOnly": params['onlineUserOnly'],
"messageControlInfo": mapToJSObj({"excludedFromUnreadCount": params["isExcludedFromUnreadCount"], "excludedFromLastMessage": params["isExcludedFromLastMessage"]})
})));
final code = res.code;
if (code == 0) {
final message = jsToMap(res.data)['message'];
final formatedMessage = await V2TIMMessage.convertMessageFromWebToDart(message);
messageIDMap.remove(id);
return CommonUtils.returnSuccess<V2TimMessage>(formatedMessage);
} else {
return CommonUtils.returnErrorForValueCb<V2TimMessage>('发送消息失败');
}
} catch (error) {
messageIDMap.remove(id);
final mapMessageElem = jsToMap(messageElem);
mapMessageElem['status'] = "fail";
final formatedMessage = await V2TIMMessage.convertMessageFromWebToDart(messageElem);
return CommonUtils.returnErrorForValueCb<V2TimMessage>(error, resultData: formatedMessage);
}
}