跳到主要内容

逐条消息已读功能

重要提示
  • Flutter IMKit 的逐条消息已读功能仅支持单聊和群聊。
  • 功能是否可用取决于当前 AppKey 的已读能力配置;Flutter IMKit 不转换历史的单聊/群聊已读回执数据。
  • 关闭功能会停止已读状态查询、上报和界面展示。

逐条消息已读功能在消息进入可见区域后上报接收消息的已读回执,发送端收到回执后更新消息状态。单聊显示未读圆圈或已读对勾;群聊显示未读、部分已读饼图或全部已读对勾。点击群聊状态可以打开已读/未读成员详情。

底层接口(发送回执、监听回执、查询统计和分页查询)请参考 Flutter IMLib 逐条消息已读功能

应用级配置

RongCloudAppProviders 默认启用逐条消息已读功能。可以在创建 Engine Provider 时限制会话类型或关闭功能:

Dart
RongCloudAppProviders.of(
child,
readReceiptOptions: const RCKReadReceiptV5Options(
enabled: true,
enabledConversationTypes: {
RCIMIWConversationType.private,
RCIMIWConversationType.group,
},
),
);

enabled: false 时不查询、不上报已读回执,也不显示状态。enabledConversationTypes 默认包含单聊和群聊,可只保留需要的会话类型。

会话页配置

通过 RCKChatPageConfig 控制当前会话页的展示:

Dart
RCKChatPage(
conversation: conversation,
config: RCKChatPageConfig(
readReceiptConfig: RCKMessageReadReceiptConfig(
enabled: true,
showIndicator: true,
),
),
)

enabled 控制当前页面是否使用已读功能,showIndicator 只控制消息气泡旁的状态标志,不影响回执查询、上报或缓存。可通过 indicatorConfig 覆盖颜色、尺寸、内边距和文案,通过 detailConfig 设置详情页分页大小、标题、页签文案和时间格式化器。

自定义显示

RCKChatPage 提供以下入口:

  • messageReadReceiptBuilder:自定义消息气泡旁的状态组件。
  • onReadReceiptTap:拦截状态点击;返回 true 表示由业务处理。
  • readReceiptDetailHeaderBuilder:自定义详情页标题和页签之间的区域。
  • readReceiptMemberBuilder:自定义已读或未读成员行。

Builder 的 BuildData 保留 RCKReadReceiptDisplayData 和 Flutter IMLib 原始消息、会话或用户对象,Flutter IMKit 不复制成另一套业务模型。

状态规则

  • 仅对支持的单聊、群聊以及可显示的发送消息查询状态;草稿、发送中、失败和系统通知不显示状态。
  • 历史消息查询结果可能异步返回,状态在结果到达后更新。
  • 群聊详情按已读和未读分页加载,详情页打开时显示当前快照,不承诺列表实时刷新。
  • 会话列表只对单聊中最后一条由当前用户发送的消息显示状态,群聊不显示会话列表状态。