@@ -291,6 +291,7 @@ class _ZoomEnterTransitionState extends State<_ZoomEnterTransition> with _ZoomTr
291
291
bool get useSnapshot => ! kIsWeb && widget.allowSnapshotting;
292
292
293
293
late _ZoomEnterTransitionPainter delegate;
294
+ MediaQueryData ? mediaQueryData;
294
295
295
296
static final Animatable <double > _fadeInTransition = Tween <double >(
296
297
begin: 0.0 ,
@@ -355,6 +356,18 @@ class _ZoomEnterTransitionState extends State<_ZoomEnterTransition> with _ZoomTr
355
356
super .didUpdateWidget (oldWidget);
356
357
}
357
358
359
+ @override
360
+ void didChangeDependencies () {
361
+ // If the screen size changes during the transition, perhaps due to
362
+ // a keyboard dismissal, then ensure that contents are re-rasterized once.
363
+ final MediaQueryData ? data = MediaQuery .maybeOf (context);
364
+ if (mediaQueryDataChanged (mediaQueryData, data)) {
365
+ controller.clear ();
366
+ }
367
+ mediaQueryData = data;
368
+ super .didChangeDependencies ();
369
+ }
370
+
358
371
@override
359
372
void dispose () {
360
373
widget.animation.removeListener (onAnimationValueChange);
@@ -394,6 +407,7 @@ class _ZoomExitTransition extends StatefulWidget {
394
407
395
408
class _ZoomExitTransitionState extends State <_ZoomExitTransition > with _ZoomTransitionBase {
396
409
late _ZoomExitTransitionPainter delegate;
410
+ MediaQueryData ? mediaQueryData;
397
411
398
412
// See SnapshotWidget doc comment, this is disabled on web because the HTML backend doesn't
399
413
// support this functionality and the canvaskit backend uses a single thread for UI and raster
@@ -458,6 +472,18 @@ class _ZoomExitTransitionState extends State<_ZoomExitTransition> with _ZoomTran
458
472
super .didUpdateWidget (oldWidget);
459
473
}
460
474
475
+ @override
476
+ void didChangeDependencies () {
477
+ // If the screen size changes during the transition, perhaps due to
478
+ // a keyboard dismissal, then ensure that contents are re-rasterized once.
479
+ final MediaQueryData ? data = MediaQuery .maybeOf (context);
480
+ if (mediaQueryDataChanged (mediaQueryData, data)) {
481
+ controller.clear ();
482
+ }
483
+ mediaQueryData = data;
484
+ super .didChangeDependencies ();
485
+ }
486
+
461
487
@override
462
488
void dispose () {
463
489
widget.animation.removeListener (onAnimationValueChange);
@@ -804,6 +830,13 @@ mixin _ZoomTransitionBase {
804
830
break ;
805
831
}
806
832
}
833
+
834
+ // Whether any of the properties that would impact the page transition
835
+ // changed.
836
+ bool mediaQueryDataChanged (MediaQueryData ? oldData, MediaQueryData ? newData) {
837
+ return oldData? .size != newData? .size ||
838
+ oldData? .viewInsets != newData? .viewInsets;
839
+ }
807
840
}
808
841
809
842
class _ZoomEnterTransitionPainter extends SnapshotPainter {
0 commit comments