作者:詹建红_335 | 来源:互联网 | 2022-12-07 11:12
我有一个BLoC,它使用原始输入Stream
(产生JSON对象列表)并将其转换为使用的可用对象StreamTransformer
。UI将显示该列表。用户可以应用过滤器(本身是流到BLoC中的流),以便BLoC用相应的where(...)
语句更新输入流转换器。
问题是:当过滤器更改时,UI不会更新,因为输出流取决于JSON输入流(而不是过滤器流)的事件。我的假设是我需要创建自己的流,将输入事件和过滤器事件都转发到该流中,或者我需要在转换后的输入流上重复最后一个事件,以便转换器有机会将其拾取。如何正确完成?一个例子会很有帮助!
1> Rémi Roussel..:
您的假设是正确的。您需要创建第三个流,同时接收JSON流和过滤流,并将二者组合成自定义结果。
这通常是通过流转换器完成的。使用myStream.transform
方法。但这有点复杂。
为了使事情变得更加简单,有一个名为rxdart的软件包,该软件包基本上是子类,Stream
并添加了一些常见的转换器。
使用rxdart,您可以使用combineLatest
运算符创建第三个流
Observable> list;
Observable filter;
final output = Observable.combineLatest2(filter, list, (String filter, List list) {
return list.where((str) => str.startsWith(filter));
});
有关reactx运算符的更多信息,请点击此处