flutter_bloc meets sealed_unions
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({String data}) => MyState._(unions.third(Success(data: data))); factory MyState.failure({String error}) => MyState._(unions.fourth(Failure(error: error))); } class Initial {} class Loading {} class Success { final String data; Success({this.data}); } class Failure { String error; Failure({this.error}); }
Use SealedBlocBuilder
class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { return SealedBlocBuilder4<MyBloc, MyState, Initial, Loading, Success, Failure>( builder: (context, states) => states( (initial) => Text('Initial'), (loading) => CircularProgressIndicator(), (success) => Text('Success: ${success.data}'), (failure) => Text('Failure: ${failure.error}'), ), ); } }
Additional Examples
More examples can be found at sealed_flutter_bloc_samples.
Download flutter_bloc state management source code on GitHub
https://github.com/felangel/sealed_flutter_bloc
Provides the list of the opensource Flutter apps collection with GitHub repository.