Firestore 离线持久化 flutter docId
Firestore offline persistence flutter docId
我有一个使用 firestore 的应用程序,当用户单击一个按钮时,我添加了一个文档,在创建文档后,我还在一个字段中添加了它的 documentId,这是一个由 firestore 生成的字母数字字符串。我的问题是,如果用户在没有互联网的情况下单击按钮,然后关闭应用程序并通过互联网连接打开它,文档将被创建,但当然它里面的 Id 是空的,因为程序停止执行。有什么方法可以坚持吗?
例如
DocumentReference documentReference =
await FirebaseFirestore.instance.collection('sth').add(map); //map has a 'docId' key
await FirebaseFirestore.instance
.collection('sth')
.doc('${documentReference.id}')
.update({'docId': documentReference.id});
update one没有离线持久化,请问有什么办法吗?
正如 Dima 评论的那样,您可以通过首先生成 ID,然后才将数据及其 ID 写入文档来解决此问题。
要在不写入的情况下生成文档 ID,您可以 call doc()
on the CollectionReference
without an argument。
DocumentReference documentReference =
FirebaseFirestore.instance.collection('sth').doc();
map["docId"] = documentReference.id;
FirebaseFirestore.instance
.collection('sth')
.doc('${documentReference.id}')
.set(map);
现在第一行是一个纯客户端操作,还没有任何数据被写入数据库 - 所以你最终得到一个单一的原子写入/set()
.
我有一个使用 firestore 的应用程序,当用户单击一个按钮时,我添加了一个文档,在创建文档后,我还在一个字段中添加了它的 documentId,这是一个由 firestore 生成的字母数字字符串。我的问题是,如果用户在没有互联网的情况下单击按钮,然后关闭应用程序并通过互联网连接打开它,文档将被创建,但当然它里面的 Id 是空的,因为程序停止执行。有什么方法可以坚持吗?
例如
DocumentReference documentReference =
await FirebaseFirestore.instance.collection('sth').add(map); //map has a 'docId' key
await FirebaseFirestore.instance
.collection('sth')
.doc('${documentReference.id}')
.update({'docId': documentReference.id});
update one没有离线持久化,请问有什么办法吗?
正如 Dima 评论的那样,您可以通过首先生成 ID,然后才将数据及其 ID 写入文档来解决此问题。
要在不写入的情况下生成文档 ID,您可以 call doc()
on the CollectionReference
without an argument。
DocumentReference documentReference =
FirebaseFirestore.instance.collection('sth').doc();
map["docId"] = documentReference.id;
FirebaseFirestore.instance
.collection('sth')
.doc('${documentReference.id}')
.set(map);
现在第一行是一个纯客户端操作,还没有任何数据被写入数据库 - 所以你最终得到一个单一的原子写入/set()
.