service_bloc 1.0.0 copy "service_bloc: ^1.0.0" to clipboard
service_bloc: ^1.0.0 copied to clipboard

Dart package for service layer implement with bloc architecture

service_bloc #

Dart package for service layer implement with bloc architecture

Usage #

Create your own base service bloc

Example #

  • User permission
enum UserPermissionLevel {
  invalid,
  normal,
  vip,
}

class UserPermissionLevelCubit extends Cubit<UserPermissionLevel> {
  UserPermissionLevelCubit(UserPermissionLevel initialState)
      : super(UserPermissionLevel.invalid);
}

abstract class UserPermissionRequiredServiceBloc<
ServiceRequestedEvent extends ServiceRequested,
ResponseData> extends ServiceBloc<ServiceRequestedEvent, ResponseData> {
  UserPermissionRequiredServiceBloc({required this.userPermissionLevelCubit,
    EventTransformer<ServiceRequestedEvent>? eventTransformer})
      : super(eventTransformer: eventTransformer);

  final UserPermissionLevelCubit userPermissionLevelCubit;
}

class ProductCheckoutServiceRequested extends ServiceRequested {
  const ProductCheckoutServiceRequested(this.productIdList);

  final List<String> productIdList;

  @override
  List<Object?> get props => [productIdList];
}

class ProductCheckoutServiceBloc extends UserPermissionRequiredServiceBloc<
    ProductCheckoutServiceRequested,
    String> {
  ProductCheckoutServiceBloc({required UserPermissionLevelCubit userPermissionLevelCubit})
      : super(userPermissionLevelCubit: userPermissionLevelCubit);

  @override
  FutureOr<void> onRequest(ProductCheckoutServiceRequested event, Emitter<ServiceState> emit) {
    if (userPermissionLevelCubit.state == UserPermissionLevel.invalid) {
      // TODO: implement permission error
    }
    // TODO: implement onRequest
  }
}
  • Locale
class LocaleRequiredServiceRequested extends ServiceRequested {
  LocaleRequiredServiceRequested({required this.locale});

  final Locale locale;

  @override
  List<Object?> get props => [locale];
}

abstract class LocaleRequiredServiceBloc<
ServiceRequested extends LocaleRequiredServiceRequested,
ResponseData> extends ServiceBloc<ServiceRequested, ResponseData> {}

class ProductDetailServiceRequested extends LocaleRequiredServiceRequested {
  ProductDetailServiceRequested({
    required this.productId,
    required Locale locale,
  }) : super(locale: locale);

  final String productId;

  @override
  List<Object?> get props =>
      [
        locale,
        productId,
      ];
}

class ProductDetailServiceBloc extends LocaleRequiredServiceBloc<
    ProductDetailServiceRequested,
    ProductDetail> {
  @override
  FutureOr<void> onRequest(ProductDetailServiceRequested event, Emitter<ServiceState> emit) {
    final locale = event.locale;
    // TODO: implement onRequest
  }
}

This two examples shows that you can create your own service bloc with extensibility feature.

Live Template #

Generating boilerplate for service bloc

You can generate service bloc boilerplate code easily by using live template, check out setup to create your own shortcut with the following code.

class $SERVICE_NAME$ServiceRequested extends ServiceRequested {
  const $SERVICE_NAME$ServiceRequested();
  
  @override
  List<Object?> get props => [];
}

class $SERVICE_NAME$ServiceBloc extends ServiceBloc<$SERVICE_NAME$ServiceRequested, $RETURN_TYPE$> {

  @override
  FutureOr<void> onRequest($SERVICE_NAME$ServiceRequested event, Emitter<ServiceState> emit) async {
    $END$// TODO: implement service call
  }
}

For more example detail, please check out example.

Maintainer #

Jack Liu

0
likes
140
pub points
25%
popularity

Publisher

unverified uploader

Dart package for service layer implement with bloc architecture

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

bloc, bloc_concurrency, equatable, meta

More

Packages that depend on service_bloc