У меня есть приложение, которое использует firestore, когда пользователь нажимает кнопку, я добавляю документ, в котором после его создания я также добавляю его documentId в поле, которое представляет собой буквенно-цифровую строку, сгенерированную firestore. Моя проблема в том, что если пользователь нажимает кнопку без Интернета, затем закрывает приложение и открывает его с подключением к Интернету, создается документ, но, конечно, его идентификатор внутри него равен нулю, поскольку программа перестала выполняться. Есть ли способ сохранить это?

Например

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});

У обновления нет автономной постоянства, есть ли способ обойти это?

0
user14624595 21 Янв 2021 в 16:22

1 ответ

Лучший ответ

Как прокомментировал Дима, вы можете решить эту проблему, сначала сгенерировав идентификатор, а только потом написав документ с данными и его идентификатором.

Чтобы сгенерировать идентификатор документа без записи в него, вы можете вызвать {{X0 }} на CollectionReference без аргумента.

DocumentReference documentReference =
     FirebaseFirestore.instance.collection('sth').doc();

map["docId"] = documentReference.id;

FirebaseFirestore.instance
  .collection('sth')
  .doc('${documentReference.id}')
  .set(map);

Теперь первая строка - это чистая операция на стороне клиента, без записи каких-либо данных в базу данных - так что в итоге вы получаете одну атомарную запись / set().

0
Frank van Puffelen 28 Янв 2021 в 15:28