diff --git a/lib/firebase_image.dart b/lib/firebase_image.dart index 1b5b38c..a9be623 100644 --- a/lib/firebase_image.dart +++ b/lib/firebase_image.dart @@ -2,3 +2,4 @@ library firebase_image; export 'src/firebase_image.dart'; export 'src/cache_refresh_strategy.dart'; +export 'src/precache_firebase_image.dart'; diff --git a/lib/src/firebase_image.dart b/lib/src/firebase_image.dart index 1c22f03..0712723 100644 --- a/lib/src/firebase_image.dart +++ b/lib/src/firebase_image.dart @@ -49,9 +49,11 @@ class FirebaseImage extends ImageProvider { reference: _getImageRef(location, firebaseApp), ); + Uint8List _precachedBytes; + /// Returns the image as bytes - Future getBytes() { - return _fetchImage(); + Future getBytes() async { + return _precachedBytes ?? await _fetchImage(); } static String _getBucket(String location) { @@ -99,6 +101,17 @@ class FirebaseImage extends ImageProvider { return bytes; } + /// Precache this image. + Future precache() async { + assert(shouldCache == true); + FirebaseImageCacheManager cacheManager = FirebaseImageCacheManager( + cacheRefreshStrategy, + ); + await cacheManager.open(); + _precachedBytes ??= await cacheManager.upsertRemoteFileToCache( + _imageObject, this.maxSizeBytes); + } + Future _fetchImageCodec() async { return await PaintingBinding.instance .instantiateImageCodec(await _fetchImage()); diff --git a/lib/src/precache_firebase_image.dart b/lib/src/precache_firebase_image.dart new file mode 100644 index 0000000..9538b83 --- /dev/null +++ b/lib/src/precache_firebase_image.dart @@ -0,0 +1,21 @@ +import 'package:firebase_core/firebase_core.dart'; + +import 'cache_refresh_strategy.dart'; +import 'firebase_image.dart'; + +Future precacheFirebaseImage(String location, + {FirebaseApp firebaseApp, + int maxSizeBytes = 2500 * 1000, + CacheRefreshStrategy cacheRefreshStrategy = + CacheRefreshStrategy.BY_METADATA_DATE}) async { + assert(location != null); + + final image = FirebaseImage( + location, + firebaseApp: firebaseApp, + maxSizeBytes: maxSizeBytes, + cacheRefreshStrategy: cacheRefreshStrategy, + ); + + await image.precache(); +}