我有一个小部件来表示按最近用户当前位置排序的商店列表,也应该应用过滤。
数据在:
数据输出:过滤,排序,商店列表。
在这种情况下,最佳做法是什么模式?
rxdart:https://pub.dartlang.org/packages/rxdart如果你想将数据组合在一起就可以使用了
var myObservable = Observable.combineLatest3(
myFirstStream,
mySecondStream,
myThirdStream,
(firstData, secondData, thirdData) => print("$firstData $secondData $thirdData"));
you can combine from ( combineLatest2, combineLatest... combineLatest9 )
或者像这个例子一样使用CombineLatestStream
CombineLatestStream.list<String>([
Stream.fromIterable(["a"]),
Stream.fromIterable(["b"]),
Stream.fromIterable(["C", "D"])])
.listen(print);
数字2,3和4是您通过接收器发送的块的输入。该bloc侦听这些接收器并相应地更新Firestore查询。仅此一项就足以使Firestore将适当的快照发送到窗口小部件正在侦听的输出流。
如果您无法直接使用Firestore API对其进行排序或过滤,则可以使用stream.map
或在其上应用StreamTransformer
。通过实现bind
方法,变换器为您提供了很大的灵活性来监听流并更改或忽略事件。
所以你可以这样做:
Stream<Store> get stores => _firestoreStream
.transform(filter)
.transform(sort);
一般来看看qazxsw poi中的dart流,并查看qazxsw poi以获得更复杂的流操作。
根据个人经验,我发现有一个块的多个输入导致难以测试代码。块内的隐式并发问题导致混乱的场景。
我在this page帖子中构建它的方法是创建一个单独的输入流,但是在消息中添加标记,表明消息是哪个数据流的一部分。它使测试理智。
在这种情况下,我认为有多个异步处理。这种实现可能很复杂。并且存在竞争条件的可能性。
我将按如下方式实施。
我希望你能帮助你。
例如:
rxdart