Как исправить itemCount, чтобы получить данные из пожарного магазина в виде списка - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть Listview.builder, который содержит данные из массива в Firestore, который является массивом во вложенной коллекции данных моей структуры. Вот так Но когда показывать этот массив в Listview, он показывает только первый, а это 0. Мне нужно получить все данные в массиве в виде списка. Как я могу исправить itemCount, чтобы получить все данные?

Collcetion 
-Institute
--document
---PI3naj7N7GgwlDSjK3rV0Twiu2S2
----subCollcetion 
------Ravs 
-------documentsubCollcetion 
English 
field
Ravs name :English 

item array 
0 
Contains Data Map 
1
Contains Data Map
2
Contains Data Map
.
.
.
.

это моя функция

 StreamBuilder(
          stream:Firestore.instance.collection("Institute").document(
              'PI3naj7N7GgwlDSjK3rV0Twiu2S2').collection("Ravs")
              .where('Ravs name',isEqualTo:'English ' ).snapshots() ,
          builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {

            if (snapshot.hasError) return Container(
              alignment: Alignment.center,
              child: Text(
                'it has error ',
                style: TextStyle(fontSize: 12),),


            );
            return snapshot.hasData

                ? Scaffold(
              appBar: new AppBar(backgroundColor: Colors.brown[600],),
              body:Card(
             child:ListView.builder(
              itemCount:snapshot.data.documents.length,

              itemBuilder: (_,index){
                  DocumentSnapshot ds =snapshot.data.documents[index];
                return Directionality(
                   textDirection: TextDirection.rtl,
                   child:Card(
                    child:InkWell(
                    onTap: (){

                },
                   child:Column(
                      children: <Widget>[
                         new Container(
                          padding: const EdgeInsets.only(top: 10),
                           width: 500,
                          decoration: BoxDecoration(
                            borderRadius: BorderRadius.all(Radius.circular(150)),

                          ),
                         alignment: Alignment.topCenter,
                        child:
 FadeInImage.assetNetwork(fit: 
BoxFit.fill,placeholder:
 'assets/images/image.jpg', 
image: ds.data['item'][index]['Iamge path']),

                         ),

                        new Container(
                            padding: const EdgeInsets.all(10.0),
                            alignment: Alignment.topRight,
                            child: Column(
                              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                Text(" name Rav:${ds.data['item'][index]['Ravs_name'] }",textDirection: TextDirection.rtl, style: Theme.of(context).textTheme.title),
                                Text("Date:${ds.data['item'][index]['Rav_Date']} ",textAlign: TextAlign.right, style: TextStyle(color: Colors.black.withOpacity(0.5))),
                              ],
                            )
                        )    
                         ],

                   )
                )
                   )
                );

              }

            ),
              )
            ) : Center(child: CircularProgressIndicator(),);
          },

        );

1 Ответ

0 голосов
/ 28 апреля 2020

Представляется, что у этой структуры есть коллекция в коллекции, что невозможно. Однако, так как это возможно для запуска вашего кода, я предполагаю, что в структуре Ravs есть вложенная коллекция документов, которые имеют поле Rav name.

Таким образом, код создает запрос с .where('Ravs name',isEqualTo:'English '), это создает моментальный снимок документов, который, как я считаю, содержит только один документ. Итак, следующее утверждение:

itemCount:snapshot.data.documents.length

равно 1, и именно поэтому вы получаете одну итерацию в вашем itemBuilder.

У меня нет шансов протестируйте его, но я думаю, что решение должно быть:

  1. изменить itemCount:snapshot.data.documents[0].data['item'].length - или что-то в этом роде - чтобы дать вам правильное количество элементов для итерации.

  2. Первая строка itemBuilder должна быть установлена ​​на: DocumentSnapshot ds =snapshot.data.documents[0]; Это потому, что вы хотите перебирать массив только в одном документе.

Если это не работает Сразу надо поиграть с этим ... Я основываю это на том факте, что то, что ты представил, можно запустить:).

Надеюсь, это поможет!

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