从Firestore检索数据时如何在Dart中使用2维数组

时间:2019-06-30 02:53:44

标签: arrays asynchronous flutter dart google-cloud-firestore

我一直试图创建一个小部件,其中请求组的成员的个人资料照片显示在小部件内。我能够收集数据,因此决定使用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条语句的位置有关,我认为它们之前或之前被调用过?有任何想法吗?

0 个答案:

没有答案