loadImage function

Future<Image> loadImage(
  1. String path
)

Loads an image from either a local asset path or a network URL.

Implementation

Future<ui.Image> loadImage(String path) async {
  ImageProvider provider;
  if (path.startsWith('http')) {
    provider = NetworkImage(path);
  } else {
    provider = AssetImage(path);
  }

  final Completer<ui.Image> completer = Completer<ui.Image>();
  final ImageStream stream = provider.resolve(ImageConfiguration.empty);

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

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