fsm2
FMS2 提供了 UML 状态图核心设计方面的 Dart 实现。
- 星标
- 53
- 复刻
- 6
- 最近推送(UTC)
- 2026年8月16日
- 项目状态
- 未归档
原始 README
以下为英文项目原文快照,最新内容请访问 GitHub。
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.
分类
使用的依赖
如何选择适合项目的代码仓?
先按使用场景筛选,再比较项目活跃情况,最后到原始仓库核对使用要求。
- 通过仓库名、作者或描述搜索,再按技术分类缩小范围。
- 结合星标、复刻与最近推送比较项目;星标反映社区关注,不代表质量保证。
- 使用前在 GitHub 核对 README、许可证与 Issues。
来源与维护
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