Firebase 如何比较两个列表并返回另一个值为​;那是相同的吗扑动与火基

Firebase 如何比较两个列表并返回另一个值为​;那是相同的吗扑动与火基,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有两个返回ID的列表。我想比较两者,并返回一个新列表,其中包含出现在两者中的ID。然后,保存这些值​​在Firebase的新系列中 最好的方法是什么?我发现了几个类似的话题,但没有一个有用 我尝试使用intersection(),但最后它没有返回任何内容。这就是我得到两份清单的原因: List<Users> followingList; List<Users> followersList; Future<List<Users>> _getF

我有两个返回ID的列表。我想比较两者,并返回一个新列表,其中包含出现在两者中的ID。然后,保存这些值​​在Firebase的新系列中

最好的方法是什么?我发现了几个类似的话题,但没有一个有用

我尝试使用intersection(),但最后它没有返回任何内容。这就是我得到两份清单的原因:

List<Users> followingList;
List<Users> followersList;

  Future<List<Users>> _getFollowersUsers() async {
    Firestore db = Firestore.instance;

    QuerySnapshot querySnapshot = await db
        .collection('followers')
        .document(_userId)
        .collection("userFollowers")
        .getDocuments();

    List<Users> followersList = [];
    for (DocumentSnapshot item in querySnapshot.documents) {
      var data = item.data;
      if (data["id"] == _userId) continue;

      Users user = Users();
      user.name = data["name"];
      user.photoUrl = data["imageUrl"];
      user.username = data["username"];
      user.id = data["id"];
      user.bio = data["bio"];

      followersList.add(user);
    }

    return followersList;
  }

  Future<List<Users>> _getFollowingUsers() async {
    Firestore db = Firestore.instance;

    QuerySnapshot querySnapshot = await db
        .collection('following')
        .document(_userId)
        .collection("userFollowing")
        .getDocuments();

    List<Users> followingList = [];
    for (DocumentSnapshot item in querySnapshot.documents) {
      var data = item.data;
      if (data["id"] == _userId) continue;

      Users user = Users();
      user.name = data["name"];
      user.photoUrl = data["imageUrl"];
      user.username = data["username"];
      user.id = data["id"];
      user.bio = data["bio"];

      followingList.add(user);
    }

    return followingList;
  }

  getFinalList() {
    var finalList =
        followingList.toSet().intersection(followersList.toSet()).toList();

    print(finalList);
  }
列表如下列表;
列表跟随者列表;
Future\u getFollowersUsers()异步{
Firestore db=Firestore.instance;
QuerySnapshot QuerySnapshot=wait db
.collection(“followers”)
.document(_userId)
.collection(“用户关注者”)
.getDocuments();
List followersList=[];
用于(querySnapshot.documents中的DocumentSnapshot项){
var数据=项目数据;
如果(数据[“id”]==\u userId)继续;
用户=用户();
user.name=数据[“name”];
user.photoUrl=数据[“imageUrl”];
user.username=数据[“username”];
user.id=数据[“id”];
user.bio=数据[“bio”];
followersList.add(用户);
}
返回跟踪列表;
}
Future\u GetFollowUsers()异步{
Firestore db=Firestore.instance;
QuerySnapshot QuerySnapshot=wait db
.collection('following')
.document(_userId)
.收集(“用户跟踪”)
.getDocuments();
列表如下列表=[];
用于(querySnapshot.documents中的DocumentSnapshot项){
var数据=项目数据;
如果(数据[“id”]==\u userId)继续;
用户=用户();
user.name=数据[“name”];
user.photoUrl=数据[“imageUrl”];
user.username=数据[“username”];
user.id=数据[“id”];
user.bio=数据[“bio”];
以下列表。添加(用户);
}
返回以下列表;
}
getFinalList(){
var finalList=
followerlist.toSet().intersection(followersList.toSet()).toList();
印刷品(finalList);
}

您可以在for中逐项检查并添加到另一个列表中

 getFinalList() {
    List<User> result = [];
    followingList.forEach((aElement) {
      User value =
          followersList.firstWhere((bElement) => bElement.id == aElement.id, orElse: () => null);
      if (value != null) {
        result.add(value);
      }
    });
    print(result);
  }
getFinalList(){
列表结果=[];
以下列表。forEach((AEElement){
用户价值=
followersList.firstWhere((bElement)=>bElement.id==aElement.id,orElse:()=>null);
if(值!=null){
结果:增加(价值);
}
});
打印(结果);
}

我在未来函数中得到的列表正在运行,但似乎​​未保存在此处:列表如下列表;列表跟随者列表;这段代码是用来获取列表中的公共元素的,但是在调用它之前,你需要确保将来都完成了。我没有看到这一点,现在它可以工作了。谢谢