Firestore最近添加了新的新方法FieldValue.arrayUnion(value)和FieldValue.arrayRemove(value),但我在flutter cloud_firestore包中找不到实现。有什么办法可以达到这个结果?
Firestore addUpdate:https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array
答案 0 :(得分:2)
更新: 现在看来,它受到支持!带有版本0.8.0。
https://pub.dartlang.org/packages/cloud_firestore
然后使用FieldValue.arrayUnion和FieldVale.arrayRemove。
目前似乎没有办法。请遵循以下两个github问题:
https://github.com/flutter/flutter/issues/21148 https://github.com/flutter/flutter/issues/20688
答案 1 :(得分:2)
这是显示如何更新数组值的简单示例。我的文档有一个向上的投票者数组,可以添加对该文档具有投票的用户ID。
配置Firestore,可以从您的 google-services.json 文件
复制配置详细信息 final FirebaseApp app = await FirebaseApp.configure(
name: 'test',
options: const FirebaseOptions(
projectID: 'projid',
googleAppID: 'appid',
apiKey: 'api',
databaseURL: 'your url',
),
);
final Firestore firestore = Firestore(app: app);
await firestore.settings(timestampsInSnapshotsEnabled: true);
使用交易更新代码
fireStore.runTransaction((Transaction tx) async {
DocumentSnapshot snapshot =
await tx.get(widget._document.reference);
var doc = snapshot.data;
if (doc['upvoters'].contains('12345')) {
await tx.update(snapshot.reference, <String, dynamic>{
'upvoters': FieldValue.arrayRemove(['12345'])
});
} else {
await tx.update(snapshot.reference, <String, dynamic>{
'upvoters': FieldValue.arrayUnion(['12345'])
});
}
});
希望有帮助