我想将StreamBuilder与两个异步任务一起使用。第一个异步流从Firebase/Firestore获取打开的好友请求。对于每个friend_request条目,我需要第二个异步任务,它获取friend_request条目的配置文件信息。
问题是,我不能使用StreamBuilder中的第二个异步任务,因为构建器不能是异步的。我当前的代码过早地返回了列表,因为它不能等待。
如果能得到帮助,我会非常高兴。
StreamBuilder<QuerySnapshot>(
stream: firestoreHandler.streamRequestedFriends(),
builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data.docs.isEmpty)
return Text('No friend requests');
List<FriendRequestItem> friendList = List<FriendRequestItem>();
var friendRequests = snapshot.data.docs;
for (var friendRequest in friendRequests) {
String friendId = friendRequest.data()['friendId'];
// firestoreHandler.getUserById() needs to await
firestoreHandler
.getUserById(friendId)
.then((friendProfile) {
friendList.add(
FriendRequestItem(
photoUrl: friendProfile.data()['profile_picture'],
email: friendProfile.data()['email'],
onAccept: () {
firestoreHandler.acceptFriendRequest(friendId);
},
onDelete: () {
firestoreHandler.removeFriendRequest(friendId);
},
),
);
});
}
return Column(
children: friendList,
);
},
),发布于 2020-10-07 01:16:04
为此,您必须在StreamBuilder中使用FutureBuilder。
StreamBuilder<QuerySnapshot>(
stream: firestoreHandler.streamRequestedFriends(),
builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data.docs.isEmpty)
return Text('No friend requests');
List<FriendRequestItem> friendList = List<FriendRequestItem>();
var friendRequests = snapshot.data.docs;
for (var friendRequest in friendRequests) {
String friendId = friendRequest.data()['friendId'];
return FutureBuilder(
future: firestoreHandler.getUserById(friendId),
builder: (context, snapshotFuture) {
if (snapshot.connetionState == ConnectionState.done) {
friendList.add(
FriendRequestItem(
photoUrl: snapshotFuture.data.data()['profile_picture'],
email: snapshotFuture.data.data()['email'],
onAccept: () {
firestoreHandler.acceptFriendRequest(friendId);
},
onDelete: () {
firestoreHandler.removeFriendRequest(friendId);
},
),
);
return Column(
children: friendList,
);
}
return CircularProgressIndicator();
},
);
}
},
); https://stackoverflow.com/questions/64230296
复制相似问题