fetchUserInfoById method

Future<Map<String, ChatUserInfo>> fetchUserInfoById(
  1. List<String> userIds, {
  2. int expireTime = 0,
})

根据用户 ID,获取指定用户的用户属性。

Param userIds 用户 ID 数组。

Param expireTime 获取的用户属性到期时间。如果在到期时间内再次调用该方法,则 SDK 直接返回上次获取到的缓存数据。例如,将该参数设为 120,即 2 分钟,则如果你在 2 分钟内再次调用该方法获取用户属性,SDK 仍将返回上次获取到的属性。否则需从服务器获取。

Return 返回 key-value 格式的 Map 类型数据,key 为用户 ID,value 为用户属性。

Throws 如果有方法调用的异常会在这里抛出,可以看到具体错误原因。请参见 ChatError

Implementation

Future<Map<String, ChatUserInfo>> fetchUserInfoById(
  List<String> userIds, {
  int expireTime = 0,
}) async {
  try {
    List<String> needReqIds = userIds
        .where((element) =>
            !_effectiveUserInfoMap.containsKey(element) ||
            (_effectiveUserInfoMap.containsKey(element) &&
                DateTime.now().millisecondsSinceEpoch -
                        _effectiveUserInfoMap[element]!.expireTime >
                    expireTime * 1000))
        .toList();
    Map<String, ChatUserInfo> resultMap = {};

    for (var element in userIds) {
      if (_effectiveUserInfoMap.containsKey(element)) {
        resultMap[element] = _effectiveUserInfoMap[element]!;
      }
    }
    if (needReqIds.isEmpty) {
      return resultMap;
    }

    Map req = {'userIds': needReqIds};
    Map result = await platform_interface.Client.instance.userInfoManager
        .callNativeMethod(ChatMethodKeys.fetchUserInfoById, req);
    ChatError.hasErrorFromResult(result);
    result[ChatMethodKeys.fetchUserInfoById]?.forEach((key, value) {
      ChatUserInfo eUserInfo = ChatUserInfo.fromJson(value);
      resultMap[key] = eUserInfo;
      _effectiveUserInfoMap[key] = eUserInfo;
    });
    return resultMap;
  } catch (e) {
    rethrow;
  }
}