Saltar al contenido principal

API desaprobada eliminada después de la v2.10

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.10.

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í

maxLengthEnforced fue desaprobada en la v1.25.

Usa maxLengthEnforcement en su lugar. Donde maxLengthEnforced era true, reemplázalo con MaxLengthEnforcement.enforce. Donde maxLengthEnforced era false, reemplázalo con MaxLengthEnforcement.none. Este cambio permite especificar más comportamientos más allá de la opción binaria original, agregando MaxLengthEnforcement.truncateAfterCompositionEnds como una opción adicional.

Las siguientes clases tienen todas el mismo cambio de API:

  • TextField
  • TextFormField
  • CupertinoTextField

Migration guide

Guía de migración detallada disponible

Código antes de la migración:

dart
const TextField textField = TextField(maxLengthEnforced: true);
const TextField textField = TextField(maxLengthEnforced: false);
final lengthEnforced = textField.maxLengthEnforced;

const TextFormField textFormField = TextFormField(maxLengthEnforced: true);
const TextFormField textFormField = TextFormField(maxLengthEnforced: false);
final lengthEnforced = textFormField.maxLengthEnforced;

const CupertinoTextField cupertinoTextField = CupertinoTextField(maxLengthEnforced: true);
const CupertinoTextField cupertinoTextField = CupertinoTextField(maxLengthEnforced: false);
final lengthEnforced = cupertinoTextField.maxLengthEnforced;

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

dart
const TextField textField = TextField(maxLengthEnforcement: MaxLengthEnforcement.enforce);
const TextField textField = TextField(maxLengthEnforcement: MaxLengthEnforcement.none);
final lengthEnforced = textField.maxLengthEnforcement;

const TextFormField textFormField = TextFormField(maxLengthEnforcement: MaxLengthEnforcement.enforce);
const TextFormField textFormField = TextFormField(maxLengthEnforcement: MaxLengthEnforcement.none);
final lengthEnforced = textFormField.maxLengthEnforcement;

const CupertinoTextField cupertinoTextField = CupertinoTextField(maxLengthEnforcement: MaxLengthEnforcement.enforce);
const CupertinoTextField cupertinoTextField = CupertinoTextField(maxLengthEnforcement: MaxLengthEnforcement.none);
final lengthEnforced = cupertinoTextField.maxLengthEnforcement;

References

Documentación de la API:

Issues relevantes:

PRs relevantes:


Constructor de VelocityTracker

#

Compatible con Flutter Fix: sí

El constructor predeterminado para VelocityTracker fue desaprobado en la v1.22.

Se debe usar VelocityTracker.withKind() en su lugar. Esto permite especificar un PointerDeviceKind para el tracker. El valor predeterminado anterior para VelocityTracker.kind era PointerDeviceKind.touch.

Migration guide

Código antes de la migración:

dart
final VelocityTracker tracker = VelocityTracker();

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

dart
final VelocityTracker tracker = VelocityTracker.withKind(PointerDeviceKind.touch);

References

Documentación de la API:

PRs relevantes:


DayPicker y MonthPicker

#

Compatible con Flutter Fix: no

Los widgets DayPicker y MonthPicker fueron desaprobados por primera vez en la v1.15, y luego extendidos en la v1.26.

Han sido reemplazados por un widget completo, CalendarDatePicker.

Estos widgets se mostraban usando el método showDatePicker. Este método se migró para presentar el nuevo CalendarDatePicker antes de esta versión, por lo que su eliminación final no debería requerir más acciones.

References

Documento de diseño:

Documentación de la API:

Issues relevantes:

PRs relevantes:


FlatButton, RaisedButton y OutlineButton

#

Compatible con Flutter Fix: no

Los widgets FlatButton, RaisedButton y OutlineButton fueron desaprobados por primera vez en la v1.20, y luego extendidos en la v1.26.

Se reemplazan por nuevos botones, TextButton, ElevatedButton y OutlinedButton. Estos nuevos widgets también usan nuevos temas asociados, en lugar de los temas genéricos ButtonTheme.

Widget antiguoTema antiguoWidget nuevoTema nuevo
FlatButton ButtonTheme TextButton TextButtonTheme
RaisedButton ButtonTheme ElevatedButton ElevatedButtonTheme
OutlineButton ButtonTheme OutlinedButton OutlinedButtonTheme

Migration guide

Guía de migración detallada disponible para estilos detallados

Código antes de la migración:

dart
FlatButton(
  onPressed: onPressed,
  child: Text('Button'),
  // ...
);

RaisedButton(
  onPressed: onPressed,
  child: Text('Button'),
  // ...
);

OutlineButton(
  onPressed: onPressed,
  child: Text('Button'),
  // ...
);

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

dart
TextButton(
  onPressed: onPressed,
  child: Text('Button'),
  // ...
);

ElevatedButton(
  onPressed: onPressed,
  child: Text('Button'),
  // ...
);

OutlinedButton(
  onPressed: onPressed,
  child: Text('Button'),
  // ...
);

References

Documento de diseño:

Documentación de la API:

PRs relevantes:


Métodos de SnackBar de Scaffold

#

Compatible con Flutter Fix: no

Los siguientes métodos de SnackBar de Scaffold fueron desaprobados en la v1.23.

  • showSnackBar
  • removeCurrentSnackBar
  • hideCurrentSnackBar

Se deben usar los métodos del mismo nombre de ScaffoldMessenger en su lugar. Ya se crea un ScaffoldMessenger predeterminado en cada MaterialApp.

