states 1.1.0 copy "states: ^1.1.0" to clipboard
states: ^1.1.0 copied to clipboard

States is Finite State Machine for Dart. You can define states of your application and reaction on transition between states

States - Beautiful Finite State Machine (FMS) for Dart #

API: #

abstract class IStates {
  String get current;
  bool get locked;
  List<StatesTransition> get all;
  
  List<StatesTransition> actions({String from});
  List<StatesMeta> metas({String from});
  
  StatesMeta add( String state );
  StatesTransition when({
    String at,
    String to,
    String on,
    StatesTransitionFunction handler
  });
  
  String subscribe(StatesTransitionFunction listener);
  bool unsubscribe(String subscriptionKey);
  
  bool change({ String to, bool run = true });
  bool has({
    String action,
    String state,
    bool conform = true
  });
  StatesTransition get( String action );
  bool execute( String action );
  bool on(String action, StatesTransitionHandler listener);
  
  void reset();
  void dispose();
  
  void lock({@required String key});
  void unlock({@required String key});
}

Usage #

A simple usage example: #

 States states = new States();

 states.add( STATE_INITIAL );

 states.add( STATE_LOADING );
 states.add( STATE_LOADING_COMPLETE );
 states.add( STATE_LOADING_FAILED );

 states.when(
   at: STATE_INITIAL,
   to: STATE_LOADING,
   on: ACTION_LOADING_START,
   execute: (StatesTransition action) {
     print("> CURRENT on ACTION_LOADING_START state: " + states.current);
     scheduleMicrotask(() {
       print("> \t END OF microtask queue -> state: " + states.current);
       var nextBool = Random.secure().nextBool();
       print("> \t\t next bool: " + nextBool.toString());
       states.run( nextBool ? ACTION_LOADING_COMPLETE : ACTION_LOADING_FAILED );
       });
     });
 
 states.when(
   at: STATE_LOADING,
   to: STATE_LOADING_COMPLETE,
   on: ACTION_LOADING_COMPLETE,
   execute: (StatesTransition action) {
     print("> CURRENT on ACTION_LOADING_COMPLETE - state: " + states.current);
     scheduleMicrotask(() => print("> \t END OF microtask queue -> state: " + states.current));
   }
 );
 
 states.when(
   at: STATE_LOADING,
   to: STATE_LOADING_FAILED,
   on: ACTION_LOADING_FAILED,
   execute: (StatesTransition action) {
     print("> CURRENT on ACTION_LOADING_FAILED state: " + states.current);
     scheduleMicrotask(() => print("> \t END OF microtask queue -> state: " + states.current));
   }
 );
 
 states.run( ACTION_LOADING_START );

SPA with States #

Please take a look how this library can help to create SPA with simple dart:html See folder example/spa_with_states SPA with States

3
likes
140
points
40
downloads

Publisher

unverified uploader

Weekly Downloads

States is Finite State Machine for Dart. You can define states of your application and reaction on transition between states

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

More

Packages that depend on states