#firebase #flutter #dart #google-cloud-firestore
# #firebase #flutter #dart #google-облако-firestore
Вопрос:
Find_Document (coll_name,search_val,return_fld) {
var returnval;
var db = FirebaseFirestore.instance.collection(coll_name);
var rec = db.doc(search_val).get().then((value) {
returnval = value.data()[return_fld];
print(returnval);
return returnval;
});
}
когда я привязываюсь к использованию этой функции, я получаю нулевой возврат. Если я использую async
и await
, то его возвращаемый тип ошибки 'Future<dynamic>'
не является подтипом типа ‘String’
Ответ №1:
То, что вы описываете, является ожидаемым поведением. get()
возвращает future, который будет асинхронно предоставлять запрошенный документ. Невозможно заставить его блокировать или возвращать немедленно — вы действительно должны использовать для этого async / await или обрабатывать результаты при then
обратном вызове.
Комментарии:
1. Не могли бы вы перефразировать этот код? я хочу использовать это динамически в нескольких местах, чтобы получить определенное значение поля
2. Я говорю, что вы должны использовать async / await, поскольку вы обнаружили, что это уже работает. Вы также должны объявить функцию асинхронной, чтобы она могла асинхронно возвращать данные вызывающей стороне. Это довольно стандартная практика.
3. Спасибо за ваш ответ и пациентов.. я сделал это Find_Document (имя_таблицы, search_val,return_fld) асинхронно { var returnval; var db = ожидание FirebaseFirestore.instance.collection(имя_таблицы); var rec = db.doc (search_val).get().then((значение) { returnval = value.data()[return_fld]; вывести(returnval); return returnval; }); } Но я получаю сообщение об ошибке типа ‘Future<dynamic>’ не является подтипом типа ‘String’