getConversationList
(点击查看详情) 获取会话列表。该接口拉取的是本地缓存的会话,如果服务器会话有更新,SDK 内部会自动同步,然后在 V2TIMConversationListener
回调告知客户。V2TIMConversation
对象。目前 IM SDK 对会话列表的排序规则为:orderKey
做了排序。orderKey
值越大,代表该会话排序越靠前。orderKey
字段是整型数,当发送新消息、接收新消息、设置草稿或置顶会话时,会话被激活,orderKey
字段会增大。lastMessage
-> timestamp
做了排序。timestamp
越大,会话越靠前。lastMessage
为空(例如清空会话消息)。如果您使用 5.5.892 以前的 SDK,使用 lastMessage
排序时需要额外处理这种异常。我们建议您升级到 5.5.892 及以后的版本,使用 orderKey
字段排序。getConversationList
实现一次性拉取或分页拉取。参考下文说明。V2TimValueCallback<V2TimConversationResult> convList = await TencentImSDKPlugin.v2TIMManager.getConversationManager().getConversationList(nextSeq: '0',count: 100);
getConversationList
时,指定参数 nextSeq
为 0(表示从头开始拉取会话列表),指定 count
为 50(表示一次拉取 50 个会话对象)。getConversationList
的回调结果 V2TIMConversationResult
中会包含 nextSeq
(下次分页拉取的字段)、isFinish
(会话拉取是否完成)。isFinished
为 true,表示所有会话已经拉取完成。isFinished
为 false,表示还有更多的会话可以拉取。此时并不意味着要立刻开始拉取 “下一页” 的会话列表。在常见的通信软件中,分页拉取通常由用户的滑动操作触发的,用户每上拉一次会话列表就触发一次分页拉取。getConversationList
接口,并传入新一轮的 nextSeq
和 count
参数(数值来自上一次拉取返回的 V2TIMConversationResult
对象)。isFinished
返回 true。//获取会话列表V2TimValueCallback<V2TimConversationResult> getConversationListRes =await TencentImSDKPlugin.v2TIMManager.getConversationManager().getConversationList(count: 100, //分页拉取的个数,一次分页拉取不宜太多,会影响拉取的速度,建议每次拉取 100 个会话nextSeq: "0"//分页拉取的游标,第一次默认取传 0,后续分页拉传上一次分页拉取成功回调里的 nextSeq);if (getConversationListRes.code == 0) {//拉取成功bool? isFinished = getConversationListRes.data?.isFinished;//是否拉取完String? nextSeq = getConversationListRes.data?.nextSeq;//后续分页拉取的游标List<V2TimConversation?>? conversationList =getConversationListRes.data?.conversationList;//此次拉取到的消息列表//如果没有拉取完,使用返回的nextSeq继续拉取直到isFinished为trueif (!isFinished!) {V2TimValueCallback<V2TimConversationResult> nextConversationListRes =await TencentImSDKPlugin.v2TIMManager.getConversationManager().getConversationList(count: 100, nextSeq: nextSeq = "0");//使用返回的nextSeq继续拉取直到isFinished为true}getConversationListRes.data?.conversationList?.forEach((element) {element?.conversationID;//会话唯一 ID,如果是单聊,组成方式为 c2c_userID;如果是群聊,组成方式为 group_groupID。element?.draftText;//草稿信息element?.draftTimestamp;//草稿编辑时间,草稿设置的时候自动生成。element?.faceUrl;//会话展示头像,群聊头像:群头像;单聊头像:对方头像。element?.groupAtInfoList;//群会话 @ 信息列表,通常用于展示 “有人@我” 或 “@所有人” 这两种提醒状态。element?.groupID;//当前群聊 ID,如果会话类型为群聊,groupID 会存储当前群的群 ID,否则为 null。element?.groupType;//当前群聊类型,如果会话类型为群聊,groupType 为当前群类型,否则为 null。element?.isPinned;//会话是否置顶element?.lastMessage;//会话最后一条消息element?.orderkey;//会话排序字段element?.recvOpt;//消息接收选项element?.showName;//会话展示名称,群聊会话名称优先级:群名称 > 群 ID;单聊会话名称优先级:对方好友备注 > 对方昵称 > 对方的 userID。element?.type;//会话类型,分为 C2C(单聊)和 Group(群聊)。element?.unreadCount;//会话未读消息数,直播群(AVChatRoom)不支持未读计数,默认为 0。element?.userID;//对方用户 ID,如果会话类型为单聊,userID 会存储对方的用户 ID,否则为 null。});}
TencentImSDKPlugin.v2TIMManager.getConversationManager().addConversationListener(listener: V2TimConversationListener(onConversationChanged: (conversationList) {},//其他 ));
事件 | 说明 | 建议 |
onSyncServerStart | 同步服务器会话开始 | SDK 会在登录成功或者断网重连后自动同步服务器会话,您可以监听这个事件做一些 UI 进度展示操作。 |
onSyncServerFinish | 同步服务器会话完成 | 如果会话有变更,会通过 onNewConversation /onConversationChanged 回调告知。 |
onSyncServerFailed | 同步服务器会话失败 | 您可以监听这个事件做一些 UI 异常展示操作。 |
onNewConversation | 有会话新增 | 例如收到一个新同事发来的单聊消息、被拉入了一个新的群组中,此时可以重新对会话列表做排序。 |
onConversationChanged | 有会话更新 | 例如未读计数发生变化、最后一条消息被更新等,此时可以重新对会话列表做排序。 |
onTotalUnreadMessageCountChanged | 会话未读总数变更通知 | |
onConversationGroupCreated | 会话分组被创建 | 会话分组相关能力。 |
onConversationGroupDeleted | 会话分组被删除 | 会话分组相关能力。 |
onConversationGroupNameChanged | 会话分组名变更 | 会话分组相关能力。 |
onConversationsAddedToGroup | 会话分组新增会话 | 会话分组相关能力。 |
onConversationsDeletedFromGroup | 会话分组删除会话 | 会话分组相关能力。 |
lastMessage
排序,但是需要注意处理 lastMessage
为空(例如清空会话消息)的情况。orderKey
字段排序。//设置群组监听器V2TimGroupListener listener = V2TimGroupListener(onApplicationProcessed:(String groupID, V2TimGroupMemberInfo opUser, bool isAgreeJoin,String opReason) async {//加群请求已经被群主或管理员处理了(只有申请人能够收到)//groupID 群 ID//opUser 处理人//isAgreeJoin 是否同意加群//opReason 处理原因}, onGrantAdministrator: (String groupID, V2TimGroupMemberInfo opUser,List<V2TimGroupMemberInfo> memberList) async {//指定管理员身份//groupID 群 ID//opUser 处理人//memberList 被处理的群成员}, onGroupAttributeChanged:(String groupID, Map<String, String> groupAttributeMap) async {//收到群属性更新的回调//groupID 群 ID//groupAttributeMap 群的所有属性}, onGroupCreated: (String groupID) async {//创建群(主要用于多端同步)//groupID 群 ID}, onGroupDismissed: (String groupID, V2TimGroupMemberInfo opUser) async {//群被解散了(全员能收到)//groupID 群 ID//opUser 处理人}, onGroupInfoChanged:(String groupID, List<V2TimGroupChangeInfo> changeInfos) async {//群信息被修改(全员能收到)//groupID 群 ID//changeInfos 修改的群信息}, onGroupRecycled: (String groupID, V2TimGroupMemberInfo opUser) async {//群被回收(全员能收到)//groupID 群 ID//opUser 处理人}, onMemberEnter:(String groupID, List<V2TimGroupMemberInfo> memberList) async {//有用户加入群(全员能够收到)//groupID 群 ID//memberList 加入的成员}, onMemberInfoChanged: (String groupID,List<V2TimGroupMemberChangeInfo> v2TIMGroupMemberChangeInfoList) async {//群成员信息被修改,仅支持禁言通知(全员能收到)。//groupID 群 ID//v2TIMGroupMemberChangeInfoList 被修改的群成员信息}, onMemberInvited: (String groupID, V2TimGroupMemberInfo opUser,List<V2TimGroupMemberInfo> memberList) async {//某些人被拉入某群(全员能够收到)//groupID 群 ID//opUser 处理人//memberList 被拉进群成员}, onMemberKicked: (String groupID, V2TimGroupMemberInfo opUser,List<V2TimGroupMemberInfo> memberList) async {//某些人被踢出某群(全员能够收到)//groupID 群 ID//opUser 处理人//memberList 被踢成员}, onMemberLeave: (String groupID, V2TimGroupMemberInfo member) async {//有用户离开群(全员能够收到)//groupID 群 ID//member 离开的成员}, onQuitFromGroup: (String groupID) async {//主动退出群组(主要用于多端同步,直播群(AVChatRoom)不支持)//groupID 群 ID}, onReceiveJoinApplication:(String groupID, V2TimGroupMemberInfo member, String opReason) async {//有新的加群请求(只有群主或管理员会收到)//groupID 群 ID//member 申请人//opReason 申请原因}, onReceiveRESTCustomData: (String groupID, String customData) async {//收到 RESTAPI 下发的自定义系统消息//groupID 群 ID//customData 自定义数据}, onRevokeAdministrator: (String groupID, V2TimGroupMemberInfo opUser,List<V2TimGroupMemberInfo> memberList) async {//取消管理员身份//groupID 群 ID//opUser 处理人//memberList 被处理的群成员}, onTopicCreated: (String groupID, String topicID) async {//话题创建通知//groupID 创建话题的群组id//topicID 创建的话题id}, onTopicDeleted: (String groupID, List<String> topicIDList) async {//话题创建通知//groupID 删除话题的群组id//topicIDList 删除的话题id列表}, onTopicInfoChanged: (String groupID, V2TimTopicInfo topicInfo) async {//话题信息更新通知//groupID 话题信息更新的群组id//topicInfo 话题信息更新的属性});//添加群组监听器TencentImSDKPlugin.v2TIMManager.addGroupListener(listener: listener);
conversationManager.removeConversationListener(conversationListener);
lastMessage
的消息V2TIMConversation
的 lastMessage
作为数据源实现。但是某些场景下,如果您不希望一些消息(例如系统提示等)显示为会话的最新消息,可以在 sendMessage
时设置 isExcludedFromLastMessage
为 false
/no
。isExcludedFromLastMessage
仅Flutter SDK 4.0.0 及以上版本支持。
本页内容是否解决了您的问题?