diff --git a/flutter_cache_manager/example/android/build.gradle b/flutter_cache_manager/example/android/build.gradle index d2ffbffa..8e9de9d8 100644 --- a/flutter_cache_manager/example/android/build.gradle +++ b/flutter_cache_manager/example/android/build.gradle @@ -15,4 +15,4 @@ subprojects { tasks.register("clean", Delete) { delete rootProject.buildDir -} +} \ No newline at end of file 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 5851a7ab..6fb17f7d 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 @@ -65,6 +65,32 @@ mixin ImageCacheManager on BaseCacheManager { _runningResizes.remove(resizedKey); } + Future _isImage(File file) async { + if (!await file.exists()) { + debugPrint('file is not found: ${file.path}'); + return false; + } + final raf = await file.open(); + final header = await raf.read(8); + await raf.close(); + final hexString = header + .map((byte) => byte.toRadixString(16).padLeft(2, '0')) + .join(''); + if (hexString.startsWith('ffd8')) { + return true; // JPEG + } else if (hexString.startsWith('89504e47')) { + return true; // PNG + } else if (hexString.startsWith('00000200')) { + return true; // TGA + } else if (hexString.startsWith('00000100')) { + return true; // CUR + } else if (hexString.startsWith('00000000')) { + return true; // ICO + } + + return false; + } + final Map> _runningResizes = {}; Future _resizeImageFile( @@ -73,9 +99,10 @@ mixin ImageCacheManager on BaseCacheManager { int? maxWidth, int? maxHeight, ) async { + bool isImage = await _isImage(originalFile.file); final originalFileName = originalFile.file.path; final fileExtension = originalFileName.split('.').last; - if (!supportedFileNames.contains(fileExtension)) { + if (!isImage) { return originalFile; }