浏览 SDKs · Flutter
SDKsFlutter

事件概览

集中设置 OpenIM Flutter SDK listener,并按业务领域分发事件。

复制

OpenIM Flutter SDK 通过 listener 推送连接、同步、用户、好友、会话、会话分组、群组、消息和通话变化。各 manager 只保存一个对应 listener;后一次设置会替换 Dart 层此前保存的实例。因此应在应用状态层初始化时组合所有回调,并且每种 listener 只设置一次,不要在 Widget 的 build() 或各功能页面中重复设置。

集中设置 listener

下面展示应用级组合入口。handle* 函数的完整合并逻辑分别放在表格链接的事件归属页面。

Future<void> registerOpenIMListeners() async {
  await OpenIM.iMManager.userManager.setUserListener(
    OnUserListener(
      onSelfInfoUpdated: handleSelfInfoUpdated,
      onUserStatusChanged: handleUserStatusChanged,
    ),
  );

  await OpenIM.iMManager.friendshipManager.setFriendshipListener(
    OnFriendshipListener(
      onBlackAdded: handleBlackAdded,
      onBlackDeleted: handleBlackDeleted,
      onFriendAdded: handleFriendChanged,
      onFriendDeleted: handleFriendDeleted,
      onFriendInfoChanged: handleFriendChanged,
      onFriendApplicationAdded: handleFriendApplicationChanged,
      onFriendApplicationAccepted: handleFriendApplicationChanged,
      onFriendApplicationRejected: handleFriendApplicationChanged,
      onFriendApplicationDeleted: handleFriendApplicationDeleted,
    ),
  );

  await OpenIM.iMManager.conversationManager.setConversationListener(
    OnConversationListener(
      onNewConversation: handleNewConversations,
      onConversationChanged: handleConversationsChanged,
      onTotalUnreadMessageCountChanged: handleTotalUnreadChanged,
      onInputStatusChanged: handleInputStatusChanged,
      onSyncServerStart: handleSyncStart,
      onSyncServerProgress: handleSyncProgress,
      onSyncServerFinish: handleSyncFinish,
      onSyncServerFailed: handleSyncFailed,
    ),
  );

  await OpenIM.iMManager.groupManager.setGroupListener(
    OnGroupListener(
      onJoinedGroupAdded: handleJoinedGroupAdded,
      onJoinedGroupDeleted: handleJoinedGroupDeleted,
      onGroupInfoChanged: handleGroupInfoChanged,
      onGroupDismissed: handleGroupDismissed,
      onGroupMemberAdded: handleGroupMemberAdded,
      onGroupMemberDeleted: handleGroupMemberDeleted,
      onGroupMemberInfoChanged: handleGroupMemberInfoChanged,
      onGroupApplicationAdded: handleGroupApplicationChanged,
      onGroupApplicationAccepted: handleGroupApplicationChanged,
      onGroupApplicationRejected: handleGroupApplicationChanged,
      onGroupApplicationDeleted: handleGroupApplicationDeleted,
    ),
  );

  await OpenIM.iMManager.messageManager.setAdvancedMsgListener(
    OnAdvancedMsgListener(
      onRecvNewMessage: handleNewMessage,
      onRecvOfflineNewMessage: handleOfflineMessage,
      onRecvOnlineOnlyMessage: handleOnlineOnlyMessage,
      onMsgDeleted: handleMessageDeleted,
      onNewRecvMessageRevoked: handleMessageRevoked,
      onRecvC2CReadReceipt: handleC2CReadReceipts,
      onMessageModified: handleMessageModified,
      onChangedPinnedMsg: handlePinnedMessagesChanged,
    ),
  );

  await OpenIM.iMManager.messageManager.setCustomBusinessListener(
    OnCustomBusinessListener(
      onRecvCustomBusinessMessage: handleCustomBusinessMessage,
    ),
  );

  await OpenIM.iMManager.signalingManager.setSignalingListener(
    OnSignalingListener(
      onReceiveNewInvitation: handleIncomingCall,
      onInviteeAccepted: handleInviteeAccepted,
      onInviteeRejected: handleInviteeRejected,
      onInvitationCancelled: handleInvitationCancelled,
      onInvitationTimeout: handleInvitationTimeout,
      onInviteeAcceptedByOtherDevice: handleAcceptedElsewhere,
      onInviteeRejectedByOtherDevice: handleRejectedElsewhere,
      onHangup: handleHangup,
      onRoomParticipantConnected: handleParticipantConnected,
      onRoomParticipantDisconnected: handleParticipantDisconnected,
      onStreamChange: handleStreamChange,
      onReceiveCustomSignal: handleCustomSignal,
    ),
  );
}

会话分组 listener 由 ConversationGroupManager 单独保存,不在这个组合入口重复设置。它的完整注册、五类回调和状态合并方式见会话分组概览

固定版本没有对应的 remove 或 unset API。退出登录、切换账号或销毁状态层时,应停止向旧账号状态和已销毁 Widget 分发回调,并释放应用自己的引用;重新登录后用新账号的完整组合 listener 覆盖设置。

事件归属

事件范围合并标识完整处理页面
用户资料与在线状态userID用户概览
好友和黑名单userID分页获取好友列表
会话列表conversationID获取会话列表
会话分组conversationGroupID会话分组概览
总未读数当前登录用户维护总未读数
输入状态conversationID:userID上报输入状态
群组groupID群组概览
群成员groupID:userID群成员查询
入群申请groupID:userID入群申请概览
新消息conversationID:clientMsgID接收消息
消息删除conversationID:clientMsgID删除消息
消息撤回conversationID:clientMsgID撤回消息
消息修改conversationID:clientMsgID修改消息
置顶消息conversationID,消息按 clientMsgID置顶或取消置顶消息
单聊已读回执conversationID:clientMsgID标记会话已读
自定义业务通知业务协议中的 ID 或幂等键接收自定义业务消息
通话roomID,参与者结合用户 ID通话事件
通话自定义信令roomID:eventID发送自定义信令

监听初始化同步

同步生命周期也属于唯一的 OnConversationListener。它描述 SDK 数据同步,不是某个查询 API 的 Future 回调。

void handleSyncStart(bool? reinstalled) {
  setSyncState(status: 'syncing', progress: 0, reinstalled: reinstalled == true);
}

void handleSyncProgress(int? progress) {
  setSyncState(status: 'syncing', progress: progress ?? 0);
}

void handleSyncFinish(bool? reinstalled) {
  setSyncState(status: 'ready', progress: 100, reinstalled: reinstalled == true);
  reloadVisibleSnapshots();
}

void handleSyncFailed(bool? reinstalled) {
  setSyncState(status: 'failed', reinstalled: reinstalled == true);
}

onSyncServerStart 用于进入同步状态,onSyncServerProgress 更新进度,完成后重新查询当前界面所需快照,失败时记录错误并等待重试或连接恢复。事件增量、查询快照和 Future 完成始终按独立阶段处理。