beat 0.14.1+2
beat: ^0.14.1+2 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 #
beat will be gradually improved and polished in the future. I have a kind of roadmap.
State management for Dart-only applications #
You can use beat as a Dart's state management system.
State management for Flutter applications #
beat provides a set of widgets that will increase your productivity
when building your flutter application. beat also provides
inspectors for debugging your state machine.
GUI for state machines #
Low-coding GUI application for your flutter's state machine.
beat market place #
You can share and sell your wonderful state machine.
Real-time collaboration of state machines #
Your team can collaborate online in real-time.
Others #
I aim to make beat to be a framework for flutter applications.
There will be another enhancement in the future including
easier network requests, form validation, render/computation separation,
and others. I might implement some kind of full-stack dart framework in the future.
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 - ✅
stateStreamforBeatState,enumStreamfor your enum state, andcontextStreamfor your data.
- ✅
- ✅ 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 a current state of nested state using
currentStatecurrentState.of(EnumType)returns the current state of the nested state
- ✅ 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 initial context defined in the station annotation
- ❌ 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
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