Skip to content

Commit 9ae3703

Browse files
author
Jonah Williams
authored
Use toPictureSync for faster zoom page transition (#106621)
1 parent 9f7033a commit 9ae3703

14 files changed

Lines changed: 1487 additions & 86 deletions

File tree

packages/flutter/lib/src/cupertino/route.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ class CupertinoPageRoute<T> extends PageRoute<T> with CupertinoRouteTransitionMi
342342
super.settings,
343343
this.maintainState = true,
344344
super.fullscreenDialog,
345+
super.preferRasterization = true,
345346
}) : assert(builder != null),
346347
assert(maintainState != null),
347348
assert(fullscreenDialog != null) {
@@ -371,6 +372,7 @@ class CupertinoPageRoute<T> extends PageRoute<T> with CupertinoRouteTransitionMi
371372
class _PageBasedCupertinoPageRoute<T> extends PageRoute<T> with CupertinoRouteTransitionMixin<T> {
372373
_PageBasedCupertinoPageRoute({
373374
required CupertinoPage<T> page,
375+
super.preferRasterization = true,
374376
}) : assert(page != null),
375377
super(settings: page) {
376378
assert(opaque);
@@ -417,6 +419,7 @@ class CupertinoPage<T> extends Page<T> {
417419
this.maintainState = true,
418420
this.title,
419421
this.fullscreenDialog = false,
422+
this.preferRasterization = true,
420423
super.key,
421424
super.name,
422425
super.arguments,
@@ -437,9 +440,12 @@ class CupertinoPage<T> extends Page<T> {
437440
/// {@macro flutter.widgets.PageRoute.fullscreenDialog}
438441
final bool fullscreenDialog;
439442

443+
/// {@macro flutter.widgets.TransitionRoute.preferRasterization}
444+
final bool preferRasterization;
445+
440446
@override
441447
Route<T> createRoute(BuildContext context) {
442-
return _PageBasedCupertinoPageRoute<T>(page: this);
448+
return _PageBasedCupertinoPageRoute<T>(page: this, preferRasterization: preferRasterization);
443449
}
444450
}
445451

packages/flutter/lib/src/material/page.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class MaterialPageRoute<T> extends PageRoute<T> with MaterialRouteTransitionMixi
3939
super.settings,
4040
this.maintainState = true,
4141
super.fullscreenDialog,
42+
super.preferRasterization = true,
4243
}) : assert(builder != null),
4344
assert(maintainState != null),
4445
assert(fullscreenDialog != null) {
@@ -157,6 +158,7 @@ class MaterialPage<T> extends Page<T> {
157158
required this.child,
158159
this.maintainState = true,
159160
this.fullscreenDialog = false,
161+
this.preferRasterization = true,
160162
super.key,
161163
super.name,
162164
super.arguments,
@@ -174,9 +176,12 @@ class MaterialPage<T> extends Page<T> {
174176
/// {@macro flutter.widgets.PageRoute.fullscreenDialog}
175177
final bool fullscreenDialog;
176178

179+
/// {@macro flutter.widgets.TransitionRoute.preferRasterization}
180+
final bool preferRasterization;
181+
177182
@override
178183
Route<T> createRoute(BuildContext context) {
179-
return _PageBasedMaterialPageRoute<T>(page: this);
184+
return _PageBasedMaterialPageRoute<T>(page: this, preferRasterization: preferRasterization);
180185
}
181186
}
182187

@@ -187,6 +192,7 @@ class MaterialPage<T> extends Page<T> {
187192
class _PageBasedMaterialPageRoute<T> extends PageRoute<T> with MaterialRouteTransitionMixin<T> {
188193
_PageBasedMaterialPageRoute({
189194
required MaterialPage<T> page,
195+
super.preferRasterization,
190196
}) : assert(page != null),
191197
super(settings: page) {
192198
assert(opaque);

0 commit comments

Comments
 (0)