Transiciones de página reemplazadas por ZoomPageTransitionsBuilder
Usar la transición de página más reciente en lugar de la antigua.
Resumen
#Para garantizar que las librerías sigan el comportamiento OEM más reciente,
los constructores de transiciones de página predeterminados ahora utilizan
ZoomPageTransitionsBuilder en todas las plataformas (excluyendo iOS y macOS)
en lugar de FadeUpwardsPageTransitionsBuilder.
Contexto
#El FadeUpwardsPageTransitionsBuilder (proporcionado con la primera
versión de Flutter) definía una transición de página que es
similar a la proporcionada por Android O. Este constructor de transiciones de página
eventualmente será marcado como obsoleto en Android, según la
política de obsolescencia de Flutter.
ZoomPageTransitionsBuilder, el nuevo constructor de transiciones de página para
Android, Linux y Windows, define una transición de página que es similar a
la proporcionada por Android Q y R.
De acuerdo con la guía de estilo del repositorio de Flutter,
el framework seguirá el comportamiento OEM más reciente.
Los constructores de transiciones de página que utilizaban FadeUpwardsPageTransitionsBuilder
han cambiado todos al ZoomPageTransitionsBuilder.
Cuando la TargetPlatform actual no tiene un
PageTransitionsBuilder definido en el ThemeData.pageTransitionsTheme,
se utiliza ZoomPageTransitionsBuilder como predeterminado.
Descripción del cambio
#Los PageTransitionsBuilders definidos en
PageTransitionsTheme._defaultBuilders han cambiado de
FadeUpwardsPageTransitionsBuilder a
ZoomPageTransitionsBuilder para TargetPlatform.android,
TargetPlatform.linux y TargetPlatform.windows.
Guía de migración
#Si deseas volver al constructor de transiciones de página anterior
(FadeUpwardsPageTransitionsBuilder), debes definir los constructores
explícitamente para las plataformas de destino.
Código antes de la migración:
MaterialApp(
theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple)),
)
Código después de la migración:
MaterialApp(
theme: ThemeData(
pageTransitionsTheme: const PageTransitionsTheme(
builders: <TargetPlatform, PageTransitionsBuilder>{
TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(), // Apply this to every platforms you need.
},
),
),
)
Si deseas aplicar el mismo constructor de transiciones de página a todas las plataformas:
MaterialApp(
theme: ThemeData(
pageTransitionsTheme: PageTransitionsTheme(
builders: Map<TargetPlatform, PageTransitionsBuilder>.fromIterable(
TargetPlatform.values,
value: (dynamic _) => const FadeUpwardsPageTransitionsBuilder(),
),
),
),
)
Migración de pruebas
#Si solías intentar encontrar widgets pero fallabas con Too many elements al usar la nueva transición, y veías errores similares al siguiente:
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following StateError was thrown running a test:
Bad state: Too many elements
When the exception was thrown, this was the stack:
#0 Iterable.single (dart:core/iterable.dart:656:24)
#1 WidgetController.widget (package:flutter_test/src/controller.dart:69:30)
#2 main.<anonymous closure> (file:///path/to/your/test.dart:1:2)
Debes migrar tus pruebas utilizando el
alcance descendant para los Finders con el tipo de widget específico.
A continuación se muestra el ejemplo de la prueba de DataTable:
Prueba antes de la migración:
final Finder finder = find.widgetWithIcon(Transform, Icons.arrow_upward);
Prueba después de la migración:
final Finder finder = find.descendant(
of: find.byType(DataTable),
matching: find.widgetWithIcon(Transform, Icons.arrow_upward),
);
Los widgets que normalmente necesitan migrar el alcance del finder son:
Transform, FadeTransition, ScaleTransition y
ColoredBox.
Timeline
#Introducido en la versión: 2.13.0-1.0.pre
En la versión estable: 3.0.0
Referencias
#Documentación de la API:
Issues relevantes:
PR relevante:
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.