fetchUserInfoById method
根据用户 ID,获取指定用户的用户属性。
Param userIds
用户 ID 数组。
Param expireTime
获取的用户属性到期时间。如果在到期时间内再次调用该方法,则 SDK 直接返回上次获取到的缓存数据。例如,将该参数设为 120,即 2 分钟,则如果你在 2 分钟内再次调用该方法获取用户属性,SDK 仍将返回上次获取到的属性。否则需从服务器获取。
Return 返回 key-value 格式的 Map 类型数据,key 为用户 ID,value 为用户属性。
Throws 如果有方法调用的异常会在这里抛出,可以看到具体错误原因。请参见 EMError。
Implementation
Future<Map<String, EMUserInfo>> fetchUserInfoById(
List<String> userIds, {
int expireTime = 0,
}) async {
List<String> needReqIds = userIds
.where((element) =>
!_effectiveUserInfoMap.containsKey(element) ||
(_effectiveUserInfoMap.containsKey(element) &&
DateTime.now().millisecondsSinceEpoch -
_effectiveUserInfoMap[element]!.expireTime >
expireTime * 1000))
.toList();
Map<String, EMUserInfo> resultMap = Map();
userIds.forEach((element) {
if (_effectiveUserInfoMap.containsKey(element)) {
resultMap[element] = _effectiveUserInfoMap[element]!;
}
});
if (needReqIds.length == 0) {
return resultMap;
}
Map req = {'userIds': needReqIds};
Map result =
await _channel.invokeMethod(ChatMethodKeys.fetchUserInfoById, req);
try {
EMError.hasErrorFromResult(result);
result[ChatMethodKeys.fetchUserInfoById]?.forEach((key, value) {
EMUserInfo eUserInfo = EMUserInfo.fromJson(value);
resultMap[key] = eUserInfo;
_effectiveUserInfoMap[key] = eUserInfo;
});
return resultMap;
} on EMError catch (e) {
throw e;
}
}