Тип аргумента List ‹CommentData› не может быть назначен типу параметра List ‹Widget›.

Я пытаюсь создать список с данными, запрошенными из firebase. Но у меня возникает ошибка «Тип аргумента« List ‹CommentData› »не может быть назначен типу параметра« List ‹Widget› ». Код выглядит следующим образом

    Widget buildComments() {
    if (this.didFetchComments == false) {
      return FutureBuilder<List<CommentData>>(
          future: commentService.getComments(),
          builder: (context, snapshot) {
            if (!snapshot.hasData)
              return Container(
                  alignment: FractionalOffset.center,
                  child: CircularProgressIndicator());

            this.didFetchComments = true;
            this.fetchedComments = snapshot.data;
            return ListView(
              children: snapshot.data,  // where i'm having error
            );
          });
    } else {
      return ListView(children: this.fetchedComments); 
    }
  }

Как я могу обойти это ..


person Febin Johnson    schedule 09.04.2021    source источник


Ответы (3)


ListView ожидает List<Widgets>, но вы проходите List<CommentData>

Вы можете изменить свой ListView на следующее, чтобы исправить ошибку.

ListView.builder(
  itemCount: snapshot.data.length,
  itemBuilder: (context, index) {
    return Text(snapshot.data[index]['key']); //Any widget you want to use.
    },

);
person Nishuthan S    schedule 09.04.2021

Ошибка говорит сама за себя

Тип аргумента "List<CommentData>" не может быть назначен типу параметра "List<Widget>"

Если вы хотите создать виджет List Text для отображения комментариев, вы можете использовать

return ListView.builder(
  itemCount: snapshot.data.length,
  itemBuilder: (context, index) => Text(snapshot.data[index].*), //What ever you want to show in from your model
);
person ToraCode    schedule 09.04.2021

snapshot.data возвращает List<CommentData>, в то время как дочерним элементам ListView требуется список виджетов, поэтому вы получаете эту ошибку.

Попробуйте изменить

return ListView(
   children: snapshot.data,
);

что-то вроде:

return ListView(
   children: Text(snapshot.data[index].userName), //change userName to whatever field of CommentData class you want to show
);

Я бы рекомендовал использовать ListView.Builder для работы со списками и индексами.

person Jimmy    schedule 09.04.2021