diff --git a/flutter_cache_manager/CHANGELOG.md b/flutter_cache_manager/CHANGELOG.md index 609a8be0..ce63e2e6 100644 --- a/flutter_cache_manager/CHANGELOG.md +++ b/flutter_cache_manager/CHANGELOG.md @@ -1,3 +1,7 @@ +## [3.4.5] - 2026-09-18 + +* * Prevents image resize decoding from completing more than once and propagates decoding errors ([#400](https://github.com/Baseflow/flutter_cache_manager/issues/400)). + ## [3.4.4] - 2026-09-16 * Awaits cache-info persist in `putFile`, `putFileStream`, and downloads so the stored object has an id before those calls return ([#492](https://github.com/Baseflow/flutter_cache_manager/issues/492)). A failed repository write now throws from `putFile`/`putFileStream` and errors the download stream instead of returning a usable file with no cache-info row. 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; } diff --git a/flutter_cache_manager/pubspec.yaml b/flutter_cache_manager/pubspec.yaml index cc50ad4e..3f0c9ce3 100644 --- a/flutter_cache_manager/pubspec.yaml +++ b/flutter_cache_manager/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_cache_manager description: Generic cache manager for flutter. Saves web files on the storages of the device and saves the cache info using sqflite. -version: 3.4.4 +version: 3.4.5 homepage: https://github.com/Baseflow/flutter_cache_manager topics: - cache