# #firebase #flutter
Вопрос:
У меня возникли проблемы с отображением данных с Firebase. Вот код, который я использовал в своем FutureBuilder. Похоже, что есть ошибка в отношении данных (), но я не знаю, какая именно, у кого-нибудь есть какие-либо идеи?
Вот что я получаю : «Метод» данные «не определен для типа «Объект». Попробуйте исправить имя на имя существующего метода или определить метод с именем»данные».»
if(snapshot.connectionState == ConnectionState.done) {
Map<String, dynamic> documentData = snapshot.data!.data() as Map<String, dynamic>;
return ListView(
children: [
CustomSubtitle(
text: "${documentData['01 - Brand']}"
),
CustomTitle(
text: "${documentData['02 - Name']}",
),
CustomText(
text: "${documentData['04 - Description']}",
)
],
);
}
Комментарии:
1. ` Сопоставление<Строка, динамическая> documentData = снимок. данные в виде карты<Строка, динамическая>;`
2. Пожалуйста.
3. Ой… Мой код сейчас в порядке, но когда я запускаю приложение, у меня появляется ошибка «тип» _JsonDocumentSnapshot «не является подтипом типа» Карта<Строка, динамическая> в приведении типа». У тебя есть идея ?
4. да, я несколько раз перечитывал ваш код r и понял, что вы должны изменить свое условие if на if(snapshot.hasData amp;amp; !(snapshot.hasError)) {…}. Я предполагаю, что эта функция является частью конструктора в виджете FutureBuilder.
5. Да, спасибо, я нашел решение. Спасибо за ваше время и вашу помощь !
Ответ №1:
Вы используете код для a QuerySnapshot
. Для такого кода ваш код будет работать, но с учетом того, как вы используете полученные данные, вы получили DocumentSnapshot
. Чтобы это сработало, просто измените свой код на этот:
if(snapshot.connectionState == ConnectionState.done) {
Map<String, dynamic> documentData = snapshot.data as Map<String, dynamic>;
return ListView(
children: [
CustomSubtitle(
text: "${documentData['01 - Brand']}"
),
CustomTitle(
text: "${documentData['02 - Name']}",
),
CustomText(
text: "${documentData['04 - Description']}",
)
],
);
}
Комментарии:
1. Спасибо!! На самом деле, это работа, когда я удаляю () после данных 🙂
Ответ №2:
Если кто-то в моем случае, я нашел решение :
builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if(snapshot.connectionState == ConnectionState.done) {
DocumentSnapshot<Object?> documentData = snapshot.data!;
return ListView(
children: [
CustomSubtitle(
text: "${documentData['01 - Brand']}"
),
CustomTitle(
text: "${documentData['02 - Name']}",
),
CustomText(
text: "${documentData['04 - Description']}",
)
],
);
}
}