quitTeam static method

Future<bool> quitTeam(
  1. String teamId,
  2. NIMTeamType type
)

退出群

Implementation

static Future<bool> quitTeam(String teamId, NIMTeamType type) async {
  var teamResult =
      await NimCore.instance.teamService.getTeamInfo(teamId, type);
  // 讨论组的退出逻辑
  //1,判断是否为讨论组,非讨论组直接退出
  //2, 判断是否为创建者,非创建者直接退出
  //3, 判断是否成员数大于1,如果不大于1直接解散,且不能是数字人
  //4,请求成员列表,将群转给第一个成员,并退出
  if (getIt<TeamProvider>().isGroupTeam(teamResult.data)) {
    var team = teamResult.data;
    if (team?.ownerAccountId == getIt<IMLoginService>().userInfo?.accountId) {
      //如果群人员人数大于1,则先转让
      //无法转让则解散
      if ((team?.memberCount ?? 0) > 1) {
        final option = NIMTeamMemberQueryOption(
            roleQueryType: NIMTeamMemberRoleQueryType.memberRoleQueryTypeAll);
        var membersResult = (await NimCore.instance.teamService
                .getTeamMemberList(teamId, type, option))
            .data;
        if (membersResult?.memberList?.isNotEmpty == true) {
          var newOwner = membersResult?.memberList?.firstWhereOrNull(
              (element) =>
                  element.accountId !=
                      getIt<IMLoginService>().userInfo?.accountId &&
                  !AIUserManager.instance.isAIUser(element.accountId));
          if (newOwner != null) {
            var resTrans = await NimCore.instance.teamService
                .transferTeamOwner(teamId, type, newOwner.accountId, true);
            return resTrans.isSuccess;
          }
        }
      }
      var resDismiss =
          await NimCore.instance.teamService.dismissTeam(teamId, type);
      return resDismiss.isSuccess;
    }
  }
  var res = await NimCore.instance.teamService.leaveTeam(teamId, type);
  return res.isSuccess;
}