@@ -9,7 +9,6 @@ import 'dart:ui' as ui show Image;
9
9
import 'package:flutter/foundation.dart' ;
10
10
import 'package:flutter/material.dart' ;
11
11
import 'package:flutter_test/flutter_test.dart' ;
12
- import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart' ;
13
12
14
13
import '../image_data.dart' ;
15
14
@@ -18,7 +17,13 @@ class TestImageProvider extends ImageProvider<TestImageProvider> {
18
17
19
18
final Future <void > future;
20
19
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
+ }
22
27
23
28
@override
24
29
Future <TestImageProvider > obtainKey (ImageConfiguration configuration) {
@@ -27,20 +32,25 @@ class TestImageProvider extends ImageProvider<TestImageProvider> {
27
32
28
33
@override
29
34
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
+
30
39
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
+ }),
32
44
);
33
45
}
34
46
}
35
47
36
48
Future <void > main () async {
37
49
AutomatedTestWidgetsFlutterBinding ();
38
- TestImageProvider .image = await decodeImageFromList ( Uint8List . fromList (kTransparentImage) );
50
+ await TestImageProvider . prepareImages ( 2 );
39
51
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);
44
54
final GlobalKey key = GlobalKey ();
45
55
final Completer <void > completer = Completer <void >();
46
56
await tester.pumpWidget (
@@ -63,10 +73,8 @@ Future<void> main() async {
63
73
expect (tester.binding.hasScheduledFrame, isFalse);
64
74
});
65
75
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);
70
78
final Completer <void > completer = Completer <void >();
71
79
final Widget subtree = KeyedSubtree (
72
80
key: GlobalKey (),
0 commit comments