我有一个BLoC,它使用原始输入Stream(产生JSON对象列表)并将其转换为使用的可用对象StreamTransformer。UI将显示该列表。用户可以应用过滤器(本身就是流到BLoC中的流),以便BLoC用相应的where(...)语句更新输入流转换器。
Stream
StreamTransformer
where(...)
问题是:当过滤器更改时,UI不会更新,因为输出流取决于JSON输入流(而不是过滤器流)的事件。我的假设是,我需要创建自己的流,将输入事件和过滤器事件都转发到该流中,或者我需要在转换后的输入流上重复最后一个事件,以使转换器有机会拾取它。如何正确完成?一个例子会很有帮助!
您的假设是正确的。您需要创建第三个流,同时接收JSON流和过滤流,并将两者组合成自定义结果。
这通常是通过流转换器完成的。使用myStream.transform方法。但这有点复杂。
myStream.transform
为了使事情变得更加简单,有一个名为rxdart的软件包,该软件包基本上是子类,Stream并添加了一些常见的转换器。
使用rxdart,您可以使用combineLatest运算符创建第三个流
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运算符的更多信息,请点击此处