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