@@ -9,7 +9,6 @@ import 'dart:ui' as ui show Image;
99import 'package:flutter/foundation.dart' ;
1010import 'package:flutter/material.dart' ;
1111import 'package:flutter_test/flutter_test.dart' ;
12- import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart' ;
1312
1413import '../image_data.dart' ;
1514
@@ -18,7 +17,13 @@ class TestImageProvider extends ImageProvider<TestImageProvider> {
1817
1918 final Future <void > future;
2019
21- static late ui.Image image;
20+ static final List <ui.Image > _images = < ui.Image > [];
21+
22+ static Future <void > prepareImages (int count) async {
23+ for (int i = 0 ; i < count; i++ ) {
24+ _images.add (await decodeImageFromList (Uint8List .fromList (kTransparentImage)));
25+ }
26+ }
2227
2328 @override
2429 Future <TestImageProvider > obtainKey (ImageConfiguration configuration) {
@@ -27,20 +32,25 @@ class TestImageProvider extends ImageProvider<TestImageProvider> {
2732
2833 @override
2934 ImageStreamCompleter loadImage (TestImageProvider key, ImageDecoderCallback decode) {
35+ assert (_images.isNotEmpty, 'ask for more images in `prepareImages`' );
36+ final ui.Image image = _images.last;
37+ _images.removeLast ();
38+
3039 return OneFrameImageStreamCompleter (
31- future.then <ImageInfo >((void value) => ImageInfo (image: image)),
40+ future.then <ImageInfo >((void value) {
41+ final ImageInfo result = ImageInfo (image: image);
42+ return result;
43+ }),
3244 );
3345 }
3446}
3547
3648Future <void > main () async {
3749 AutomatedTestWidgetsFlutterBinding ();
38- TestImageProvider .image = await decodeImageFromList ( Uint8List . fromList (kTransparentImage) );
50+ await TestImageProvider . prepareImages ( 2 );
3951
40- testWidgets ('DecoratedBox handles loading images' ,
41- // TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
42- experimentalLeakTesting: LeakTesting .settings.withIgnoredAll (),
43- (WidgetTester tester) async {
52+ testWidgets ('DecoratedBox handles loading images' , (WidgetTester tester) async {
53+ addTearDown (imageCache.clear);
4454 final GlobalKey key = GlobalKey ();
4555 final Completer <void > completer = Completer <void >();
4656 await tester.pumpWidget (
@@ -63,10 +73,8 @@ Future<void> main() async {
6373 expect (tester.binding.hasScheduledFrame, isFalse);
6474 });
6575
66- testWidgets ('Moving a DecoratedBox' ,
67- // TODO(polina-c): dispose ImageStreamCompleterHandle, https://github.com/flutter/flutter/issues/145599 [leaks-to-clean]
68- experimentalLeakTesting: LeakTesting .settings.withIgnoredAll (),
69- (WidgetTester tester) async {
76+ testWidgets ('Moving a DecoratedBox' , (WidgetTester tester) async {
77+ addTearDown (imageCache.clear);
7078 final Completer <void > completer = Completer <void >();
7179 final Widget subtree = KeyedSubtree (
7280 key: GlobalKey (),
0 commit comments