From c5dd70dfd088ee32fd1b18572e9e5e3af95dcc47 Mon Sep 17 00:00:00 2001 From: lukepighetti Date: Mon, 22 Feb 2021 08:52:18 -0500 Subject: [PATCH 1/3] precache --- lib/src/cache_manager.dart | 9 +++++++++ lib/src/firebase_image.dart | 17 +++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/src/cache_manager.dart b/lib/src/cache_manager.dart index 80bbc24..99decd1 100644 --- a/lib/src/cache_manager.dart +++ b/lib/src/cache_manager.dart @@ -154,6 +154,15 @@ class FirebaseImageCacheManager { return bytes; } + Future precache(String location, + {FirebaseApp firebaseApp, + int maxSizeBytes = 2500 * 1000, + CacheRefreshStrategy cacheRefreshStrategy = + CacheRefreshStrategy.BY_METADATA_DATE}) async { + final image = FirebaseImage(location, firebaseApp: firebaseApp); + await image.precache(); + } + Future putFile( FirebaseImageObject object, final bytes) async { String path = basePath + "/" + object.remotePath; 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()); From 193784254807972168e6b1b2aede2e3de52bc425 Mon Sep 17 00:00:00 2001 From: lukepighetti Date: Mon, 22 Feb 2021 09:09:08 -0500 Subject: [PATCH 2/3] finalize api --- lib/firebase_image.dart | 3 ++- lib/src/cache_manager.dart | 9 --------- lib/src/precache_firebase_image.dart | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 lib/src/precache_firebase_image.dart diff --git a/lib/firebase_image.dart b/lib/firebase_image.dart index 1b5b38c..80a22fb 100644 --- a/lib/firebase_image.dart +++ b/lib/firebase_image.dart @@ -1,4 +1,5 @@ library firebase_image; -export 'src/firebase_image.dart'; export 'src/cache_refresh_strategy.dart'; +export 'src/firebase_image.dart'; +export 'src/precache_firebase_image.dart'; diff --git a/lib/src/cache_manager.dart b/lib/src/cache_manager.dart index 99decd1..80bbc24 100644 --- a/lib/src/cache_manager.dart +++ b/lib/src/cache_manager.dart @@ -154,15 +154,6 @@ class FirebaseImageCacheManager { return bytes; } - Future precache(String location, - {FirebaseApp firebaseApp, - int maxSizeBytes = 2500 * 1000, - CacheRefreshStrategy cacheRefreshStrategy = - CacheRefreshStrategy.BY_METADATA_DATE}) async { - final image = FirebaseImage(location, firebaseApp: firebaseApp); - await image.precache(); - } - Future putFile( FirebaseImageObject object, final bytes) async { String path = basePath + "/" + object.remotePath; diff --git a/lib/src/precache_firebase_image.dart b/lib/src/precache_firebase_image.dart new file mode 100644 index 0000000..b970598 --- /dev/null +++ b/lib/src/precache_firebase_image.dart @@ -0,0 +1,14 @@ +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); + await image.precache(); +} From 3fd8aac858aeb99032cd34ea863cde2f06a1808b Mon Sep 17 00:00:00 2001 From: lukepighetti Date: Mon, 22 Feb 2021 09:43:58 -0500 Subject: [PATCH 3/3] wire up precacheFirebaseImage properties, fix import order to reduce diff size --- lib/firebase_image.dart | 2 +- lib/src/precache_firebase_image.dart | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/firebase_image.dart b/lib/firebase_image.dart index 80a22fb..a9be623 100644 --- a/lib/firebase_image.dart +++ b/lib/firebase_image.dart @@ -1,5 +1,5 @@ library firebase_image; -export 'src/cache_refresh_strategy.dart'; export 'src/firebase_image.dart'; +export 'src/cache_refresh_strategy.dart'; export 'src/precache_firebase_image.dart'; diff --git a/lib/src/precache_firebase_image.dart b/lib/src/precache_firebase_image.dart index b970598..9538b83 100644 --- a/lib/src/precache_firebase_image.dart +++ b/lib/src/precache_firebase_image.dart @@ -9,6 +9,13 @@ Future precacheFirebaseImage(String location, CacheRefreshStrategy cacheRefreshStrategy = CacheRefreshStrategy.BY_METADATA_DATE}) async { assert(location != null); - final image = FirebaseImage(location, firebaseApp: firebaseApp); + + final image = FirebaseImage( + location, + firebaseApp: firebaseApp, + maxSizeBytes: maxSizeBytes, + cacheRefreshStrategy: cacheRefreshStrategy, + ); + await image.precache(); }