如何使用“onEvent”为事件实现去抖动器?

Posted

技术标签:

【中文标题】如何使用“onEvent”为事件实现去抖动器?【英文标题】:how to implement debouncer for events with 'onEvent'? 【发布时间】:2021-11-21 03:11:46 【问题描述】:

transformEvents 方法将在 bloc 版本 8 中删除,我们应该使用onEvent 方法而不是,我们如何为带有onEvent 的事件实现debounce

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

【问题讨论】:

【参考方案1】:

Bloc 7.2.0 中的新功能https://verygood.ventures/blog/whats-new-in-bloc-v7-2-0

现在它使用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);
  ;

希望对你有帮助!

【讨论】:

【参考方案2】:

rxdart 库用于我看到您已经在使用的流方法:

static Stream<T> debounce<T>(
    Stream<T> events,
    Stream<T> Function(T) transitionFn,
) 
    return events
        .debounceTime(const Duration(milliseconds: 200))
        .switchMap(transitionFn);

【讨论】:

感谢您回答这个问题,但我正在寻找带有onEvent 回调的解决方案。

以上是关于如何使用“onEvent”为事件实现去抖动器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue2 中对去抖动的计算设置器进行类型转换?

如何为事件驱动的微服务实现“去抖动”?

如何在 EventChannel.listen 的回调 onEvent 中显示 SnackBar

Flutter TextField 值总是大写和去抖动

C# 事件去抖动

如何配置我的应用程序以检测抖动运动事件?