unpinAIUser method
@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');
}
}