buildHistoryMessage function
Widget
buildHistoryMessage(
- BuildContext context,
- NIMMessage message, {
- NIMTeam? teamInfo,
- 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);
}