Saltar al contenido principal

Renombrar MaterialState a WidgetState

MaterialState y sus APIs relacionadas se han movido fuera de la biblioteca de Material y se han renombrado a WidgetState.

Resumen

#

MaterialState, y sus APIs relacionadas, se han movido fuera de la biblioteca de Material y se han renombrado a WidgetState.

Contexto

#

Anteriormente, MaterialState proporcionaba la lógica para manejar múltiples estados diferentes que un widget podía tener, como "hovered", "focused" y "disabled". Debido a que esta funcionalidad es útil fuera de la biblioteca de Material, concretamente para la capa base de Widgets y Cupertino, se decidió moverla fuera de Material. Como parte del movimiento, y para evitar confusiones futuras, las diferentes clases de MaterialState se han renombrado a WidgetState. El comportamiento de ambos es el mismo.

AntesAhora
MaterialStateWidgetState
MaterialStatePropertyResolverWidgetStatePropertyResolver
MaterialStateColorWidgetStateColor
MaterialStateMouseCursorWidgetStateColorMouseCursor
MaterialStateBorderSideWidgetStateBorderSide
MaterialStateOutlinedBorderWidgetStateOutlinedBorder
MaterialStateTextStyleWidgetStateTextStyle
MaterialStatePropertyWidgetStateProperty
MaterialStatePropertyAllWidgetStatePropertyAll
MaterialStatesControllerWidgetStatesController

Las clases MaterialStateOutlineInputBorder y MaterialStateUnderlineInputBorder se dejaron en la biblioteca de Material sin equivalente en WidgetState, ya que son específicas de Material Design.

Guía de migración

#

Está disponible un Flutter fix para ayudar a migrar las clases MaterialState a WidgetState.

Para migrar, reemplaza MaterialState con WidgetState.

Código antes de la migración:

dart
MaterialState selected = MaterialState.selected;

final MaterialStateProperty<Color> backgroundColor;

class _MouseCursor extends MaterialStateMouseCursor{
  const _MouseCursor(this.resolveCallback);

  final MaterialPropertyResolver<MouseCursor?> resolveCallback;

  @override
  MouseCursor resolve(Set<MaterialState> states) => resolveCallback(states) ?? MouseCursor.uncontrolled;
}

BorderSide side = MaterialStateBorderSide.resolveWith((Set<MaterialState> states) {
  if (states.contains(MaterialState.selected)) {
    return const BorderSide(color: Colors.red);
  }
  return null;
});

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

dart
WidgetState selected = WidgetState.selected;

final WidgetStateProperty<Color> backgroundColor;

class _MouseCursor extends WidgetStateMouseCursor{
  const _MouseCursor(this.resolveCallback);

  final WidgetPropertyResolver<MouseCursor?> resolveCallback;

  @override
  MouseCursor resolve(Set<WidgetState> states) => resolveCallback(states) ?? MouseCursor.uncontrolled;
}

BorderSide side = WidgetStateBorderSide.resolveWith((Set<WidgetState> states) {
  if (states.contains(WidgetState.selected)) {
    return const BorderSide(color: Colors.red);
  }
  return null;
});

Timeline

#

Introducido en la versión: 3.21.0-11.0.pre
En la versión estable: 3.22.0

Referencias

#

Issues relevantes:

PRs relevantes: