在新的 FlutterFire API 中使用 setData 和 merge: true
Posted
技术标签:
【中文标题】在新的 FlutterFire API 中使用 setData 和 merge: true【英文标题】:Using setData with merge: true in the new FlutterFire API 【发布时间】:2020-12-29 04:31:03 【问题描述】:我正在使用新的 FlutterFire API 更新我的旧 Flutter 代码。我在我的一个函数中使用setData
和merge: true
来更新一些保存在地图中的文档字段。我确实将setData
更改为set
,但我收到新的FlutterFire 插件错误,即未定义“合并”。我在迁移文档中发现
setData/set 现在支持 SetOptions 来合并数据/字段(以前这个接受 Map)
文档参考还说:
/// If [SetOptions] are provided, the data will be merged into an existing
/// document instead of overwriting.
Future<void> set(Map<String, dynamic> data, [SetOptions options])
assert(data != null);
return _delegate.set(
_CodecUtility.replaceValueWithDelegatesInMap(data), options);
在我的原始代码中,我将新值保存在名为 changedvalues
的 Map<String, dynamic>
中,然后我使用 setData(changedValues, merge:true)
那么,我如何提供 SetOptions 以确保合并为真,并且文档中仅更新 changedValues 中的字段?
【问题讨论】:
据我所知,您现在使用的API documentation for set() 表明它接受Map<String, dynamic>
作为第一个参数。您在使用它时遇到的具体问题是什么?请编辑问题以显示您正在使用的代码以及您看到的具体错误。
你试过什么?是什么阻止你这样做?
我刚刚编辑了问题。
这看起来就像你的旧代码。您发布了新文档,因此您知道它不再有效。您在提供新的SetOptions
时尝试了什么?
您拥有向您展示要提供什么的文档。没有必要弥补任何东西。编程不是猜谜游戏。我建议先尝试一下。 linter 会在出现问题时告诉您,因此甚至不需要构建来查找您是否做对了。
【参考方案1】:
您必须执行以下操作:
set("name" : "akbarB", SetOptions(merge : true))
【讨论】:
我用它来获得 FirebaseFirestore 文档的“附加”功能。清晰,简短,完成工作 +1 这怎么还没在文档中。难以置信以上是关于在新的 FlutterFire API 中使用 setData 和 merge: true的主要内容,如果未能解决你的问题,请参考以下文章
如何在新的 ActivityResult API (1.3.0-alpha05) 中获取权限请求?