我正在尝试使用标签栏和标签栏视图显示火力基地的某些元素。首先,我使用流生成器在选项卡栏中获取选项卡的文本:
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()));
}),)),
然后,我想从消防商店中获得一个名为“ temps”的流构建器,其中包含文档,每个文档ID代表另一个名为“ users”的集合中的文档ID。在用户的每个文档中,我都有一个名为place的字段。我已经制作了选项卡并且可以使用,但是,我不能做的是: 要获取集合临时中每个文档的文档ID,并获取此文档ID并使用它来访问“用户”集合中具有相同ID的文档,并检查字段中选项卡中名称的值是否相同酒吧,我想在标签栏视图中显示它! 我怎样才能做到这一点? 抱歉,我很困惑,但是我不熟悉使用流和Firestore,所以我不知道该怎么办! 请帮忙
答案 0 :(得分:0)
如果我正确理解,一种解决方案是在StatefulWidget
内使用本地State
创建一个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
本身。