一尘不染

根据Dart / Flutter中的过滤器更新流

flutter

我有一个BLoC,它使用原始输入Stream(产生JSON对象列表)并将其转换为使用的可用对象StreamTransformer。UI将显示该列表。用户可以应用过滤器(本身就是流到BLoC中的流),以便BLoC用相应的where(...)语句更新输入流转换器。

问题是:当过滤器更改时,UI不会更新,因为输出流取决于JSON输入流(而不是过滤器流)的事件。我的假设是,我需要创建自己的流,将输入事件和过滤器事件都转发到该流中,或者我需要在转换后的输入流上重复最后一个事件,以使转换器有机会拾取它。如何正确完成?一个例子会很有帮助!


阅读 560

收藏
2020-08-13

共1个答案

一尘不染

您的假设是正确的。您需要创建第三个流,同时接收JSON流和过滤流,并将两者组合成自定义结果。

这通常是通过流转换器完成的。使用myStream.transform方法。但这有点复杂。

为了使事情变得更加简单,有一个名为rxdart的软件包,该软件包基本上是子类,Stream并添加了一些常见的转换器。

使用rxdart,您可以使用combineLatest运算符创建第三个流

Observable<List<String>> list;
Observable<String> filter;

final output = Observable.combineLatest2(filter, list, (String filter, List<String> list) {
  return list.where((str) => str.startsWith(filter));
});

有关reactx运算符的更多信息,请点击此处

2020-08-13