外观
会话与未读
会话列表是消息、未读和入口状态的汇总。Flutter SDK 通过共享会话控制器维护这些信息,UIKit 默认使用同一份状态;自定义页面也应从这里读取。
会话身份
单聊由两名用户共同确定,群聊由群 ID 确定。使用 MixinImConversationId.single(userA, userB) 或 MixinImConversationId.group(groupId) 生成标识,不根据昵称拼接 ID。
访问会话时,服务端校验用户状态、好友关系和群成员资格。
读取和更新
dart
final sdk = MixinImSdk.instance;
await sdk.conversationController.refresh();
final items = sdk.conversationController.conversations;
if (items.isNotEmpty) {
await sdk.conversations.update(
items.first.conversationId,
pinned: true,
);
}update 还接受 muted,用于会话免打扰。调用后通过共享控制器刷新界面。免打扰管理当前用户的通知偏好,群禁言管理成员的消息发送权限。
摘要与排序
当前账号本地可见的最新消息决定 lastMessage 与 lastMessageTime;服务端 activityTime 表示会话活动时间。列表优先展示置顶会话,再按最新消息时间或活动时间排序。
自定义页面直接使用共享控制器提供的摘要和排序结果,统一处理在线消息与历史补拉。
未读与已读
dart
await sdk.conversationController.markRead(
conversationId,
visibleMessageSequence,
sendReadReceipt: true,
);conversationId 和 visibleMessageSequence 取自当前会话与用户实际看到的消息,已读水位在服务端确认后推进。
设置 sendReadReceipt: false 仍会更新本人的已读水位,但不向单聊对端发送该次实时已读回执。总未读可以订阅 unreadCountStream,群申请数量等其他角标应与聊天未读分开处理。
隐藏、删除和清空
隐藏会话、删除会话入口和清空聊天内容分别使用对应 SDK 操作。界面说明操作影响的范围,再由 SDK 同步记录与会话状态。参见消息操作。