fsm2
FMS2 は、UML 状態図のコア設計要素の Dart 実装を提供しています。
- スター
- 53
- フォーク
- 6
- 最終プッシュ(UTC)
- 2026/08/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 ↗