Native (C ABI) IMKit 组件 API

本页汇总 10 个 IMKit 组件的 props / events / behaviors 与各端公开符号,便于按组件查阅;每一节都可从侧边栏「组件」进入独立页面。

概要表​

组件职责PropsEvents数据源锚点
ConversationListView会话列表43IMLib.getConversationList / CONVERSATION 事件增量更新查看
ChatView会话详情(消息流 + 输入区)812—查看
MessageBubble消息气泡(按内容类型渲染)98—查看
MessageInput输入区57—查看
Avatar头像40—查看
UnreadBadge未读/提及角标30—查看
TimeSeparator时间分隔/格式化20—查看
MessageStatusIndicator发送状态30—查看
Theme主题令牌20—查看
IMKitFacade组件门面/挂载入口12—查看

ConversationListView​

会话列表

Props​

属性类型必填说明
conversationsConversation[]是会话数组(来自 IMLib.getConversationList / CONVERSATION 事件)
activeTargetIdstring否当前高亮会话的 targetId
themeTheme否主题对象(mode + 9 个颜色令牌)
options{showPinned:bool,showUnread:bool,showDraft:bool,showMention:bool}否显示选项(置顶 / 未读 / 草稿 / @ 提及):{ showPinned:bool, showUnread:bool, showDraft:bool, showMention:bool }

Events​

事件参数说明
selectconversation点击会话,宿主负责跳转到 ChatView
longpressconversation长按会话,宿主展示操作菜单(置顶 / 免打扰 / 删除)
refresh—下拉刷新,宿主重新拉取会话列表

