getProfiles method
Map<String, ChatUIKitProfile>
getProfiles(
- List<
ChatUIKitProfile> profiles, { - 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};
}