image method
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;
}