API desaprobada eliminada después de la v2.5
Después de llegar al final de su vida útil, las siguientes API desaprobadas fueron eliminadas de Flutter.
Resumen
#De acuerdo con la política de desaprobación de Flutter, se han eliminado las API desaprobadas que llegaron al final de su vida útil después del lanzamiento estable 2.5.
Todas las API afectadas se han recopilado en esta fuente principal para ayudar en la migración. También está disponible una hoja de referencia rápida.
Cambios
#Esta sección enumera las desaprobaciones por clase afectada.
autovalidate de Form y clases relacionadas
#
Compatible con Flutter Fix: sí
autovalidate fue desaprobada en la v1.19.
Usa autovalidateMode en su lugar.
Donde autovalidate era true, reemplázalo con AutovalidateMode.always.
Donde autovalidate era false, reemplázalo con AutovalidateMode.disabled.
Este cambio permite especificar más comportamientos más allá de la opción binaria
original, agregando AutovalidateMode.onUserInteraction como una opción adicional.
Las siguientes clases tienen todas el mismo cambio de API:
FormFormFieldDropdownButtonFormFieldTextFormField
Migration guide
Guía de migración detallada disponible
Código antes de la migración:
const Form form = Form(autovalidate: true);
const Form form = Form(autovalidate: false);
final autoMode = form.autovalidate;
const FormField formField = FormField(autovalidate: true);
const FormField formField = FormField(autovalidate: false);
final autoMode = formField.autovalidate;
const TextFormField textFormField = TextFormField(autovalidate: true);
const TextFormField textFormField = TextFormField(autovalidate: false);
const DropdownButtonFormField dropDownButtonFormField = DropdownButtonFormField(autovalidate: true);
const DropdownButtonFormField dropdownButtonFormField = DropdownButtonFormField(autovalidate: false);
Código después de la migración:
const Form form = Form(autovalidateMode: AutovalidateMode.always);
const Form form = Form(autovalidateMode: AutovalidateMode.disabled);
final autoMode = form.autovalidateMode;
const FormField formField = FormField(autovalidateMode: AutovalidateMode.always);
const FormField formField = FormField(autovalidateMode: AutovalidateMode.disabled);
final autoMode = formField.autovalidateMode;
const TextFormField textFormField = TextFormField(autovalidateMode: AutovalidateMode.always);
const TextFormField textFormField = TextFormField(autovalidateMode: AutovalidateMode.disabled);
const DropdownButtonFormField dropDownButtonFormField = DropdownButtonFormField(autovalidateMode: AutovalidateMode.always);
const DropdownButtonFormField dropdownButtonFormField = DropdownButtonFormField(autovalidateMode: AutovalidateMode.disabled);
References
Documentación de la API:
Issues relevantes:
PRs relevantes:
FloatingHeaderSnapConfiguration.vsync
#
Compatible con Flutter Fix: no
La propiedad TickerProvider vsync de FloatingHeaderSnapConfiguration
fue
desaprobada en la v1.19.
En su lugar, el vsync para la animación debe especificarse usando
SliverPersistentHeaderDelegate.vsync.
Migration guide
Código antes de la migración:
class MySliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate {
FloatingHeaderSnapConfiguration? get snapConfiguration => FloatingHeaderSnapConfiguration(vsync: myTickerProvider);
}
Código después de la migración:
class MySliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate {
FloatingHeaderSnapConfiguration? get snapConfiguration => FloatingHeaderSnapConfiguration();
TickerProvider? get vsync => myTickerProvider;
}
References
Documento de diseño:
Documentación de la API:
Issues relevantes:
PRs relevantes:
El id de AndroidViewController y sus subclases
#
Compatible con Flutter Fix: sí
El id de AndroidViewController, TextureAndroidViewController y
SurfaceAndroidViewController fue desaprobado en la v1.20.
Para todos estos casos de uso, se debe usar viewId en su lugar.
Migration guide
Código antes de la migración:
final SurfaceAndroidViewController surfaceController = SurfaceAndroidViewController(
viewId: 10,
viewType: 'FixTester',
layoutDirection: TextDirection.ltr,
);
int viewId = surfaceController.id;
final SurfaceAndroidViewController surfaceController = SurfaceAndroidViewController(
error: '',
);
final TextureAndroidViewController textureController = TextureAndroidViewController(
error: '',
);
final TextureAndroidViewController textureController = TextureAndroidViewController(
viewId: 10,
viewType: 'FixTester',
layoutDirection: TextDirection.ltr,
);
viewId = textureController.id;
Código después de la migración:
final SurfaceAndroidViewController surfaceController = SurfaceAndroidViewController(
viewId: 10,
viewType: 'FixTester',
layoutDirection: TextDirection.ltr,
);
int viewId = surfaceController.viewId;
final SurfaceAndroidViewController surfaceController = SurfaceAndroidViewController(
error: '',
);
final TextureAndroidViewController textureController = TextureAndroidViewController(
error: '',
);
final TextureAndroidViewController textureController = TextureAndroidViewController(
viewId: 10,
viewType: 'FixTester',
layoutDirection: TextDirection.ltr,
);
viewId = textureController.viewId;
References
Documento de diseño:
Documentación de la API:
Issues relevantes:
PRs relevantes:
BlacklistingTextInputFormatter y WhitelistingTextInputFormatter
#
Compatible con Flutter Fix: no
Las clases completas de BlacklistingTextInputFormatter y
WhitelistingTextInoutFormatter fueron desaprobadas en la v1.20.
Su funcionalidad se ha reescrito en una sola clase,
FilteringTextInputFormatter.
Migration guide
Código antes de la migración:
formatter = BlacklistingTextInputFormatter(pattern, replacementString: 'replacedPattern');
formatter = BlacklistingTextInputFormatter.singleLineFormatter;
pattern = formatter.blacklistedPattern;
formatter = WhitelistingTextInputFormatter(pattern);
formatter = WhitelistingTextInputFormatter.digitsOnly;
pattern = formatter.whitelistedPattern;
Código después de la migración:
formatter = FilteringTextInputFormatter.deny(pattern, replacementString: 'replacedPattern');
formatter = FilteringTextInputFormatter.singleLineFormatter;
pattern = formatter.filterPattern;
formatter = FilteringTextInputFormatter.allow(pattern);
formatter = FilteringTextInputFormatter.digitsOnly;
pattern = formatter.filterPattern;
References
Documentación de la API:
PRs relevantes:
BottomNavigationBarItem.title
#
Compatible con Flutter Fix: sí
El title de BottomNavigationBarItem fue desaprobado en la v1.19.
Se debe usar la propiedad label en su lugar. Esta migración permite un mejor
escalado de texto y presenta Tooltips integrados para el BottomNavigationBarItem
en el contexto de un BottomNavigationBar.
Migration guide
Guía de migración detallada disponible
Código antes de la migración:
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(title: myTitle);
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem();
bottomNavigationBarItem.title;
Código después de la migración:
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(label: myTitle);
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem();
bottomNavigationBarItem.label;
References
Documento de diseño:
Documentación de la API:
PRs relevantes:
packageRoot en dart:core, dart:isolate y package:platform
#
Se han eliminado las siguientes API:
Platform.packageRootendart:coreIsolate.packageRootendart:isolatePlatform.packageRootenpackage:platform
Estas API se marcaron como desaprobadas en Dart 2.0 y no funcionaron correctamente en ninguna versión de Dart 2.x.
Migration guide
Estas API de packageRoot han sido reemplazadas por un nuevo conjunto de API de packageConfig,
a las cuales deberías migrar.
Platform.packageConfigendart:coreIsolate.packageConfigendart:isolatePlatform.packageConfigenpackage:platform
Si estás usando el paquete package:platform, ten en cuenta que independientemente de si
estás usando la API de packageRoot o no, las versiones anteriores de ese paquete
no son compatibles con Dart 2.16 y versiones posteriores, ya que dependen de la ya eliminada
API de packageRoot. Es posible que veas un error como este al intentar ejecutar tu
aplicación:
../../.pub-cache/hosted/pub.dartlang.org/platform-3.0.0/
lib/src/interface/local_platform.dart:46:19:
Error: Member not found: 'packageRoot'.
io.Platform.packageRoot; // ignore: deprecated_member_use
^^^^^^^^^^^
Para resolver eso, actualiza a la versión 3.1.0 o posterior de package:platform
actualizando la restricción en tu archivo pubspec.yaml:
dependencies:
platform: ^3.1.0
References
PRs relevantes:
- Eliminado de las librerías de Dart en #47769
- Eliminado de
package:platformen PR #38 - Se actualizó Flutter para usar
package:platform3.1.0 en el PR #94603
Timeline
#En versión estable: 2.10
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.