#flutter #google-cloud-firestore
#flutter #google-облако-firestore
Вопрос:
Я пытаюсь добавить свои данные в текстовое поле формы, которое затем сохраняется в firestore, включая documentId. По какой-то причине данные возвращаются как null или «». Ниже приведен мой код:
final barcode = TextEditingController();
final price = TextEditingController();
final stock = TextEditingController();
final color = TextEditingController();
addData() {
Map<String, dynamic> theData = {
"Color" : color.text,
"Price" : price.text,
"Stock" : stock.text,
};
CollectionReference collectionReference = Firestore.instance.collection("products");
FirebaseFirestore.instance.collection("products").doc(barcode.text).set(theData);
collectionReference.add(theData);
}
Я пытался сделать его асинхронным, но все равно ничего, я хочу, чтобы данные устанавливались при нажатии кнопки «Готово», которая имеет метод onpressed, вызывающий addData.
Это мои данные в firestore, когда я устанавливаю только данные, а не идентификатор:
Комментарии:
1. Можете ли вы поделиться кодом, в котором вы вызываете метод addData() ?
Ответ №1:
Вы должны использовать await
addData() async { // ASYNC HERE
Map<String, dynamic> theData = {
"Color" : color.text,
"Price" : price.text,
"Stock" : stock.text,
};
CollectionReference collectionReference = Firestore.instance.collection("products");
await collectionReference.doc(barcode.text).set(theData, merge:true); // AWAIT HERE
или
CollectionReference collectionReference = Firestore.instance.collection("products");
await collectionReference.doc(barcode.text).updateData(theData); // AWAIT HERE
}
Также не уверен, почему вы оба устанавливаете и добавляете данные? Используйте updateData()
или set()
с merge:true
помощью . Документ будет создан в любом случае
Комментарии:
1. Я получаю следующую ошибку, может быть, мне нужно отложить ее на будущее? : Ожидалось значение типа ‘(() => void)?’, но получил значение типа ‘ Future<dynamic>’