Migration guide

Guía de migración detallada disponible

Código antes de la migración:

dart
Scaffold.of(context).showSnackBar(mySnackBar);
Scaffold.of(context).removeCurrentSnackBar(mySnackBar);
Scaffold.of(context).hideCurrentSnackBar(mySnackBar);

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

dart
ScaffoldMessenger.of(context).showSnackBar(mySnackBar);
ScaffoldMessenger.of(context).removeCurrentSnackBar(mySnackBar);
ScaffoldMessenger.of(context).hideCurrentSnackBar(mySnackBar);

References

Documento de diseño:

Contenido de video:

Documentación de la API:

Issues relevantes:

PRs relevantes:


RectangularSliderTrackShape.disabledThumbGapWidth

#

Compatible con Flutter Fix: sí

El RectangularSliderTrackShape.disabledThumbGapWidth fue desaprobado por primera vez en la v1.5 y luego extendido en la v1.26.

El framework ya no lo usaba, ya que la animación del indicador del slider ya no ocurre cuando está deshabilitado.

Migration guide

Código antes de la migración:

dart
RectangularSliderTrackShape(disabledThumbGapWidth: 2.0);

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

dart
RectangularSliderTrackShape();

References

Documentación de la API:

PRs relevantes:


Selección de texto de ThemeData a TextSelectionThemeData

#

Compatible con Flutter Fix: sí

Los siguientes miembros de ThemeData fueron desaprobados por primera vez en la v1.23, y extendidos en la v1.26.

  • useTextSelectionTheme
  • textSelectionColor
  • cursorColor
  • textSelectionHandleColor

Estos deben reemplazarse por un TextSelectionThemeData más completo, que ahora se especifica en el propio ThemeData.

El flag useTextSelectionTheme sirvió como un flag de migración temporal para distinguir las dos API, y ahora se puede eliminar.

Migration guide

Guía de migración detallada disponible

Código antes de la migración:

dart
ThemeData(
  useTextSelectionTheme: false,
  textSelectionColor: Colors.blue,
  cursorColor: Colors.green,
  textSelectionHandleColor: Colors.red,
);

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

dart
ThemeData(
  textSelectionTheme: TextSelectionThemeData(
    selectionColor: Colors.blue,
    cursorColor: Colors.green,
    selectionHandleColor: Colors.red,
  ),
);

References

Documento de diseño:

Documentación de la API:

Issues relevantes:

PRs relevantes:


De RenderEditable.onSelectionChanged a TextSelectionDelegate.textEditingValue

#

Compatible con Flutter Fix: no

RenderEditable.onSelectionChanged y TextSelectionDelegate.textEditingValue fueron desaprobados en la v1.26.

En lugar de llamar a uno o ambos de estos métodos, llama a TextSelectionDelegate.userUpdateTextEditingValue. Esto solucionó un error por el cual el TextInputFormatter recibía el valor de selección incorrecto.

Migration guide

Código antes de la migración:

dart
renderEditable.onSelectionChanged(selection, renderObject, cause);
textSelectionDelegate.textEditingValue = value;

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

dart
textSelectionDelegate.userUpdateTextEditingValue(value, cause);

References

Documentación de la API:

Issues relevantes:

PRs relevantes:


Stack.overflow

#

Compatible con Flutter Fix: sí

Stack.overflow, así como el enum Overflow, fueron desaprobados en la v1.22.

El reemplazo es Stack.clipBehavior, un cambio realizado como parte de la unificación de los comportamientos de recorte (clip) y semántica en todo el framework. Donde se usaba Overflow.visible, usa Clip.none. Donde se usaba Overflow.clip, usa Clip.hardEdge.

Migration guide

Guía de migración detallada disponible

Código antes de la migración:

dart
const Stack stack = Stack(overflow: Overflow.visible);
const Stack stack = Stack(overflow: Overflow.clip);

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

dart
const Stack stack = Stack(clipBehavior: Clip.none);
const Stack stack = Stack(clipBehavior: Clip.hardEdge);

References

Documentación de la API:

Issues relevantes:

PRs relevantes:


UpdateLiveRegionEvent

#

Compatible con Flutter Fix: no

El SemanticsEvent UpdateLiveRegionEvent fue desaprobado por primera vez en la v1.12, y luego extendido en la v1.26.

El framework nunca implementó esto, y cualquier referencia debe ser eliminada.

References

Documentación de la API:

PRs relevantes:


Métodos de RenderObjectElement

#

Compatible con Flutter Fix: sí

Los siguientes métodos de RenderObjectElement fueron desaprobados en la v1.21.

  • insertChildRenderObject
  • moveChildRenderObject
  • removeChildRenderObject

Estos métodos se reemplazan, respectivamente, por:

  • insertRenderObjectChild
  • moveRenderObjectChild
  • removeRenderObjectChild

Estos cambios se realizaron como una desaprobación de cambio leve (soft breaking deprecation) para cambiar la firma de la función.

Migration guide

Código antes de la migración:

dart
element.insertChildRenderObject(child, slot);
element.moveChildRenderObject(child, slot);
element.removeChildRenderObject(child);

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

dart
element.insertRenderObjectChild(child, slot);
element.moveRenderObjectChild(child, oldSlot, newSlot);
element.removeRenderObjectChild(child, slot);

References

Documentación de la API:

Issues relevantes:

PRs relevantes:


Timeline

#

En versión estable: 3.0.0