如何解决方法 '[]' 不能无条件调用,因为接收者可以是 'null' StreamBuilder
我最近将我的 flutter 升级到了最新版本,但出现了所有空安全错误。
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('restaurants')
.doc(partnerId)
.snapshots(),builder: (context,snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),);
}
final restaurant = snapshot.data;
startTime = restaurant['startTime'].toDate();
endTime = restaurant['endTime'].toDate();
将 restaurant[''] 分配给任何变量时出现以下错误。
方法'[]'不能无条件调用,因为接收者 可以为“空”。
如果我这样做 - restaurant!['endTime'].toDate();
,就会出现新的错误
未为类型“Object”定义运算符“[]”。尝试定义 运算符“[]”。
解决方法
尝试将 snapshot.data
转换为您的流返回的任何内容。
示例:
如果您的流返回 Map
,这是您的代码:
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('restaurants')
.doc(partnerId)
.snapshots(),builder: (context,snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),);
}
// dont forget to assume that your stream may
// have an error,or dont return data.
if(!snapshot.hasData) return Container();
final restaurant = snapshot.data as Map;
startTime = restaurant['startTime'].toDate();
endTime = restaurant['endTime'].toDate();
,
snapshot.data
是一个 AsyncSnapshot
。您必须执行以下操作:
Map<String,dynamic> restaurant = snapshot.data.data()
如果您获得的是单个文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。