# #firebase #flutter #dart #google-cloud-firestore #flutter-web
Вопрос:
Я разрабатываю веб-приложение с помощью flutter, используя Firebase cloud firestore.
Я хочу получить значения из firestore, но возникает ошибка, и я не могу их получить.
Ошибка;
Ожидалось значение типа » Карта<Строка, динамическая>», но получено значение типа » () =<Строка, динамическая>> Карта<Строка, динамическая>><Строка, динамическая>?»
Код;
Future<String> getData(String collection, String field) async {
DocumentSnapshot docSnapshot =
await FirebaseFirestore.instance.collection(collection).doc().get();
Map<String, dynamic> record = docSnapshot.data as Map<String, dynamic>;
return record[field];
}
FutureBuilder(
future: getData("users", "userName"),
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return const SizedBox(
width: 50,
child: LinearProgressIndicator(),
);
}
if (snapshot.hasError) {
return SelectableText(snapshot.error.toString());
}
if (!snapshot.hasData) {
return const Text('No data found');
}
return Text('${snapshot.data}');
},
)
Этот код является FutureBuilder, который вызывает getData()
и выводит на экран заявление об ошибке при возникновении ошибки.
После небольшого исследования я нашел способ избавиться от ошибки таким образом. код, подобный этому;
Map<String,dynamic> record = new Map<String,dynamic>.from(docSnapshot.data["songs"]);
Однако это грамматически неверно и приведет к ошибке компиляции.
Firestore, похоже, сильно изменился с 2019 года по настоящее время, не в этом ли причина?
docSnapshot.data["songs"]
Это не относится к DocumentSnapshot
.
Кто-нибудь может устранить эту ошибку? Спасибо.
Дополнение 1;
Я изменил код, но произошла другая аналогичная ошибка. Первая ошибка устранена.
Map<String, dynamic> record = docSnapshot.data() as Map<String, dynamic>;
Ожидалось значение типа » Карта<Строка, динамическая>», но получено значение типа
«Ноль»
Firestore подтвердил, что данные «Имя пользователя» были введены правильно.
Ответ №1:
Я считаю DocumentSnapshot.data
, что это метод, поэтому вам следует изменить его на: DocumentSnapshot.data()
Комментарии:
1. Так и должно быть
docSnapshot.data.data()
.2. Спасибо за ваш ответ, я изменил код, но произошла другая ошибка. Я отредактировал вопрос.
3. @Mudassir Привет, где их написать? В моем окружении,
data
конечноdocSnapshot
, нетdata()
метода.4. Хорошо, я считаю, что происходит вот что:
FirebaseFirestore.instance.collection(collection).doc()
получитеcollection
коллекцию и создайте в ней новый документ, после этого вы получите документ и попытаетесь получить его данные, которые пусты, поэтому data() возвращает значение null.5. Почему я получаю пустые данные? Изображение, о котором идет речь, показывает, что у него есть поле в документе uid. Если у вас есть время, пожалуйста.