当前位置: 首页 > 知识库问答 >
问题:

在带有颤振的Firebase中使用流检索数据

包谭三
2023-03-14

也许这是一个新手问题,但我正在学习颤振和一些东西,如异步、等待、未来,还不适合我的想法。无论如何,我要做的是从“field.documents[index][“name”]”中获取值,并构建一个列表。这是我的代码:

String productName;

Stream<QuerySnapshot> productRef = Firestore.instance
    .collection("stores")
    .document(name)
    .collection("products")
    .snapshots();
productRef.forEach((field) {
  field.documents.asMap().forEach((index, data) {
    productName = field.documents[index]["name"];
    //IF I PRINT HERE, IT SHOWS THE PRODUCTS. 
  });
});
BUT IF I PRINT HERE, I GOT A NULL VALUE

我想让productName在foreach之外。当我打印时,它首先打印null。我也会发布我的整个函数:

List mapToList({DocumentSnapshot doc, List<DocumentSnapshot> docList}) {
    if (docList != null) {
      List<Store> storeList = [];
      docList.forEach((document) {
        String name = document.data[StringConstant.nameField];
        num score = document.data[StringConstant.scoreField];
        String delivery = document.data[StringConstant.deliveryField];
        String photo = document.data[StringConstant.photoField];
        String description = document.data[StringConstant.descriptionField];
        String open = document.data[StringConstant.openField];
        String close = document.data[StringConstant.closeField];
        GeoPoint geoPoint = document.data[StringConstant.positionField]
            [StringConstant.geopointField];

        bool isOpen = document.data[StringConstant.isOpenField];
        final currentHour = DateTime.now();
        final openHour = DateTime.parse(open).hour;
        final closeHour = DateTime.parse(close).hour;
        int openMin = DateTime.parse(open).minute;
        int closeMin = DateTime.parse(close).minute;
        if (openHour <= currentHour.hour && currentHour.hour <= closeHour) {
          isOpen = true;
          if ((currentHour.hour == openHour && currentHour.minute < openMin) ||
              (currentHour.hour == closeHour &&
                  currentHour.minute > closeMin)) {
            isOpen = false;
          }
        } else {
          isOpen = false;
        }
        final double meter = distance(
          LatLng(latitude, longitude),
          LatLng(geoPoint.latitude, geoPoint.longitude),
        );

        String productName;

        Stream<QuerySnapshot> productRef = Firestore.instance
            .collection("stores")
            .document(name)
            .collection("products")
            .snapshots();
        productRef.forEach((field) {
          field.documents.asMap().forEach((index, data) {
            productName = field.documents[index]["name"];
          });
        });

        if (meter <= range && isOpen == true) {
          Store otherStore = Store(name, photo, score.toDouble(), delivery,
              meter, description, productName, 10.0, "");
          storeList.add(otherStore);
        }
      });
      return storeList;
    } else {
      return null;
    }
  }

谁能帮帮我吗?我知道它与异步编程有关,但我正在学习。谢谢

共有1个答案

贺宏逸
2023-03-14

我要做的是:

List<String> productName= [];

Stream<QuerySnapshot> productRef = Firestore.instance
    .collection("stores")
    .document(name)
    .collection("products")
    .snapshots();
productRef.forEach((field) {
  field.documents.asMap().forEach((index, data) {
    productName.add(field.documents[index]["name"]);
  });
});

您可以在查询外部初始化一个数组,以便每次“.”时都可以向其中添加一个字符串。forEach’迭代。除了在函数中手动输入每个数据外,您还可以创建一个数据模型,将数据库中的数据存储到一个局部变量中,该变量比手动字段更灵活。文档['dataField']。以下是一些有用的链接:https://medium.com/flutter-community/parsing-complex-json-in-flutter-747c46655f51

 类似资料:
  • 我正在尝试从cloud Firestore的Flutter中的以下路径获取数据,我有以下结构 followers/{currentuser}/userfollower/{user_id} 用户/user_id/user_details 我正在尝试获取当前用户的所有关注者的详细信息。有人能帮忙吗? 我能得到第一部分是因为 我不知道如何循环通过所有id从用户集合中获取数据。我尝试了以下代码,但没有成功

  • 我的Firebase Firestore数据结构如下所示 括号中是各自userinfo文档的内容 我想从/users/集合中检索所有的userinfo文档,其中name==Jack,所以我应该检索和。有人可以帮助我如何在Flutter中做到这一点,而无需检索整个/用户/集合,并在本地过滤设备上的数据。 谢谢:)

  • 我已经开始学习flutter。并试图将Firebase实时数据库集成到我的flutter项目中。但是当我将依赖项添加到我的android部分的build.graddle文件时,我开始得到这个错误。 当我添加 到应用程序级构建的底部。梯度 还有这个 到我的项目级gradle文件。 我还在pubspec中添加了firebase\u数据库依赖项。依赖项下颤振的yaml文件

  • 在我的flatter应用程序中,我正在使用firebase\u auth for google\u sign\u In,它运行良好。但是当我把cloud\u firestore添加到pubspec时。yaml然后获取依赖项,然后重新启动我的应用程序。它会显示以下错误:

  • 收到评论后,我已将以下代码部署到我的Firebase项目中,并已成功部署!。但没有向我发送任何通知。请在此处查看我的Firebase实时数据库截图以更好地理解。 [现已解决:它将只向一个ID(即我的管理设备)发送通知] 工作代码: 有关更多详细信息,请参阅此视频链接 注意:如果您的应用程序已打开并最小化,则会显示通知,但如果应用程序已打开且您正在使用,或者如果应用程序已终止,则强制关闭,则不会工作

  • 我有以下Firebase实时数据库连接到我的Flatter项目: 我对flutter和fire base相当陌生,我知道在我的flutter项目中访问此数据库中数据的一种方法是使用数据库引用变量。所以我有以下参考变量: 现在,如何使用此itemRef访问数据库中的温度和脉冲值?