@@ -57,13 +57,15 @@ void main() {
5757 expect (imageCache.pendingImageCount, 0 );
5858
5959 final ImageStream stream = provider.resolve (ImageConfiguration .empty);
60+ // Add a listener with onError to ensure the error is reported.
6061 final listener = ImageStreamListener (
6162 (ImageInfo info, bool syncCall) {},
6263 onError: (Object exception, StackTrace ? stackTrace) {
6364 throw exception;
6465 },
6566 );
6667 stream.addListener (listener);
68+ addTearDown (() => stream.removeListener (listener));
6769
6870 expect (imageCache.statusForKey (key).pending, true );
6971 expect (imageCache.pendingImageCount, 1 );
@@ -72,17 +74,16 @@ void main() {
7274
7375 expect (imageCache.statusForKey (provider).untracked, true );
7476 expect (imageCache.pendingImageCount, 0 );
75- stream.removeListener (listener);
7677 }, skip: isBrowser); // https://github.com/flutter/flutter/issues/56314
7778
7879 test ('ImageProvider can evict images' , () async {
7980 final bytes = Uint8List .fromList (kTransparentImage);
8081 final imageProvider = MemoryImage (bytes);
8182 final ImageStream stream = imageProvider.resolve (ImageConfiguration .empty);
8283 final completer = Completer <void >();
83- stream. addListener (
84- ImageStreamListener (( ImageInfo info, bool syncCall) => completer. complete ()),
85- );
84+ final listener = ImageStreamListener (( ImageInfo info, bool syncCall) => completer. complete ());
85+ stream. addListener (listener);
86+ addTearDown (() => stream. removeListener (listener) );
8687 await completer.future;
8788
8889 expect (imageCache.currentSize, 1 );
@@ -101,16 +102,14 @@ void main() {
101102 final ImageStream stream = imageProvider.resolve (ImageConfiguration .empty);
102103 final completer = Completer <void >();
103104 final cacheCompleter = Completer <void >();
104- stream.addListener (
105- ImageStreamListener ((ImageInfo info, bool syncCall) {
106- completer.complete ();
107- }),
108- );
109- cacheStream.addListener (
110- ImageStreamListener ((ImageInfo info, bool syncCall) {
111- cacheCompleter.complete ();
112- }),
105+ final listener = ImageStreamListener ((ImageInfo info, bool syncCall) => completer.complete ());
106+ stream.addListener (listener);
107+ addTearDown (() => stream.removeListener (listener));
108+ final cacheListener = ImageStreamListener (
109+ (ImageInfo info, bool syncCall) => cacheCompleter.complete (),
113110 );
111+ cacheStream.addListener (cacheListener);
112+ addTearDown (() => cacheStream.removeListener (cacheListener));
114113 await Future .wait (< Future <void >> [completer.future, cacheCompleter.future]);
115114
116115 expect (otherCache.currentSize, 1 );
@@ -127,16 +126,16 @@ void main() {
127126 caughtError.complete (false );
128127 };
129128 final ImageStream stream = imageProvider.resolve (ImageConfiguration .empty);
130- stream.addListener (
131- ImageStreamListener (
132- (ImageInfo info, bool syncCall) {
133- caughtError.complete (false );
134- },
135- onError: (dynamic error, StackTrace ? stackTrace) {
136- caughtError.complete (true );
137- },
138- ),
129+ final listener = ImageStreamListener (
130+ (ImageInfo info, bool syncCall) {
131+ caughtError.complete (false );
132+ },
133+ onError: (dynamic error, StackTrace ? stackTrace) {
134+ caughtError.complete (true );
135+ },
139136 );
137+ stream.addListener (listener);
138+ addTearDown (() => stream.removeListener (listener));
140139 expect (await caughtError.future, true );
141140 });
142141}
0 commit comments