fsm2 2.0.0 copy "fsm2: ^2.0.0" to clipboard
fsm2: ^2.0.0 copied to clipboard

outdated

FSM2 provides an implementation of the core design aspects of the UML state diagrams allowing both declarative transitions and dynamic transitions along with Guard Conditions.

example/main.dart

import 'dart:developer';

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 => log('Melted'))
      ..onEnter((s, e) async => log('Entering $s State'))
      ..onExit((s, e) async => log('Exiting $s State')))
    ..state<Liquid>((b) => b
      ..onEnter((s, e) async => log('Entering $s State'))
      ..onExit((s, e) async => log('Exiting $s State'))
      ..on<OnFroze, Solid>(sideEffect: (e) async => log('Frozen'))
      ..on<OnVaporized, Gas>(sideEffect: (e) async => log('Vaporized')))
    ..state<Gas>((b) => b
      ..onEnter((s, e) async => log('Entering $s State'))
      ..onExit((s, e) async => log('Exiting $s State'))
      ..on<OnCondensed, Liquid>(sideEffect: (e) async => log('Condensed')))
    ..onTransition((from, e, to) => log(
        'Received Event $e in State ${from!.stateType} transitioning to State ${to!.stateType}')));

  machine.analyse();
  machine.export('test/smcat/water.smcat');

  machine.applyEvent(OnMelted());

  machine.applyEvent(OnFroze());
}

class Solid implements State {}

class Liquid implements State {}

class Gas implements State {}

class OnMelted implements Event {}

class OnFroze implements Event {}

class OnVaporized implements Event {}

class OnCondensed implements Event {}
16
likes
0
pub points
57%
popularity

Publisher

verified publisheronepub.dev

FSM2 provides an implementation of the core design aspects of the UML state diagrams allowing both declarative transitions and dynamic transitions along with Guard Conditions.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

args, completer_ex, dcli, meta, path, stacktrace_impl, synchronized, tree_iterator

More

Packages that depend on fsm2