diff --git a/flutter_cache_manager/lib/src/cache_managers/image_cache_manager.dart b/flutter_cache_manager/lib/src/cache_managers/image_cache_manager.dart index e27b07c1..5851a7ab 100644 --- a/flutter_cache_manager/lib/src/cache_managers/image_cache_manager.dart +++ b/flutter_cache_manager/lib/src/cache_managers/image_cache_manager.dart @@ -163,14 +163,27 @@ Future _decodeImage( allowUpscaling: allowUpscaling, ) : fileImage as ImageProvider; + final completer = Completer(); - image - .resolve(ImageConfiguration.empty) - .addListener( - ImageStreamListener((info, _) { - completer.complete(info.image); - image.evict(); - }), - ); + final stream = image.resolve(ImageConfiguration.empty); + + late final ImageStreamListener listener; + listener = ImageStreamListener( + (info, _) { + if (completer.isCompleted) return; + + stream.removeListener(listener); + image.evict(); + completer.complete(info.image); + }, + onError: (Object error, StackTrace? stackTrace) { + if (completer.isCompleted) return; + + stream.removeListener(listener); + completer.completeError(error, stackTrace); + }, + ); + + stream.addListener(listener); return completer.future; }