MicroBLoC

flutter Dart

Micro bloc is a dead-simple flutter state management library made for quickly implementing the bloc pattern. It internally uses rxdart for streams.

This package is great for small project. But for medium-large projects. I recommend using the official bloc and flutter_bloc libraries.

Things this library provides:

  • Provides a BlocListener and BlocBuilder to listen and build on events.
  • Bloc implementation in 200 lines of code.

You can find the example here: example

Bloc:


class CounterBloc extends Bloc<CounterEvent, CounterState> {
  CounterBloc() : super(const CounterStateInitial(0));
  int counter = 0;

  /// Listen and emit states based on events
  @override
  void add(CounterEvent event) {
    if (event is IncrementEvent) {
      counter = counter + 1;
      if (counter < 0) {
        emit(const ValueBelowZero());
      }
      emit(UpdateValue(counter));
    }
    if (event is DecrementEvent) {
      counter = counter - 1;
      emit(UpdateValue(counter + 1));
    }
  }
}

BlocBuilder:

BlocBuilder<CounterEvent, CounterState>(
            bloc: _bloc,
            buildWhen: (previous, current) => current is! ValueBelowZero,
            builder: (context, CounterState state) {
              if (state is UpdateValue) {
                return Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    const Text(
                      'You have pushed the button this many times:',
                    ),
                    Text(
                      '${state.value}',
                      style: Theme.of(context).textTheme.headline4,
                    ),
                  ],
                );
              }
              return const SizedBox();
            },
          ),
        ),

BlocListener:

BlocListener<CounterEvent, CounterState>(
          bloc: _bloc,
          listener: (context, state) {
            if (state is ValueBelowZero) {
              ScaffoldMessenger.of(context).showSnackBar(
                const SnackBar(content: Text('Value is below zero')),
              );
            }
          },
)

Dispatching/Adding events:

FloatingActionButton(
            onPressed: () => _bloc.add(const IncrementEvent()),
            child: const Icon(Icons.add),
          ),