0

我有一个函数可以获取 google 地方搜索商店的结果并搜索 Firestore 以查看商店是否已经在数据库中。

每当我运行它时,它都认为 Stream Builder 什么都不做。

我认为问题在于该功能不在小部件中并且没有构建方法。这是代码:

  void searchStores() async {
    Prediction newStore = await PlacesAutocomplete.show(
        context: context,
        apiKey: kGoogleApiKey,
        mode: Mode.overlay,
        language: "en",
        components: [new Component(Component.country, "au")]);

    await places.getDetailsByPlaceId(newStore.placeId).then((detailStoreInfo) {

      print('running 1');

      StreamBuilder (
          stream: Firestore.instance.collection('stores').document(detailStoreInfo.result.id).snapshots(),
          builder: (BuildContext context, AsyncSnapshot snapshot){

            print('running 2');

            setState(() {
              if (snapshot.connectionState == ConnectionState.active &&
                  snapshot.hasData){

                print('running 3');

                if (snapshot.data['veganOnly'] == null || snapshot.data['veganOnly'] == false){

                  print('running 4');

                  setState(() {
                    firstStore = true;
                  });

                }
              }
            });

            return null;

          }
      );

    });
  }

如您所见,我添加了打印语句来找出我的代码失败的地方。'running 1' 已显示,因此这些地方正在返回响应。

但是其他语句(2,3 或 4)都没有打印,所以流生成器似乎没有工作,甚至没有返回空值。

我还尝试在流构建器之前放置一个 return ,但这也没有效果。

我的想法是否正确,因为它不在小部件的构建方法中,或者完全是其他东西。

谢谢

4

2 回答 2

3

AStreamBuilder是 a Widget,因此必须插入到您的小部件树中的某个位置,就像您插入小Text部件一样。只需传递一个流并在它的builder回调中返回另一个小部件

于 2019-09-16T06:39:34.777 回答
0

您需要为此使用 Stream 类,例如要获取有关名为“users”的集合的所有详细信息,您可以使用,

Stream<QuerySnapshot> stream = _db.collection("users").snapshots();
stream.forEach((QuerySnapshot element) {

  if(element == null)
    return;

  for(int count=0;count<element.documents.length;count++) {
    print(element.documents[count].data.toString());
  }
});
于 2020-07-16T11:30:47.497 回答