DeclarativeStateTreeBuilder class
Provides methods to describe a state tree.
States are defined and added to the state tree are described by calling methods such state, dataState, and finalState. A state tree or state machine can be nested within another state tree with the machineState method.
enum Messages { toggle }
var offState = StateKey('off');
var onState = StateKey('on');
DeclarativeStateTreeBuilder switchBuilder() {
// A simple switch with on and off states
var treeBuilder = DeclarativeStateTreeBuilder(initialChild: offState)
treeBuilder.state(offState, (b) {
b.onMessageValue(Messages.toggle, (b) => b.goTo(onState));
})
treeBuilder.state(onState, (b) {
b.onMessageValue(Messages.toggle, (b) => b.goTo(offState));
});
return treeBuilder;
}
Once a DeclarativeStateTreeBuilder has been initialized with the desired states, it can be used to create a state machine. The state machine will create and manage its own instance of the state tree defined by the builder.
var declBuilder = switchBuilder();
var stateMachine = TreeStateMachine(StateTreeBuilder(declBuilder));
Note that a single state tree builder instance can be used to create multiple state machine instances.
A textual description of the state tree can be produced by calling format method, passing a StateTreeFormatter (for example a DotFormatter) representing the desired output format.
Constructors
- DeclarativeStateTreeBuilder({required StateKey initialChild, String? label, String? logName})
-
Creates a DeclarativeStateTreeBuilder that will build a state tree that starts in the state identified
by
initialChild.factory -
DeclarativeStateTreeBuilder.withRoot(StateKey rootState, InitialChild initialChild, void build(StateBuilder<
void> builder), {String? label, String? logName, void extensions(StateExtensionBuilder)?}) -
Creates a DeclarativeStateTreeBuilder with a predefined root state.
factory
Properties
- hashCode → int
-
The hash code for this object.
no setterinherited
- label → String?
-
An optional descriptive label for this state tree, for diagnostic purposes.
final
- logName → String?
-
An optional name for this state tree that will be used as the suffix of the logger name used
when logging messages.
final
- rootKey → StateKey
-
The key indentifying the root state of the state tree.
no setter
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
Methods
-
createRootNodeInfo(
) → RootNodeInfo -
Creates a
RootNodeInfothat can be used byStateTreeBuilderto build a state tree. -
dataState<
D> (DataStateKey< D> stateKey, InitialData<D> initialData, void build(StateBuilder<D> builder), {StateKey? parent, InitialChild? initialChild, StateDataCodec? codec}) → StateExtensionBuilder -
Adds to the state tree a description of a data state, identified by
stateKeyand carrying a value of typeD. -
extendState(
StateKey stateKey) → StateExtensionBuilder -
Returns a StateExtensionBuilder that can be used to extend the state identified by
stateKeywith additional metadata and filters. -
extendStates(
void extend(StateKey, StateExtensionBuilder)) → DeclarativeStateTreeBuilder -
Calls the
extendfunction for each state that has been defined, allowing the states to be extended with additional metadata and filters. -
finalDataState<
D> (DataStateKey< D> stateKey, InitialData<D> initialData, void build(EnterStateBuilder<D> builder), {StateKey? parent, StateDataCodec? codec}) → void -
Adds to the state tree a description of a final data state, identified by
stateKeyand carrying a value of typeD. The behavior of the state is configured by thebuildcallback. -
finalState(
StateKey stateKey, void build(EnterStateBuilder< void> builder), {StateKey? parent}) → void -
Adds to the state tree a description of a final state, identified by
stateKey. The behavior of the state is configured by thebuildcallback. -
format(
StringSink sink, StateTreeFormatter formatter) → void -
Writes a textual description of the state stree to the
sink. The specific output format is controlled by the type of theformatter. -
machineState(
DataStateKey< MachineTreeStateData> stateKey, InitialMachine initialMachine, void build(MachineStateBuilder), {bool isDone(Transition transition)?, StateKey? parent, String? label}) → void -
Adds to the state tree a description of a machine state, identifed by
stateKey, which will run a nested state machine. -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
state(
StateKey stateKey, void build(StateBuilder< void> builder), {StateKey? parent, InitialChild? initialChild}) → StateExtensionBuilder -
Adds to the state tree a description of a state, identified by
stateKey. -
toString(
) → String -
A string representation of this object.
inherited
-
toTreeBuilder(
) → StateTreeBuilder
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
withDataRoot<
D> (DataStateKey< D> rootState, InitialData<D> initialData, void build(StateBuilder<D> builder), InitialChild initialChild, {StateDataCodec<D> ? codec, String? label, String? logName}) → DeclarativeStateTreeBuilder -
Creates a DeclarativeStateTreeBuilder with a root state carrying a value of type
D.
Constants
- defaultRootKey → const StateKey
-
The key identifying the root state that is implicitly added to a state tree, if the
StateTreeBuilder.newconstructor is used.