WidgetStatesConstraint class abstract interface

This class allows WidgetState enum values to be combined using WidgetStateOperators.

A Map with WidgetStatesConstraint objects as keys can be used in the WidgetStateProperty.fromMap constructor to resolve to one of its values, based on the first key that isSatisfiedBy the current set of states.

Example:

// This WidgetStateMap<Color?> resolves to null if no keys match.
WidgetStateProperty<Color?>.fromMap(<WidgetStatesConstraint, Color?>{
  WidgetState.error: Colors.red,
  WidgetState.hovered & WidgetState.focused: Colors.blueAccent,
  WidgetState.focused: Colors.blue,
  ~WidgetState.disabled: Colors.black,
});

// The same can be accomplished with a WidgetPropertyResolver,
// but it's more verbose:
WidgetStateProperty.resolveWith<Color?>((Set<WidgetState> states) {
  if (states.contains(WidgetState.error)) {
    return Colors.red;
  } else if (states.contains(WidgetState.hovered) && states.contains(WidgetState.focused)) {
    return Colors.blueAccent;
  } else if (states.contains(WidgetState.focused)) {
    return Colors.blue;
  } else if (!states.contains(WidgetState.disabled)) {
    return Colors.black;
  }
  return null;
});

A widget state combination can be stored in a variable, and WidgetState.any can be used for non-nullable types to ensure that there's a match:

final WidgetStatesConstraint selectedError = WidgetState.selected & WidgetState.error;

final WidgetStateProperty<Color> color = WidgetStateProperty<Color>.fromMap(
  <WidgetStatesConstraint, Color>{
    selectedError & WidgetState.hovered: Colors.redAccent,
    selectedError: Colors.red,
    WidgetState.any: Colors.black,
  },
);

// The (more verbose) WidgetPropertyResolver implementation:
final WidgetStateProperty<Color> colorResolveWith = WidgetStateProperty.resolveWith<Color>(
  (Set<WidgetState> states) {
    if (states.containsAll(<WidgetState>{WidgetState.selected, WidgetState.error})) {
      if (states.contains(WidgetState.hovered)) {
        return Colors.redAccent;
      }
      return Colors.red;
    }
    return Colors.black;
  },
);
Available extensions

Properties

hashCode int
The hash code for this object.
no setterinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited

Methods

isSatisfiedBy(Set<WidgetState> states) bool
Whether the provided states satisfy this object's criteria.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() String
A string representation of this object.
inherited

Operators

operator &(WidgetStatesConstraint other) WidgetStatesConstraint

Available on WidgetStatesConstraint, provided by the WidgetStateOperators extension

Combines two WidgetStatesConstraint values using logical "and".
operator ==(Object other) bool
The equality operator.
inherited
operator |(WidgetStatesConstraint other) WidgetStatesConstraint

Available on WidgetStatesConstraint, provided by the WidgetStateOperators extension

Combines two WidgetStatesConstraint values using logical "or".
operator ~() WidgetStatesConstraint

Available on WidgetStatesConstraint, provided by the WidgetStateOperators extension

Takes a WidgetStatesConstraint and applies the logical "not".