mon*_*zim 14 dart firebase flutter dart-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());
});
}
Run Code Online (Sandbox Code Playgroud)
添加空检查 (!) 后显示此错误<the getter 'docs' is not Define for the type of object>
itemCount: snapshot.data!.docs.length,
reverse: true,
itemBuilder: (context, index) {
DocumentSnapshot ds = snapshot.data!.docs[index];
Run Code Online (Sandbox Code Playgroud)
Nav*_*h P 21
你必须转换snapshot.data
成它的类型。假设类型是QuerySnapshot
(将其更改为 的实际类型snapshot.data
)。
(snapshot.data! as QuerySnapshot).docs.length
Run Code Online (Sandbox Code Playgroud)
stream
我们可以在 中指定 的类型,而不是在所有位置进行类型转换StreamBuilder
。
StreamBuilder<QuerySnapshot>(
...
);
Run Code Online (Sandbox Code Playgroud)
现在snapshot.data
推断QuerySnapshot
不需要类型转换。
snapshot.data!.docs.length
Run Code Online (Sandbox Code Playgroud)
我通过添加 StreamBuilder 和构建器(上下文,AsyncSnapshot 快照)解决了我的问题。
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());
});
}
Run Code Online (Sandbox Code Playgroud)
有以下几种解决方案:
为您提供一个类型StreamBuilder
:
StreamBuilder<QuerySnapshot> (...)
Run Code Online (Sandbox Code Playgroud)
为您的第二个参数提供类型builder
:
builder: (context, QuerySnapshot snapshot)
Run Code Online (Sandbox Code Playgroud)
用于as
沮丧:
(snapshot.data! as QuerySnapshot).docs['key']
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12337 次 |
最近记录: |