# #firebase #flutter #google-cloud-firestore
Вопрос:
Мы можем получить ключ в базе данных в реальном времени перед добавлением данных, но в облачном магазине firestore я не смог найти никакого способа найти уникальный ключ перед добавлением данных.
String uniqueKey = ref.push().getKey();
Поэтому я выполняю две операции добавления, а затем обновления .Если я смогу получить уникальный ключ перед добавлением данных в firestore, я смогу выполнить одну операцию, просто добавив уникальный ключ, включенный в документ.
В настоящее время я делаю вот так.
Ссылка на коллекцию
final sitesRef = FirebaseFirestore.instance
.collection('book_mark')
.doc(getUserId())
.collection("link")
.withConverter<SiteModel>(
fromFirestore: (snapshots, _) => SiteModel.fromJson(snapshots.data()!),
toFirestore: (siteModel, _) => siteModel.toJson(),
);
Добавьте документ, затем получите идентификатор документа из ответа, а затем обновите документ с помощью документа Id.So если операция обновления каким-то образом не удалась, я больше не смогу получить доступ к документу. Так что это создаст проблему в будущем.
Future<String> addSiteFireStore(SiteModel siteModel) async {
try {
DocumentReference<SiteModel> response = await sitesRef.add(siteModel);
final Map<String, dynamic> data = <String, dynamic>{};
data['docId'] = response.id;
sitesRef.doc(response.id).update(data);
_logger.fine("Link added successfully");
return "Link added successfully";
} on Exception catch (_) {
_logger.shout("Could not add link.Please try again");
return "Could not add link.Please try again";
}
}
Есть ли какой-нибудь способ получить удостоверение личности заранее?
Заранее спасибо.
Ответ №1:
Вы можете получить ссылку на новый документ без записи, позвонив doc()
(без аргументов) по a CollectionReference
. Затем вы можете получить id
свойство из новой ссылки на документ, аналогично тому, как вы вызываете getKey()
новую ссылку RTDB.
Так:
final newRef = FirebaseFirestore.instance
.collection('book_mark')
.doc();
final newId = newRef.id;
Также смотрите документацию по FlutterFire на CollectionReference.doc()
.