Sealed Flutter Bloc

build codecov Star on Github style: effective dart Flutter Website Awesome Flutter Flutter Samples License: MIT Discord Bloc Library

flutter_bloc meets sealed_unions


Our top sponsors are shown below! [Become a Sponsor]

Try the Flutter Chat Tutorial  💬

Quick Start

Extend UnionNImpl

class MyState extends Union4Impl<Initial, Loading, Success, Failure> {
  static final unions = const Quartet<Initial, Loading, Success, Failure>();

  MyState._(Union4<Initial, Loading, Success, Failure> union) : super(union);

  factory MyState.initial() => MyState._(unions.first(Initial()));

  factory MyState.loading() => MyState._(unions.second(Loading()));

  factory MyState.success({required String data}) =>
      MyState._(unions.third(Success(data: data)));

  factory MyState.failure({required String error}) =>
      MyState._(unions.fourth(Failure(error: error)));

class Initial {}

class Loading {}

class Success {
  final String data;


class Failure {
  String error;

  Failure({required this.error});

Use SealedBlocBuilder

class MyWidget extends StatelessWidget {
  Widget build(BuildContext context) {
    return SealedBlocBuilder4<MyBloc, MyState, Initial, Loading, Success,
      builder: (context, states) => states(
        (initial) => Text('Initial'),
        (loading) => CircularProgressIndicator(),
        (success) => Text('Success: ${}'),
        (failure) => Text('Failure: ${failure.error}'),

Additional Examples

More examples can be found at sealed_flutter_bloc_samples.


An extension to the bloc state management library which integrations sealed_unions.