Saltar al contenido principal

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.


#

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:

  • Form
  • FormField
  • DropdownButtonFormField
  • TextFormField

Migration guide

Guía de migración detallada disponible

Código antes de la migración:

dart
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:

dart
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:

dart
class MySliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate {
  FloatingHeaderSnapConfiguration? get snapConfiguration => FloatingHeaderSnapConfiguration(vsync: myTickerProvider);
}

Código después de la migración:

dart
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:

dart
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:

dart
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:

dart
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:

dart
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:

dart
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(title: myTitle);
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem();
bottomNavigationBarItem.title;

Código después de la migración:

dart
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:

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.

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:

yaml
dependencies:
  platform: ^3.1.0

References

PRs relevantes:

  • Eliminado de las librerías de Dart en #47769
  • Eliminado de package:platform en PR #38
  • Se actualizó Flutter para usar package:platform 3.1.0 en el PR #94603

Timeline

#

En versión estable: 2.10