Flutter

最近会话

更新时间: 2024/03/07 11:13:40

本地最近会话

功能概述

最近会话列表,即最近联系人列表。当收到新联系人的消息时,SDK 会自动生成这个消息对应的本地最近会话。它记录了包括联系人帐号、联系人类型、最近一条消息的时间、消息状态、消息内容、未读条数等信息。

最近会话原型NIMSession

以下表格中,类型末尾加“?”(如 “String?”)表示对应的参数为可选参数。

类型 属性 说明
String sessionId 最近联系人的 ID(好友帐号,群 ID 等)
String? senderAccount 获取与该联系人的最后一条消息的发送方的帐号
String? senderNickname 获取与该联系人的最后一条消息的发送方的昵称
NIMSessionType sessionType 获取会话类型
String? lastMessageId 最近一条消息的消息 ID [NIMMessage.uuid]
NIMMessageType? lastMessageType 获取最近一条消息的消息类型
NIMMessageStatus? lastMessageStatus 获取最近一条消息状态
String? lastMessageContent 获取最近一条消息的缩略内容。对于文本消息,返回文本内容。对于其他消息,返回一个简单的说明内容
int? lastMessageTime 获取最近一条消息的时间,单位为 ms
NIMMessageAttachment? lastMessageAttachment 如果最近一条消息是扩展消息类型,获取消息的附件内容. 在最近消息列表,第三方 app 可据此自主定义显示的缩略语
int? unreadCount 获取该联系人的未读消息条数
Map<String, dynamic>? extension 扩展字段
int? tag 设置一个标签,用于做联系人置顶、最近会话列表排序等扩展用途。 SDK 不关心 tag 的意义。 第三方 app 需要事先规划好可能的用途

获取最近会话

获取最近会话列表,一般用于首页显示会话列表

获取最近会话列表

  • API 原型
dartclass MessageService {
    /// 获取最近会话列表
    ///
    /// 最近会话列表,即最近联系人列表。当收到新联系人的消息时,SDK会自动生成这个消息对应的本地最近会话。
    /// 它记录了包括联系人帐号、联系人类型、最近一条消息的时间、消息状态、消息内容、未读条数等信息。
    ///
    /// [limit] 获取本地会话的数量,最大为100;如果不设置该值,会返回全量会话列表
    Future<NIMResult<List<NIMSession>>> querySessionList([int? limit]) async {
      return _platform.querySessionList(limit);
    }
}
  • 示例
dartNIMResult<List<NIMSession>> result = await NimCore.instance.messageService.querySessionList(100);

获取最近会话列表(自定义)

过滤指定消息类型

当希望返回的会话的最近一条消息不是某一类消息时,可以使用以下过滤接口。

如希望最近一条消息为非文本消息时,使用该接口的返回的会话,将取最近的一条非文本的消息作为最近一条消息。

  • API 原型
dartclass MessageService {
    /// [filterMessageType] 过滤消息类型
    Future<NIMResult<List<NIMSession>>> querySessionListFiltered(
        List<NIMMessageType> filterMessageTypeList);
}
  • 示例
dartNIMResult<List<NIMSession>> result =
await NimCore.instance.messageService.querySessionListFiltered([NIMMessageType.text, NIMMessageType.image]);

获取指定的最近会话

dartclass MessageService {
    /// [sessionInfo] - 会话信息
    Future<NIMResult<NIMSession>> querySession(NIMSessionInfo sessionInfo);
}

创建最近会话

创建一个空的最近会话

dartclass MessageService {
    /// 创建一条空的联系人会话,并保存到数据库中
    /// [sessionId] - 会话id ,对方帐号或群组id。
    /// [sessionType] - 会话类型
    /// [tag] - 会话tag , eg:置顶标签(UIKit中的实现: RECENT_TAG_STICKY),用户参照自己的tag 实现即可, 如不需要,传 0 即可
    /// [time] - 会话时间 ,单位为ms。
    /// [linkToLastMessage] - 是否放入最后一条消息的相关信息
    Future<NIMResult<NIMSession>> createSession({
        required String sessionId,
        required NIMSessionType sessionType,
        int tag = 0,
        required int time,
        bool linkToLastMessage = false,
      });
}

