【发布时间】:2021-06-22 12:46:46
【问题描述】:
我的代码中有 2 个流,第一个是从好友列表中获取用户 ID,第二个流是使用 id 列表在 firebase 中搜索用户 ID 的文档。
Stream friendIDStream;
Stream friendNameStream;
Widget friendList() {
return StreamBuilder(
stream: friendNameStream,
builder: (context, snapshot) {
return snapshot.hasData
? ListView.builder(
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
return FriendTile(
snapshot.data.docs[index].data()["username"]);
},
)
: Container();
},
);
}
@override
void initState() {
getUserFriend();
getNameByID();
super.initState();
}
getUserFriend() async {
Constant.currentId =
await HelperFunctions.getUserIdSharedPreference(Constant.currentId);
setState(() {
firebaseMethods.getFriend(Constant.currentId).then((value) {
setState(() {
friendIDStream = value;
});
});
});
}
getNameByID() {
setState(() {
firebaseMethods.getFriendName(friendIDStream).then((value) {
setState(() {
friendNameStream = value;
});
});
});
}
这是 Firestore 代码。
Future getFriend(String ownerid) async {
return await FirebaseFirestore.instance
.collection("users")
.doc(ownerid)
.collection("friends")
.snapshots();
}
Future getFriendName(friendid) async {
return await FirebaseFirestore.instance
.collection("users")
.doc(friendid)
.snapshots();
}
我不知道为什么会这样,因为我可以显示 id 列表。我曾尝试将docs 更改为doc,但也会产生相同的错误。
编辑:
【问题讨论】:
-
请显示
friendNameStream代码,你是如何得到它的 -
friendNameStream的代码在getNameById()函数中。 -
在我看来,您正试图在
DocumentSnapshot上使用QuerySnapshot属性。您从getFriendName函数返回的是 DocumentSnapshot。因此,只需从该函数中删除.doc(friendid)方法,它就会返回所有文档。 -
@Unbreachable 刚刚尝试过但是返回查询快照没有实例方法'调用'错误。
-
@RaymondChong 哦,是的,还要从
snapshot.data.docs[index].data()["username"]);中删除data(),它现在应该开始工作了。