image method

Image? image(
  1. T obj
)

Implementation

ui.Image? image(T obj) {
  var key = (keySupplier == null) ? obj : keySupplier!(obj);
  var image = _images[key];

  if (image == null) {
    if (!_images.containsKey(key)) {
      _images[key] = null;

      ImageProvider? imgProvider = imageProviderSupplier(obj);

      if (imgProvider == null)
        return null;
      else {
        ImageDecoderCallback decoder = (
          ui.ImmutableBuffer buffer, {
          ui.TargetImageSizeCallback? getTargetSize,
        }) {
          return PaintingBinding.instance
              .instantiateImageCodecWithSize(buffer, getTargetSize: null);
        };

        // When an exception is caught resolving an image, no completers are
        // cached and `null` is returned instead of a new completer.
        final ImageStreamCompleter? completer = PaintingBinding.instance.imageCache.putIfAbsent(
          // ignore: invalid_use_of_protected_member
          imgProvider,
          // ignore: invalid_use_of_protected_member
          () => imgProvider.loadImage(imgProvider, decoder),
          onError: null,
        )!;

        if (completer != null) {
          ImageListener onImage = (ImageInfo image, bool synchronousCall) {
            _onImage(image, obj, key);
          };
          ImageStreamListener listener = ImageStreamListener(onImage);
          completer.addListener(listener);
        }
      }
    }
  }

  return image;
}