Awesome Open Source
Awesome Open Source

Flutter Advanced Network Image Provider

Pub Package Pre Pub Package Build Status Coverage Status

An advanced image provider provides caching and retrying for flutter app. Now with zoomable widget and transition to image widget.

Getting Started


Add this to your pubspec.yaml (or create it):

  flutter_advanced_networkimage: any

Then run the flutter tooling:

flutter packages get


// using image provider
  image: AdvancedNetworkImage(
    header: header,
    useDiskCache: true,
    cacheRule: CacheRule(maxAge: const Duration(days: 7)),
  fit: BoxFit.cover,
// work with precacheImage
    header: header,
    useDiskCache: true,
    cacheRule: CacheRule(maxAge: const Duration(days: 7)),

// or svg provider (flutter_svg)
  AdvancedNetworkSvg(url, SvgPicture.svgByteDecoder, useDiskCache: true),
// get the disk cache folder size
int cacheSize = await DiskCache().cacheSize();
// clean the disk cache
bool isSucceed = await DiskCache().clear();
// using zooming widget & transitiontoimage widget
  minScale: 0.3,
  maxScale: 2.0,
  // default factor is 1.0, use 0.0 to disable boundary
  panLimit: 0.8,
  child: Container(
    child: TransitionToImage(
      image: AdvancedNetworkImage(url, timeoutDuration: Duration(minutes: 1)),
      // This is the default placeholder widget at loading status,
      // you can write your own widget with CustomPainter.
      placeholder: CircularProgressIndicator(),
      // This is default duration
      duration: Duration(milliseconds: 300),
// Reload feature included
  image: AdvancedNetworkImage(url,
    loadedCallback: () {
      print('It works!');
    loadFailedCallback: () {
      print('Oh, no!');
    loadingProgress: (double progress) {
      print('Now Loading: $progress');
  loadingWidgetBuilder: (_, double progress, __) => Text(progress.toString()),
  fit: BoxFit.contain,
  placeholder: const Icon(Icons.refresh),
  width: 400.0,
  height: 300.0,
  enableRefresh: true,
// Scale the widget size. (Origin point was fixed to screen's center)
  panLimit: 1.0,
  maxScale: 2.0,
  minScale: 0.5,
  singleFingerPan: true,
  multiFingersPan: false,
  enableRotate: true,
  child: Image(
    image: AssetImage('graphics/background.png'),
  zoomSteps: 3,

Details in example/ folder.

demo gif

If you have any problem or question, feel free to file issues.

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
dart (2,204
flutter (1,150
svg (516
image (465
flutter-package (104
zoom (69
retry (33
pan (24
rotate (24
lru (20

Find Open Source By Browsing 7,000 Topics Across 59 Categories