Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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
Firebase 财产';文件';无法无条件访问,因为接收的内容可以是';空';颤振_Firebase_Flutter_Dart_Dart Null Safety - Fatal编程技术网

Firebase 财产';文件';无法无条件访问,因为接收的内容可以是';空';颤振

Firebase 财产';文件';无法无条件访问,因为接收的内容可以是';空';颤振,firebase,flutter,dart,dart-null-safety,Firebase,Flutter,Dart,Dart Null Safety,迁移到空安全后,显示此错误。我现在该怎么办 Widget chatMessages() { return StreamBuilder( stream: messageStream, builder: (context, snapshot) { return snapshot.hasData ? ListView.builder( padding: EdgeInsets.

迁移到空安全后,显示此错误。我现在该怎么办

  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());
        });
  }
添加显示此错误的空检查(!)后

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

添加错误和连接状态检查,如下所示:

Widget聊天信息(){
返回流生成器(
流:messageStream,
生成器:(上下文,快照){
if(snapshot.hasError){
返回文本(“出错”);
}
if(snapshot.connectionState==connectionState.waiting){
返回文本(“加载”);
}
返回ListView.builder(
填充:仅限边缘组(底部:70,顶部:16),
itemCount:snapshot.data.docs.length,
相反:是的,
itemBuilder:(上下文,索引){
DocumentSnapshot ds=snapshot.data.docs[index];
返回聊天信息标题(
ds[“message”]、myUserName==ds[“sendBy”];
});
});
}

您必须将快照数据转换为其类型。假设类型为
QuerySnapshot
(将其更改为实际类型的
snapshot.data

我们可以在
StreamBuilder
中指定
stream
的类型,而不是在所有位置进行类型转换

StreamBuilder<QuerySnapshot>(
  ...
);

有几种解决方案:

  • 为您的
    StreamBuilder
    提供一个类型:

    StreamBuilder(…)
    
  • 生成器的第二个参数提供类型:

    builder:(上下文,QuerySnapshot快照)
    
  • 使用
    作为
    向下广播:

    (snapshot.data!作为QuerySnapshot.docs['key']
    

我通过添加StreamBuilder和builder(上下文、异步快照快照)解决了我的问题

Widget聊天信息(){
返回流生成器(
流:messageStream,
生成器:(上下文,异步快照){
返回snapshot.hasData
?ListView.builder(
填充:仅限边缘组(底部:70,顶部:16),
itemCount:snapshot.data.docs.length,
相反:是的,
itemBuilder:(上下文,索引){
DocumentSnapshot ds=snapshot.data.docs[index];
返回聊天信息标题(
ds[“message”]、myUserName==ds[“sendBy”];
})
:居中(子项:循环压缩机指示器());
});
}

嗨!快照数据是什么类型的?你能提供吗
StreamBuilder<QuerySnapshot>(
  ...
);
snapshot.data!.docs.length
 Widget chatMessages() {
     return StreamBuilder<QuerySnapshot>(
        stream: messageStream,
        builder: (context, AsyncSnapshot 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());
    });
 }