在新的 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 代码。我在我的一个函数中使用setDatamerge: 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);
  

在我的原始代码中,我将新值保存在名为 changedvaluesMap&lt;String, dynamic&gt; 中,然后我使用 setData(changedValues, merge:true)

那么,我如何提供 SetOptions 以确保合并为真,并且文档中仅更新 changedValues 中的字段?

【问题讨论】:

据我所知,您现在使用的API documentation for set() 表明它接受Map&lt;String, dynamic&gt; 作为第一个参数。您在使用它时遇到的具体问题是什么?请编辑问题以显示您正在使用的代码以及您看到的具体错误。 你试过什么?是什么阻止你这样做? 我刚刚编辑了问题。 这看起来就像你的旧代码。您发布了新文档,因此您知道它不再有效。您在提供新的SetOptions 时尝试了什么? 您拥有向您展示要提供什么的文档。没有必要弥补任何东西。编程不是猜谜游戏。我建议先尝试一下。 linter 会在出现问题时告诉您,因此甚至不需要构建来查找您是否做对了。 【参考方案1】:

您必须执行以下操作:

set("name" : "akbarB", SetOptions(merge : true))

【讨论】:

我用它来获得 FirebaseFirestore 文档的“附加”功能。清晰,简短,完成工作 +1 这怎么还没在文档中。难以置信

以上是关于在新的 FlutterFire API 中使用 setData 和 merge: true的主要内容,如果未能解决你的问题,请参考以下文章

在新的 Gmail API 中批量提取电子邮件

如何在新的 ActivityResult API (1.3.0-alpha05) 中获取权限请求?

.NET WEB API 使用 FTP 在新的浏览器选项卡中打开图像文件

如何在新的谷歌控制台中启用谷歌地图 API v2

无法在新的 FB 图 API (2.5) 上获得喜欢的类别

通过 Gmail REST API 发送的电子邮件/草稿无法在新的 Gmail 用户界面中打开