Рендеринг виджетов на flutter из ListView.builder условно

#firebase #flutter #dart #google-cloud-firestore

# #firebase #flutter #dart #google-облако-firestore

Вопрос:

Мое приложение электронной коммерции flutter подключено к серверной части облачного Firestore. У меня есть cart коллекция, в которой есть несколько документов с заголовком, products который добавляет пользователь. У каждого продукта есть поле order_status , которое может in_cart checked_out иметь значение или. Теперь я хочу отобразить их на экране моей корзины и проверить экран на основе значения order_status . Я использую ListView. Builder approach, но, поскольку есть itemCount , я не могу отображать определенные документы из той же коллекции. Как правильно это сделать? Должен ли я хранить продукты в двух коллекциях?

Код:

 ListView.builder(
                  scrollDirection: Axis.vertical,
                  shrinkWrap: true,
                  itemCount: snapshot.data.length,
                  itemBuilder: (_, index) {
                    if (snapshot.data[index]['order_status'] == 'in_cart') {
                      _total = _total   snapshot.data[index]['total'];
                      return Container(
                        padding: EdgeInsets.only(bottom: 12.5),
                        child: Column(
                          children: [
                            Container(
                              height: (MediaQuery.of(context).size.height) / 7,
                              width: MediaQuery.of(context).size.width,
                              child: Container(
                                height: 105,
                                width: 85,
                                child: DecoratedBox(
                                  decoration: BoxDecoration(
                                    color: Colors.black12,
                                  ),
                                  child: Container(
                                    padding: EdgeInsets.all(10.0),
                                    child: Row(
                                      mainAxisAlignment:
                                          MainAxisAlignment.spaceBetween,
                                      crossAxisAlignment:
                                          CrossAxisAlignment.center,
                                      children: [
                                        SizedBox(
                                          width: 12.0,
                                        ),
                                        IconButton(
                                          icon: Image.network(
                                             ),
                                          iconSize: 75.0,
                                          onPressed: () {},
                                        ),
                                        SizedBox(
                                          width: 30.0,
                                        ),
                                        Column(
                                          children: [
                                            Text(
                                              snapshot.data[index]['title'],
                                              style: kHeading1.copyWith(
                                                  fontSize: 22.5),
                                            ),
                                            SizedBox(
                                              height: 5.0,
                                            ),
                                            Text(
                                              'Rs.'  
                                                  snapshot.data[index]['price']
                                                      .toString()  
                                                  '/'  
                                                  snapshot.data[index]
                                                      ['product_unit'],
                                              style: kTitle1,
                                            ),
                                            SizedBox(
                                              height: 5.0,
                                            ),
                                            Text(
                                              'Total Rs.'  
                                                  snapshot.data[index]['total']
                                                      .toString(),
                                              style: kTitle1,
                                            ),
                                          ],
                                        ),
                                        SizedBox(
                                          width: 20.0,
                                        ),
                                        Row(
                                          children: [
                                            IconButton(
                                                icon: Icon(
                                                  Icons.keyboard_arrow_up,
                                                  color: Colors.black,
                                                ),
                                                onPressed: () {
                                                  increaseCart(
                                                      snapshot.data[index]
                                                          ['title'],
                                                      snapshot.data[index]
                                                          ['unit'],
                                                      snapshot.data[index]
                                                          ['price']);
                                                }),
                                            Text(
                                              snapshot.data[index]['unit']
                                                  .toString(),
                                              style: kHeading2,
                                            ),
                                            IconButton(
                                                icon: Icon(
                                                    Icons.keyboard_arrow_down,
                                                    color: Colors.black),
                                                onPressed: () {
                                                  decreaseCart(
                                                      snapshot.data[index]
                                                          ['title'],
                                                      snapshot.data[index]
                                                          ['unit'],
                                                      snapshot.data[index]
                                                          ['price']);
                                                }),
                                          ],
                                        ),
                                      ],
                                    ),
                                  ),
                                ),
                              ),
                            ),
                          ],
                        ),
                      );
                    } else {
                      return null;
                    }
                  }),
 

FirestoreFirestore

Комментарии:

1. Можете ли вы подробно описать, что вы подразумеваете под «Я использую подход ListView.Builder, но поскольку есть количество элементов, я не могу отображать определенные документы из той же коллекции».? Я не понимаю конкретной проблемы, с которой вы столкнулись.

2. Я работал почти над точно таким же сценарием. Нашли ли вы подходящее решение?

3. На случай, если кому-то это нужно, у меня есть решение. Это старый пост, поэтому я предполагаю, что путь вперед был найден