state_graph_bloc 4.1.0
state_graph_bloc: ^4.1.0 copied to clipboard

A bloc package with concise state graph builder. Build transitions, side effects and global events in a centralised, type-safe manner.

state_graph_bloc #

State Graph Builder for Dart. Allows to define states, their transitions and side effects in a result of incoming events.

Inspired by Tinder's state machine Kotlin DSL and BLoC package.

Usage #

Build a bloc and subscribe with StreamBuilder or listen().

class DummyBloc extends StateGraphBloc<DummyEvent, DummyState> {
  DummyBloc() : super(StateInitialising());
  
  @override
  StateGraph<DummyEvent, DummyState> buildGraph() =>
      StateGraph<DummyEvent, DummyState>(
        {
          StateInitialising: {
            LoadEvent: transitionWithSideEffect(
              (state, event) => StateLoading(),
              (state, event) {
                // There could be some async loading. Use [launchFuture] or [launchStream]
                // to fire async processing and properly handle bloc closing.
                add(LoadingCompletedEvent());
              },
            ),
          },
          StateLoading: {
            LoadingCompletedEvent: transition((state, _) => StateReady(0)),
          },
          StateReady: {
            IncrementEvent: transition(
              (state, event) => StateReady((state as StateReady).counter + 1),
            ),
            // Test global event override.
            RestartEvent: transition((state, _) => StateReady(0)),
          },
        },
        {
          RestartEvent: transition((state, event) {
            return StateInitialising();
          })
        },
      );

  // Bind some variables based on [state].
  Stream<bool> isLoading() => bindState((state) {
        if (state is StateLoading) {
          return true;
        } else {
          return false;
        }
      });
}

Samples #

You can experiment with sample application hosted here: https://gitlab.com/marcin.jelenski/bloc-showcase

Also test directory contains all State Graph Bloc use cases.

8
likes
130
pub points
37%
popularity

Publisher

codizon.com

A bloc package with concise state graph builder. Build transitions, side effects and global events in a centralised, type-safe manner.

Homepage
Repository (GitLab)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

rxdart

More

Packages that depend on state_graph_bloc