Есть ли проблема в этом коде при реализации ListView.builder () - PullRequest
0 голосов
/ 22 февраля 2020

Почему ListView.builder показывает только 2 данные, у меня так много документов в cloud_firestore, и я хочу получить эти данные и показать их в ListView, но в точности происходит то, что неважно, сколько там документов возвращает все документы, но когда я использую ListView.builder, чтобы показать эти данные с помощью виджетов, он показывает только 2 виджета.

 Future<List<DocumentSnapshot>> getData() async {
var firestore = Firestore.instance;
QuerySnapshot qn =
    await firestore.collection("LiveProducts").getDocuments();
return qn.documents;

}

 Widget build(BuildContext context) {
return Container(
    child: FutureBuilder(
        future: getData(),
        builder: (_, AsyncSnapshot<List<DocumentSnapshot>> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Padding(
              padding: const EdgeInsets.only(
                top: 295,
              ),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Center(
                    child: SpinKitCircle(
                      color: Color.fromRGBO(91, 74, 127,10),
                      size: 50.0,
                    ),
                  ),
                ],
              ),
            );
          } else {
            return ListView.builder(
              // title: Text(snapshot.data[index].data["ProductName"]),
              shrinkWrap: true,
              itemCount: snapshot.data.length,
              itemBuilder: (_, index) {
                // if (snapshot.data[index].data["live"] == true) {
                  print(snapshot.data.length);
                    return Container(
                      margin: EdgeInsets.all(15),
                      height: 300,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(20),
                        color: Colors.green,
                      ),
                      child: Center(child: Text('$index'),),
                    );
                // }
              },
            );
          }
        }));

}

Одна ужасная вещь случается, я использую Текстовый Виджет вместо Контейнерного Виджета, это показывает отлично все документы. как это

  return Center(child:Text(snapshot.data[index].data["ProductName"])),

1 Ответ

0 голосов
/ 22 февраля 2020

Попробуйте выполнить следующее:

else if(snapshot.connectionState == ConnectionState.done)  {
            return ListView.builder(
              // title: Text(snapshot.data[index].data["ProductName"]),
              shrinkWrap: true,
              itemCount: snapshot.data.length,
              itemBuilder: (_, index) {
                // if (snapshot.data[index].data["live"] == true) {
                  print(snapshot.data.length);
                    return Container(
                      margin: EdgeInsets.all(15),
                      height: 300,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(20),
                        color: Colors.green,
                      ),
                      child: Center(child: Text('$index'),),
                    );
                // }
              },
            );
          }

done → const ConnectionState

Подключено к завершенному асинхронному вычислению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...