fetchUserInfoByIdWithExpireTime method Null safety

Future<Map<String, EMUserInfo>> fetchUserInfoByIdWithExpireTime(
  1. List<String> userIds,
  2. {int expireTime = 3600}
)

获取指定id的用户的用户属性, userIds 需要获取的环信id; expireTime 过期时间,单位秒。如果之前获取过, 如果距当前时间小于过期时间则不会重复获取

Implementation

Future<Map<String, EMUserInfo>> fetchUserInfoByIdWithExpireTime(
    List<String> userIds,
    {int expireTime = 3600}) 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(EMSDKMethod.fetchUserInfoById, req);
  EMError.hasErrorFromResult(result);
  result[EMSDKMethod.fetchUserInfoById]?.forEach((key, value) {
    EMUserInfo eUserInfo = EMUserInfo.fromJson(value);
    resultMap[key] = eUserInfo;
    _effectiveUserInfoMap[key] = eUserInfo;
  });

  return resultMap;
}