Behaviors​

  • 排序:置顶优先,其余按 updatedAt 倒序
  • 未读角标:unreadCount>0 显示;>99 显示 99+;mention count 独立角标
  • 免打扰(notificationLevel=2)显示静音图标且不显示红点(保留数字可选)
  • 空闲(无会话)显示空态;加载中显示骨架
  • 点击会话触发 select,宿主负责跳转 ChatView

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.conversationlist.ConversationListFragment
WebIMKit.mount(container, 'ConversationListView', props)
ElectronConversationListView(props: {conversations: Conversation[]; activeTargetId?: string; theme?: Theme; options?: …
macOS宿主自渲染(SDK 不导出该组件)
FlutterConversationListView(...)
Native (C ABI)im_kit_conversation_model_new(im_client_t*)
iOSIMPConversationListView
HarmonyOS(预留)struct ConversationListView

ChatView​

会话详情(消息流 + 输入区)

Props​

属性类型必填说明
conversationTypeConversationType是会话类型枚举(ConversationType)
targetIdstring是目标会话 ID(单聊为 userId,群聊为 groupId)
messagesMessage[]是消息数组(来自 IMLib getHistoryMessages / MESSAGES 事件)
currentUserIdstring是当前登录用户 ID(用于区分气泡方向与已读)
hasMorebool是是否还有更早历史(决定是否展示「加载更多」)
showReadCountbool否是否显示已读人数(群聊 n/m)
onReactionClick(reactionId:string)=>void否—
onReactionLongPress(message:Message)=>void否—

Events​

事件参数说明
loadMore—加载更多历史消息
sendTexttext,extras?发送文本(可选带 @ 提及 / 引用)
sendImageimage发送图片
sendFilefile发送文件
sendVoicevoice发送语音
sendLocationlocation发送位置
recallmessageId撤回消息
resendclientMsgId重发发送失败的消息
typingbool输入状态变化(true / false)
readReceiptmessageIds上报已读回执
reaction_clickreactionId宿主回调(参数见 IDL 事件定义)
reaction_longpressmessage宿主回调(参数见 IDL 事件定义)

Behaviors​

  • 倒序渲染(最新在底部);新消息到达自动滚底(用户上翻时给出“有新消息”提示)
  • 按 messageId 去重;本地先显示 pending 气泡,ack 后替换为服务端消息
  • 时间分隔:同一会话间隔 >5 分钟显示时间条
  • 撤回消息渲染为占位文案“消息已撤回”,不显示原文
  • 引用消息渲染引用块;@提及在文本中高亮
  • 已读回执:发送者可见已读人数/状态(群聊按 readCounts/totalMembers)
  • 翻页加载历史,beforeSeq 游标,hasMore=false 时显示“没有更多”
  • 向每个消息气泡透传 message.reactions / message.expansion,并转发 onReactionClick / onReactionLongPress(setMessages / appendMessages / 宿主变更消息后始终取最新值)

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.conversation.ChatFragment
WebIMKit.mount(container, 'ChatView', props)
ElectronChatView(props: {conversationType: ConversationType; targetId: string; messages: Message[]; currentUserId: str…
macOS宿主自渲染(SDK 不导出该组件)
FlutterChatView(...)
Native (C ABI)im_kit_message_model_new(im_client_t*, int conversation_type, const char* target_id)
iOSIMPChatView
HarmonyOS(预留)struct ChatView

MessageBubble​

消息气泡(按内容类型渲染)

Props​

属性类型必填说明
messageMessage是消息实体(IDL Message)
isMinebool是是否为当前用户发送
showStatusbool否是否显示发送状态
showReadCountbool否是否显示已读人数(群聊 n/m)
reactionsMessageReactionSummary[]否—
expansionRecord<string,string>否—
onReactionClick(reactionId:string)=>void否—
onReactionLongPress(message:Message)=>void否—
streamingbool否—

Events​

事件参数说明
longpressmessage长按会话,宿主展示操作菜单(置顶 / 免打扰 / 删除)
reaction_clickreactionId宿主回调(参数见 IDL 事件定义)
reaction_longpressmessage宿主回调(参数见 IDL 事件定义)
tapImageurl点击图片消息
tapFileurl,name点击文件消息
tapVoiceurl,duration点击语音消息
tapLocationlatitude,longitude点击位置消息
stream_chunkstreamId, text, complete宿主回调(参数见 IDL 事件定义)

Behaviors​

  • 回应 chip 按 reactionTime 升序排列(同值保持输入顺序)
  • hasCurrentUserReacted=true 的 chip 高亮为 active 态(主题色描边 + aria-pressed=true)
  • chip 计数 >99 显示 99+;计数<=0 或 reactionId 空的 chip 不渲染
  • 消息扩展徽标按 key:value 渲染,最多 3 对,超出部分显示 +N(N=未展示对数)
  • 气泡长按(pointerdown >=500ms)或右键触发 reaction_longpress(message) / onReactionLongPress,由宿主打开回应选择器
  • streaming=true 时 content.type=stream 渲染增量文本 + 生成中光标;complete 后收敛为普通文本气泡(streaming:false 可关闭)

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.conversation.provider.MessageItemProvider
WebIMKit.mount(container, 'MessageBubble', props)
ElectronMessageBubble(props: {message: Message; isMine: boolean; showStatus?: boolean; showReadCount?: boolean; onLong…
macOS宿主自渲染(SDK 不导出该组件)
FlutterMessageBubble(...)
Native (C ABI)im_kit_message_render_descriptor(const char* message_json, char** out_json)
iOSIMPMessageBubble
HarmonyOS(预留)struct MessageBubble

MessageInput​

输入区

Props​

属性类型必填说明
draftstring是草稿文本
disabledbool是是否禁用输入
mutedbool是是否被禁言(禁言时禁用发送并提示)
mentionCandidatesUserProfile[]否@ 候选成员列表
maxLengthint否最大输入长度(默认 5000)

Events​

事件参数说明
sendtext,extras?输入区发送文本
typingbool输入状态变化(true / false)
pickImage—选择图片
pickFile—选择文件
startRecord—宿主回调(参数见 IDL 事件定义)
pickLocation—选择位置
draftChangeddraft草稿变化

Behaviors​

  • 输入时 500ms 防抖触发 typing(true),3s 无输入触发 typing(false)
  • 被禁言(muted=true)禁用发送并提示;仍可查看
  • 草稿自动保存(IMLib.saveTextMessageDraft),发送成功后清空
  • 群聊支持 @ 选择器(全员/指定成员),生成 mentionedInfo

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.conversation.input.MessageInputBar
WebIMKit.mount(container, 'MessageInput', props)
ElectronMessageInput(props: {draft: string; disabled: boolean; muted: boolean; mentionCandidates?: UserProfile[]; maxL…
macOS宿主自渲染(SDK 不导出该组件)
FlutterMessageInput(...)
Native (C ABI)im_kit_message_model_add_pending
iOSIMPMessageInput
HarmonyOS(预留)struct MessageInput

Avatar​

头像

Props​

属性类型必填说明
userIdstring是用户 ID(用于生成首字与稳定背景色)
namestring否显示名称(可选,缺省取 userId)
urlstring否头像 URL(加载失败回退首字)
sizeint否头像尺寸(像素)

Events​

未声明事件。

Behaviors​

  • url 缺失或加载失败时显示姓名首字/末字,背景色由 userId 哈希稳定生成

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.widget.AvatarView
WebIMKit.mount(container, 'Avatar', props)
ElectronAvatar(props: {userId: string; name?: string; url?: string; size?: number})
macOS宿主自渲染(SDK 不导出该组件)
FlutterAvatarWidget(...)
Native (C ABI)im_kit_avatar_initials(const char* user_id, const char* name, char* out, size_t out_len)
iOSIMPAvatar
HarmonyOS(预留)struct Avatar

UnreadBadge​

未读/提及角标

Props​

属性类型必填说明
countint是未读数量(0 隐藏,>99 显示 99+)
mentionedCountint否@ 提及数量(独立角标)
mutedbool否是否被禁言(禁言时禁用发送并提示)

Events​

未声明事件。

Behaviors​

  • 0 隐藏;>99 显示 99+;muted 用灰点;提及用 @ 角标

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.widget.UnreadBadgeView
WebIMKit.mount(container, 'UnreadBadge', props)
ElectronUnreadBadge(props: {count: number; mentionedCount?: number; muted?: boolean})
macOS宿主自渲染(SDK 不导出该组件)
FlutterUnreadBadge(...)
Native (C ABI)im_kit_unread_badge_text(int count, char* out, size_t out_len)
iOSIMPUnreadBadge
HarmonyOS(预留)struct UnreadBadge

TimeSeparator​

时间分隔/格式化

Props​

属性类型必填说明
timestampint64是时间戳(epoch 毫秒)
nowint64否参照时间(便于测试注入;默认当前时间)

Events​

未声明事件。

Behaviors​

  • 当天 HH:mm;昨天“昨天 HH:mm”;7 天内“周X HH:mm”;更早 YYYY-MM-DD HH:mm

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.widget.TimeSeparatorView
WebIMKit.mount(container, 'TimeSeparator', props)
ElectronTimeSeparator(props: {timestamp: number; now?: number})
macOS宿主自渲染(SDK 不导出该组件)
FlutterTimeSeparator(...)
Native (C ABI)im_kit_format_time(int64_t timestamp_ms, int64_t now_ms, char* out, size_t out_len)
iOSIMPTimeSeparator
HarmonyOS(预留)struct TimeSeparator

MessageStatusIndicator​

发送状态

Props​

属性类型必填说明
status'sending'|'sent'|'delivered'|'read'|'failed'是发送状态:sending / sent / delivered / read / failed
readCountint否已读人数
totalMembersint否群成员总数(n/m 分母)

Events​

未声明事件。

Behaviors​

  • sending 转圈;failed 显示重发;单聊显示已读/未读;群聊显示 n/m

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.widget.MessageStatusView
WebIMKit.mount(container, 'MessageStatusIndicator', props)
ElectronMessageStatusIndicator(props: {status: 'queued' | 'sending' | 'sent' | 'delivered' | 'read' | 'failed'; readCo…
macOS宿主自渲染(SDK 不导出该组件)
FlutterMessageStatusIndicator(...)
Native (C ABI)im_kit_message_status_text(const char* message_json, int read_count, int total_members, char* out, size_t out_…
iOSIMPMessageStatusIndicator
HarmonyOS(预留)struct MessageStatusIndicator

Theme​

主题令牌

Props​

属性类型必填说明
mode'light'|'dark'是light / dark
colors{primary,background,surface,text,textSecondary,bubbleMine,bubbleOther,danger,mention}是主题颜色令牌集合:{ primary:, background:, surface:, text:, textSecondary:, bubbleMine:, bubbleOther:, danger:, mention: }

Events​

未声明事件。

Behaviors​

  • 默认跟随系统;宿主可覆盖令牌;暗色对比度满足可读性

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.theme.IMKitTheme
WebIMKit.mount(container, 'Theme', props)
ElectronTheme(props: {mode: 'light' | 'dark'; colors: {primary: string; background: string; surface: string; text: str…
macOS宿主自渲染(SDK 不导出该组件)
FlutterImkitTheme(...)
Native (C ABI)im_kit_theme_load(const char* json, im_kit_theme_t** out)
iOSIMPTheme
HarmonyOS(预留)class Theme

IMKitFacade​

组件门面/挂载入口

Props​

属性类型必填说明
options{container:any, appkey:string, serverUrl?:string, locale?:string, theme?:Theme, renderers?:map<string,function>}是显示选项(置顶 / 未读 / 草稿 / @ 提及):{ container:any, appkey:string, serverUrl?:string, locale?:string, theme?:Theme, renderers?:map<string,function> }

Events​

事件参数说明
ready—宿主回调(参数见 IDL 事件定义)
errorerr宿主回调(参数见 IDL 事件定义)

Behaviors​

  • mount/update/destroy 生命周期幂等;同一容器重复 mount 复用实例;组件销毁释放监听

各端公开符号​

平台符号 / 签名
Androidio.nipaas.imkit.IMKit
WebIMKit.mount(container, 'IMKit', props)
ElectronIMKit.mount(container: HTMLElement, component: ComponentType, props: object): {update(props: object): void; de…
macOS宿主自渲染(SDK 不导出该组件)
FlutterIMKit.start(...)
Native (C ABI)im_kit_version
iOSIMKitFacade
HarmonyOS(预留)class IMKitFacade:options: IMKitOptions{container,appkey,serverUrl?,locale?,theme?,renderers?};方法 mount(contai…

相关文档​