Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振:文档中的新字段导致Streambuilder没有数据(Firebase/Firestore)_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

颤振:文档中的新字段导致Streambuilder没有数据(Firebase/Firestore)

颤振:文档中的新字段导致Streambuilder没有数据(Firebase/Firestore),firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我在firestore中有一个数据库,我已经发布了我的应用程序。我有一个“用户”集合。我发现文档中需要一个额外的字段。问题是,如果我更新QuerySnapshot以获取新字段,那么下次构建时,如果有一个文档没有此字段,则整个文档不包含任何数据(hasdata==false)。为了说明这一点,我编写了一个小代码: 我的第一个基础结构只有'name'和'uid'字符串。现在我想添加一个“角色” UserData _userDataFromSnapshot(DocumentSnapshot snaps

我在firestore中有一个数据库,我已经发布了我的应用程序。我有一个“用户”集合。我发现文档中需要一个额外的字段。问题是,如果我更新QuerySnapshot以获取新字段,那么下次构建时,如果有一个文档没有此字段,则整个文档不包含任何数据(hasdata==false)。为了说明这一点,我编写了一个小代码:

我的第一个基础结构只有'name'和'uid'字符串。现在我想添加一个“角色”

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。但我不知道如何认识到“角色”缺失了


提前谢谢

这回答了你的问题吗?