..我正在为正在进行的Flutter项目使用Cloud Firestore。
上面添加的是我的数据库模型的屏幕截图。
基本上每个用户文档都有其自己的个人信息字段和他/她的项目的集合。
上面是展开的两个项目的屏幕截图。它具有项目的详细信息,例如其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。 下面是输出。
仅在第一个项目(E-Cell App)的输出CR值中为空。不包括我在所有其他项目中都获得了适当的价值。我不确定是什么导致了这个问题。在所有项目中,CR均采用相同的格式(编号)。正如上面发布的图片,“项目示例1”提供的CR值为空,“项目示例2”提供的CR值与所有其他项目一样。预先感谢您的帮助。
答案 0 :(得分:5)
您犯了我几天前犯的同样的错误。
您在“ E-Cell”文档的字段名称中添加了一个空格
对于Firestore,“ Cr” 和“ Cr” 是不同的字段。
请注意,第一个空间很小,很难指出。
而且,距离我加入堆栈溢出已经有几天了,您在问题中包含的信息对我发现错误有很大帮助。您的问题肯定是其他人的榜样。