如何限制集团内的事件?

How to throttle events in bloc?

如何限制 bloc 中的事件?比方说,我想在用户输入时触发文件保存,但执行文件系统访问的频率不超过每 100 毫秒一次?

示例 bloc 事件处理程序:

on<StoreFile>(_handleStoreEvent);

每个处理程序都有一个可选的 transformer: 字段,可以进行节流(以及更多)。

使用 rxdart 您可以自己实施节流:

on<StoreFile>(
  _handleStoreEvent,
  transformer: (events, mapper) => events.throttleTime(Duration(milliseconds: 100)).switchMap(mapper),
);

我编写了 bloc_event_transformers 程序包来执行节流和去抖等流行的转换,以减少我的应用程序中的样板文件。可以这样使用:

on<StoreFile>(
  _handleStoreEvent,
  transformer: throttle(Duration(milliseconds: 100)),
);