Tipos genéricos en PopScope
Se agregó un tipo genérico a la clase PopScope y se actualizó la firma de la función onPopInvoked.
Resumen
#Se agregó un tipo genérico a la clase PopScope y se reemplazó
onPopInvoked
con un nuevo método onPopInvokedWithResult.
El nuevo método toma un booleano didPop y un result como parámetros posicionales.
También se reemplazó Form.onPopInvoked
con Form.onPopInvokedWithResult
por la misma razón.
Contexto
#Anteriormente, PopScope no tenía una forma de acceder
al resultado del pop cuando se llamaba a onPopInvoked.
El tipo genérico se agrega a la clase PopScope para que
el nuevo método onPopInvokedWithResult pueda acceder al resultado seguro para tipos (type-safe).
Descripción del cambio
#Se agregó un tipo genérico (<T>) a la clase PopScope y
un nuevo método onPopInvokedWithResult.
La propiedad onPopInvoked quedó obsoleta (deprecated) en favor de onPopInvokedWithResult.
También se agregó un nuevo método onPopInvokedWithResult
a Form para reemplazar a onPopInvoked.
Guía de migración
#Código antes de la migración:
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
navigatorKey: nav,
home: Column(
children: [
Form(
canPop: false,
onPopInvoked: (bool didPop) {
if (didPop) {
return;
}
launchConfirmationDialog();
},
child: MyWidget(),
),
PopScope(
canPop: false,
onPopInvoked: (bool didPop) {
if (didPop) {
return;
}
launchConfirmationDialog();
},
child: MyWidget(),
),
],
),
),
);
}
Código después de la migración:
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
navigatorKey: nav,
home: Column(
children: [
Form(
canPop: false,
onPopInvokedWithResult: (bool didPop, Object? result) {
if (didPop) {
return;
}
launchConfirmationDialog();
},
child: MyWidget(),
),
PopScope<Object?>(
canPop: false,
onPopInvokedWithResult: (bool didPop, Object? result) {
if (didPop) {
return;
}
launchConfirmationDialog();
},
child: MyWidget(),
),
],
),
),
);
}
El tipo genérico debe coincidir con el tipo genérico de la Route
en la que se encuentra el PopScope.
Por ejemplo, si la ruta utiliza int como su tipo genérico,
considera usar PopScope<int>.
Si los widgets PopScope se comparten entre varias rutas con
diferentes tipos, puedes usar PopScope<Object?> para capturar todos los tipos posibles.
Timeline
#Llegó en la versión: 3.22.0-26.0.pre
En lanzamiento estable: 3.24.0
Referencias
#Documentación de la API:
Problema relevante:
PR relevante:
- Agregar tipo genérico para el resultado en PopScope (reverted)
- Volver a aplicar la nueva API de PopScope (final reland)
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.