Итак, я ввожу пользовательский ввод в ФОРМУ.
например поля [_name, _category, documentID]
После отправки формы данные отправляются в Firebase в виде карты, подобной этой;
final dbRefItem = FirebaseFirestore.instance.collection("items");
myMap = {
"name": _name,
"category": _category,
"docReference": //need doc ref here
};
dbRefItem.add(myMap);
Теперь, когда эта карта отправляется в Firestore, ей присваивается случайный идентификатор: я хочу, чтобы этот случайный идентификатор был объединен в поле myMap
at "docReference"
.
Я понимаю, что документ еще не создан, поэтому, возможно, нет способа его исправить. Но тогда, может быть, я смогу решить, какую ссылку я могу отправить myMap
, чтобы я мог сохранить ее в самом поле.
let id = 34234fdsf6hfgf //some random id
final dbRefItem = FirebaseFirestore.instance.collection("items").doc(id); //your id here
myMap = {
"name": _name,
"category": _category,
"docReference": id
};
dbRefItem.set(myMap);
Он сохранит ваш документ с пользовательским идентификатором
Случайные идентификаторы, назначенные Firestore, генерируются в клиентском приложении. Вы можете сгенерировать ссылку со случайным идентификатором, просто вызвав doc() без аргументов.
final docRef = FirebaseFirestore.instance.collection("items").doc();
Затем вы можете поместить id DocumentReference на карту:
myMap = {
"name": _name,
"category": _category,
"docReference": docRef.id
};
Затем напишите документ, используя set():
docRef.set(myMap);
если вы добавите .doc() в docRef, тогда он станет ссылкой на документ, а не на коллекцию. И вы не можете добавить MAP в doc.ref, не указав идентификатор ссылки в операторе «docRef.set». Поэтому, когда я попробовал ваш метод, он говорит: «CollectionReference» не является подтипом типа «DocumentReference»».
Я не добавляю doc() в docRef. Я делаю новую ссылку и назначаю ее docRef. Этот код отлично компилируется для меня. Я предлагаю перепроверить то, что я сделал здесь. Это совсем другое, чем то, с чего вы начали.
Я проверил, не удалось. Холодная загрузка всего приложения, и теперь оно работает! Чертовски гениально! Большое спасибо!
вызвав функцию then() после добавления, вы можете получить идентификатор, потому что идентификатор был создан. вы можете получить доступ к идентификатору по значению и обновить созданный вами документ. введите здесь описание изображения
Добавление .doc() к ссылке на коллекцию делает ее самой ссылкой на документ, поэтому нельзя добавить к ней больше документов, не определив их в dbRefItem.set(myMap); Идентификатор должен быть предоставлен при нажатии каким-либо образом!