Saltar al contenido principal

API desaprobada eliminada después de la v3.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 3.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, clasificadas por el paquete y la clase afectada.

ThemeData.fixTextFieldOutlineLabel

#

Paquete: flutter Compatible con Flutter Fix: sí

ThemeData.fixTextFieldOutlineLabel fue desaprobada en la v2.5. Se pueden eliminar las referencias a esta propiedad.

El flag fixTextFieldOutlineLabel era un flag de migración temporal que permitía a los usuarios migrar gradualmente a un nuevo comportamiento en lugar de experimentar un cambio brusco. Antes de desaprobarse, esta propiedad se transicionó al nuevo valor predeterminado a partir del arreglo a la etiqueta para campos de texto.

Migration guide

Código antes de la migración:

dart
var themeData = ThemeData(
  fixTextFieldOutlineLabel: true,
);

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

dart
var themeData = ThemeData(
);

References

Documentación de la API:

PRs relevantes:


OverscrollIndicatorNotification.disallowGlow

#

Paquete: flutter Compatible con Flutter Fix: sí

OverscrollIndicatorNotification.disallowGlow fue desaprobada en la v2.5. El reemplazo es el método disallowIndicator.

El método disallowIndicator se creó como reemplazo del método original con la introducción de StretchingOverscrollIndicator. Anteriormente, el GlowingOverscrollIndicator era el único tipo que enviaba OverscrollIndicatorNotifications, por lo que el método se actualizó para reflejar mejor múltiples tipos de indicadores.

Migration guide

Código antes de la migración:

dart
bool _handleOverscrollIndicatorNotification(OverscrollIndicatorNotification notification) {
  notification.disallowGlow();
  return false;
}

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

dart
bool _handleOverscrollIndicatorNotification(OverscrollIndicatorNotification notification) {
  notification.disallowIndicator();
  return false;
}

References

Documentación de la API:

PRs relevantes:


ColorScheme primaryVariant y secondaryVariant

#

Paquete: flutter Compatible con Flutter Fix: sí

ColorScheme.primaryVariant y ColorScheme.secondaryVariant fueron desaprobados en la v2.6. Los reemplazos son ColorScheme.primaryContainer y ColorScheme.secondaryContainer, respectivamente.

Estos cambios se realizaron para alinearse con la especificación de Material Design actualizada para ColorScheme. Las actualizaciones de ColorScheme se detallan más ampliamente en el documento de diseño ColorScheme para Material 3.

Migration guide

Código antes de la migración:

dart
var colorScheme = ColorScheme(
  primaryVariant: Colors.blue,
  secondaryVariant: Colors.amber,
);
var primaryColor = colorScheme.primaryVariant;
var secondaryColor = colorScheme.secondaryVariant;

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

dart
var colorScheme = ColorScheme(
  primaryContainer: Colors.blue,
  secondaryContainer: Colors.amber,
);
var primaryColor = colorScheme.primaryContainer;
var secondaryColor = colorScheme.secondaryContainer;

References

Documento de diseño:

Documentación de la API:

PRs relevantes:


ThemeData.primaryColorBrightness

#

Paquete: flutter Compatible con Flutter Fix: sí

ThemeData.primaryColorBrightness fue desaprobada en la v2.6, y no ha sido usada por el framework desde entonces. Se deben eliminar las referencias. El Brightness ahora se extrapola de ThemeData.primaryColor si ThemeData.brightness no se ha proporcionado explícitamente.

Este cambio se realizó como parte de la actualización de Theme para coincidir con las nuevas directrices de Material Design. La actualización general del sistema de temas, incluyendo la eliminación de primaryColorBrightness, se analiza con más detalle en el documento de diseño Material Theme System Updates.

Migration guide

Código antes de la migración:

dart
var themeData = ThemeData(
  primaryColorBrightness: Brightness.dark,
);

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

dart
var themeData = ThemeData(
);

References

Documento de diseño:

Documentación de la API:

PRs relevantes:


Actualizaciones de RawScrollbar y subclases

#

Paquete: flutter Compatible con Flutter Fix: sí

La propiedad isAlwaysShown de RawScrollbar, Scrollbar, ScrollbarThemeData y CupertinoScrollbar fue desaprobada en la v2.9. El reemplazo en todos los casos es thumbVisibility.

Este cambio se realizó debido a que isAlwaysShown siempre se refería al indicador del scrollbar. Con la adición de una pista de scrollbar y configuraciones variables para su visibilidad en respuesta al desplazamiento y arrastre del mouse, renombramos esta propiedad para una API más clara.

Además, Scrollbar.hoverThickness también fue desaprobada en la v2.9. Su reemplazo es el MaterialStateProperty ScrollbarThemeData.thickness.

