firebase - 如何在 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());
验证有效(“找到它”),但我的测试都无法从文档列表中删除用户。
有人可以建议吗?
解决方案
您正在尝试在List
添加元素之前从您的元素中删除它。
具体来说,该map
函数将在映射快照后将List
a 分配给您的userList
变量。
从您的代码中,我可以看出您实际上并不想执行任何映射,而只想执行过滤。
在 Dart 中,您可以使用Iterable.where
.
在你的情况下,看起来像这样:
final List<DocumentSnapshot> userList = snapshot.data.documents
.where((DocumentSnapshot documentSnapshot) => documentSnapshot['userId'] != id).toList();
我假设您只想要没有userId
of 的文档id
,否则,您将不得不使用==
运算符。
您还可以List.removeWhere
通过将所有文档分配给您的userList
第一个然后调用来使用removeWhere
:
final List<DocumentSnapshot> userList = snapshot.data.documents;
userList.removeWhere((DocumentSnapshot documentSnapshot) => documentSnapshot['userId'] != id).toList();
推荐阅读
- android - Flutter中如何将“Navigator.pushNamed”的过渡动画改为cupertino风格
- reactjs - 如何使用帮助文本隐藏反应原生的错误文本
- sql - 在 PostgreSQL 中使用开始日期跟踪用户状态
- javascript - 如何使用 apify sdk 使 puppeteer 无头运行?
- c# - 写入 Xamarin 预填充数据库
- c# - 如果 http 内容是二进制文件,Azure 函数不接受带有拉丁字符的标头
- c# - 如何在 ActiveReports 的 SubReport 中绘制矩形?
- python - 如何在 anaconda 下的 Mac 上安装 pandas 1.1.0 并通过 conda 挂在“解决环境”上
- javascript - Typescript 通过带有类型检查的构造函数传递字段
- ios - Xcode 12.0.1 屏幕截图仅在 iOS 模拟器上捕获主屏幕