使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore
Posted
技术标签:
【中文标题】使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore【英文标题】:FieldValue arrayUnion and Cloud FireStore with Flutter 【发布时间】:2019-02-19 07:31:14 【问题描述】:我有这样的云火存储对象
"TestCollection" : ["Test1","Test"]
现在我想用 FieldValue.arrayUnion 更新这个数组 因为如果元素相同,那么我不想做任何事情,但如果不是,那么我想添加元素
docRef.updateData("TestCollection":FieldValue.arrayUnion(["test"]))
但是这个语句给出了对象不能有嵌套数组的错误
任何人都可以请帮助或提供相同类型的示例来查找语法吗?
【问题讨论】:
我也有同样的问题... 【参考方案1】:2021 年新的 FlutterFire 更新
有了最新的 FlutterFire 更新,API 有很多更新,但幸运的是它并没有因为这个问题而发生太大变化。我说的是最新的 Firebase for Flutter 插件,特别是与新的 firebase_core ^0.7.0 兼容的每个插件。 所以代码看起来很相似:
FirebaseFirestore.instance
.collection("YourCollection")
.doc("YourDocument")
.update(
"anArray": FieldValue.arrayUnion(["data", "to", "append"])
);
【讨论】:
【参考方案2】:这是我使用的代码,它就像一个魅力!
_firestore
.collection('x')
.document('xxxxxxxxxx')
.updateData(
'comments': FieldValue.arrayUnion([
'comment': "comment goes here", 'sender': "xxxxxxxx@gmail.com"
])
);
【讨论】:
【参考方案3】:跟进现有答案,如果该字段不存在,您可以使用集合和合并。这样可以避免您检查该字段是否存在。
Firestore.instance
.collection('YourCollection')
.document('YourDocument')
.setData(
'array':FieldValue.arrayUnion(['data1','data2','data3'])
, merge: true);
【讨论】:
【参考方案4】:如果您有对象列表,则另一种方式
Future<void> updateUserNewGroup(List<Group> data , String id)
List<Map> list=new List();
if(data !=null && data.isNotEmpty)
data.forEach((grp)
list.add(grp.toJson());
);
return ref.document(id).updateData("groups": FieldValue.arrayUnion(list)) ;
【讨论】:
【参考方案5】:我找到了解决办法。 试试这个:
Firestore.instance
.collection('YourCollection')
.document('YourDocument')
.updateData('array':FieldValue.arrayUnion(['data1','data2','data3']));
如果仍然无法正常工作,请尝试更新您的 Firebase。
首先打开一个提取到你的flutter项目的终端,然后:
cd ios
pod update Firebase
此解决方案仅适用于 mac 用户。
【讨论】:
以上是关于使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 中 Cloud Firestore 的 FieldValue.increment
使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore
jQuery form插件的使用--使用 fieldValue 方法校验表单
如何使用flutter-web将时间戳存储在firestore中