buildHistoryMessage function

Widget buildHistoryMessage(
  1. BuildContext context,
  2. NIMMessage message, {
  3. NIMTeam? teamInfo,
  4. String? keyword,
})

构建消息内容 无边框,无方向 内容不可点击

Implementation

Widget buildHistoryMessage(
  BuildContext context,
  NIMMessage message, {
  NIMTeam? teamInfo,
  String? keyword,
}) {
  final chatUIConfig = ChatKitClient.instance.chatUIConfig;
  var messageItemBuilder = chatUIConfig.messageBuilder;
  Widget? content;
  switch (message.messageType) {
    case NIMMessageType.text:
      if (messageItemBuilder?.textMessageBuilder != null) {
        content = messageItemBuilder!.textMessageBuilder!(message);
      } else {
        content = Container(
          decoration: BoxDecoration(
            borderRadius: BorderRadius.only(
              bottomRight: Radius.circular(12),
              bottomLeft: Radius.circular(12),
              topRight: Radius.circular(12),
            ),
            color: '#E8EAED'.toColor(),
          ),
          child: ChatKitMessageTextItem(
            message: message,
            chatUIConfig: chatUIConfig,
            keyword: keyword,
          ),
        );
      }
      break;
    case NIMMessageType.audio:
      if (messageItemBuilder?.audioMessageBuilder != null) {
        content = messageItemBuilder!.audioMessageBuilder!(message);
      } else {
        content = Container(
          decoration: BoxDecoration(
            border: Border.all(color: '#F0F0F0'.toColor()),
            borderRadius: const BorderRadius.only(
              topLeft: Radius.circular(12),
              topRight: Radius.circular(12),
              bottomLeft: Radius.circular(12),
              bottomRight: Radius.circular(12),
            ),
          ),
          child: ChatKitMessageAudioItem(
            message: message,
            showDirection: false,
          ),
        );
      }
      break;
    case NIMMessageType.image:
      if (messageItemBuilder?.imageMessageBuilder != null) {
        content = messageItemBuilder!.imageMessageBuilder!(message);
      } else {
        content = ChatKitMessageImageItem(
          message: message,
          showDirection: false,
        );
      }
      break;
    case NIMMessageType.video:
      if (messageItemBuilder?.videoMessageBuilder != null) {
        content = messageItemBuilder!.videoMessageBuilder!(message);
      } else {
        content = ChatKitMessageVideoItem(message: message);
      }
      break;
    case NIMMessageType.notification:
      //如果被过滤,则返回空Widget
      if (!_filterNotification(message, teamInfo: teamInfo)) {
        return Container();
      }
      if (messageItemBuilder?.notifyMessageBuilder != null) {
        content = messageItemBuilder!.notifyMessageBuilder!(message);
      } else {
        content = ChatKitMessageNotificationItem(
          message: message,
          teamInfo: teamInfo,
        );
      }
      break;
    case NIMMessageType.tip:
      if (messageItemBuilder?.tipsMessageBuilder != null) {
        content = messageItemBuilder!.tipsMessageBuilder!(message);
      } else {
        content = ChatKitMessageTipsItem(message: message);
      }
      break;
    case NIMMessageType.file:
      if (messageItemBuilder?.fileMessageBuilder != null) {
        content = messageItemBuilder!.fileMessageBuilder!(message);
      } else {
        content = ChatKitMessageFileItem(message: message);
      }
      break;

    case NIMMessageType.location:
    default:
      if (message.messageType == NIMMessageType.location &&
          messageItemBuilder?.locationMessageBuilder != null) {
        content = messageItemBuilder!.locationMessageBuilder!.call(message);
        break;
      }
      if (message.messageType == NIMMessageType.call &&
          messageItemBuilder?.avChatMessageBuilder != null) {
        content = messageItemBuilder!.avChatMessageBuilder!.call(message);
        break;
      }
      if (message.messageType == NIMMessageType.custom) {
        var mergedMessage = MergeMessageHelper.parseMergeMessage(message);
        var multiLineMap = MessageHelper.parseMultiLineMessage(message);
        var multiLineTitle = multiLineMap?[ChatMessage.keyMultiLineTitle];
        var multiLineBody = multiLineMap?[ChatMessage.keyMultiLineBody];
        if (mergedMessage != null) {
          if (messageItemBuilder?.mergedMessageBuilder != null) {
            content = messageItemBuilder!.mergedMessageBuilder!.call(message);
          } else {
            content = Container(
              decoration: BoxDecoration(
                borderRadius: BorderRadius.only(
                  bottomRight: Radius.circular(12),
                  bottomLeft: Radius.circular(12),
                  topRight: Radius.circular(12),
                ),
                color: '#E8EAED'.toColor(),
              ),
              child: ChatKitMessageMergedItem(
                message: message,
                mergedMessage: mergedMessage,
                showMargin: false,
                diffDirection: false,
                chatUIConfig: ChatKitClient.instance.chatUIConfig,
              ),
            );
          }
          break;
        } else if (multiLineTitle != null) {
          content = Container(
            decoration: BoxDecoration(
              borderRadius: BorderRadius.only(
                bottomRight: Radius.circular(12),
                bottomLeft: Radius.circular(12),
                topRight: Radius.circular(12),
              ),
              color: '#E8EAED'.toColor(),
            ),
            child: ChatKitMessageMultiLineItem(
              message: message,
              chatUIConfig: ChatKitClient.instance.chatUIConfig,
              title: multiLineTitle,
              body: multiLineBody,
              titleMaxLines: 1,
              bodyMaxLines: 2,
            ),
          );
          break;
        }
      }

      ///插件消息
      Widget? pluginBuilder = NimPluginCoreKit()
          .messageBuilderPool
          .buildMessageContent(context, message);
      if (pluginBuilder != null) {
        return pluginBuilder;
      }
      if (messageItemBuilder?.extendBuilder != null) {
        if (messageItemBuilder?.extendBuilder![message.messageType] != null) {
          content = messageItemBuilder!.extendBuilder![message.messageType]!(
            message,
          );
          break;
        }
      }
      content = ChatKitMessageNonsupportItem();
      break;
  }
  return IgnorePointer(child: content);
}