此外,当某条消息无对应的本地最近会话时,可以使用以下接口根据消息创建本地最近会话。

dartclass MessageService {
    /// 使用消息更新会话对象(Windows和macOS暂不支持)
    /// [message] 消息对象
    /// [needNotify] 是否需要发送通知
    Future<NIMResult<void>> updateSessionWithMessage({
      required NIMMessage message,
      bool needNotify = false,
    });
}

更新最近会话

更新最近会话

dartclass MessageService {
    /// 更新会话对象(Windows和macOS暂不支持)
    /// [needNotify] 是否需要发送通知
    /// 仅支持修改 tag 以及 extension
    Future<NIMResult<void>> updateSession({
      required NIMSession session,
      bool needNotify = false,
    });
}

监听最近会话变更

当最近会话对象以及其属性发生变更时,SDK 会更新对应聊天对象的最近联系人资料,并发出最近联系人更新通知。

  • API 原型
dartclass MessageService {
    /// 最近会话更新
    Stream<List<NIMSession>> get onSessionUpdate;
}

未读数

获取未读数

  • API 原型
dartclass MessageService {
    /// 获取未读数总数
    /// [queryType] 查询类型
    Future<NIMResult<int>> queryTotalUnreadCount({
        NIMUnreadCountQueryType queryType = NIMUnreadCountQueryType.all
    });
}

示例

dartNIMResult<int> result = await NimCore.instance.messageService.queryTotalUnreadCount();

清空指定会话未读数

  • API 原型
dart/// 清除未读数
  ///
  /// [sessionInfoList] 请求列表
  ///
  /// 返回不能成功处理的请求列表
  Future<NIMResult<List<NIMSessionInfo>>> clearSessionUnreadCount(
    List<NIMSessionInfo> sessionInfoList,
  ) {
    return _platform.clearSessionUnreadCount(sessionInfoList);
  }

示例

dartNIMResult<List<NIMSessionInfo>> result = await  NimCore.instance.messageService.clearSessionUnreadCount(sessionInfoList);

清空所有会话的未读计数

  • API 原型
dart
  /// 清空所有会话的未读计数
  ///
  Future<NIMResult<void>> clearAllSessionUnreadCount() {
    return _platform.clearAllSessionUnreadCount();
  }

示例

dartNIMResult<void> result = await  NimCore.instance.messageService.clearAllSessionUnreadCount();

删除最近会话

删除最近会话

  • API 原型
dartclass MessageService {
    /// 删除最近联系人记录。
    /// 调用该接口后,会触发[MessageService.onSessionDelete]通知
    ///
    /// [deleteType] 删除类型,决定是否删除本地记录和漫游记录
    ///
    /// [sendAck] 如果参数合法,是否向其他端标记此会话为已读
    Future<NIMResult<void>> deleteSession({
        required NIMSessionInfo sessionInfo,
        required NIMSessionDeleteType deleteType,
        required bool sendAck,
      });
}

观察者通知

dartclass MessageService {
    /// 最近会话删除
    Stream<NIMSession> get onSessionDelete
}

Web 不支持该事件。

此文档是否对你有帮助?
有帮助
去反馈
  • 功能概述
  • 获取最近会话
  • 获取最近会话列表
  • 获取最近会话列表(自定义)
  • 过滤指定消息类型
  • 获取指定的最近会话
  • 创建最近会话
  • 创建一个空的最近会话
  • 更新最近会话
  • 更新最近会话
  • 监听最近会话变更
  • 未读数
  • 获取未读数
  • 清空指定会话未读数
  • 清空所有会话的未读计数
  • 删除最近会话
  • 删除最近会话
  • 观察者通知