hydrated_bloc 0.1.0 hydrated_bloc: ^0.1.0 copied to clipboard
An extension to the bloc state management library which automatically persists and restores bloc states.
An extension to the bloc state management library which automatically persists and restores bloc states.
Usage #
1. Extend HydratedBlocDelegate
#
class MyHydratedBlocDelegate extends HydratedBlocDelegate {
MyHydratedBlocDelegate(HydratedBlocStorage storage) : super(storage);
@override
void onEvent(Bloc bloc, Object event) {
super.onEvent(bloc, event);
print('${bloc.runtimeType} $event');
}
@override
void onTransition(Bloc bloc, Transition transition) {
super.onTransition(bloc, transition);
print('${bloc.runtimeType} $transition');
}
@override
void onError(Bloc bloc, Object error, StackTrace stacktrace) {
super.onError(bloc, error, stacktrace);
print('${bloc.runtimeType} $error');
}
}
2. Use HydratedBlocDelegate
#
void main() async {
final storage = await HydratedSharedPreferences.getInstance();
BlocSupervisor.delegate = MyHydratedBlocDelegate(storage);
runApp(App());
}
3. Extend HydratedBloc
#
enum CounterEvent { increment, decrement }
class CounterState {
int value;
CounterState(this.value);
}
class CounterBloc extends HydratedBloc<CounterEvent, CounterState> {
@override
CounterState get initialState {
return super.initialState ?? CounterState(0);
}
@override
Stream<CounterState> mapEventToState(CounterEvent event) async* {
switch (event) {
case CounterEvent.decrement:
yield CounterState(currentState.value - 1);
break;
case CounterEvent.increment:
yield CounterState(currentState.value + 1);
break;
}
}
@override
fromJson(String source) {
try {
final dynamic j = json.decode(source);
return CounterState(j['value']);
} catch (_) {
return null;
}
}
@override
String toJson(CounterState state) {
Map<String, int> j = {'value': state.value};
return json.encode(j);
}
}
Now our CounterBloc
is a HydratedBloc
and will automatically persist its state. We can increment the counter value, hot restart, kill the app, etc... and our CounterBloc
will always retain its state.