Cache Network Media
The ultimate Flutter plugin for caching network images, SVGs, and Lottie animations with persistent disk storage and offline support.
Why Cache Network Media?
Tired of your app downloading the same images repeatedly? Want seamless offline support for your media assets? Cache Network Media provides a unified, efficient solution for caching all your network media in Flutter.
✨ Key Benefits
| Benefit | Description |
|---|---|
| 🚀 Faster Load Times | Media loads instantly from local cache after first download |
| 📴 Offline Support | Display cached media even without internet connection |
| 💾 Reduced Bandwidth | Download once, use forever - saves data for your users |
| 🎯 Unified API | One widget for images, SVGs, and Lottie - consistent syntax |
| 📁 Custom Cache Directory | Full control over where your cached files are stored |
| 🔧 Zero Configuration | Works out of the box with sensible defaults |
| 📱 Cross-Platform | Android, iOS with native platform channel support |
Feature Comparison
Supported Media Types
| Media Type | Supported | Caching Method | Use Case |
|---|---|---|---|
| PNG | ✅ | Binary | Photos, screenshots, graphics |
| JPG/JPEG | ✅ | Binary | Photos, compressed images |
| WebP | ✅ | Binary | Modern web images, animations |
| GIF | ✅ | Binary | Animated images |
| BMP | ✅ | Binary | Bitmap images |
| SVG | ✅ | Binary | Vector icons, logos, illustrations |
| Lottie JSON | ✅ | JSON File | Animations, micro-interactions |
Feature Matrix
| Feature | cache_network_media | Others |
|---|---|---|
| Image Caching | ✅ | ✅ |
| SVG Support | ✅ | ❌ |
| Lottie Support | ✅ | ❌ |
| Custom Cache Directory | ✅ | ❌ |
| Offline Support | ✅ | ⚠️ |
| Tap Gesture Support | ✅ | ❌ |
| Unified API | ✅ | ❌ |
| File-based Lottie Cache | ✅ | ❌ |
| Platform Channel Support | ✅ | ⚠️ |
| Privacy Manifest (iOS) | ✅ | ❌ |
| Swift Package Manager | ✅ | ⚠️ |
Installation
Add to your pubspec.yaml:
dependencies:
cache_network_media: ^0.0.3
Then run:
flutter pub get
Quick Start
Cache Network Images
CacheNetworkMediaWidget.img(
url: 'https://example.com/image.png',
width: 200,
height: 200,
fit: BoxFit.cover,
placeholder: CircularProgressIndicator(),
onTap: () => print('Image tapped!'),
)
Cache SVG Graphics
CacheNetworkMediaWidget.svg(
url: 'https://example.com/icon.svg',
width: 100,
height: 100,
color: Colors.blue,
onTap: () => print('SVG tapped!'),
)
Cache Lottie Animations
CacheNetworkMediaWidget.lottie(
url: 'https://example.com/animation.json',
width: 300,
height: 300,
repeat: true,
animate: true,
onTap: () => print('Animation tapped!'),
)
Advanced Usage
Custom Cache Directory
Take full control over where your cached files are stored. This is useful for:
- Organizing cached files by feature or user
- Managing cache size by clearing specific directories
- Sharing cache between different parts of your app
- Debugging by easily locating cached files
import 'dart:io';
// Use a custom directory for caching
final customDir = Directory('/path/to/your/cache');
CacheNetworkMediaWidget.img(
url: 'https://example.com/image.png',
cacheDirectory: customDir,
)
Error Handling
Handle network failures gracefully:
CacheNetworkMediaWidget.img(
url: 'https://example.com/image.png',
placeholder: CircularProgressIndicator(),
errorBuilder: (context, error, stackTrace) {
return Column(
children: [
Icon(Icons.error, color: Colors.red),
Text('Failed to load image'),
],
);
},
)
Image with Color Blending
CacheNetworkMediaWidget.img(
url: 'https://example.com/image.png',
color: Colors.blue,
colorBlendMode: BlendMode.multiply,
filterQuality: FilterQuality.high,
)
SVG with Theme Support
CacheNetworkMediaWidget.svg(
url: 'https://example.com/icon.svg',
colorFilter: ColorFilter.mode(Colors.red, BlendMode.srcIn),
theme: SvgTheme(currentColor: Colors.blue),
semanticsLabel: 'App logo',
)
Lottie with Animation Control
CacheNetworkMediaWidget.lottie(
url: 'https://example.com/animation.json',
repeat: false, // Play once
reverse: true, // Play in reverse
animate: true, // Auto-start
frameRate: 60.0, // Custom FPS
addRepaintBoundary: true, // Performance optimization
)
API Reference
Common Parameters (All Media Types)
| Parameter | Type | Description |
|---|---|---|
url |
String |
Required. The network URL of the media |
cacheDirectory |
Directory? |
Custom directory for caching. Uses platform default if null |
width |
double? |
Width of the widget |
height |
double? |
Height of the widget |
fit |
BoxFit? |
How to inscribe the media into the allocated space |
alignment |
AlignmentGeometry |
How to align the media within its bounds |
placeholder |
Widget? |
Widget shown while loading |
errorBuilder |
Function? |
Builder for error widget |
onTap |
VoidCallback? |
Callback when widget is tapped |
Image-Specific Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
color |
Color? |
null | Color to blend with image |
colorBlendMode |
BlendMode? |
null | Blend mode for color |
filterQuality |
FilterQuality |
medium | Quality of image sampling |
repeat |
ImageRepeat |
noRepeat | How to paint uncovered portions |
semanticLabel |
String? |
null | Accessibility label |
SVG-Specific Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
color |
Color? |
null | Simple color tinting |
colorFilter |
ColorFilter? |
null | Advanced color filtering |
theme |
SvgTheme? |
null | SVG theme for styling |
clipBehavior |
Clip |
hardEdge | How to clip content |
Lottie-Specific Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
repeat |
bool |
true | Loop the animation |
reverse |
bool |
false | Play in reverse |
animate |
bool |
true | Start immediately |
frameRate |
double? |
null | Custom FPS |
delegates |
LottieDelegates? |
null | Custom delegates |
How Caching Works
┌─────────────────────────────────────────────────────────────┐
│ Cache Flow Diagram │
├─────────────────────────────────────────────────────────────┤
│ │
│ Request URL ──► Check Cache ──► Cache Hit? ──► Yes ──► │
│ │ │ Return │
│ │ │ Cached │
│ │ ▼ │
│ │ No │
│ │ │ │
│ │ ▼ │
│ │ Download from │
│ │ Network │
│ │ │ │
│ │ ▼ │
│ │ Save to Cache │
│ │ │ │
│ │ ▼ │
│ └─────────────────────► Return Media │
│ │
└─────────────────────────────────────────────────────────────┘
Cache Storage
| Media Type | Storage Format | Location |
|---|---|---|
| Images | .cache_image binary |
cache_network_media/ |
| SVG | .cache_image binary |
cache_network_media/ |
| Lottie | .json file |
cache_network_media/lottie/ |
Platform Support
| Platform | Status | Notes |
|---|---|---|
| Android | ✅ | Full support with method channels |
| iOS | ✅ | Swift Package Manager + Privacy Manifest |
| Web | 🚧 | Coming soon |
| macOS | 🚧 | Coming soon |
| Windows | 🚧 | Coming soon |
| Linux | 🚧 | Coming soon |
Performance Tips
- Use appropriate image sizes - Don't load 4K images for thumbnails
- Leverage custom cache directories - Organize cache by feature for easier management
- Set dimensions when known - Provide
widthandheightto avoid layout shifts - Use
addRepaintBoundary- Enabled by default for Lottie, improves performance - Handle errors gracefully - Always provide an
errorBuilderfor production apps
Migration Guide
From cached_network_image
// Before (cached_network_image)
CachedNetworkImage(
imageUrl: 'https://example.com/image.png',
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
)
// After (cache_network_media)
CacheNetworkMediaWidget.img(
url: 'https://example.com/image.png',
placeholder: CircularProgressIndicator(),
errorBuilder: (context, error, stackTrace) => Icon(Icons.error),
)
Documentation
Contributing
We welcome contributions! Please read our Contributing Guidelines before submitting a PR.
# Clone the repository
git clone https://github.com/D-extremity/cache_network_media.git
# Install dependencies
flutter pub get
# Run tests
flutter test
# Check formatting
dart format --set-exit-if-changed .
# Run analyzer
flutter analyze
License
MIT License - see LICENSE for details.
Author
Created with ❤️ by @D-extremity
Support
If this package helped you, please:
- ⭐ Star the GitHub repository
- 👍 Like on pub.dev
- 🐛 Report issues on GitHub Issues
Cache Network Media - Making network media caching simple since 2025
Libraries
- cache_network_media
- Cache Network Media - A Flutter plugin for caching network media