Извлечение единой коллекции документов из flutter

#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’