Flutter, как сгруппировать список из firebase по определенному значению - PullRequest
1 голос
/ 28 мая 2020

У меня есть база данных firebase с 2 соответствующими коллекциями: «продукты» и «категории».

Я хотел бы отображать продукты в списке, сгруппированном по их категориям.

В каждом В документе продукта есть поле 'category', которое является идентификатором категории.

Прямо сейчас у меня есть этот код для создания списка:

StreamBuilder(
    stream: Firestore.instance.collection('products').snapshots(),
    builder: (context, snapshot) {
      if (!snapshot.hasData) return const Text("Loading...");
      return ListView.builder(
        itemBuilder: (context, index) => buildProductItem(context, snapshot.data.documents[index]),
        itemCount: (snapshot.data.documents.length),
      );
    }
)

Я пробовал несколько вещей ( вот так: вопрос ), но я хочу сохранить его в StreamBuilder, чтобы данные по-прежнему обновлялись в реальном времени.

Как мне сгруппировать их, чтобы я мог отображать заголовок над каждой группой и продукты, соответствующие названию внизу?

1 Ответ

0 голосов
/ 28 мая 2020

На самом деле исправить это было довольно просто со ссылкой на вопрос, который я впервые предоставил. Вы можете просто использовать GroupedListView (package) вместо Listview.builder. Не знаю, почему мне потребовалось так много времени, чтобы понять это: p Надеюсь, это поможет кому-то другому в будущем :)

StreamBuilder(
   stream: Firestore.instance.collection('products').snapshots(),
   builder: (context, snapshot) {
     if (!snapshot.hasData) return const Text("Loading...");
     return GroupedListView(
       elements: snapshot.data.documents,
       groupBy: (element) => element['category'],
       groupSeparatorBuilder: _buildGroupSeparator,
       itemBuilder: buildProductItem,
       order: GroupedListOrder.ASC,
     );
   }
),```
...