Android 如何在Flatter中访问DocumentReference数组?
我想访问当前登录用户的所有注册事件。我现在有以下代码Android 如何在Flatter中访问DocumentReference数组?,android,firebase,flutter,google-cloud-firestore,Android,Firebase,Flutter,Google Cloud Firestore,我想访问当前登录用户的所有注册事件。我现在有以下代码 stream: Firestore.instance.collection('users').document(email).snapshots(), builder: (context, snapshot){ if(!snapshot.hasData){ return Text("Loading.."); } return Center(
stream: Firestore.instance.collection('users').document(email).snapshots(),
builder: (context, snapshot){
if(!snapshot.hasData){
return Text("Loading..");
}
return Center(
child: new Container(
child: new PageView.builder(
onPageChanged: (value) {
setState(() {
currentpage = value;
});
},
controller: controller,
itemCount: snapshot.data['reg_events'].length,
itemBuilder: (context, index) => builder(index, snapshot.data)),
),
);
}
),
“建筑商”是:
builder(int index, DocumentSnapshot document) {
return new AnimatedBuilder(
animation: controller,
builder: (context, child) {
double value = 1.0;
if (controller.position.haveDimensions) {
value = controller.page - index;
value = (1 - (value.abs() * .5)).clamp(0.0, 1.0);
}
return new Center(
child: new SizedBox(
height: Curves.easeOut.transform(value) * 200,
width: Curves.easeOut.transform(value) * 1000,
child: child,
),
);
},
child: new Card(
child: Text(document.data['reg_events'][0].toString(),
textAlign: TextAlign.center,
style: TextStyle(fontSize: 15, color: Colors.white),),
margin: const EdgeInsets.all(10.0),
color: index % 2 == 0 ? Colors.blue : Colors.red,
),
);
}
但它输出“DocumentReference”的实例。如何访问此文档参考?可能它不理解reg\u事件作为列表,因此请尝试此
stream: Firestore.instance.collection('users').document(email).snapshots(),
builder: (context, snapshot){
List regEvent = new List();
if(snapshot.hasData){
regEvent = snapshot.data['reg_events'];
}
if(!snapshot.hasData){
return Text("Loading..");
}
return Center(
child: new Container(
child: new PageView.builder(
onPageChanged: (value) {
setState(() {
currentpage = value;
});
},
controller: controller,
itemCount: regEvent.length,
itemBuilder: (context, index) {
print(regEvent[index]);
return builder(index, snapshot.data)),}
),
);
}
),
可能它无法理解注册表事件作为列表,因此请尝试以下操作
stream: Firestore.instance.collection('users').document(email).snapshots(),
builder: (context, snapshot){
List regEvent = new List();
if(snapshot.hasData){
regEvent = snapshot.data['reg_events'];
}
if(!snapshot.hasData){
return Text("Loading..");
}
return Center(
child: new Container(
child: new PageView.builder(
onPageChanged: (value) {
setState(() {
currentpage = value;
});
},
controller: controller,
itemCount: regEvent.length,
itemBuilder: (context, index) {
print(regEvent[index]);
return builder(index, snapshot.data)),}
),
);
}
),
DocumentReference就像指向一个文档的指针。您可以使用
.get
方法获取单个文档,该方法返回Future
。因为您有一个数组,所以您可以使用流来获得一系列未来
List references=[ref,ref,ref];
var myStream=Stream.fromFutures(references.map((ref)=>ref.get()).toList());
StreamBuilder(生成器:…,流:myStream);
但是
Firestore有查询功能,所以如果您实际使用它,应该会更好。您应该能够引用您的reg\u事件
,如下所示:
Firestore.instance.collection('users').document("$email/reg_events").snapshots();
DocumentReference就像指向一个文档的指针。您可以使用
.get
方法获取单个文档,该方法返回Future
。因为您有一个数组,所以您可以使用流来获得一系列未来
List references=[ref,ref,ref];
var myStream=Stream.fromFutures(references.map((ref)=>ref.get()).toList());
StreamBuilder(生成器:…,流:myStream);
但是
Firestore有查询功能,所以如果您实际使用它,应该会更好。您应该能够引用您的reg\u事件
,如下所示:
Firestore.instance.collection('users').document("$email/reg_events").snapshots();
在此示例中,将创建一个用户对象,其中包含实体(或事件)的引用列表。然后将该列表传递给DatabaseService类,该类返回EntityDetails流对象的列表 数据库服务类:
final CollectionReference entityCollection =
Firestore.instance.collection('entities');
final CollectionReference userCollection =
Firestore.instance.collection('user');
Stream<UserDetails> get userDetails {
return userCollection
.document(uid)
.snapshots()
.map(_userDetailsFromSnapshot);
}
UserDetails _userDetailsFromSnapshot(DocumentSnapshot snapshot) {
return UserDetails(
email: snapshot.data['email'],
phone: snapshot.data['phone'],
fname: snapshot.data['fname'],
lname: snapshot.data['lname'],
streetNr: snapshot.data['street_nr'],
city: snapshot.data['city'],
entities: List.from(snapshot.data['entities']));
}
List<Stream<EntityDetails>> getEntitiesFromDRList(
List<DocumentReference> entities) {
List<Stream<EntityDetails>> elist = new List();
entities.forEach((element) {
elist.add(element.snapshots().map((_entityDetailsFromSnapshot)));
});
return elist;
}
EntityDetails _entityDetailsFromSnapshot(DocumentSnapshot snapshot) {
return EntityDetails(
uid: uid,
name: snapshot.data['name'],
description: snapshot.data['description'],
type: snapshot.data['type'],
geoPoint: snapshot.data['geopoint'],
adressString: snapshot.data['adress_string'],
email: snapshot.data['email'],
phone: snapshot.data['phone'],
);}
用户对象
class UserDetails {
final String email;
final String phone;
final String fname;
final String lname;
final String streetNr;
final String city;
final List<DocumentReference> entities;
UserDetails(
{this.email,
this.phone,
this.fname,
this.lname,
this.streetNr,
this.city,
this.entities});
}
类用户详细信息{
最终字符串电子邮件;
最终字符串电话;
最终字符串fname;
最后的字符串名称;
最终字符串街道编号;
最后的字符串城市;
最后名单实体;
用户详细信息(
{this.email,
这个电话,
这个.fname,
这是我的名字,
这条街道,
这个城市,
这是(实体});
}
在本例中,创建了一个用户对象,其中包含实体(或事件)的引用列表。然后将该列表传递给DatabaseService类,该类返回EntityDetails流对象的列表
数据库服务类:
final CollectionReference entityCollection =
Firestore.instance.collection('entities');
final CollectionReference userCollection =
Firestore.instance.collection('user');
Stream<UserDetails> get userDetails {
return userCollection
.document(uid)
.snapshots()
.map(_userDetailsFromSnapshot);
}
UserDetails _userDetailsFromSnapshot(DocumentSnapshot snapshot) {
return UserDetails(
email: snapshot.data['email'],
phone: snapshot.data['phone'],
fname: snapshot.data['fname'],
lname: snapshot.data['lname'],
streetNr: snapshot.data['street_nr'],
city: snapshot.data['city'],
entities: List.from(snapshot.data['entities']));
}
List<Stream<EntityDetails>> getEntitiesFromDRList(
List<DocumentReference> entities) {
List<Stream<EntityDetails>> elist = new List();
entities.forEach((element) {
elist.add(element.snapshots().map((_entityDetailsFromSnapshot)));
});
return elist;
}
EntityDetails _entityDetailsFromSnapshot(DocumentSnapshot snapshot) {
return EntityDetails(
uid: uid,
name: snapshot.data['name'],
description: snapshot.data['description'],
type: snapshot.data['type'],
geoPoint: snapshot.data['geopoint'],
adressString: snapshot.data['adress_string'],
email: snapshot.data['email'],
phone: snapshot.data['phone'],
);}
用户对象
class UserDetails {
final String email;
final String phone;
final String fname;
final String lname;
final String streetNr;
final String city;
final List<DocumentReference> entities;
UserDetails(
{this.email,
this.phone,
this.fname,
this.lname,
this.streetNr,
this.city,
this.entities});
}
类用户详细信息{
最终字符串电子邮件;
最终字符串电话;
最终字符串fname;
最后的字符串名称;
最终字符串街道编号;
最后的字符串城市;
最后名单实体;
用户详细信息(
{this.email,
这个电话,
这个.fname,
这是我的名字,
这条街道,
这个城市,
这是(实体});
}
你能包括你的构建者吗?我已经更新了我的帖子@pr0gramist你能包括你的构建者吗?我已经更新了我的帖子@pr0gramist