formateLasteMessage static method
dynamic
formateLasteMessage(
- Map<String, dynamic> message, {
- String groupID = "",
})
Implementation
static formateLasteMessage(Map<String, dynamic> message,
{String groupID = ""}) async {
final elementType = message['type'] != null
? MsgType.convertMsgType(message['type'])
: MessageElemType.V2TIM_ELEM_TYPE_NONE;
// 直接从消息中的Message中copy过来的,但部分字段有缺失
final formatedMsg = <String, dynamic>{
"msgID": message['ID'] ?? '',
"timestamp": message['lastTime'],
"progress": 100,
"sender": message['fromAccount'].toString(),
"nickName": message['nick'],
"friendRemark": message['remark'],
// "faceUrl": message.avatar ?? '',
// "nameCard": message.nameCard,
// "groupID": message.conversationType == "GROUP" ? message.to : null,
// "userID": message.conversationType == "C2C" ? message.to : null,
"status": getMessageStatus(message), // unSend sucess fail
"elemType": elementType,
"localCustomData": "",
"localCustomInt": 0,
"cloudCustomData": message['cloudCustomData'],
"isSelf": true,
"isRead": true, // message self read
"isPeerRead": message["isPeerRead"],
"isExcludedFromLastMessage": false,
"needReadReceipt": message["needReadReceipt"],
// "priority": convertPriorityFromWebToDart(message.priority),
// "groupAtUserList": message.atUserList,
// "random": message.random,
"isExcludedFromUnreadCount": false,
// "messageFromWeb": stringify(message)
};
final messagePayload = jsToMap(message["payload"] ?? "{}");
// 文本消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_TEXT) {
final textElem = V2TimTextElem(text: messagePayload['text']).toJson();
formatedMsg['textElem'] = textElem;
}
// 自定义消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_CUSTOM) {
final customElem = V2TimCustomElem(
data: messagePayload['data'],
desc: messagePayload['discription'],
extension: messagePayload['extension'])
.toJson();
formatedMsg['customElem'] = customElem;
}
// 群系统通知消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS) {
final groupTipsElement = await V2TIMMessage.convertGroupTipsMessage(
message,
groupID: groupID.replaceAll("c2c_", "").replaceAll("group_", ""));
formatedMsg['groupTipsElem'] = groupTipsElement?.toJson();
}
// 图片消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE) {
final imageInfoArray = messagePayload['imageInfoArray'] as List;
final imagePath = jsToMap(imageInfoArray[0])['url'];
final uuid = messagePayload['uuid'];
final imageList = imageInfoArray.map((e) {
final element = jsToMap(e);
return V2TimImage(
type: element['type'],
height: element['height'],
width: element['width'],
size: element['size'],
uuid: uuid,
url: element['imageUrl']);
}).toList();
final imageElem = V2TimImageElem(path: imagePath, imageList: imageList);
formatedMsg['imageElem'] = imageElem.toJson();
}
//视频消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_VIDEO) {
final videoElem = V2TimVideoElem(
videoPath: messagePayload['videoUrl'],
duration: messagePayload['videoSecond'],
UUID: messagePayload['videoUUID'],
snapshotPath: messagePayload['thumbUrl'],
snapshotUUID: messagePayload['thumbUUID'],
snapshotSize: messagePayload['thumbSize'],
snapshotWidth: messagePayload['thumbWidth'],
snapshotHeight: messagePayload['thumbHeight'],
videoUrl: messagePayload['videoUrl'],
videoSize: messagePayload['videoSize']);
formatedMsg['videoElem'] = videoElem.toJson();
}
// 文件消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_FILE) {
final fileElem = V2TimFileElem(
path: messagePayload['fileUrl'],
fileName: messagePayload['fileName'],
UUID: messagePayload['uuid'],
fileSize: messagePayload['fileSize'])
.toJson();
formatedMsg['fileElem'] = fileElem;
}
// 地理位置消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_LOCATION) {
final locationElem = V2TimLocationElem(
desc: messagePayload['description'],
longitude: messagePayload['longitude'],
latitude: messagePayload['latitude']);
formatedMsg['locationElem'] = locationElem.toJson();
}
List<String> formateList(List<dynamic> list) =>
list.map((e) => e.toString()).toList();
// 合并消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_MERGER) {
final mergerElem = V2TimMergerElem(
title: messagePayload['title'],
abstractList: formateList(messagePayload['abstractList']),
isLayersOverLimit: messagePayload['layersOverLimit'] ?? false);
formatedMsg['mergerElem'] = mergerElem.toJson();
}
// 表情消息
if (elementType == MessageElemType.V2TIM_ELEM_TYPE_FACE) {
final faceMessage = V2TimFaceElem(
index: messagePayload['index'], data: messagePayload['data']);
formatedMsg['faceElem'] = faceMessage.toJson();
}
return formatedMsg;
}