Este cambio se realizó para permitir que el grosor de un Scrollbar responda a todo tipo de estados, incluyendo y más allá de solo pasar el cursor (hovering). El uso de MaterialStateProperties también coincide con la convención de la biblioteca material de configurar widgets según su estado, en lugar de enumerar propiedades para cada permutación de estados interactivos.

Migration guide

Código antes de la migración:

dart
var rawScrollbar = RawScrollbar(
  isAlwaysShown: true,
);
var scrollbar = Scrollbar(
  isAlwaysShown: true,
  hoverThickness: 15.0,
);
var cupertinoScrollbar = CupertinoScrollbar(
  isAlwaysShown: true,
);
var scrollbarThemeData = ScrollbarThemeData(
  isAlwaysShown: true,
);

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

dart
var rawScrollbar = RawScrollbar(
  thumbVisibility: true,
);
var scrollbar = Scrollbar(
  thumbVisibility: true,
);
var cupertinoScrollbar = CupertinoScrollbar(
  thumbVisibility: true,
);
var scrollbarThemeData = ScrollbarThemeData(
  thumbVisibility: true,
  thickness: MaterialStateProperty.resolveWith((Set<MaterialState> states) {
    return states.contains(MaterialState.hovered) ? null : 15.0;
  }),
);

References

Documentación de la API:

PRs relevantes:


AnimationSheetBuilder display y sheetSize

#

Paquete: flutter_test Compatible con Flutter Fix: sí

Los métodos display y sheetSize de AnimationSheetBuilder fueron desaprobados en la v2.3. El reemplazo es el método collate.

El paso de salida de AnimationSheetBuilder antes requería que se llamaran a estos dos métodos, pero ahora se ha simplificado a través de una sola llamada a collate.

La función collate junta directamente las imágenes y devuelve una imagen de manera asíncrona. Requiere menos código repetitivo y produce imágenes más pequeñas sin comprometer la calidad.

Migration guide

Guía de migración detallada disponible

Código antes de la migración:

dart
final AnimationSheetBuilder animationSheet = AnimationSheetBuilder(
    frameSize: const Size(40, 40)
);

await tester.pumpFrames(animationSheet.record(
  const Directionality(
    textDirection: TextDirection.ltr,
    child: Padding(
      padding: EdgeInsets.all(4),
      child: CircularProgressIndicator(),
    ),
  ),
), const Duration(seconds: 2));

tester.binding.setSurfaceSize(animationSheet.sheetSize());

final Widget display = await animationSheet.display();
await tester.pumpWidget(display);

await expectLater(
  find.byWidget(display),
  matchesGoldenFile('material.circular_progress_indicator.indeterminate.png'),
);

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

dart
final AnimationSheetBuilder animationSheet = AnimationSheetBuilder(
    frameSize: const Size(40, 40)
);

await tester.pumpFrames(animationSheet.record(
  const Directionality(
    textDirection: TextDirection.ltr,
    child: Padding(
      padding: EdgeInsets.all(4),
      child: CircularProgressIndicator(),
    ),
  ),
), const Duration(seconds: 2));

await expectLater(
  animationSheet.collate(20),
  matchesGoldenFile('material.circular_progress_indicator.indeterminate.png'),
);

References

Documentación de la API:

PRs relevantes:



Lógica de timeout de flutter_test

#

Paquete: flutter_test Compatible con Flutter Fix: no

Las siguientes API relacionadas con la lógica de timeout en las pruebas fueron desaprobadas en la v2.6. No hay reemplazos y las referencias deben eliminarse, excepto para el parámetro initialTimeout de testWidgets, que se reemplaza mediante el uso de timeout.

  • TestWidgetsFlutterBinding.addTime
  • Método TestWidgetsFlutterBinding.runAsync - parámetro additionalTime
  • Método TestWidgetsFlutterBinding.runTest - parámetro timeout
  • Método AutomatedTestWidgetsFlutterBinding.runTest - parámetro timeout
  • Método LiveTestWidgetsFlutterBinding.runTest - parámetro timeout
  • Método testWidgets - parámetro initialTime

Se descubrió que estos causaban inestabilidad en las pruebas, y no estaban siendo utilizados por los clientes que las realizaban.

Desde que fueron desaprobados, el uso de estos parámetros no ha tenido ningún efecto en las pruebas, por lo que eliminar las referencias no debería tener ningún efecto en las bases de código existentes.

Migration guide

Código antes de la migración:

dart
testWidgets('Test', (_) {}, initialTimeout:  Duration(seconds: 5));

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

dart
testWidgets('Test', (_) {}, timeout:  Timeout(Duration(seconds: 5)));

References

Documentación de la API:

PRs relevantes:


Timeline

#

En versión estable: 3.13.0