gpt4 book ai didi

firebase - 我如何组合多个 firestore 查询

转载 作者:行者123 更新时间:2023-12-03 02:47:33 24 4
gpt4 key购买 nike

如何为streambuilder组合多个查询我只能访问最后一个,以及如何防止每次返回页面时刷新流

Stream<dynamic> _main;

@override
void initState() {
super.initState();
_m = _firestore
.collection(..)
.where(..)
.where(..)
.snapshots()
.listen((QuerySnapshot snapshot) => _onMUpdate(snapshot));
}

void _onMUpdate(QuerySnapshot snapshot) async {
snapshot.documents.forEach((doc) {
Stream<DocumentSnapshot> u = _firestore
.collection(..)
.document(doc.data['m'])
.snapshots();
Stream<QuerySnapshot> me = _firestore
.collection(..)
.document(doc.documentID)
.collection(..)
.limit(1)
.snapshots();
Stream<QuerySnapshot> n = _firestore
.collection(..)
.document(doc.documentID)
.collection(..)
.snapshots();
_main = StreamZip([u, me, n]).asBroadcastStream();
});
}

我想提前感谢您的帮助

最佳答案

在你的情况下,我认为最好使用 Observable。

  • 您可以创建单独的类 BLoC。
  • 把所有的流放在那里
  • 在那里创建 getter

  • Observable<String> get merge => Observable.zip3(
    _stream1,
    _stream2,
    _stream3,
    (one, two, three) =>
    (one.toString() + two.toString() + three.toString()));


    之后你可以像这样在你的Streambuilder中使用这个getter
    StreamBuilder<String>(
    stream: counterBloc.merge,
    builder: (context, snapshot) {
    return Text(
    'Flutter Observable - ${snapshot.data.toString()}',
    );
    }),

    我在计数器应用程序的基础上创建了示例。当按下按钮时,它将数据发送到 3 个流并在显示它们之后。

    代码示例在这里 https://github.com/awaik/flutter_observable_example

    它的工作原理如下图所示。

    在此处阅读有关 zip3 的更多信息 https://pub.dev/documentation/rxdart/latest/rx/Observable/zip3.html

    此外,您可以使用 Stream<DocumentSnapshot> 代替 BehaviorSubject<DocumentSnapshot>,它将保留流的最后一个值。

    通过这种方法,您可以将逻辑与 UI 分开,并且可以在应用程序的任何位置重用此流。

    enter image description here

    关于firebase - 我如何组合多个 firestore 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58893586/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com