Git Product home page Git Product logo

flutter_advanced_networkimage's Introduction

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

Installation

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

dependencies:
  flutter_advanced_networkimage: any

Then run the flutter tooling:

flutter packages get

Example

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

// or svg provider (flutter_svg)
SvgPicture(
  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
ZoomableWidget(
  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
TransitionToImage(
  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)
ZoomableWidget(
  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.

flutter_advanced_networkimage's People

Contributors

abacaj avatar bcko avatar ewertonrp avatar howaner avatar kjawaddeveloper avatar kwent avatar mchome avatar ninnepinne avatar olavemil avatar p30arena avatar quirijngb avatar wreppun avatar yohom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_advanced_networkimage's Issues

flutter_advanced_networkimage: ^0.3.3

Hi, I'm not really sure who needs to fix this but I have something to share below.

I'm stuck with version 0.2.11 if I put in pubspec.yaml: flutter_advanced_networkimage: any

If I set it to: flutter_advanced_networkimage: ^0.3.3 I then get:

...development/flutter/bin/flutter --no-color packages get
Running "flutter packages get" in...
Because every version of flutter_test from sdk depends on quiver 0.29.0+1 and flutter_advanced_networkimage 0.3.3 depends on quiver ^2.0.0, flutter_test from sdk is incompatible with flutter_advanced_networkimage 0.3.3.
And because no versions of flutter_advanced_networkimage match >0.3.3 <0.4.0, flutter_test from sdk is incompatible with flutter_advanced_networkimage ^0.3.3.
So, because ... depends on both flutter_advanced_networkimage ^0.3.3 and flutter_test any from sdk, version solving failed.
pub get failed (1)
Process finished with exit code 1

To have the latest version 0.3.3, I add the following to pubspec.yaml:

dependency_overrides:
    quiver: ^0.29.0

Quiver version

Getting this message when trying to get packages:

Because every version of flutter_test from sdk depends on quiver 0.29.0+1 and flutter_advanced_networkimage >=0.3.0 depends on quiver ^2.0.0, flutter_test from sdk is incompatible with flutter_advanced_networkimage >=0.3.0.
So, because memes_de_superheroes depends on both flutter_advanced_networkimage ^0.3.6 and flutter_test any from sdk, version solving failed.
pub get failed (1)

TransitionToImage with Hero Animation?

It seems that the image flashes a few times when transitioning routes and wrapping the TransitionToImage in a Hero widget. This problem doesn't exist when using the default Image.network constructor. Is anyone else having this issue? Is there something specific I'm missing?

I thought that it may be trying to refetch the image, but I'm using the disk's cache so I'm not sure where to go.

Thanks!

Image local path

How can I get the cached image local path?
I would like to share the image once downloaded.
Ex:

AdvancedNetworkImage image = AdvancedNetworkImage(IMAGE_URL);
print(image.localPath);

[feature] cache

  • memory map cache
  • disk cache
  • clear disk cache
  • disk cache size

[feature] on loaded callback

Hello,

could we please get a callback that fires when the image has loaded, no matter where it is loaded from (memory cache, disk cache, network)

also a callback for when the image has failed to load :)

Navigating back to the previous screen results in ConcurrentModificationError

I used TransitionToImage widget as below:

new Stack(
      alignment: Alignment.center,
      children: <Widget>[
        new Container(
          child: new TransitionToImage(
              new AdvancedNetworkImage(
                      movieGridUtil.getUrlFromPath(
                          widget.movie.backdrop_path, MovieGridImageTypes.BACKDROP),
                      useMemoryCache: false,
                      useDiskCache: true),
            placeholder: new CircularProgressIndicator(),
          ),
        ),
        new Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            videoIcon
          ],
        )
      ],
    );

But, when I tap back to navigate to my previous screen, I get the below exception:

