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 {
        Future<ui.Codec> Function(Uint8List,
            {bool allowUpscaling, int? cacheHeight, int? cacheWidth}) decoder = (Uint8List bytes,
                {bool? allowUpscaling, int? cacheWidth, int? cacheHeight}) =>
            PaintingBinding.instance!
                .instantiateImageCodec(bytes, cacheWidth: cacheWidth, cacheHeight: cacheHeight);

        // 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.load(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;
}