@@ -198,6 +198,44 @@ Future<void> main() async {
198
198
expect (parts.target.opacity, 1 );
199
199
});
200
200
201
+ // Regression test for https://github.com/flutter/flutter/issues/111011
202
+ testWidgets ("FadeInImage's image obeys gapless playback when first image is cached but second isn't" ,
203
+ (WidgetTester tester) async {
204
+ final TestImageProvider placeholderProvider = TestImageProvider (placeholderImage);
205
+ final TestImageProvider imageProvider = TestImageProvider (targetImage);
206
+ final TestImageProvider secondImageProvider = TestImageProvider (replacementImage);
207
+
208
+ // Pre-cache the initial image.
209
+ imageProvider.resolve (ImageConfiguration .empty);
210
+ imageProvider.complete ();
211
+ placeholderProvider.complete ();
212
+
213
+ await tester.pumpWidget (FadeInImage (
214
+ placeholder: placeholderProvider,
215
+ image: imageProvider,
216
+ ));
217
+ await tester.pumpAndSettle ();
218
+
219
+ await tester.pumpWidget (FadeInImage (
220
+ placeholder: placeholderProvider,
221
+ image: secondImageProvider,
222
+ ));
223
+
224
+ FadeInImageParts parts = findFadeInImage (tester);
225
+ // Continually shows previously loaded image until the new image provider provides the image.
226
+ expect (parts.placeholder, isNull);
227
+ expect (parts.target.rawImage.image! .isCloneOf (targetImage), isTrue);
228
+ expect (parts.target.opacity, 1 );
229
+
230
+ // Now, provide the image.
231
+ secondImageProvider.complete ();
232
+ await tester.pump ();
233
+
234
+ parts = findFadeInImage (tester);
235
+ expect (parts.target.rawImage.image! .isCloneOf (replacementImage), isTrue);
236
+ expect (parts.target.opacity, 1 );
237
+ });
238
+
201
239
testWidgets ("FadeInImage's placeholder obeys gapless playback" , (WidgetTester tester) async {
202
240
final TestImageProvider placeholderProvider = TestImageProvider (placeholderImage);
203
241
final TestImageProvider secondPlaceholderProvider = TestImageProvider (replacementImage);
0 commit comments