I/flutter (20648): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (20648): The following ConcurrentModificationError was thrown while finalizing the widget tree:
I/flutter (20648): Concurrent modification during iteration: Instance(length:0) of '_GrowableList'.
I/flutter (20648): 
I/flutter (20648): When the exception was thrown, this was the stack:
I/flutter (20648): #0      List.forEach (dart:core/runtime/libgrowable_array.dart:275:36)
I/flutter (20648): #1      _TransitionToImageState.dispose (package:flutter_advanced_networkimage/transition_to_image.dart:114:22)
I/flutter (20648): #2      StatefulElement.unmount (package:flutter/src/widgets/framework.dart:3821:12)
I/flutter (20648): #3      _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1697:13)
I/flutter (20648): #4      _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #5      SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #6      _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #7      _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #8      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #9      _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #10     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #11     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4742:16)
I/flutter (20648): #12     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #13     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #14     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4742:16)
I/flutter (20648): #15     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #16     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #17     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4742:16)
I/flutter (20648): #18     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #19     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #20     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #21     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #22     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #23     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #24     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #25     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #26     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #27     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #28     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #29     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #30     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #31     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #32     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #33     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #34     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #35     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #36     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #37     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #38     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #39     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #40     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #41     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #42     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #43     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #44     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #45     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #46     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #47     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #48     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #49     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #50     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #51     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #52     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #53     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #54     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #55     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #56     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #57     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #58     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #59     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #60     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #61     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #62     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #63     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #64     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #65     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #66     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #67     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #68     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #69     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #70     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #71     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #72     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #73     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #74     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #75     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #76     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #77     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4742:16)
I/flutter (20648): #78     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #79     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #80     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #81     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #82     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #83     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #84     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #85     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #86     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #87     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #88     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #89     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #90     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #91     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #92     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #93     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #94     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #95     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #96     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #97     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #98     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #99     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #100    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #101    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #102    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #103    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #104    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #105    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #106    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #107    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #108    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #109    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #110    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #111    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #112    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #113    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #114    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #115    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #116    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #117    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #118    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #119    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #120    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #121    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #122    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #123    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #124    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #125    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #126    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #127    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #128    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #129    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #130    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #131    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #132    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #133    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #134    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #135    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #136    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #137    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #138    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #139    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #140    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #141    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #142    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #143    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #144    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #145    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #146    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #147    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #148    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #149    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #150    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #151    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #152    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #153    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #154    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #155    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #156    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #157    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #158    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4642:14)
I/flutter (20648): #159    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #160    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #161    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #162    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #163    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #164    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #165    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #166    _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (20648): #167    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3676:14)
I/flutter (20648): #168    _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (20648): #169    ListIterable.forEach (dart:_internal/iterable.dart:39:13)
I/flutter (20648): #170    _InactiveElements._unmountAll (package:flutter/src/widgets/framework.dart:1706:25)
I/flutter (20648): #171    BuildOwner.finalizeTree.<anonymous closure> (package:flutter/src/widgets/framework.dart:2328:27)
I/flutter (20648): #172    BuildOwner.lockState (package:flutter/src/widgets/framework.dart:2160:15)
I/flutter (20648): #173    BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:2327:7)
I/flutter (20648): #174    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:628:18)
I/flutter (20648): #175    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
I/flutter (20648): #176    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter (20648): #177    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter (20648): #178    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter (20648): #179    _invoke (dart:ui/hooks.dart:120:13)
I/flutter (20648): #180    _drawFrame (dart:ui/hooks.dart:109:3)
I/flutter (20648): ════════════════════════════════════════════════════════════════════════════════════════════════════

why create Minimum image for for Uint8List?

Uint8List _minimumImage = Uint8List.fromList([137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,1,0,0,0,1,8,2,0,0,0,144,119,83,222,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,0,12,73,68,65,84,24,87,99,248,255,255,63,0,5,254,2,254,167,53,129,132,0,0,0,0,73,69,78,68,174,66,96,130]);

yes,I understand that you do this things for solve the exception of image loading.
But ,I Think This is not the best way to do it.Because sometimes I have a image of “1x1”(widthxheight).
Do you have the best way to do it

Loading forever, fallback image never appears (bug)

Pretty easy to reproduce, seems like a bug happens everytime:

      var img = AdvancedNetworkImage(
        "https://s3.reutersmedia.net/resources_v2/images/apple-touch-icon.png",
        loadedCallback: () => print('It works!'),
        loadFailedCallback: () => print('Oh, no!'),
        useDiskCache: true,
        timeoutDuration: Duration(seconds: 2),
        retryLimit: 1,
        retryDuration: Duration(milliseconds: 250),
        fallbackImage: widget.fallbackImage);

Basically, the url is a 404 response - but the library never loads the fall back image.

Add bordershapes/clipping

