fsm2
O FMS2 fornece uma implementação em Dart dos aspectos centrais do design dos diagramas de estado UML.
- Estrelas
- 53
- Forks
- 6
- Último push (UTC)
- 16 de ago. de 2026
- Status do projeto
- Ativo
README original
Texto original em inglês. Visite o GitHub para a versão atual.
FSM2 provides an implementation of the core design aspects of the UML2 state diagrams.
FMS2 supports:
- Nested States
- Concurrent Regions
- Guard Conditions
- sideEffects
- onEnter/onExit
- streams
- static analysis tools
- visualisation tools.
Overview
FSM2 uses a builder to delcare each state machine.
Your application may declare as many statemachines as necessary.
Example
import 'package:fsm2/fsm2.dart';
void main() {
final machine = StateMachine.create((g) => g
..initialState(Solid())
..state<Solid>((b) => b
..on<OnMelted, Liquid>(sideEffect: (e) async => print("I'm melting"))
..state<Liquid>((b) {})
));
The above examples creates a Finite State Machine (machine) which declares its initial state as being Solid and then declares a single
transition which occurs when the event OnMelted event is triggered causing a transition to a new state Liquid.
To trigger an event:
machine.applyEvent(OnMelted());
Documentation
Full documentation is available on gitbooks at:
https://fsm2.onepub.dev/
Example 2
A simple example showing the life cycle of H2O.
import 'package:fsm2/fsm2.dart';
void main() {
final machine = StateMachine.create((g) => g
..initialState(Solid())
..state<Solid>((b) => b
..on<OnMelted, Liquid>(sideEffect: (e) => print('Melted'),
)))
..state<Liquid>((b) => b
..onEnter((s, e) => print('Entering ${s.runtimeType} State'))
..onExit((s, e) => print('Exiting ${s.runtimeType} State'))
..on<OnFroze, Solid>(sideEffect: (e) => print('Frozen')))
..on<OnVaporized, Gas>(sideEffect: (e) => print('Vaporized'))))
..state<Gas>((b) => b
..on<OnCondensed, Liquid>(sideEffect: (e) => print('Condensed'))))
..onTransition((t) => print(
'Received Event ${t.event.runtimeType} in State ${t.fromState.runtimeType} transitioning to State ${t.toState.runtimeType}')));
await machine.complete;
/// machine.isInState<Hard>()
print(machine.isInSt<Solid>); // TRUE
machine.transition(OnMelted());
print(machine.isInState<Liquid>); // TRUE
machine.transition(OnFroze());
print(machine.isInState<Solid>); // TRUE
}
Credits:
FMS2 is derived from the FSM library which in turn was inspired by Tinder StateMachine library.
Categorias
Dependências usadas
Como escolher um repositório para seu projeto?
Filtre pelo caso de uso, compare a atividade e confira o projeto original antes de adotá-lo.
- Busque por nome, autor ou descrição e filtre por tema.
- Compare estrelas, forks e envios recentes. Estrelas indicam interesse, mas não garantem qualidade.
- Confira o README, a licença e as issues no GitHub antes de usar o projeto.
Fontes e manutenção
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗
- onepub-dev/fsm2 · GitHub ↗
- GitHub Docs — Saving repositories with stars ↗
- Diretório mantido por Ducafecat ↗