A dart package to create Finite State Machines and State Charts following SCXML specification.
The main highlights of automata are:
- Declarative and type-based
- Compound states (nested states)
- Parallel states
- Initial states
- Guard conditions
- Eventless transitions
- Actions
- Invoke async services
- onEntry / onExit
- onTransition
Check our wiki for a more in-depth documentation: https://github.com/rows/automata/wiki
dart pub add automata
or
flutter pub add automata
import 'package:automata/automata.dart';
class Inactive extends AutomataState {}
class Active extends AutomataState {}
class OnToggle extends AutomataEvent {}
final machine = StateMachine.create(
(g) => g
..initial<Inactive>()
..state<Inactive>(
builder: (g) => g..on<OnToggle, Active>()
)
..state<Active>(
builder: (g) => g..on<OnToggle, Inactive>()
),
onTransition: (e, value) => print(
'''
## Transition::
Received Event: $e
Value: $value
''',
),
);
machine.send(OnToggle());
While developing this packages we were heavily inspired by Tinder's StateMachine, Stately's XState and the SCXML specification.