loadImageFromProvider function

Future<Image> loadImageFromProvider(
  1. ImageProvider<Object> provider, {
  2. ImageConfiguration configuration = ImageConfiguration.empty,
})

Resolves provider to its first frame.

Pass a configuration (e.g. from createLocalImageConfiguration) so that resolution-aware asset variants (2.0x, 3.0x) are picked for the device. The caller owns the returned image and must dispose it when done.

Implementation

Future<ui.Image> loadImageFromProvider(
  ImageProvider provider, {
  ImageConfiguration configuration = ImageConfiguration.empty,
}) {
  final Completer<ui.Image> completer = Completer<ui.Image>();
  final ImageStream stream = provider.resolve(configuration);

  ImageStreamListener? listener;
  listener = ImageStreamListener(
    (ImageInfo frame, bool synchronousCall) {
      if (completer.isCompleted) {
        frame.dispose();
      } else {
        completer.complete(frame.image);
      }
      if (listener != null) stream.removeListener(listener);
    },
    onError: (Object exception, StackTrace? stackTrace) {
      if (!completer.isCompleted) {
        completer.completeError(exception, stackTrace);
      }
      if (listener != null) stream.removeListener(listener);
    },
  );

  stream.addListener(listener);
  return completer.future;
}