queryMemberList method

  1. @override
Future<NIMResult<TeamMemberInfoListResult>> queryMemberList(
  1. String teamId,
  2. NIMTeamType type, {
  3. NIMTeamMemberQueryOption? option,
})
override

查询群成员列表 teamId群id

Implementation

@override
Future<NIMResult<TeamMemberInfoListResult>> queryMemberList(
    String teamId, NIMTeamType type,
    {NIMTeamMemberQueryOption? option}) async {
  if (option == null) {
    option = NIMTeamMemberQueryOption(
        roleQueryType: NIMTeamMemberRoleQueryType.memberRoleQueryTypeAll);
  }

  var memberList = await NimCore.instance.teamService
      .getTeamMemberList(teamId, type, option);
  if (memberList.isSuccess && memberList.data?.memberList != null) {
    var results = memberList.data!.memberList!
        .map((e) => UserInfoWithTeam(null, e))
        .toList();
    //先使用本地缓存数据填充用户信息和好友信息
    _fillUserInfoWithLocalCache(results);
    //剩余本地没有用户信息的用户在使用远端用户信息填充
    var accIdList = results
        .where((element) => element.userInfo == null)
        .map((e) => e.teamInfo.accountId)
        .toList();
    int totalCount = accIdList.length;
    int maxCount = 150;
    int startIndex = 0;
    int endIndex = min(totalCount, startIndex + maxCount);
    //remote 接口一次最多150个,分批请求
    while (startIndex < endIndex) {
      var map =
          await _getUserInfoMap(accIdList.sublist(startIndex, endIndex));
      results.where((element) => element.userInfo == null).forEach((element) {
        element.userInfo = map[element.teamInfo.accountId];
      });
      startIndex = endIndex;
      endIndex = min(totalCount, endIndex + maxCount);
    }
    var infoResult = TeamMemberInfoListResult(
        finished: memberList.data!.finished,
        nextToken: memberList.data!.nextToken,
        memberList: results);
    return NIMResult.success(data: infoResult);
  }
  return NIMResult(memberList.code, null, memberList.errorDetails);
}