side_effect_cubit 1.0.1 copy "side_effect_cubit: ^1.0.1" to clipboard
side_effect_cubit: ^1.0.1 copied to clipboard

"An extension to the bloc state management library which serve an additional stream for events that should be consumed only once"

Side Effect Cubit #

An extension to the bloc state management library which serve an additional stream for events that should be consumed only once - as usual called one-time events.

Usage #

1. Adding to existing one #

For Bloc:

class FeatureBloc extends Bloc<FeatureEvent, FeatureState>
    with SideEffectBlocMixin<FeatureEvent, FeatureState, FeatureSideEffect> {
  FeatureBloc() : super(FeatureState.initial());
}

For Cubit:

  class FeatureCubit extends Cubit<FeatureState>
    with SideEffectCubitMixin<FeatureState, FeatureSideEffect> {
  FeatureCubit() : super(FeatureState.initial());
}

2. Inherit #

For Bloc:

class FeatureBloc extends SideEffectBloc<FeatureEvent, FeatureState, FeatureSideEffect>{
  FeatureBloc() : super(FeatureState.initial());
}

For Cubit:

class FeatureCubit extends SideEffectCubit<FeatureState, FeatureSideEffect> {
  FeatureCubit() : super(FeatureState.initial());
}

Emit side effect #

class FeatureBloc extends SideEffectBloc<FeatureEvent, FeatureState, FeatureSideEffect>{
  FeatureBloc() : super(FeatureState.initial()){        
    on<ItemClick>(
      (event, emit) {
        produceSideEffect(FeatureSideEffect.openItem(event.id));
      },
    );
  }
}
class FeatureCubit extends SideEffectCubit<FeatureState, FeatureSideEffect> {
  FeatureCubit() : super(FeatureState.initial());

  Future<void> doSomething() {
    produceSideEffect(FeatureSideEffect.openItem(event.id));
  }
}

Listen side effect #

BlocSideEffectListener<FeatureBloc, FeatureSideEffect>(
    listener: (BuildContext context, FeatureSideEffect sideEffect) {
        sideEffect.when(
            goToNextScreen: () => Navigator.of(context).pushNamed("/second_screen"),
            showPopupError: (errMsg) {
                // ....
            });
    },
    child: ...
)
BlocSideEffectConsumer<FeatureBloc, FeatureState, FeatureSideEffect>(
    sideEffectListener: (BuildContext context, FeatureSideEffect sideEffect) {

    },
    listenWhen: (previos, current) {},
    listen: (previous, current) {},
    buildWhen: (previous, current) => true,
    builder: (BuildContext context,  FeatureState state) {
        return ...
    }
)
2
likes
130
points
112
downloads

Publisher

verified publishersontieu.dev

Weekly Downloads

"An extension to the bloc state management library which serve an additional stream for events that should be consumed only once"

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_bloc, provider

More

Packages that depend on side_effect_cubit