It would be nice to make it a circle directly inside the widget. I'm trying to use this with a CircleAvatar and it works as the child, but the child of the CircleAvatardoesn't get clipped into the circle, only the backround image does. The backgroundImage of the CircleAvatar takes an Imageprovider, but then the TransitionToImage doesn't work... So, long story short, it would be nice if we could tell it to be a circle

Double tap behavior

Hello,

Would it be possible to change double tap behavior of ZoomableWidget from centering the image to:

  1. If scale is 1.0, zoom step by step (e.g 0.5x each double tap) until hits max scale
  2. If max scale, zoom out to scale 1.0 & center the image

Thank you.

Zoom state

Would it be possible to have a onZoomStateChanged method, for then the user is zooming, or the image is back at original zoom state.

I need it to disable pageView scroll if the image is zoomed, to prevent pageview scrolling.

Return to center when zooming to min scale

When zooming out to minScale, it would be really nice if the zoomableWidget would return to center, as it will quite often end up at the side of the container.

Could be a thing you could toggle, if someone wants the current way it pans

example:

minScale and maxScale don't work

hi i'm try your plugin.
I use this code:

new Scaffold(
      body: new ZoomableWidget(
        minScale: 0.8,
        maxScale: 1.6,
        child: new Center(
          child: new Image(
              image: new AdvancedNetworkImage(
                url)),
        ),
      ),

but the minScale and maxScale don't work

SVG support

Hi, would it be possible to add SVG file support?

I'm currently using this library to display SVG images over network, but it doesn't seem to cache the images, so I was hoping your awesome library to add SVG support.

Problem loading URLs from Firebase Storage

I'm trying to load images that I uploaded to Firebase Storage and generated image URL from it, and it does not appear. They worked fine with the builtin Network Image provider, but when I substituted with the AdvancedNetworkImage it doesn't show up. I suspect it has something to do with the extra text in the image path and not parsing correctly. Here is an example of the address that is used:
"https://firebasestorage.googleapis.com/v0/b/kquarum.appspot.com/o/discussions%2Fimage5677.jpg?alt=media&token=cbae2a27-65ce-4caf-bed3-b73323fe4dac"

Maybe it has to do with the %2F or the tags after the question mark, but it works when I put in a normal image path. Pretty sure it's a bug that other people are going to be running across. Thanks for this addon, was a needed one.

TransitionToImage's GestureDetector should be parent of placeholder

TransitionToImage's GestureDetector should be parent of placeholder, otherwise TransitionToImage can't be used as child of another GestureDetector

Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        if (_loadFailed) {
          debugPrint('Reloading image.');
          _getImage(reload: true);
        }
      },
      child: Container(
        width: widget.width,
        height: widget.height,
        child: Center(
          child: (_loadFailed)
          ? widget.placeholder
          : (_status == _TransitionStatus.loading)
              ? widget.loadingWidget
              : (widget.transitionType == TransitionType.fade)
                  ? FadeTransition(
                      opacity: _fadeTween.animate(_animation), child: _child())
                  : SlideTransition(
                      position: _slideTween.animate(_animation),
                      child: _child()),
        ),
      ),
    );
  }

should be:

  Widget build(BuildContext context) {
    return Container(
      width: widget.width,
      height: widget.height,
      child: Center(
        child: (_loadFailed)
            ? GestureDetector(
            onTap: () {
              if (_loadFailed) {
                debugPrint('Reloading image.');
                _getImage(reload: true);
              }
            },
            child: widget.placeholder)
            : (_status == _TransitionStatus.loading)
            ? widget.loadingWidget
            : (widget.transitionType == TransitionType.fade)
            ? FadeTransition(
            opacity: _fadeTween.animate(_animation), child: _child())
            : SlideTransition(
            position: _slideTween.animate(_animation),
            child: _child()),
      ),
    );
  }

setState() called after dispose(): _TransitionToImageState#2d6c7(lifecycle state: defunct, not mounted, tickers: tracking 0 tickers)

Hello, I'm having this error in console log. I'm using TransitionToImage in a ListView, when scrolling the listview, this error is printed in log.
Here is full stacktrace:

