聊天消息

大约 4 分钟

聊天消息

聊天消息 MessagesViewChatUIKit 提供的主要组件, 用于展示用户之间的消息。

MessagesView 可以直接使用,也可以通过路由使用。

目前消息页面中提供以下功能:

  • 发送和接收消息, 包括文本、表情、图片、语音、视频、文件和名片消息。
  • 对消息进行复制、引用、撤回、删除、编辑、重新发送和审核。
  • 从服务器拉取漫游消息。
  • 清除本地消息。

消息相关功能,详见功能介绍文档

img

添加消息页面

添加消息页面时,可以直接添加到你需要展示的位置并传入 ChatUIKitProfile 信息。ChatUIKitProfile 为用户信息包装类,详见用户信息展示

同时,在会话列表 中点击会话,也会跳转至消息页面。


Widget build(BuildContext context) {
  return MessagesView(
    profile: ChatUIKitProfile.contact(
      id: chatterId,
    ),
  );
}

自定义消息页面

如果需要自定义消息页面,可以修改以下参数:

参数描述
final ChatUIKitProfile profile用户信息包装类,具体可以参考 用户信息展示
final MessageListViewController? controller消息列表控制器。
final ChatUIKitAppBar? appBar自定义消息页面 appBar 如不设置会使用默认的。
final bool enableAppBar是否开启 appBar,默认开启,关闭后将不再显示 appBar,传入的 appBar 也不再生效。
final String? title默认 appBar 展示的标题信息。如果使用自定义了 appBar 或者 enableAppBar = false, 则不生效。
final Widget? inputBar自定义输入组件。如不设置会使用默认的 ChatUIKitInputBar
final CustomTextEditingController? inputBarTextEditingControllerinputBar 控制器。如果自定义了 inputBar 此处设置将不生效。
final bool showAvatar是否显示头像。
final bool showNickname是否显示昵称。
final MessageItemTapHandler? onItemTap消息点击事件,默认会处理视频、图片、音频类型消息。自定义时如果需要拦截点击,返回 true, 如果不拦截,返回 false
final MessageItemTapHandler? onItemLongPress消息长按事件,长按后默认会弹出菜单,自定义时如果需要拦截点击,返回 true, 如果不拦截,返回 false
final MessageItemTapHandler? onDoubleTap消息双击事件,默认没有实现。自定义时如果需要拦截点击,返回 true, 如果不拦截,返回 false
final MessageItemTapHandler? onAvatarTap头像点击事件,默认会跳转到消息发送方的联系人详情页。如果发送方不是好友,则调到添加好友详情页,自定义时如果需要拦截点击,返回 true;如果不拦截,返回 false
final MessageItemTapHandler? onAvatarLongPress头像长按事件,默认没有实现。自定义时如果需要拦截点击,返回 true;如果不拦截,返回 false
final MessageItemTapHandler? onNicknameTap昵称长按事件,默认没有实现。自定义时如果需要拦截点击,返回 true, 如果不拦截,返回 false
final ChatUIKitMessageListViewBubbleStyle bubbleStyle消息气泡样式。目前提供两种样式 ChatUIKitMessageListViewBubbleStyle.arrow(默认), ChatUIKitMessageListViewBubbleStyle.noArrow
final MessageItemBuilder? itemBuilder消息 item 自定义 builder。如果需要重写消息样式(包括头像,昵称,消息气泡, 消息引用等所有样式),在此处实现。
final MessageItemBuilder? alertItemBuilder提示消息 item 自定义 builder。如果需要重写提示消息样式,在此处实现。
final FocusNode? focusNode输入控件焦点控制器,不建议设置。如果自定义了 inputBar 则设置不生效。
final List<ChatUIKitBottomSheetItem>? morePressActions默认 inputBar 中提供的 更多按钮菜单项。如不设置会使用默认菜单。自定义inputBar 后不生效。
final MessagesViewMorePressHandler? onMoreActionsItemsHandler点击 默认 inputBar 时回调,可以返回一个新的菜单列表。如返回 null 或不实现,则使用 morePressActions 中设置的内容,如果没设置 morePressActions 则使用默认的。
final List<ChatUIKitBottomSheetItem>? longPressActions消息长按菜单, 如不设置会使用默认菜单。
final MessagesViewItemLongPressHandler? onItemLongPressHandler消息长按菜单项时回调,可以返回一个新的菜单列表。如返回 null 或不实现,则使用 longPressActions 中设置的内容,如果没设置 longPressActions 则使用默认的。
final bool? forceLeft强制所有消息在左侧。
final Widget? emojiWidget表情 widget,如果不设置则使用默认的。
final MessageItemBuilder? replyBarBuilder自定义 replyBar 组件, 用于在消息引用时临时在输入框上方展示消息内容,如不设置会使用默认的 ChatUIKitReplyBar
final Widget Function(BuildContext context, QuoteModel model)? quoteBuilder自定义消息引用在展示时的样式。如不设置则使用默认样式。
final bool Function(BuildContext context, Message message)? onErrorTapHandler;点击消息发送失败红点时回调。如不设置则会触发重发消息。
final MessageItemBubbleBuilder? bubbleBuilder消息气泡。如果需要自定义消息气泡需要在此处实现,如果不设置则默认使用 ChatUIKitMessageListViewBubble
final MessageBubbleContentBuilder? bubbleContentBuilder消息气泡内容。如果需要自定义实现气泡内容需要在此处实现,如果不设置则使用默认。
final String? attributes扩展参数,会传入到下一个页面。