It is not product-ready. You should carefully consider using this package in your production environment.
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.
beat
will be gradually improved and polished in the future. I have a kind of roadmap.
You can use beat
as a Dart's state management system.
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.
Low-coding GUI application for your flutter's state machine.
You can share and sell your wonderful state machine.
Your team can collaborate online in real-time.
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.
A roadmap is as follows, but the order does not matter.
- Support simple state transition without context
- Listen to state and context changes
-
addListeners
/removeListeners
and variations are for state -
addContextListeners
/removeContextListeners
is for context -
stateStream
forBeatState
,enumStream
for your enum state, andcontextStream
for 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}Compound
field - Multi-level (deeply nested) compound state
- Custom initialization on parent state creation
- Get a current state of nested state using
currentState
currentState.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
Beat
option
- BeatStation with common
- Support
state.matches
as ais{State}
- Support
send()
styled transitionstation.send
is 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
send
or$event()
- Support
entry
andexit
actions - Support conditional (guarded) transition
- Support custom functions
- Support
in
state 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
interpreter
andstation
- 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
- 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