beat 0.13.0
beat: ^0.13.0 copied to clipboard
A set of annotations for beat state management. Heavily inspired by xstate.js.org
It is not product-ready. You should carefully consider using this package in your production environment.
Beat Station - State management with state machine #
This project is my toy project to simplify the state management flows in Flutter and dart. Whole functionalities are heavily inspired by xstate.js.
I highly recommend reading the docs of xstate.js.
Go to the Beatly Book for more information.
Roadmap - Features compatible with xstate.js #
A roadmap is as follows, but the order does not matter.
- ✅ Support simple state transition without context
- ✅ Listen to state and context changes
- ✅
addListeners/removeListenersand variations are for state - ✅
addContextListeners/removeContextListenersis for context
- ✅
- ✅ Map states
- ✅ Execute callback on state change
- ✅ Support reset
- ✅ Support context
- ✅ Initialize with context
- ✅ Get current context
- ✅ assign new context
- ✅ Support transition with an argument
- ❌ Support nested(compound, hierarchical) state
- ✅ Define compound state
- ✅ Using
send - ✅ Using verbose styled transition via
{compoundStateName}Compoundfield - ✅ Multi-level (deeply nested) compound state
- ❌ Custom initialization on parent state creation
- ❌ Get current state of compound state using
currentState- Currently
{compundStateName}Compound.currentStateis supported
- Currently
- ✅ Reset on parent state enter/exit
- ✅ Reset on parent state reset
- ✅ Support state change history
- ✅ Support any state transition
- ✅ BeatStation with common
Beatoption
- ✅ BeatStation with common
- ✅ Support
state.matchesas ais{State} - ✅ Support
send()styled transitionstation.sendis supported
- ❌ Support actions (fire-and-forget)
- ✅ callback action
- ✅ assign action
- ✅ callback action with variable length of arguments
- ❌ choose action
- ❌ forwardTo action
- ❌ log action
- ❌ pure action
- ❌ raise action
- ❌ respond action
- ❌ send action
- ❌ Support invoking services
- ✅ async function (or Future)
- ✅ onDone/onError actions
- ❌ onDone/onError transitions
- ✅ to current station
- ❌ to nested station
- ❌ callback
- ❌ observables
- ❌ other beat station
- ❌ multiple services
- ❌ Support instance options
- ✅ initial state, context
- ❌ dynamically defined actions, services, delays, guards
- ✅ Support eventless(always) transition
- ✅ Support delayed transition
- ✅ Delay on eventless transition
- ✅ Delay on
sendor$event()
- ❌ Support
entryandexitactions - ❌ Support conditional (guarded) transition
- ❌ Support custom functions
- ❌ Support
instate condition
- ❌ Support internal transition
- ❌ Support external transition
- ❌ Support Forbidden transition
- ❌ Support multiple targets
- ❌ Support multiple events
- ❌ Support actors
- ❌ Support
state.nextEvents - ❌ Support
state.changed - ❌ Support
state.done - ❌ Support
state.meta,state.tags - ❌ Support
state.can - ❌ Support history JSON to persist
toString()is currently supported
- ❌ Support parallel state
- ❌ Define parallel state
- ❌ Support multiple targets event
- ❌ Separate
interpreterandstation- ❌ Support pure
transition()
- ❌ Support pure
- ❌ Event history with event sourcing
- ❌ Manually execute actions,
execute(state)reference - ❌
waitFor(state, timeout)method reference - ❌ Support scxml
- ❌ Support bootstrapping
- ❌ Support CLI/GUI tools
- ❌ xstate.js compatible beat station
Features not supported by this package but in xstate.js #
- The
finalstate is naturally defined which does not have anyBeatannotation state.toString(): naturally supported- wildcard transitions and forbidden transitions are not needed because there will be no typo
Additionals for flutter #
- ❌ Support beat-station-friendly flutter widgets
- ❌ Inspect state, history, event history, next events, etc., from devtools widget inspector
- ❌ Support
remix.run's concept- ❌
loader - ❌
action(side effect) - ❌
ErrorBoundary/CatchBoundary
- ❌
- ❌ Support navigation