【问题标题】:Where clauses in flutter firebase streamsFlutter Firebase 流中的 Where 子句
【发布时间】:2020-09-18 17:19:57
【问题描述】:

我正在设置一个类别选择器,在该选择器中按下某个图像会更改用户应该看到的类别。但是,如果用户没有选择一个类别,他应该会看到所有项目。

 FutureBuilder(
          future: _authService.getUserId(),
          builder: (context, snapshot) {
            if (snapshot.hasData)
              return StreamBuilder(
                  stream: _firestore
                      .collection('Item')
                      .where(_category != null ? ('category', isEqualTo: _category) : true)
                      .snapshots(),

我试图做这样的事情,但它只是给我一个错误,说它在某处期待一个括号..

关于此设置的另一个问题是,即使 _categoy 发生更改,是否会更新列表?或者由于流已经构建,它不会?在后者中,我将如何使用实际值更新列表?

【问题讨论】:

  • 1) “它只是给我一个错误,说它在某处需要一个括号。”请编辑您的问题以包含确切的错误消息和(如果这是一个运行时错误)堆栈跟踪。 2)_category 的值是多少。请确保代码可以按原样运行,以便所需的一切都在 sn-p.xml 中。 3) 请限制自己在每个帖子中回答一个问题。

标签: firebase flutter dart google-cloud-firestore stream


【解决方案1】:

将其更改为以下内容:

          StreamBuilder(
            stream: _category != null
                ? Firestore.instance
                    .collection('Item')
                    .where("category", isEqualTo: _category)
                    .snapshots()
                : Firestore.instance.collection('Item').snapshots(),
          ),

如果_category 不为空,则使用where 子句,否则检索Item 中的所有内容。

【讨论】:

  • 这可行,但它不会显示不具有“类别”属性的项目
  • 如果 where 子句失败则不会显示任何数据
  • 如果 category == _category(your variable),查询将显示项目。如果文档不满足,则不会检索它
  • 让我们这样说吧。我希望能够按类别过滤,但我希望它显示所有项目并且不过滤,如果我的 _category == null
  • 就像一个魅力,不知道为什么我没有想到这一点。太棒了:)
【解决方案2】:

真正的答案在这里 https://stackoverflow.com/a/63293409/7198006

那是

不要在构建方法中初始化流

使用StatefulWidget并在State.initState中初始化流

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2015-09-11
    • 2021-01-07
    • 2017-07-19
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多