外观
发送第一条消息
本页使用 Flutter 无界面 SDK,演示已登录用户向另一测试用户发送文本。开始前,应完成 登录与 IM Session,并确保两个账号已同步、关系及权限允许互发消息。
创建聊天控制器
sdk 使用已连接的实例,peerUserId 来自宿主选中的联系人。下面的调用均使用 SDK 公共 API,不需要自己拼 WebSocket 包。
dart
import 'package:mixinim_sdk/mixinim_sdk.dart';
MixinImChatController createDirectChat(
MixinImSdk sdk,
String peerUserId,
) {
final currentUserId = sdk.currentSession!.userId;
final conversation = MixinImConversation(
conversationId:
MixinImConversationId.single(currentUserId, peerUserId),
conversationType: MixinImConversationType.single,
targetId: peerUserId,
);
return MixinImChatController(
conversation: conversation,
messages: sdk.messages,
conversations: sdk.conversations,
markRead: sdk.conversationController.markRead,
sendMessage: sdk.sendMessage,
currentUserId: currentUserId,
messageEvents: sdk.messageEventStream,
);
}完成 Session 连接后调用此函数。已有会话可直接使用会话列表提供的 MixinImConversation,保留名称、头像和序列等信息。
加载与发送
dart
final chat = createDirectChat(MixinImSdk.instance, '90002');
await chat.loadInitial();
await chat.sendText('你好,这是第一条测试消息。');
// 页面读取 chat.messages、chat.error,并监听控制器变化。
// 页面永久离开时释放该页面持有的控制器:chat.dispose();90002 是演示 ID,接入时替换为有权限通信的目标账号。调用后订阅控制器的状态与错误,分别呈现发送中、已发送、已读和失败。
发送后如何判断结果
| 状态 | 含义 | 页面建议 |
|---|---|---|
| 发送中 | 本机已创建发送记录 | 保留气泡,显示发送进度 |
| 已发送 | 服务端确认接受 | 去掉发送中提示 |
| 已读 | 收到符合当前功能设置的已读状态 | 按产品规则展示 |
| 失败 | 网络或业务校验未通过 | 展示可理解原因,区分可重试与明确拒绝 |
后续变化按同一个 clientMessageId 合并到原消息,消息排序使用服务端序列。
接入检查
完成双端收发后,检查断网恢复、应用重启、账号切换和主动退出时的消息展示、历史恢复与账号隔离。更多内容见 发送与投递、历史与搜索。