firebase_cached_image 0.9.0
firebase_cached_image: ^0.9.0 copied to clipboard
Cache Manager and Cached ImageProvider for Firebase Cloud Storage Objects.
Firebase_Cached_Image #
Cache Manager and Cached ImageProvider for Firebase Cloud Storage Objects.
Set up #
Setup firebase (https://firebase.google.com/docs/flutter/setup).
Web Support #
Web support is experimental. To enable it, add the following line in your main() function:
FirebaseCacheManagerConfig.webSupport = true;
On the web, It uses indexed_db
for caching the files. All the files are directly saved to the browser's IndexedDB store. Read more about IndexedDB here (https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API).
Usage #
Firebase Image Provider #
To display an image from Firebase Cloud Storage, use FirebaseImageProvider as the ImageProvider for the Flutter Image widget.
Image(
image: FirebaseImageProvider(
FirebaseUrl("gs://bucket_f233/logo.jpg")
),
),
You can declare FirebaseUrl
in following ways:
FirebaseUrl("gs://bucket_f233/logo.jpg")
FirebaseUrl("https://firebasestorage.googleapis.com/b/bucket/o/logo.jpg")
FirebaseUrl.fromReference(FirebaseStorage.instance.ref("images/image.jpg"));
Cache Options #
Customize caching behavior with CacheOptions
:
Image(
image: FirebaseImageProvider(
FirebaseUrl("gs://bucket_f233/logo.jpg"),
options: CacheOptions(
checkIfFileUpdatedOnServer: false,
source: Source.cacheServer,
),
),
),
- Default behavior: Load from cache if available; otherwise fetch from server and then cache.
- Always fetch latest from server:
source: Source.server,
- Fetch from server only if updated since last fetch:
checkIfFileUpdatedOnServer: true,
Note: Image update checks require fetching metadata (last modified timestamp) from Firebase Storage.
This is a Class B operation in Google Cloud Storage, which may incur charges after 50,000 free operations per month. Pricing details.
Firebase Cache Manager #
For more control and support beyond images (e.g., docs, videos), use FirebaseCacheManager
.
Download and Cache a File #
Not supported on web.
final file = await FirebaseCacheManager().getSingleFile(
FirebaseUrl("gs://bucket_f233/doc.docx"),
);
print(file); // Local cached file path (useful for sharing/reading)
You can also use getSingleObject
method to get the file as bytes:
Supported on web.
final cachedObject = await FirebaseCacheManager().getSingleObject(
FirebaseUrl("gs://bucket_f233/doc.docx"),
);
print(cachedObject.rawBytes); // Uint8List of file bytes
Pre-cache a File #
Pre-download files you know will be needed soon (e.g., profile pictures at app start):
await FirebaseCacheManager().preCache(
FirebaseUrl("gs://bucket_f233/profile_pic.jpg"),
);
Refresh a Cached File #
Update a cached file if it has changed on the server:
await FirebaseCacheManager().refreshCachedFile(
FirebaseUrl("gs://bucket_f233/profile_pic.jpg"),
);
Copy a Local File to Cache #
Avoid re-downloading by copying an existing local file into the cache.
Not supported on web.
final filePath = "/storage/file.jpg";
final cachedFilePath = await FirebaseCacheManager().copyToCache(
FirebaseUrl("gs://bucket_f233/profile_pic.jpg"),
filePath,
);
Delete a Cached File #
await FirebaseCacheManager().delete(
FirebaseUrl("gs://bucket_f233/logo.jpg"),
);
Clear Cache #
// Clear entire cache (Supported on web)
await FirebaseCacheManager().clearCache();
// Clear files older than 20 days (Not supported on web)
await FirebaseCacheManager().clearCache(modifiedBefore: Duration(days: 20));
Custom Sub-Directory #
Save cached files in a custom subdirectory inside the system’s temporary directory.
Default: "flutter_cached_image"
final manager = FirebaseCacheManager(subDir: "profile_pictures");
This allows organizing cached files by category:
final profilePicturesCacheManager = FirebaseCacheManager(subDir: "profile_pictures");
final postsCacheManager = FirebaseCacheManager(subDir: "posts");
// Clear only "posts" cache
await postsCacheManager.clearCache();
Platform Support #
Method | Mobile | Web |
---|---|---|
getSingleFile() |
✅ Supported | ✅ Supported |
preCache() |
✅ Supported | ✅ Supported |
refreshCachedFile() |
✅ Supported | ✅ Supported |
copyToCache() |
✅ Supported | ❌ Not Supported |
delete() |
✅ Supported | ✅ Supported |
clearCache() (all files) |
✅ Supported | ✅ Supported |
clearCache(modifiedBefore) |
✅ Supported | ❌ Not Supported |