E/flutter ( 5765): setState() called after dispose(): _TransitionToImageState#8ea9f(lifecycle state: defunct, not mounted, tickers: tracking 0 tickers)
E/flutter ( 5765): This error happens if you call setState() on a State object for a widget that no longer appears in the widget tree (e.g., whose parent widget no longer includes the widget in its build). This error can occur when code calls setState() from a timer or an animation callback. The preferred solution is to cancel the timer or stop listening to the animation in the dispose() callback. Another solution is to check the "mounted" property of this object before calling setState() to ensure the object is still in the tree.
E/flutter ( 5765): This error might indicate a memory leak if setState() is being called because another object is retaining a reference to this State object after it has been removed from the tree. To avoid memory leaks, consider breaking the reference to this object during dispose().
E/flutter ( 5765): 0      State.setState.<anonymous closure> (package:flutter/src/widgets/framework.dart:1103:9)
E/flutter ( 5765): 1      State.setState (package:flutter/src/widgets/framework.dart:1129:6)
E/flutter ( 5765): 2      _TransitionToImageState._updateImage.<anonymous closure> (package:flutter_advanced_networkimage/transition_to_image.dart:275:11)
E/flutter ( 5765): 3      _RootZone.runUnary (dart:async/zone.dart:1379:54)
E/flutter ( 5765): 4      _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
E/flutter ( 5765): 5      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
E/flutter ( 5765): 6      Future._propagateToListeners (dart:async/future_impl.dart:671:32)
E/flutter ( 5765): 7      Future._complete (dart:async/future_impl.dart:476:7)
E/flutter ( 5765): 8      _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
E/flutter ( 5765): 9      _futurize.<anonymous closure> (dart:ui/painting.dart:3895:17)
E/flutter ( 5765): 10     Image.toByteData.<anonymous closure>.<anonymous closure> (dart:ui/painting.dart:1531:17)

loadingWidget in a ConstrainedBox, maxHeight problem

I have a TransitionToImage, with a TransitionToImage as loadingWidgetwith a smaller cached image. I put all this into a ConstrainedBox with a given maxHeight. The problem is that the loadingWidget is using the maxHeight to set it's height, and not the height of the cached primaryImageSmall ( which is smaller ). The height is correct ( smaller ) once the primaryImage is finished loading. Am i doing something wrong here or is this a problem which could be fixed?

Example code:

                      ConstrainedBox(
                          constraints: BoxConstraints(maxHeight: maxHeight),
                          child: TransitionToImage(
                              AdvancedNetworkImage(
                                primaryImage,
                                useDiskCache: true,
                              ),
                              fit: BoxFit.contain,
                              duration: Duration.zero,
                              loadingWidget: TransitionToImage(
                                AdvancedNetworkImage(
                                  primaryImageSmall,
                                  useDiskCache: true,
                                ),
                                fit: BoxFit.contain,
                                duration: Duration.zero,
                              )))

Thanks for a great lib!

Is there a way to decorate image ?

Hey I'm wondering is there a way to decorate final image which was loaded from Internet in while using TransistionToImage widget.

so here's what I need basically I am loading a profile picture and I want to show loader while the image is being loaded and when it's loaded then after fading transition I want to decorate the image.

Error: The method 'toDouble' was called on null.

I'm using the latest version with this dependency: flutter_advanced_networkimage: any

Getting this error on some images I am trying to load.

Error

[VERBOSE-2:shell.cc(186)] Dart Error: Unhandled exception:
NoSuchMethodError: The method 'toDouble' was called on null.
Receiver: null
Tried calling: toDouble()
#0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
#1      int./ (dart:core/runtime/libintegers.dart:24:36)
#2      _loadFromRemote.<anonymous closure>.<anonymous closure> (package:flutter_advanced_networkimage/src/flutter_advanced_networkimage.dart:270:39)
#3      _RootZone.runUnaryGuarded (dart:async/zone.dart:1314:10)
#4      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:336:11)
#5      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:263:7)
#6      _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:68:11)
#7      _EventSinkWrapper.add (dart:async/stream_transformers.dart:15:11)
#8      _HandlerEventSink.add (dart:async/stream_transformers.dart:238:13)
#9      _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:120:24)
#10  <…>

Flutter Doctor

[✓] Flutter (Channel beta, v1.1.8, on Mac OS X 10.14.2 18C54, locale en-US)
    • Flutter version 1.1.8 at /Users/nemory/Development/flutter
    • Framework revision 985ccb6d14 (4 weeks ago), 2019-01-08 13:45:55 -0800
    • Engine revision 7112b72cc2
    • Dart version 2.1.1 (build 2.1.1-dev.0.1 ec86471ccc)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/nemory/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.1, Build version 10B61
    • ios-deploy 1.9.4
    • CocoaPods version 1.5.3

