MaterialStateMixin<T extends StatefulWidget> mixin Null safety

Mixin for State classes that require knowledge of changing MaterialState values for their child widgets.

This mixin does nothing by mere application to a State class, but is helpful when writing build methods that include child InkWell, GestureDetector, MouseRegion, or Focus widgets. Instead of manually creating handlers for each type of user interaction, such State classes can instead provide a ValueChanged<bool> function and allow MaterialStateMixin to manage the set of active MaterialStates, and the calling of setState as necessary.

This example shows how to write a StatefulWidget that uses the MaterialStateMixin class to watch MaterialState values.
class MyWidget extends StatefulWidget {
  const MyWidget({required this.color, required this.child, Key? key}) : super(key: key);

  final MaterialStateColor color;
  final Widget child;

  State<MyWidget> createState() => MyWidgetState();

class MyWidgetState extends State<MyWidget> with MaterialStateMixin<MyWidget> {
  Widget build(BuildContext context) {
    return InkWell(
      onFocusChange: updateMaterialState(MaterialState.focused),
      child: Container(
        color: widget.color.resolve(materialStates),
        child: widget.child,

Superclass Constraints


materialStates Set<MaterialState>
Managed set of active MaterialState values; designed to be passed to MaterialStateProperty.resolve methods. [...]
@protected, read / write
isDisabled bool
Getter for whether this class considers MaterialState.disabled to be active.
isDragged bool
Getter for whether this class considers MaterialState.dragged to be active.
isErrored bool
Getter for whether this class considers MaterialState.error to be active.
isFocused bool
Getter for whether this class considers MaterialState.focused to be active.
isHovered bool
Getter for whether this class considers MaterialState.hovered to be active.
isPressed bool
Getter for whether this class considers MaterialState.pressed to be active.
isScrolledUnder bool
Getter for whether this class considers MaterialState.scrolledUnder to be active.
isSelected bool
Getter for whether this class considers MaterialState.selected to be active.
widget → T
The current configuration. [...]
read-only, inherited
context BuildContext
The location in the tree where this widget builds. [...]
read-only, inherited
mounted bool
Whether this State object is currently in a tree. [...]
read-only, inherited
hashCode int
The hash code for this object. [...]
read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited


updateMaterialState(MaterialState key, {ValueChanged<bool>? onChanged}) ValueChanged<bool>
Callback factory which accepts a MaterialState value and returns a closure to mutate materialStates and call setState. [...]
setMaterialState(MaterialState state, bool isSet) → void
Mutator to mark a MaterialState value as either active or inactive.
addMaterialState(MaterialState state) → void
Mutator to mark a MaterialState value as active.
removeMaterialState(MaterialState state) → void
Mutator to mark a MaterialState value as inactive.
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node. [...]
initState() → void
Called when this object is inserted into the tree. [...]
@mustCallSuper, @protected, inherited
didUpdateWidget(covariant T oldWidget) → void
Called whenever the widget configuration changes. [...]
@mustCallSuper, @protected, inherited
reassemble() → void
Called whenever the application is reassembled during debugging, for example during hot reload. [...]
@mustCallSuper, @protected, inherited
setState(VoidCallback fn) → void
Notify the framework that the internal state of this object has changed. [...]
@protected, inherited
deactivate() → void
Called when this object is removed from the tree. [...]
@mustCallSuper, @protected, inherited
activate() → void
Called when this object is reinserted into the tree after having been removed via deactivate. [...]
@mustCallSuper, @protected, inherited
dispose() → void
Called when this object is removed from the tree permanently. [...]
@mustCallSuper, @protected, inherited
build(BuildContext context) Widget
Describes the part of the user interface represented by this widget. [...]
@protected, inherited
didChangeDependencies() → void
Called when a dependency of this State object changes. [...]
@mustCallSuper, @protected, inherited
toString({DiagnosticLevel minLevel =}) String
A string representation of this object. [...]
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
toStringShort() String
A brief description of this object, usually just the runtimeType and the hashCode. [...]
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep. [...]


operator ==(Object other) bool
The equality operator. [...]