Skip to content

Commit 1e3196d

Browse files
JustusFluegelmartijn00
authored andcommitted
Don't prematurely close the stream
Signed-off-by: Justus Fluegel <[email protected]>
1 parent 413398b commit 1e3196d

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

cached_network_image_web/lib/cached_network_image_web.dart

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import 'package:cached_network_image_platform_interface'
1212
import 'package:flutter/material.dart';
1313
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
1414

15+
enum _State { open, waitingForData, closing }
16+
1517
/// ImageLoader class to load images on the web platform.
1618
class ImageLoader implements platform.ImageLoader {
1719
@Deprecated('Use loadImageAsync instead')
@@ -125,6 +127,8 @@ class ImageLoader implements platform.ImageLoader {
125127
key: cacheKey,
126128
);
127129

130+
var state = _State.open;
131+
128132
stream.listen(
129133
(event) {
130134
if (event is DownloadProgress) {
@@ -136,9 +140,17 @@ class ImageLoader implements platform.ImageLoader {
136140
);
137141
}
138142
if (event is FileInfo) {
139-
event.file
140-
.readAsBytes()
141-
.then((value) => decode(value).then(streamController.add));
143+
if (state == _State.open) {
144+
state = _State.waitingForData;
145+
}
146+
147+
event.file.readAsBytes().then((value) => decode(value)).then((data) {
148+
streamController.add(data);
149+
if (state == _State.closing) {
150+
streamController.close();
151+
chunkEvents.close();
152+
}
153+
});
142154
}
143155
},
144156
onError: (e, st) {
@@ -148,8 +160,12 @@ class ImageLoader implements platform.ImageLoader {
148160
streamController.addError(e, st);
149161
},
150162
onDone: () async {
151-
streamController.close();
152-
chunkEvents.close();
163+
if (state == _State.open) {
164+
streamController.close();
165+
chunkEvents.close();
166+
} else if (state == _State.waitingForData) {
167+
state = _State.closing;
168+
}
153169
},
154170
cancelOnError: true,
155171
);

0 commit comments

Comments
 (0)