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().