如何对块中的事件进行反跳?

Mar*_*ski 4 state-management reactive-programming dart flutter bloc

如何对块中的事件进行反跳?比方说,我想在后端执行搜索查询,但在执行此操作之前要等待用户停止输入吗?我所说的“停止打字”是指直到按下最后一个键为止的 1 秒时间。

块事件处理程序示例:

on<Search>(_handleSearchEvent);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ski 7

每个处理程序都有一个可选transformer:字段,可以进行去抖动(以及更多操作)。

使用rxdart你可以自己实现去抖:

on<Search>(
  _handleSearchEvent,
  transformer: (events, mapper) => events.debounceTime(Duration(seconds: 1)).switchMap(mapper),
);
Run Code Online (Sandbox Code Playgroud)

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

on<Search>(
  _handleSearchEvent,
  transformer: debounce(Duration(seconds: 1)),
);
Run Code Online (Sandbox Code Playgroud)

  • 我在 [twitter](https://twitter.com/wrbl_xyz/status/1490355424322891780) 上与 bloclibrary.dev 作者讨论了这个问题后制作了这个包。这个问题与答案一起发布(StackOverflow 确实支持这一点!:D),以推广该软件包和/或为任何寻求比我的软件包提供的更复杂解决方案的人提供实现基础。更重要的是,我对[节流]做了非常相似的事情(/sf/ask/4972430431/#71034721):) (2认同)