Migrar of a valores de retorno que no admitan nulos y agregar maybeOf
Eliminar los parámetros nullOk para ayudar con la claridad de la API frente a null safety.
Resumen
#Esta guía de migración describe la conversión de código que utiliza varias funciones estáticas of
para recuperar información de un contexto que solía devolver valores nulos (nullable),
pero que ahora devuelve valores no nulos (non-nullable).
Contexto
#Flutter tiene un patrón común que permite la búsqueda de algunos tipos de widgets
(típicamente InheritedWidgets, pero también otros) utilizando funciones miembro
estáticas que típicamente se llaman of.
Cuando la no nulidad (non-nullability) se convirtió en el comportamiento predeterminado, fue deseable que las
APIs más utilizadas devolvieran un valor no nulo. Esto es porque escribir
Scrollable.of(context) y aún requerir un operador ! o
? y un
valor de respaldo (fallback) después de esa llamada se sentía incómodo, y no era idiomático para
código Dart no nulo.
Gran parte de esta migración se realizó cuando eliminamos los parámetros nullOk en
una migración anterior, pero algunos métodos
of se omitieron en esa migración,
y posteriormente se añadieron algunos con tipos de retorno nulos, en contra de nuestro
patrón común.
En esta migración, los accesores of afectados se dividieron en dos llamadas: una
que devolvía un valor no nulo y lanzaba una excepción cuando el valor buscado
no estaba presente (todavía llamada of), y otra que devolvía un valor nulo
que no lanzaba una excepción y devolvía null si el valor no estaba
presente (un nuevo método llamado maybeOf).
Descripción del cambio
#El cambio modificó estas APIs estáticas of para devolver valores no nulos.
Si no se encuentra un valor, ahora también harán una aserción en modo depuración (debug mode) y
lanzarán una excepción en modo producción (release mode).
-
AutofillGroup.of -
DefaultTabController.of -
DefaultTextHeightBehavior.of Form.of-
HeroControllerScope.of Material.ofOverlay.of-
PageStorage.of -
PrimaryScrollController.of -
RenderAbstractViewport.of -
RestorationScope.of Scrollable.of-
ScrollNotificationObserver.of
Este cambio también introdujo nuevas APIs estáticas maybeOf junto con
las funciones anteriores, las cuales devuelven una versión nula (nullable) del mismo valor y
simplemente devuelven null si no se encuentra el valor, sin lanzar ninguna excepción.
-
AutofillGroup.maybeOf -
DefaultTabController.maybeOf -
DefaultTextHeightBehavior.maybeOf Form.maybeOf-
HeroControllerScope.maybeOf -
Material.maybeOf -
Overlay.maybeOf -
PageStorage.maybeOf -
PrimaryScrollController.maybeOf -
RenderAbstractViewport.maybeOf -
RestorationScope.maybeOf -
Scrollable.maybeOf -
ScrollNotificationObserver.maybeOf
Guía de migración
#Para modificar tu código a fin de usar la nueva forma de las APIs, primero convierte todas las
instancias de las funciones estáticas of originales (donde su nulabilidad sea
importante) para usar la forma maybeOf en su lugar.
Código antes de la migración:
ScrollController? controller = Scrollable.of(context);
Código después de la migración:
ScrollController? controller = Scrollable.maybeOf(context);
Luego, para las instancias donde el código llama a la API of seguida de
un signo de exclamación, simplemente elimina el signo de exclamación: ya no
puede devolver un valor nulo.
Código antes de la migración:
ScrollController controller = Scrollable.of(context)!;
Código después de la migración:
ScrollController controller = Scrollable.of(context);
Lo siguiente también puede ser de ayuda:
unnecessary_non_null_assertion(mensaje del linter) identifica lugares donde se debe eliminar un operador!unnecessary_null_checks(opción de análisis) identifica lugares donde el operador?no es necesariounnecessary_null_in_if_null_operatorsidentifica lugares donde un operador??no es necesariounnecessary_nullable_for_final_variable_declarations(opción de análisis) encuentra operadores de signo de interrogación innecesarios en variablesfinalyconst
Timeline
#En versión estable: 3.7
Referencias
#Documentación de la API:
PRs relevantes:
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.