Search code examples
flutterdartblocflutter-bloc

how to implement debouncer for events with 'onEvent'?


transformEvents method will be removed in bloc version 8, and we should use onEvent method instead of, how can we implement debounce for events with onEvent?

  @override
  Stream<Transition<PriceProposalEvent, PriceProposalState>> transformEvents(
    Stream<PriceProposalEvent> events,
    TransitionFunction<PriceProposalEvent, PriceProposalState> transitionFn,
  ) =>
      super.transformEvents(
        events.debounceTime(const Duration(milliseconds: 200)),
        transitionFn,
      );

Solution

  • New in Bloc 7.2.0 https://verygood.ventures/blog/whats-new-in-bloc-v7-2-0

    Now it uses transformer!

    import 'package:bloc/bloc.dart';
    import 'package:stream_transform/stream_transform.dart';
    
    class YourBloc extends Bloc<Event, State> {
      YourBloc() : super(StateInitial()) {
    
        on<PriceProposalEvent>(_onPriceProposalEvent,
            transformer: debounce(const Duration(milliseconds: 200)));
      }
    }
    //Debounce query requests
    EventTransformer<E> debounce<E>(Duration duration) {
      return (events, mapper) {
        return events.debounce(duration).switchMap(mapper);
      };
    }
    

    Hope, it may help ya!