getProfiles method

Map<String, ChatUIKitProfile> getProfiles(
  1. List<ChatUIKitProfile> profiles, {
  2. bool force = false,
})

获取用户信息,如果缓存中存在,则直接返回,如果不存在,则调用 profilesHandler 获取用户信息。

Implementation

Map<String, ChatUIKitProfile> getProfiles(List<ChatUIKitProfile> profiles,
    {bool force = false}) {
  List<ChatUIKitProfile> ret = [];
  List<ChatUIKitProfile> needProviders = [];

  for (var profile in profiles) {
    ChatUIKitProfile? cachedProfile = profilesCache[profile.id];
    if (cachedProfile == null || force == true) {
      needProviders.add(profile);
    } else {
      ret.add(cachedProfile);
    }
  }

  if (needProviders.isNotEmpty) {
    List<ChatUIKitProfile>? tmp = profilesHandler?.call(needProviders);
    if (tmp?.isNotEmpty == true) {
      // 将返回数据加入到缓存中
      Future(() => addProfiles(tmp!));
      // 将 tmp 添加到需要返回的数据中
      ret.addAll(tmp!);
      // 将已经添加的数据从 need Providers中移出
      needProviders.removeWhere(
          (element) => tmp.map((e) => e.id).contains(element.id));
    }
    // 将 needProviders 添加到返回的数据中
    ret.addAll(needProviders);
  }

  return {for (var element in ret) element.id: element};
}