首页 > 解决方案 > 属性 'docs' 不能无条件访问,因为接收到的可能是 'null' Flutter

问题描述

迁移到 null-safety 后显示此错误。我现在该怎么办?

  Widget chatMessages() {
    return StreamBuilder(
        stream: messageStream,
        builder: (context, snapshot) {
          return snapshot.hasData
              ? ListView.builder(
                  padding: EdgeInsets.only(bottom: 70, top: 16),
                  itemCount: snapshot.data.docs.length,
                  reverse: true,
                  itemBuilder: (context, index) {
                    DocumentSnapshot ds = snapshot.data.docs[index];
                    return chatMessageTitle(
                        ds["message"], myUserName == ds["sendBy"]);
                  })
              : Center(child: CircularProgressIndicator());
        });
  }

添加显示此错误的空检查 (!) 后<the getter 'docs' is not defined for the type of object>

              itemCount: snapshot.data!.docs.length,
              reverse: true,
              itemBuilder: (context, index) {
                DocumentSnapshot ds = snapshot.data!.docs[index];

标签: firebaseflutterdartdart-null-safety

解决方案


您必须转换snapshot.data为它的类型。假设类型是QuerySnapshot(将其更改为 的实际类型snapshot.data)。

(snapshot.data! as QuerySnapshot).docs.length

我们可以streamStreamBuilder.

StreamBuilder<QuerySnapshot>(
  ...
);

现在snapshot.data推断为QuerySnapshot不需要类型转换。

snapshot.data!.docs.length

推荐阅读