我一直试图创建一个小部件,其中请求组的成员的个人资料照片显示在小部件内。我能够收集数据,因此决定使用2D数组,其中数组的每个索引内部都有另一个数组,其中包含该组中所有用户的所有照片url,依此类推。
为此,我首先需要创建一个由用户ID组成的2D数组,每个索引都包含一个具有相应成员的用户ID的数组。我对此没有任何问题,因为对于每个请求,该数据已经在Firestore上的数组中。
下面的代码从firestore获取每个请求的所有成员的用户ID数组,并将每个数组放置在2D数组中,该数组保存该User的所有请求的信息。
_firestore.collection('users').document('$uid').collection('requests')
.getDocuments()
.then((QuerySnapshot querysnap) {
for (var doc in querysnap.documents) {
setState(() {
requesterIDs.add(requester);
requestedFromId=doc.data['requested from'];
requestedFromIdLists.add(requestedFromId);
});}})
.then((_)=> setState((){
然后,我尝试使用ID创建每个用户的照片网址的二维数组:
for(int x=0; x<requestedFromIdLists.length;x++){
for(int y=0;y<requestedFromIdLists[x].length;y++){
String id=requestedFromIdLists[x][y];
_firestore.collection('users').document('$id').get().then((
DocumentSnapshot document) {
setState(() {
String requestedPhoto = document.data['photoUrl'].toString();
requestedPhotoUrls.add(requestedPhoto);
});
});}
requestedPhotoUrlsLists.add(requestedPhotoUrls);
requestedPhotoUrls.clear();
}
}));
但是,我最终得到一个二维数组,其中所有照片url都重复了两次,而不是[[url1,url2],[url3]],而不是[[url1,url2,url3],[url1,url2, url3]],我追踪了很多次代码,我认为这与最后2条语句的位置有关,我认为它们之前或之前被调用过?有任何想法吗?