Dictionary Dart Map.removeWhere不删除与删除条件匹配的所有关键点

Dictionary Dart Map.removeWhere不删除与删除条件匹配的所有关键点,dictionary,flutter,dart,Dictionary,Flutter,Dart,这很奇怪,我使用removeWhere删除映射中的所有空值,但它们都通过了!见鬼 firebaseUploadMap.removeWhere((key, value) => value == null); 这是地图运行后的打印件: {languages: null, latitude: 55.9521138, longitude: -3.196447, houseNum: 1, street: Princes Street, city: Edinburgh, postcode: EH2

这很奇怪,我使用removeWhere删除映射中的所有空值,但它们都通过了!见鬼

firebaseUploadMap.removeWhere((key, value) => value == null);
这是地图运行后的打印件:

{languages: null, latitude: 55.9521138, longitude: -3.196447, houseNum: 1, street: Princes Street, city: Edinburgh, postcode: EH2 2EQ, country: GB, toolsInPossession: null, jobsPropositioned: null, jobsCompleted: null, jobTypesLiked: null, jobsShared: null, jobRatings: null, signUpDate: Timestamp(seconds=1586989986, nanoseconds=301779000)}
很多空值仍然存在。这与变量类型有关吗?语言是一个列表,我的空清除程序缺少它。jobRatings是一个布尔值且为null,Dart不能将其识别为null吗

我尝试复制地图,在原始地图中迭代关键点,并在副本中删除它们,但输出与Dart的.removeWhere匹配


我如何解决这个问题

啊,好的。“对不起,各位注意了,”詹姆斯德林告诉我答案。在尝试提供一个完全可复制的示例时,我发现当我将Person对象转换为map时,出于某种原因,我决定该对象的所有字段都应设置为字符串,因此语言:String(value)。所以我将null改为null,改为“null”类型的字符串。因此,我无法移除它们

我已经纠正了这一点,将键映射到原始数据类型,并移除了现在可以完全工作的地方。我假设我的Firebase数据库将自动将Dart列表转换为其数组数据类型,因此教训是:如果要删除可空的条目,请不要将可空字段转换为字符串


再次抱歉浪费了folk的时间,很高兴解决了这个问题。

我无法重现这个问题。我将每种数据类型中的一种分配给一个映射,然后运行
remove where
null函数,它删除了映射的所有元素。请发布一个最小的、完整的、可复制的示例。我猜您正在打印
映射的一些副本,而不是您正在修改的。请尝试记录映射['languages]。runtimeType(当其为null时)它会输出什么?谢谢@jamesdlin,这样做让我找到了答案。我感谢你花时间在WCS424上,至少我已经学会了StackOverflow的最佳实践。是的,它很可能有输出字符串。非常明智的侦查方法,谢谢。