A simple package that helps you to implement the BLoC pattern in your applications.

The BlocStream class is just a Stream<State> with a couple extra methods added to reduce boilerplate. You can subclass it and add your own methods to implement your business logic.

A BlocStream is also a sink of actions. By calling add with an action function (Action<Bloc, State>), the bloc will then call that action and merge the resulting Stream<State> into the output stream.

Here is an example BLoC that provides a list of events:

import 'package:bloc_stream/bloc_stream.dart';
import 'package:equatable/equatable.dart';
import 'package:example/event_repository.dart';

// Actions
class EventsActions {
  static final Action<EventsBloc, List<Event>> fetch =
    (bloc, add) async => bloc.repository.list().then(add);

// Bloc
class EventsBloc extends BlocStream<List<Event>> {
  EventBloc(this.repository) : super(null);
  final EventRepository repository;

Usage with Flutter

See flutter_bloc_stream.

You can also use this package in combination with Provider and StreamBuilder.

You could also use a StreamProvider from the Provider package.