跳到主要内容

聊天页面(Builder 完全自定义 UI)

当 Config 无法满足需求时,可使用 Builder 完全自定义聊天页面的部分区域:AppBar、消息气泡、吸顶区等。下文列出可用 Builder 类型及其回调签名,并提供示例。

提示

由于消息列表与输入框的逻辑较为复杂,Flutter IMKit 暂不提供通过页面参数直接进行“完全自定义”的入口。若需深度自定义:

  • 方式一:继承 RCKChatPage,在子类中增加所需的 Builder 入口;
  • 方式二:改用 Flutter IMLib,自行实现完整的页面与交互。

入口组件

  • 组件:RCKChatPage
  • 可用 Builders:
    • ChatAppBarBuilder
    • Map<RCIMIWMessageType, CustomChatItemBubbleBuilder>(按消息类型注册气泡渲染)
    • stickyHeaderBuilder(吸顶区)

回调签名参考

  • 自定义消息气泡(按类型):
    • CustomChatItemBubbleBuilder = RCKMessageBubble Function({ required RCIMIWMessage message, bool? showTime, RCKBubbleConfig? config, required BuildContext context })
  • 消息交互回调:
    • MessageTapCallback = void Function(RCIMIWMessage message, BuildContext context)
    • MessageDoubleTapCallback = void Function(RCIMIWMessage message, BuildContext context)
    • MessageLongPressCallback = bool Function(RCIMIWMessage message, BuildContext context)(返回 true 表示拦截默认处理)
    • MessageSwipeCallback = void Function(RCIMIWMessage message, BuildContext context, SwipeDirection direction)

示例:自定义 UI 消息气泡

convo_page.dart
RCKMessageBubble customChatItemBubbleBuilders({
required RCIMIWMessage message,
bool? showTime,
RCKBubbleConfig? config,
required BuildContext context,
}) {
if (message.messageType == RCIMIWMessageType.nativeCustom) {
return NativeCustomMessageBubble(
message: message,
showTime: showTime ?? false,
alignment: Alignment.center,
withoutBubble: true,
config: config,
);
}
return RCKTextMessageBubble(message: message, showTime: showTime ?? false);
}

注册到聊天页:

example
RCKChatPage(
customChatItemBubbleBuilders: {
RCIMIWMessageType.nativeCustom: customChatItemBubbleBuilders,
},
)

示例:自定义 UI AppBar 与吸顶区

chat_page.dart
appBar: widget.appBarBuilder?.call(context, widget.config.appBarConfig)
?? RCKChatAppBarWidget(config: widget.config.appBarConfig, ...),

// 吸顶区
RCKMessageList(
stickyHeaderBuilder: widget.stickyHeaderBuilder,
)

若仅需修改样式而非结构,优先使用 Config,详见:聊天页面配置(Config 部分自定义 UI)