我希望ListView显示用户名称。我正在使用带有admin sdk的cloudfunction返回具有相应用户ID的所有用户的列表。当我想使用流构建器将该uid传递给Widget时,它给了我错误:
Class 'QuerySnapshot' has no instance method '[]'.
Receiver: Instance of 'QuerySnapshot'
Tried calling: []("firstName")
这是我为标题构建ListView时调用的函数:
Widget getFirstName(uid, item) {
return StreamBuilder(
stream: Firestore.instance
.collection('users')
.document('HzBUMs06BAPHK0Y7m5kfOmUzawC2')
.collection('userInfo')
.snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Text('${item['email']}');
} else {
return Text('${snapshot.data.documents['firstName']}');
}
},
);
}
我还没有使用将要传递给它的uid,因为我现在硬编码的用户ID是其中唯一包含firstName数据的用户ID。
当我向它提供一个不存在的用户ID时,它似乎仍然认为其中包含数据并试图返回其(不存在)数据。
我在做什么错了?
答案 0 :(得分:1)
我设法通过使用以下代码对其进行了修复:
Widget fullNameWidget(uid) {
return FutureBuilder(
future: fullName(uid),
builder: (context, snapshot) {
return Text('${snapshot.data}');
},
);
}
Future fullName(uid) async {
return Firestore.instance
.collection("users")
.document('$uid')
.collection("userInfo")
.getDocuments()
.then((querySnapshot) {
print(querySnapshot.documents[0]['firstName']);
if (querySnapshot == 'null') {
} else {
return '${querySnapshot.documents[0]['firstName']} ${querySnapshot.documents[0]['lastName']}';
}
// querySnapshot.documents.where((element) {
// print(element.documentID == 'firstName');
// });
});
}