颤振:文档中的新字段导致Streambuilder没有数据(Firebase/Firestore)
我在firestore中有一个数据库,我已经发布了我的应用程序。我有一个“用户”集合。我发现文档中需要一个额外的字段。问题是,如果我更新QuerySnapshot以获取新字段,那么下次构建时,如果有一个文档没有此字段,则整个文档不包含任何数据(hasdata==false)。为了说明这一点,我编写了一个小代码: 我的第一个基础结构只有'name'和'uid'字符串。现在我想添加一个“角色”颤振:文档中的新字段导致Streambuilder没有数据(Firebase/Firestore),firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我在firestore中有一个数据库,我已经发布了我的应用程序。我有一个“用户”集合。我发现文档中需要一个额外的字段。问题是,如果我更新QuerySnapshot以获取新字段,那么下次构建时,如果有一个文档没有此字段,则整个文档不包含任何数据(hasdata==false)。为了说明这一点,我编写了一个小代码: 我的第一个基础结构只有'name'和'uid'字符串。现在我想添加一个“角色” UserData _userDataFromSnapshot(DocumentSnapshot snaps
UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
name: snapshot.data['name'] ?? '',
role: snapshot.data['role'] ?? '');
}
Stream<UserData> get userData {
return usersCollection.document(uid).snapshots().map(_userDataFromSnapshot);
}
UserData\u userDataFromSnapshot(DocumentSnapshot snapshot){
返回用户数据(
uid:uid,
名称:snapshot.data['name']??',
角色:快照。数据['role']??“”;
}
流获取用户数据{
返回userscolection.document(uid).snapshots().map(\u userdatafromsapshot);
}
但是因为我已经有了只包含“uid”和“name”字符串的文档,所以streambuilder返回的文档中没有数据。可能是因为它想查找“role”字符串,但找不到它
我的streambuilder:
return StreamBuilder<List<LobbyData>>(
stream: DatabaseService(uid: user.uid).userData,
builder: (context, snapshot) {
if (snapshot.hasData) {
userData = snapshot.data;
} else {
return Loading();
}
});
返回StreamBuilder(
流:DatabaseService(uid:user.uid).userData,
生成器:(上下文,快照){
if(snapshot.hasData){
userData=snapshot.data;
}否则{
返回加载();
}
});
处理这个问题的最佳方法是什么?如果我能识别出缺少“角色”部分,我可以简单地等待setData()+merge=true。但我不知道如何认识到“角色”缺失了
提前谢谢 这回答了你的问题吗?