Flutter如何根据某个值从firebase对列表进行分组

Posted

技术标签:

【中文标题】Flutter如何根据某个值从firebase对列表进行分组【英文标题】:Flutter how to group a list from firebase based on a certain value 【发布时间】:2020-09-15 04:43:09 【问题描述】:

我有一个包含 2 个相关集合的 firebase 数据库:“产品”和“类别”。

我想在按类别分组的列表视图中显示产品。

在每个产品文档中都有一个“类别”字段,即类别 ID。

现在我有这段代码来创建列表视图:

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),
      );
    
)

我已经尝试了一些方法(例如:question),但我想将其保留在 StreamBuilder 中,以便数据仍会实时更新。

如何对它们进行分组,以便在每个组上方显示一个标题,并在下方显示与该标题对应的产品?

【问题讨论】:

【参考方案1】:

实际上,通过我首先提供的问题的链接来修复它非常容易。 您可以只使用 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,
     );
   
),```

【讨论】:

以上是关于Flutter如何根据某个值从firebase对列表进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如何根据节点中的特定值从firebase获取数据

Flutter & Firebase:如何检查某个项目是不是存在于 Firebase 文档中的数组中

Flutter,内部流构建器,如何根据未来获取流?

根据每个值对列的值进行分组[重复]

如何根据 Firebase Auth 错误消息在 Flutter 中显示自定义警报对话框?

使用Provider for DI时如何根据Firebase Auth流修改Flutter Firebase Stream监听器?