FLUTTER ECOSYSTEM

onepub-dev/fsm2

FMS2 यूएमएल स्टेट डायग्राम के मुख्य डिज़ाइन पहलुओं का डार्ट कार्यान्वयन प्रदान करता है।

fsm2 प्रोजेक्ट कवर
Stars
53
Forks
6
अंतिम पुश (UTC)
16 अग॰ 2026
प्रोजेक्ट स्थिति
सक्रिय
OnePub GitHub avatar
GITHUB Organization

OnePub ↗

भाषाएँDart

तकनीकी विषय

उपयोग की गई निर्भरताएँ

निर्भरता सूची 14 आइटम
  • args^2.4.2
  • completer_ex^4.0.0
  • dcli_core^9.0.2
  • dcli_terminal^9.0.2
  • logger^2.0.1
  • meta^1.6.0
  • path^1.7.0
  • stacktrace_impl^2.0.1
  • synchronized^3.0.0
  • tree_iterator^3.0.0
  • dcliडेवलपमेंट^9.0.2
  • lint_hardडेवलपमेंट^8.0.0
  • mockitoडेवलपमेंट^5.0.0
  • testडेवलपमेंट^1.0.0

मूल README

यह अंग्रेज़ी मूल स्नैपशॉट है। नवीनतम सामग्री GitHub पर देखें।

README खोलें / बंद करें

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.