0 purchases
bloc use case generator
Bloc Generator #
Helper code generator library for flutter_bloc. Generates States and Event for bloc with given annotation Information.
Library uses build_runner for generate classes.
Example #
Create a file named with of your bloc. In this case city_bloc.dart.
part 'city_bloc.g.dart';
abstract class CityEvent {}
abstract class CityState {}
@BlocAnnotation(
baseEventType: CityEvent,
baseStateType: CityState,
failureModel: GlobalFailureModel,
blocUseCases: [
BlocUseCase(
name: 'DeleteCity',
input: {
'cityId': int,
'isCapitol': Nullable<bool>,
'siblingCity': Nullable<City>,
},
output: {'city': City},
extraStates: [
UseCaseState(
name: 'DeleteCityForbidden',
),
UseCaseState(
name: 'DeleteCityWithId',
arguments: {'cityId': int},
)
],
),
BlocUseCase(
name: 'GetCities',
output: {'cities': List<City>},
),
],
)
class CityBloc extends Bloc<CityEvent, CityState> {
final RemoteService _remoteService = RemoteService();
CityBloc() : super(InitialCityState()) {
on<CityEvent>((event, emit) {
on<GetCitiesEvent>(_onGetCities);
});
}
FutureOr<void> _onGetCities(
GetCitiesEvent event,
Emitter<CityState> emit,
) async {
emit(GetCitiesInProgressState());
final cities = await _remoteService.getCities();
if (cities != null) {
emit(GetCitiesCompletedState(cities: cities));
} else {
emit(GetCitiesFailedState(
failure: GlobalFailureModel(
errorCode: 0,
message: 'Error when getting cities',
),
));
}
}
}
copied to clipboard
Run flutter pub run build_runner build command from terminal inside project directory.
Generator creates city_bloc.g.dart file filled with defined states and events.
part of 'city_bloc.dart';
// **************************************************************************
// BlocGenerator
// **************************************************************************
class InitialCityState extends CityState {}
class DeleteCityEvent extends CityEvent {
final int cityId;
DeleteCityEvent({required this.cityId});
}
class DeleteCityInProgressState extends CityState {}
class DeleteCityForbiddenState extends CityState {
DeleteCityForbiddenState();
}
class DeleteCityWithIdState extends CityState {
final int cityId;
DeleteCityWithIdState({required this.cityId});
}
class DeleteCityCompletedState extends CityState {
final City city;
DeleteCityCompletedState({required this.city});
}
class DeleteCityFailedState extends CityState {
final GlobalFailureModel failure;
DeleteCityFailedState({required this.failure});
}
class GetCitiesEvent extends CityEvent {}
class GetCitiesInProgressState extends CityState {}
class GetCitiesCompletedState extends CityState {
final List<City> cities;
GetCitiesCompletedState({required this.cities});
}
class GetCitiesFailedState extends CityState {
final GlobalFailureModel failure;
GetCitiesFailedState({required this.failure});
}
copied to clipboard
Annotations #
Generator needs BlocAnnotation declaration top of the bloc.
baseEventType : Base Event class type for event classes.
baseStateType : Base State class type for state classes.
failureModel : Global failure model type. If its null failure states wont have any fields. Otherwise will have this failure model.
BlocUseCase.name : Name of your event.
BlocUseCase.input : Define event inputs with map.Format: {"nameOfField":typeOfField}.
BlocUseCase.output : Define CompletedState fields with map.Format: {"nameOfField":typeOfField}.
BlocUseCase.extraStates : if you want more state define them inside list of string .
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.