Метод «данные» не определен для типа «Объект». Попробуйте исправить имя на имя существующего метода или определить метод с именем «данные»

# #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']}",
           )

         ],
       );
     }
}