Cambio importante en las APIs de páginas de Navigator
Reemplaza la propiedad 'onPopPage' de Navigator por la propiedad 'onDidRemovePage'.
Resumen
#Las APIs de páginas de Navigator
se han refactorizado para que
puedan integrarse con los otros mecanismos de pop de Flutter.
Contexto
#La propiedad onPopPage se añadió para limpiar las páginas después de que
una página esté a punto de cerrarse (hacer pop).
Para vetar el pop, devolverías false en el callback.
Esto no funcionaba bien con otros mecanismos de pop en el framework,
como PopScope
y los gestos de retroceso de iOS.
Para integrar los mecanismos de pop del framework, era necesario refactorizar las APIs de páginas.
Descripción del cambio
#La propiedad onDidRemovePage reemplaza a la propiedad onPopPage.
Ya no puedes vetar un pop en la propiedad onDidRemovePage.
En su lugar, solo eres responsable de actualizar las pages.
El mecanismo de veto ahora se gestiona con las
propiedades Page.canPop y Page.onPopInvoked.
Estas funcionan de manera similar a cómo usas el Widget PopScope.
Guía de migración
#Código antes de la migración:
import 'package:flutter/material.dart';
final MaterialPage<void> page1 = MaterialPage<void>(child: Placeholder());
final MaterialPage<void> page2 = MaterialPage<void>(child: Placeholder());
final MaterialPage<void> page3 = MaterialPage<void>(child: Placeholder());
void main() {
final List<Page<void>> pages = <Page<void>>[page1, page2, page3];
runApp(
MaterialApp(
home: Navigator(
pages: pages,
onPopPage: (Route<Object?> route, Object? result) {
if (route.settings == page2) {
return false;
}
if (route.didPop) {
pages.remove(route.settings);
return true;
}
return false;
},
),
),
);
}
Código después de la migración:
import 'package:flutter/material.dart';
final MaterialPage<void> page1 = MaterialPage<void>(child: Placeholder());
final MaterialPage<void> page2 = MaterialPage<void>(canPop: false, child: Placeholder());
final MaterialPage<void> page3 = MaterialPage<void>(child: Placeholder());
void main() {
final List<Page<void>> pages = <Page<void>>[page1, page2, page3];
runApp(
MaterialApp(
home: Navigator(
pages: pages,
onDidRemovePage: (Page<Object?> page) {
pages.remove(page);
},
),
),
);
}
Timeline
#Introducido en la versión: 3.22.0-32.0.pre
En la versión estable: 3.24.0
Referencias
#Documentación de la API:
Problema relevante:
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.