无法使用Flutter从Firestore检索文档

时间:2020-07-09 17:22:06

标签: flutter dart google-cloud-firestore

..我正在为正在进行的Flutter项目使用Cloud Firestore。

Database Screenshot

上面添加的是我的数据库模型的屏幕截图。

基本上每个用户文档都有其自己的个人信息字段和他/她的项目的集合。

Project Example 1

Project Example 2

上面是展开的两个项目的屏幕截图。它具有项目的详细信息,例如其CR,字段,成员等。

 x = StreamBuilder(
          stream: _projectStreamLock ? null : Firestore.instance.collection('User').document(_savedUser.user.uid).collection('Projects').snapshots(),
          builder: (BuildContext context,AsyncSnapshot<QuerySnapshot> snapshots){
            if(snapshots.hasData && !_projectStreamLock){

              List<DocumentSnapshot> projectList = snapshots.data.documents;

              _savedUser.user.projects = [];

              for(int i=0;i<projectList.length;i++){
                _savedUser.user.projects.add(Project(name: projectList[i].documentID,field: projectList[i].data["Field"],subField: projectList[i].data["SubField"],completionRate: projectList[i].data["CR"],members: projectList[i].data["Members"]));
              }

              return ListView.builder(
                  itemCount: snapshots.data.documents.length,
                  itemBuilder: (_,int index){
                    print(snapshots.data.documents[index].documentID + " : " + snapshots.data.documents[index].data["CR"].toString());
                    return ProjectCard(
                      globalHeight: _height,globalWidth: _width,
                      projectDetails: Project(
                          name : snapshots.data.documents[index].documentID,
                          completionRate: snapshots.data.documents[index].data["CR"],
                          field: snapshots.data.documents[index].data["Field"],
                          members: snapshots.data.documents[index].data["Members"],
                          subField: "Hello",
                      ),
                    );
                  });
              ///
            }
            else{
              _projectStreamLock = false;
              return ListView.builder(
                //  key: new Key(Random.secure().nextDouble().toString()),
                  itemCount: _savedUser.user.projects.length,
                  itemBuilder: (_,int index){
                    return ProjectCard(globalHeight: _height,globalWidth: _width,projectDetails: _savedUser.user.projects[index],);
                  });
            }
          },
        );

以上是创建代表每个项目的卡片列表的代码。该代码可能看起来有些混乱,但在第一种“ if”情况下,请重点关注ListView.builder Widget。在下面的代码片段中,我从快照中提取数据并创建每个项目的Project Object。

我面临的问题是,在获取第一个项目(E-Cell App)的CR值时。我得到一个空值。但是我正在获得所有其他项目的正确CR值。如您所见,在代码片段中,我正在打印名称(documentID)和要添加到列表中的每个项目的CR。 下面是输出。

Print statement Output

仅在第一个项目(E-Cell App)的输出CR值中为空。不包括我在所有其他项目中都获得了适当的价值。我不确定是什么导致了这个问题。在所有项目中,CR均采用相同的格式(编号)。正如上面发布的图片,“项目示例1”提供的CR值为空,“项目示例2”提供的CR值与所有其他项目一样。预先感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

您犯了我几天前犯的同样的错误。

您在“ E-Cell”文档的字段名称中添加了一个空格

对于Firestore,“ Cr” “ Cr” 是不同的字段。

请注意,第一个空间很小,很难指出。

而且,距离我加入堆栈溢出已经有几天了,您在问题中包含的信息对我发现错误有很大帮助。您的问题肯定是其他人的榜样。