gpt4 book ai didi

firebase - 如何在一个流中合并多个流

转载 作者:IT王子 更新时间:2023-10-29 07:05:50 51 4
gpt4 key购买 nike

我正在尝试使用标签栏和标签栏 View 来显示 fire base 的一些元素。首先,我使用流构建器获取标签栏中标签的文本:

class HomePage extends StatelessWidget {
final FirebaseUser user;


HomePage({this.user});

@override
Widget build(BuildContext context) {
return new StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection("places").snapshots(),
builder: (BuildContext context,AsyncSnapshot<QuerySnapshot> snapshot){
if (!snapshot.hasData){
return Center(child: CircularProgressIndicator());
}
else{
return DefaultTabController(
length: 20,
child: Scaffold(
appBar: AppBar(
title: Text("Home Page"),
bottom: TabBar( isScrollable: true,
tabs: new List.generate(snapshot.data.documents.length, (index) {
return new Tab(child: Text(snapshot.data.documents[index]['name'].toString().toUpperCase()));
}),)),

然后我想从 fire store 获取名为“temps”的集合的流生成器​​,其中包含文档,每个文档 ID 代表另一个名为“users”的集合中的文档 ID。在用户的每个文档中,我都有一个名为 place 的字段。我已经制作了标签并且它可以工作但是我不能做的是:想要获取集合临时文件中每个文档的文档 ID,并获取此文档 ID 并使用它来访问“用户”集合中具有相同 ID 的文档,并检查字段位置是否具有与选项卡中名称相同的值酒吧我想出现在标签栏 View 中!我该怎么做?

最佳答案

如果我理解正确的话,一个解决方案是在其 State 中创建一个 StatefulWidget,使用本地 StreamController 并指向您的 StreamBuilder 到它。

分别使用这两个 Streams 并将这些项目添加到您的 StreamController。

看起来有点像:

class YourClass extends StatefulWidget {
... createState() ...
}


class _YourClassState extends State<YourClass> {
StreamController<YourItem> _places;

@override
void initState() {
super.initState();

// the unified stream
_places = new StreamController();

// listening to changes of the first reference
CollectionReference places1Ref = Firestore.instance.collection("places1");
places1Ref.listen((snapshopt) {
// posting item to the unified streamController
_places.add(item);
});

// listening to changes of the second reference
CollectionReference places2Ref = Firestore.instance.collection("places2");
places2Ref.listen((snapshopt) {
// posting item to the unified streamController
_places.add(item);
});
}

@override
Widget build(BuildContext context) {
return StreamBuilder<YourItem>(
stream: _places.stream, // using here only the unified stream
builder: (context, snapshot) {
return YourWidgets();
}
);
}
}

此模型使用 YourItem 作为统一对象,但您可以使用其他对象,包括 dynamic 本身。

关于firebase - 如何在一个流中合并多个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53048023/

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