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.
| Antes | Ahora |
|---|---|
MaterialState | WidgetState |
MaterialStatePropertyResolver | WidgetStatePropertyResolver |
MaterialStateColor | WidgetStateColor |
MaterialStateMouseCursor | WidgetStateColorMouseCursor |
MaterialStateBorderSide | WidgetStateBorderSide |
MaterialStateOutlinedBorder | WidgetStateOutlinedBorder |
MaterialStateTextStyle | WidgetStateTextStyle |
MaterialStateProperty | WidgetStateProperty |
MaterialStatePropertyAll | WidgetStatePropertyAll |
MaterialStatesController | WidgetStatesController |
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:
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:
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:
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.