unpinAIUser method

Future<NIMResult<void>> unpinAIUser(
  1. String accountId,
  2. bool addPin
)

@param addPin true 置顶,false取消置顶 @return

Implementation

Future<NIMResult<void>> unpinAIUser(String accountId, bool addPin) async {
  var currentId = IMKitClient.account();
  if (currentId == null) {
    return NIMResult.failure(
        message: 'current user is null, please '
            'login '
            'first');
  }
  var value = await ContactRepo.getUserList([currentId]);
  if (value.isSuccess && value.data != null && value.data!.length > 0) {
    try {
      var userExtStr = value.data![0].serverExtension;
      List<dynamic> userUnpinArray = [];
      Map<String, dynamic> userExtJson = {};
      if (userExtStr != null && userExtStr.isNotEmpty) {
        userExtJson = jsonDecode(userExtStr) as Map<String, dynamic>;
        // 检查是否存在对应键值且类型为 List
        var unpinData = userExtJson[KEY_UNPIN_AI_USERS];
        userUnpinArray = (unpinData is List<dynamic>) ? unpinData : [];
      }
      if (addPin) {
        // 正向遍历时要注意移除元素后的索引变化
        for (int index = userUnpinArray.length - 1; index >= 0; index--) {
          if (accountId == userUnpinArray[index]) {
            userUnpinArray.removeAt(index);
          }
        }
      } else {
        userUnpinArray.add(accountId);
      }
      // 更新 JSON 对象
      userExtJson[KEY_UNPIN_AI_USERS] = userUnpinArray;
      var param =
          NIMUserUpdateParam(serverExtension: jsonEncode(userExtJson));
      return ContactRepo.updateSelfUserProfile(param);
    } catch (e) {
      return NIMResult.failure(
          message: 'current user serverExtension is '
              'not json format');
    }
  } else {
    return NIMResult.failure(message: 'AIUser not found');
  }
}