onMessageRevoked method

Future<NIMResult<NIMMessage>> onMessageRevoked(
  1. ChatMessage revokedMsg,
  2. 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');
}