@@ -109,48 +109,44 @@ ImageRender networkImageRender({
109
109
}) =>
110
110
(context, attributes, element) {
111
111
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
- );
122
112
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 ());
125
131
if (! completer.isCompleted) {
126
- completer.completeError ("error" );
132
+ context.parser.cachedImageSizes[src] = size;
133
+ completer.complete (size);
134
+ image.image.resolve (ImageConfiguration ()).removeListener (listener! );
127
135
}
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
+
148
146
return FutureBuilder <Size >(
149
147
future: completer.future,
148
+ initialData: context.parser.cachedImageSizes[src],
150
149
builder: (BuildContext buildContext, AsyncSnapshot <Size > snapshot) {
151
- if (completer.isCompleted) {
152
- image.image.resolve (ImageConfiguration ()).removeListener (listener);
153
- }
154
150
if (snapshot.hasData) {
155
151
return Container (
156
152
constraints: BoxConstraints (
0 commit comments