【问题标题】:Filtering Firestore database过滤 Firestore 数据库
【发布时间】:2020-07-23 18:57:02
【问题描述】:

在应用程序中,我有 4 个不同的选项卡,我想显示来自 firestore 的过滤数据。

我有以下标签:

  • 全部
  • 音乐
  • 健身
  • 喜剧

第一个选项卡显示未经过滤的所有数据,第二个选项卡显示具有标签“音乐”的数据,依此类推。

我将代码复制了 4 次并更改了 .where 但这个解决方案对我来说似乎不是最好的。

这是我的其中一个标签的代码:

Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Center(
          child: Container(
            width: MediaQuery.of(context).size.width,
            height: MediaQuery.of(context).size.height,
            child: Container(
              width: MediaQuery.of(context).size.width,
              height: 150.0,
              child: StreamBuilder<QuerySnapshot>(
                stream: Firestore.instance
                    .collection('eventsdata')
                    .orderBy('dateform')
                    .where('dateform', isGreaterThanOrEqualTo: _timeminus1)
                    .where('platform', isEqualTo: 'Comedy')
                    .snapshots(),
                builder: (BuildContext context,
                    AsyncSnapshot<QuerySnapshot> snapshot) {
                  if (snapshot.hasError)
                    return new Text('Error: ${snapshot.error}');
                  switch (snapshot.connectionState) {
                    case ConnectionState.waiting:
                      return new Text(
                        'Loading...',
                        style:
                        TextStyle(fontSize: 15.0, color: Colors.black38),
                      );
                    default:
                      return Padding(
                        padding: const EdgeInsets.only(bottom: 179.0),
                        child: new ListView(

有人可以帮我吗?

【问题讨论】:

  • 你的问题到底是什么?
  • 这段代码中到底有什么不符合您的预期?
  • 您好,感谢两位cmets。该代码正在运行,但每次用户切换选项卡时都会加载流。我宁愿在过滤后加载一次流。如何做到这一点?谢谢

标签: flutter google-cloud-firestore cloud


【解决方案1】:

如果我正确理解您的问题,那么您的初始选项卡会显示所有未过滤的数据,然后我会保存此查询中的数据并将其用于其他屏幕。如果您已经在设备上拥有所有数据,那么过滤设备上的数据比对 firebase 进行多次查询更有意义,因为您按读/写收费。因此,我会将我的数据保存为 List&lt;MyClass&gt;,然后将其映射到小部件以显示数据。

How to filter list in flutter?
Iterating through a list to render widegets

这些不是教程,而是他们应该为您指出正确的方向,他们应该在哪里找到我能找到的最佳材料

ListView.builder(
        itemCount: myInfo.length,
        itemBuilder: (context, index) => InfoCard(myInfo[index]),
      ),

myInfo 是您的列表,InfoCard 是一个可重复使用的小部件,如果您不知道如何制作可重复使用的小部件,如果您不需要它可以像文本小部件一样简单,我附上了一个链接。

Reusable Custom Widgets

Flutter: The power of small and reusable widgets

【讨论】:

  • 您好 wxyankees424,感谢您的评论。这正是我一直在寻找的。你知道我可以按照一些教程将数据保存到列表中吗?我一直在这里登记,但我真的很困惑。再次感谢您,祝您复活节快乐。
  • 更新内容,如果这回答了您的问题,您可以接受此答案,如果没有,如果能进一步帮助您。
  • 您好,感谢您的反馈。我检查了互联网上的链接和其他来源,但我仍然无法执行它。从您的评论中,我了解到: 1. 将火存储流存储在列表中 2. 使用此列表过滤内容。我想我设法达到了第一点,但是在我迷失在检索器中的数据之后。我仍然应该使用流构建器来检索数据,或者应该如何完成?再次提前感谢您的所有帮助。
  • 好的,如果您稍后发布一些示例代码来帮助您
  • 好的,所以我发布了对您有帮助的代码。我想更好地理解你所理解的以及你仍在挣扎的东西。所以你应该有一个StreamBuilder,然后将你的数据保存到一个列表中,很可能是你定义的一个类的列表,所以List&lt;MyClass&gt;你然后过滤掉你想要的列表中的元素,当你准备好显示它们时使用list.where 的特定选项卡将其保存到特定于该选项卡的列表中,这样您就有一个主列表,然后每个选项卡上都有一个列表希望这不会造成混淆
猜你喜欢
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 2013-07-18
相关资源
最近更新 更多