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']
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());
});
}