isEqual to operator 在 Flutter Firestore 中无法正常工作

Posted

技术标签:

【中文标题】isEqual to operator 在 Flutter Firestore 中无法正常工作【英文标题】:isEqual to operator is not working properly in Flutter Firestore 【发布时间】:2020-09-06 00:28:38 【问题描述】:

我正在尝试在 Cloud Firestore 中使用 Flutter 中的 isEqualTo 运算符在 StreamBuilder 内执行复合查询,如下所示:

Firestore.instance
  .collection('produtos')
  .where("NProduto", isEqualTo: productClicked)
  .snapshots()
  .listen((data) =>
  data.documents.forEach((doc) => nomeProdutoClicked = doc["Nome"]));

但是当我尝试在最后一行使用forEach 时,它似乎永远不会添加到列表中,设置为变量或类似的东西,唯一有效的是打印(doc)。 我已经尝试在 StreamBuilder 之外以单独的方法进行操作,但我无法使其以任何方式工作。 本质上,我要做的是从与我在 StreamBuilder 中使用的集合不同的集合中获取文档。

如果您知道另一种方法,或者知道如何解决此问题,请帮助我。我将永远感激哈哈哈哈:)

【问题讨论】:

请查看this 【参考方案1】:

基本上可以加

return new ListView(children: getItems(snapshot));

然后,定义getItems

getItems(AsyncSnapshot<QuerySnapshot> snapshot) 
    return snapshot.data.documents
        .map((doc) => new ListTile(list:list)
        .toList();
  

它应该看起来像:

return new StreamBuilder<QuerySnapshot>(
        stream: 
        Firestore.instance.
        collection('produtos').
        .where("Produto", isEqualTo: productClicked)
        .snapshots(),
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) 
          if (!snapshot.hasData) return new Text("There is no products");
          return new ListView(children: getProductsItems(snapshot));
        );


  getProductsItems(AsyncSnapshot<QuerySnapshot> snapshot) 
    return snapshot.data.documents
        .map((doc) => new ListX(title: new Text(doc["Nome"])
        .toList();
  

【讨论】:

我认为这可能有效,但我不确定您所说的 ListX.toList() 部分是什么意思。你能解释一下吗?编辑:我正在尝试从列表中获取isEqualTo,所以我必须遍历它,这就是它没有真正工作的原因。

以上是关于isEqual to operator 在 Flutter Firestore 中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Flu epidemic in Guangdong, no need to panic, says expert

isEqual

NSManagedObjects 的 isEqual

Introduction to operating systems----《Computer operating system》

OC中==与isEqual

isEqual,isEqualTostring,==三者的区别