gpt4 book ai didi

stream - 基于 Dart/Flutter 中的过滤器更新流

转载 作者:IT王子 更新时间:2023-10-29 06:36:08 25 4
gpt4 key购买 nike

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

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

最佳答案

你的假设是正确的。您需要创建第三个流,它同时采用您的 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 运算符的更多信息 here

关于stream - 基于 Dart/Flutter 中的过滤器更新流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930918/

25 4 0