Flutter/Dart中Firestore用update设置浮点类型Map键的方法
解决Firestore update方法自动转换浮点格式键为整数的问题
在Flutter/Dart中操作Firestore时,使用update方法设置浮点格式的字符串键(如"40.0"、"40.5"),会被自动转换为整数键(如"40"、"5"),但set方法能保留原浮点格式的键。这是因为Firestore的Dart SDK对update的字段键做了自动类型解析,会将可转换为整数的浮点数字符串转为整数键,而set方法直接保留字符串形式的键。
解决方案:用set方法配合merge: true模拟update效果
如果需要保留浮点格式的键,同时实现update的字段合并效果(不覆盖文档中其他字段),可以使用set方法并传入SetOptions(merge: true):
final testRef = FirebaseFirestore.instance.collection("test").doc("test"); await testRef.set( { "40.0": {"aaa": "aaa", "bbb": "bbb"}, "40.5": {"ccc": "ccc", "ddd": "ddd"}, }, SetOptions(merge: true), );
这样操作后,文档中的键会保留"40.0"、"40.5"的浮点格式,同时不会覆盖文档中已有的其他字段,和update方法的合并逻辑一致。
原问题代码对比
- 原
update代码(会转换键为整数):
await testRef.update( { "40.0": {"aaa": "aaa", "bbb": "bbb"}, "40.5": {"ccc": "ccc", "ddd": "ddd"}, } );
输出结果:
{"40": {"aaa": "aaa", "bbb": "bbb"}, "5": {"ccc": "ccc", "ddd": "ddd"}}
- 使用
set(merge: true)后的输出(保留浮点键):
{"40.0": {"aaa": "aaa", "bbb": "bbb"}, "40.5": {"ccc": "ccc", "ddd": "ddd"}}
内容的提问来源于stack exchange,提问作者24k
相关产品推荐
相关产品推荐

