首页 > 解决方案 > 如何在 Dart 中过滤列表

问题描述

我正在从 Firebase 获取我的 DocumentSnapshots,我正在尝试删除用户 ID 匹配但 userList 始终返回 4 条记录的文档。

List<DocumentSnapshot> userList = new List<DocumentSnapshot>();

userList = snapshot.data.documents.map((DocumentSnapshot docSnapshot) {
  //print("ACTUAL USER :: " + docSnapshot.data['userId']);
  if (docSnapshot.data['userId'] != id) {
    return docSnapshot;
  } else {
    print('FOUND IT: ' + id);
    userList.remove(docSnapshot.data);
    //userList.removeWhere((docSnapshot) => 'userId' == id);
  }
}).toList();

print('userList Size: ' + userList.length.toString());

验证有效(“找到它”),但我的测试都无法从文档列表中删除用户。

有人可以建议吗?

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


您正在尝试在List添加元素之前从您的元素中删除它。
具体来说,该map函数将在映射快照后将Lista 分配给您的userList变量。 从您的代码中,我可以看出您实际上并不想执行任何映射,而只想执行过滤

在 Dart 中,您可以使用Iterable.where.
在你的情况下,看起来像这样:

final List<DocumentSnapshot> userList = snapshot.data.documents
      .where((DocumentSnapshot documentSnapshot) => documentSnapshot['userId'] != id).toList();

我假设您只想要没有userIdof 的文档id,否则,您将不得不使用==运算符。

您还可以List.removeWhere通过将所有文档分配给您的userList第一个然后调用来使用removeWhere

final List<DocumentSnapshot> userList = snapshot.data.documents;

userList.removeWhere((DocumentSnapshot documentSnapshot) => documentSnapshot['userId'] != id).toList();

推荐阅读