onMessageRevoked method
Future<NIMResult<NIMMessage>>
onMessageRevoked(
- ChatMessage revokedMsg,
- String revokedMsgContent
)
Implementation
Future<NIMResult<NIMMessage>> onMessageRevoked(
ChatMessage revokedMsg, String revokedMsgContent) async {
//消息不准确,这种消息是离线时SDK返回的,但是iOS没有,所以统一不展示
if (revokedMsg.nimMessage.senderId != IMKitClient.account() &&
revokedMsg.nimMessage.isSelf == true) {
return NIMResult.failure(message: 'message error');
}
RevokedMessageInfo? revokedMessageInfo =
RevokedMessageInfo.getRevokedMessage(revokedMsg.nimMessage);
//创建一条特殊的占位消息
final msgResult = await MessageCreator.createTextMessage(revokedMsgContent);
if (msgResult.isSuccess && msgResult.data != null) {
var locationExtension = null;
//设置撤回标识
if (msgResult.data!.localExtension?.isNotEmpty == true) {
locationExtension = jsonDecode(msgResult.data!.localExtension!);
locationExtension![ChatMessage.keyRevokeMsg] = true;
locationExtension![ChatMessage.keyRevokeMsgContent] =
revokedMessageInfo?.toMap();
} else {
locationExtension = {
ChatMessage.keyRevokeMsg: true,
ChatMessage.keyRevokeMsgContent: revokedMessageInfo?.toMap()
};
}
msgResult.data!.localExtension = jsonEncode(locationExtension!);
msgResult.data!.messageConfig = NIMMessageConfig(
unreadEnabled: false, lastMessageUpdateEnabled: true);
msgResult.data!.isSelf =
revokedMsg.nimMessage.senderId == IMKitClient.account()
? true
: false;
//将占位消息插入到本地
return NimCore.instance.messageService.insertMessageToLocal(
message: msgResult.data!,
conversationId: revokedMsg.nimMessage.conversationId!,
senderId: revokedMsg.nimMessage.senderId,
createTime: revokedMsg.nimMessage.createTime);
}
return NIMResult.failure(message: 'build message error');
}