Document Stream snapshot.hasData返回true,但没有数据,如何解决此问题?

问题描述 投票:0回答:3

我正在从Firestore流式传输文档快照,但是当数据库中没有任何内容时,snapshot.hasData将返回true。尝试从快照中检索值时,这导致我的代码失败。

我该如何解决?

我尝试打印出快照。数据只是有一个Documentsnapshot实例。还考虑过向流提供初始数据,但是我不知道如何提供一个空的DocumentSnapshot数据类型。

如果我手动将记录插入到Firestore中,则可以正常工作。

StreamBuilder<DocumentSnapshot>(

          stream: Firestore.instance.collection('UserDetails').document(widget.uid).snapshots(),
          builder: (context, snapshot){

            if(snapshot.hasError){
              widget._err = snapshot.error;
            } else if (snapshot.connectionState == ConnectionState.waiting){
              widget._loadingUserInfo = true;
            } else if (snapshot.hasData){
              nameController.text = snapshot.data['name'];
              ageController.text = snapshot.data['age'];
              introController.text = snapshot.data['intro'];
              widget._loadingUserInfo = false;
            }
)

我正在尝试从Firestore获取用户值,以便在存在值或用户存在的情况下填写其表单。

现在,它只是失败了。

firebase stream flutter google-cloud-firestore
3个回答
1
投票

hasData在没有数据时不可能返回true

hasData只是以下各项的简写:

snapshot.data != null

这意味着您do有数据。但也许不是您想要的数据。


0
投票

您为什么不添加验证?

类似

if (snapshot.hasData && (snapshot.data == null) return SizedBox();

此外,如果您正在检索列表,则可以检查data != null and snapshot.data.length == 0;


0
投票

snapshot.hasData将返回true 对于空数据集,即:]]

snapshot.data = []

个人,我认为hasData的意思是“有回应”。

© www.soinside.com 2019 - 2024. All rights reserved.