load method
Future<ThreadAttachmentImageData?>
load({
- String? imageId,
- String? imageUri,
- required Future<
ThreadAttachmentImageData?> loader(),
Implementation
Future<ThreadAttachmentImageData?> load({
String? imageId,
String? imageUri,
required Future<ThreadAttachmentImageData?> Function() loader,
}) {
final cached = read(imageId: imageId, imageUri: imageUri);
if (cached != null) {
return Future<ThreadAttachmentImageData?>.value(cached);
}
final key = _key(imageId: imageId, imageUri: imageUri);
if (key == null) {
return loader();
}
final activeLoad = _inFlight[key];
if (activeLoad != null) {
return activeLoad;
}
late final Future<ThreadAttachmentImageData?> load;
load = loader()
.then((value) {
if (value != null) {
write(imageId: imageId, imageUri: imageUri, data: value.data, mimeType: value.mimeType);
}
return value;
})
.whenComplete(() {
if (identical(_inFlight[key], load)) {
_inFlight.remove(key);
}
});
_inFlight[key] = load;
return load;
}