[✓] Android Studio (version 3.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 32.0.1
    • Dart plugin version 182.5124
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

[✓] VS Code (version 1.30.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 2.22.3

[✓] Connected device (2 available)
    • Android SDK built for x86 • emulator-5554                        • android-x86 • Android 7.1.1 (API 25) (emulator)
    • iPhone XS Max             • 39AC65C7-4F9F-454F-B1B5-3376EE04BCBF • ios         • iOS 12.1 (simulator)

• No issues found!

When navigation page is popped - image state reverts to loading

Regarding the dev branch (0.3.0) -
I noticed if I used TransitionToImage on a page, pushed a new page onto the stack, and popped the new page back off, that the TransitionToImage showed the loading widget instead of the image, indefinitely.

I found that the method _TransitionToImageState._getImage() was resetting the status even if it didn't need to reload the image, leaving the state in the loading status indefinitely.

The updated method looks like this: (original code commented out for clarity)

  _getImage() {
    setState(() {
      _loadFailed = false;
    });
    final ImageStream oldImageStream = _imageStream;
    // This was resetting the status even if the image hadn't changed
    // _status = _TransitionStatus.loading;
    _imageStream =
        _imageProvider.resolve(createLocalImageConfiguration(context));
    if (_imageStream.key != oldImageStream?.key) {
      _status = _TransitionStatus.loading;
      oldImageStream?.removeListener(_updateImage);
      _imageStream.addListener(_updateImage);
    }
  }

This change solved the problem - when the new page was popped off the stack, the existing image displays correctly.

I didn't clone the repo so consider this a change request without the associated PR.

Thanks for a great package!

-Rich

Zoom/scaling origin

Once you pan an image to the side and try to scale it, it will scale around the center that existed when the image was first presented without taking the pan into consideration.

example for current behavior

I think the expected behavior is that the view should scale around the center of the pinch (i.e. like google maps).

Thank you and I hope you don't mind my second issue!

Buffer was empty error

With the last version of flutter 0.2.9 i'm receiving this error:

[VERBOSE-2:codec.cc(76)] InitCodec failed - buffer was empty
[VERBOSE-2:dart_error.cc(16)] Unhandled exception:
'package:flutter/src/painting/image_stream.dart': Failed assertion: line 362 pos 12: '_codec != null': is not true.
#0      _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:37:39)
#1      _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:33:5)
#2      MultiFrameImageStreamCompleter._handleCodecReady (package:flutter/src/painting/image_stream.dart)
#3      _RootZone.runUnary (dart:async/zone.dart:1381:54)
#4      _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
#5      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:633:45)
#6      Future._propagateToListeners (dart:async/future_impl.dart:662:32)
#7      Future._complete (dart:async/future_impl.dart:467:7)
#8      _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
#9      AdvancedNetworkImage._loadAsync (package:flutter_advanced_networkimage/flutter_advanced_networkimage.dart)
<asynchronous suspension>
#10     Ad<…>

Thanks

Quiver version

Hi! I get this when I use flutter packages get

Because every version of flutter_test from sdk depends on quiver 2.0.0+1 and flutter_advanced_networkimage >=0.2.2+1 depends on quiver ^0.29.0, flutter_test from sdk is incompatible with flutter_advanced_networkimage >=0.2.2+1.
So, because gramstudio depends on both flutter_advanced_networkimage ^0.2.11 and flutter_test any from sdk, version solving failed.

Target of URI doesn't exist: provider.dart & transition.dart

i cant get those 2 files at flutter_advanced_networkimage and i tried to change
`D:\flutter\bin\flutter.bat doctor --verbose
[√] Flutter (Channel stable, v1.0.0, on Microsoft Windows [Version 10.0.17134.407], locale en-US)
• Flutter version 1.0.0 at D:\flutter
• Framework revision 5391447fae (9 weeks ago), 2018-11-29 19:41:26 -0800
• Engine revision 7375a0f414
• Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
• Android SDK at C:\Users\Hecham\AppData\Local\Android\sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = C:\Users\Hecham\AppData\Local\Android\sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
• All Android licenses accepted.

[√] Android Studio (version 3.3)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 32.0.1
• Dart plugin version 182.5124
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

[√] VS Code (version 1.30.2)
• VS Code at C:\Users\Hecham\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 2.22.3

[!] Connected device
! No devices available

! Doctor found issues in 1 category.
Process finished with exit code 0 D:\flutter\bin\flutter.bat --no-color upgrade
Upgrading Flutter from D:\flutter...
Already up to date.

Upgrading engine...
Already up-to-date.

Flutter 1.0.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 5391447fae (9 weeks ago) • 2018-11-29 19:41:26 -0800
Engine • revision 7375a0f414
Tools • Dart 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

Running flutter doctor...
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.0.0, on Microsoft Windows [Version 10.0.17134.407], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[√] Android Studio (version 3.3)
[√] VS Code (version 1.30.2)
[!] Connected device
! No devices available

! Doctor found issues in 1 category.
Process finished with exit code 0`
when i run android

Your application could not be compiled, because its dependencies could not be established.
The following Dart file:
D:\flutter_app\Review Apps\foodapp-master\foodapp-master\lib\src\ui\card_widget.dart
...refers, in an import, to the following library:
D:\flutter.pub-cache\hosted\pub.dartlang.org\flutter_advanced_networkimage-0.3.13\lib\provider.dart
Unfortunately, that library does not appear to exist on your file system.

screenshot
https://imgur.com/a/Xgw5Dtu

Dart 2 issue

I enabled dart 2 and now i have this error:


══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building TransitionToImage(dirty, state:
_TransitionToImageState#0fe66(tickers: tracking 1 ticker)):
type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where
_AnimatedEvaluation is from package:flutter/src/animation/tween.dart
Animation is from package:flutter/src/animation/animation.dart
double is from dart:core

Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new

When the exception was thrown, this was the stack:
#0      _TransitionToImageState.build (package:flutter_advanced_networkimage/transition_to_image.dart:136:33)
#1      StatefulElement.build (package:flutter/src/widgets/framework.dart:3713:27)
#2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3625:15)
#3      Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#4      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#5      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#6      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#7      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#8      Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#9      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#10     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#11     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#12     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#13     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#14     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#15     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#16     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#17     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#18     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#19     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#20     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#21     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#22     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#23     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#24     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#25     ParentDataElement.mount (package:flutter/src/widgets/framework.dart:3938:11)
#26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#27     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4738:32)
#28     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#29     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#30     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#31     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#32     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#33     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#34     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#35     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#36     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4738:32)
#37     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#38     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#39     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#40     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#41     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#42     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#43     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#44     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#45     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#46     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#47     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#48     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#49     ParentDataElement.mount (package:flutter/src/widgets/framework.dart:3938:11)
#50     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#51     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4738:32)
#52     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#53     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#54     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#55     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#56     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#57     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#58     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#59     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#60     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#61     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#62     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#63     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#64     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#65     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#66     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#67     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#68     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#69     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#70     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#71     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#72     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#73     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#74     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#75     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#76     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#77     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#78     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#79     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#80     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#81     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#82     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#83     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#84     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#85     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#86     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#87     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#88     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#89     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#90     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#91     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#92     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#93     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#94     Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#95     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#96     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#97     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#98     Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#99     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#100    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#101    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#102    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#103    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#104    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#105    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#106    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#107    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#108    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#109    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#110    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#111    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#112    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#113    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#114    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#115    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#116    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#117    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#118    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#119    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#120    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#121    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#122    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#123    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#124    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#125    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#126    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#127    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#128    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#129    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#130    SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#131    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#132    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4738:32)
#133    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#134    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#135    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
page: 1
#136    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#137    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#138    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#139    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#140    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#141    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#142    SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#143    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#144    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#145    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#146    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#147    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#148    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#149    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#150    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#151    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#152    SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#153    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#154    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#155    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#156    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#157    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#158    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#159    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#160    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#161    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#162    SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#163    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#164    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#165    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#166    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#167    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#168    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#169    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#170    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#171    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#172    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#173    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#174    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#175    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#176    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#177    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#178    SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#179    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#180    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#181    SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#182    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#183    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#184    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#185    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#186    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#187    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#188    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#189    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#190    SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4633:14)
#191    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#192    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#193    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#194    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#195    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#196    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#197    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#198    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#199    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#200    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#201    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#202    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#203    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#204    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#205    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#206    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#207    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#208    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#209    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3605:5)
#210    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3752:11)
#211    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3600:5)
#212    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2890:14)
#213    Element.updateChild (package:flutter/src/widgets/framework.dart:2693:12)
#214    RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4420:32)
#215    MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4748:17)
#216    Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
#217    _TheatreElement.update (package:flutter/src/widgets/overlay.dart:507:16)
#218    Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
#219    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#220    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#221    StatefulElement.update (package:flutter/src/widgets/framework.dart:3782:5)
#222    Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
#223    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#224    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#225    ProxyElement.update (package:flutter/src/widgets/framework.dart:3892:5)
#226    Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
#227    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4640:14)
#228    Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
#229    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#230    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#231    StatefulElement.update (package:flutter/src/widgets/framework.dart:3782:5)
#232    Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
#233    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4640:14)
#234    Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
#235    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4640:14)
#236    Element.updateChild (package:flutter/src/widgets/framework.dart:2682:15)
#237    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3636:16)
#238    Element.rebuild (package:flutter/src/widgets/framework.dart:3478:5)
#239    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2225:33)
#240    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:621:20)
#241    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
#242    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
#243    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
#244    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
#245    _invoke (dart:ui/hooks.dart:120:13)
#246    _drawFrame (dart:ui/hooks.dart:109:3)
════════════════════════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where
Another exception was thrown: type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where
Another exception was thrown: type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where
Another exception was thrown: type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where
Another exception was thrown: type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where
Another exception was thrown: type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where
Another exception was thrown: type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where
Another exception was thrown: type '_AnimatedEvaluation' is not a subtype of type 'Animation<double>' where

Feature request: Flinging support

Would it be possible to have fling support?

Like when you are panning, the image continues to pan for a moment.

Just like the Google Photos app.

Feature request – go transparent on empty image / error

Hello!

I have a situation where sometimes images are empty or there is another error. I would like for ANI to become transparent when this occurs. Is there any way for me to achieve this with your package?

Thank you. By the way, I love the performance your package provides.

Related to issue #39, placeholder never loads

Last commit: #40 resolved this but was undone.

Given a bad image (where the file is corrupt): https://www.politico.com/apple-touch-icon-180x180.png will cause the image loader to throw an operation failed exception on image codec.

The code found in flutter_advanced_networkimage.dart throws an exception at ui.instantiateImageCodec(imageData):

    if (imageData != null) {
      print(imageData);
      if (key.loadedCallback != null) key.loadedCallback();
      return await ui.instantiateImageCodec(imageData);
    }

image

The response is 200 but the image is corrupt, i.e need to add a try / catch around the ui.instantiateImageCodec(imageData); and load the placeholder.

Occasional Exception in TransitionToImage... hard to reproduce

I'm getting an occasional exception in _TransitionToImageState::_child() which is difficult to reliably reproduce (latest version 0.3.7 in master branch - saw this with 0.3.6 as well)

If I tap around my app loading pages which contain a TransitionToImage, eventually it will throw with 'attempt to access image on null' in child - it appears when this happens that _imageInfo is null.

I am trying to determine the set of conditions but so far no luck doing so.

I wonder if the issue arises from the following code:

  _getImage({bool reload: false}) {
    final ImageStream oldImageStream = _imageStream;
    _imageStream =
        _imageProvider.resolve(createLocalImageConfiguration(context));
    if (!reload && (_imageStream.key == oldImageStream?.key)) {
      setState(() {
        _status = _TransitionStatus.completed;
      });
    } else {
      if (reload) {
        debugPrint('Reloading image.');
        _imageProvider.evict();
        _imageStream =
            _imageProvider.resolve(createLocalImageConfiguration(context));
      }
      setState(() {
        _status = _TransitionStatus.loading;
        _loadFailed = false;
      });
      oldImageStream?.removeListener(_updateImage);
      _imageStream.addListener(_updateImage);
    }
  }

I'm trying to see if its possible that this is called and _status is set to _TransitionStatus.completed before the image has completed loading. A test for imageInfo != null may be warranted before setting this status.

Panning with 1 finger

Could you add an option to make a ZoomableWidget pannable with 1 finger? This is the way the stock iOS Photos app does it (i.e. being able to pan with 1 and with 2 fingers)

P.S. Thanks for the great library! This is really the best one compared to other flutter alternatives.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.