Skip to content
flutter advanced network image provider
Dart Other
  1. Dart 99.1%
  2. Other 0.9%
Branch: master
Clone or download
mchome 1. update deps
2. support range fetch when retry
3. add skipRetryStatusCode, fix #107
Latest commit f9b4402 Aug 21, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib 1. update deps Aug 21, 2019
.gitignore add ci Feb 26, 2019
.travis.yml update ci Jul 4, 2019 bump version Jul 9, 2019
LICENSE [close #59] add download test Feb 7, 2019 update exception Mar 30, 2019
pubspec.yaml 1. update deps Aug 21, 2019

Flutter Advanced Network Image Provider

Pub Package Pre Pub Package Build Status Coverage Status Donate

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(
      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.

You can’t perform that action at this time.