Карты просмотра списка не работают после добавления, если условие внутри колеблется - PullRequest
0 голосов
/ 01 августа 2020

Моя карточка просмотра списка не возвращает все элементы, сохраненные определенным c пользователем, я хочу получить все продукты, сохраненные пользователем

 body: (products != null)
        ? ListView.builder(
            itemCount: products.length,
            itemBuilder: (context, index) {
              if (products[index].ownerId == user.uid) {
                return Card(
                  child: ListTile(
                    leading: Image.asset('graphics/broccoli.png'),
                    title: Text(products[index].name),
                    subtitle:
                        Text(products[index].price.toString() + " Rs"),
                    trailing: Icon(Icons.more_vert),
                  ),
                );
              } else {
                return null;
              }
            })
        : Center(child: CircularProgressIndicator()));

Ответы [ 2 ]

2 голосов
/ 01 августа 2020

В части else вернуть SizedBox() вместо null.

} else {
  return const SizedBox();
}

Это потому, что метод сборки или функция построителя любого виджета всегда должны возвращать Widget, и null не является Widget.

Поэтому всякий раз, когда мы хотим показать «ничего» или «пустой виджет», мы можем просто вернуть SizedBox().

1 голос
/ 01 августа 2020

Поскольку, ответ Джигара был подходящим, я хотел бы дать вам какой-то точный способ сделать это.

  • Вы также можете вернуть Container(), это в основном используется для отображения пустого контейнера.
  • Вместо того, чтобы делать возврат с чеком, вы можете следовать только своему первому методу, то есть использовать ternary operator для возврата Card или Container

Это можно сделать так:

               return (products[index].ownerId == user.uid) ? Card(
                  child: ListTile(
                    leading: Image.asset('graphics/broccoli.png'),
                    title: Text(products[index].name),
                    subtitle:
                        Text(products[index].price.toString() + " Rs"),
                    trailing: Icon(Icons.more_vert)
                  )
                ) : Container();
...