load method

Future<ThreadAttachmentImageData?> load({
  1. String? imageId,
  2. String? imageUri,
  3. 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;
}