@@ -109,48 +109,44 @@ ImageRender networkImageRender({
109109}) =>
110110 (context, attributes, element) {
111111 final src = mapUrl? .call (_src (attributes)) ?? _src (attributes)! ;
112- precacheImage (
113- NetworkImage (
114- src,
115- headers: headers,
116- ),
117- context.buildContext,
118- onError: (exception, StackTrace ? stackTrace) {
119- context.parser.onImageError? .call (exception, stackTrace);
120- },
121- );
122112 Completer <Size > completer = Completer ();
123- Image image = Image .network (src, frameBuilder: (ctx, child, frame, _) {
124- if (frame == null ) {
113+ if (context.parser.cachedImageSizes[src] != null ) {
114+ completer.complete (context.parser.cachedImageSizes[src]);
115+ } else {
116+ Image image = Image .network (src, frameBuilder: (ctx, child, frame, _) {
117+ if (frame == null ) {
118+ if (! completer.isCompleted) {
119+ completer.completeError ("error" );
120+ }
121+ return child;
122+ } else {
123+ return child;
124+ }
125+ });
126+
127+ ImageStreamListener ? listener;
128+ listener = ImageStreamListener ((ImageInfo imageInfo, bool synchronousCall) {
129+ var myImage = imageInfo.image;
130+ Size size = Size (myImage.width.toDouble (), myImage.height.toDouble ());
125131 if (! completer.isCompleted) {
126- completer.completeError ("error" );
132+ context.parser.cachedImageSizes[src] = size;
133+ completer.complete (size);
134+ image.image.resolve (ImageConfiguration ()).removeListener (listener! );
127135 }
128- return child;
129- } else {
130- return child;
131- }
132- });
133-
134- var listener =
135- ImageStreamListener ((ImageInfo image, bool synchronousCall) {
136- var myImage = image.image;
137- Size size = Size (myImage.width.toDouble (), myImage.height.toDouble ());
138- if (! completer.isCompleted) {
139- completer.complete (size);
140- }
141- }, onError: (object, stacktrace) {
142- if (! completer.isCompleted) {
143- completer.completeError (object);
144- }
145- });
146-
147- image.image.resolve (ImageConfiguration ()).addListener (listener);
136+ }, onError: (object, stacktrace) {
137+ if (! completer.isCompleted) {
138+ completer.completeError (object);
139+ image.image.resolve (ImageConfiguration ()).removeListener (listener! );
140+ }
141+ });
142+
143+ image.image.resolve (ImageConfiguration ()).addListener (listener);
144+ }
145+
148146 return FutureBuilder <Size >(
149147 future: completer.future,
148+ initialData: context.parser.cachedImageSizes[src],
150149 builder: (BuildContext buildContext, AsyncSnapshot <Size > snapshot) {
151- if (completer.isCompleted) {
152- image.image.resolve (ImageConfiguration ()).removeListener (listener);
153- }
154150 if (snapshot.hasData) {
155151 return Container (
156152 constraints: BoxConstraints (
0 commit comments