如何解决如何使用对象 snapshot.data 在简单的 flutter-dart 代码中实现空安全?
我是 flutter/dart 编码新手,请帮我解决以下问题:
这是我的代码,试图从 FireStore 集合“DinnerNames”中获取数据,但我在该行的 snapshot.data 对象上出现分析错误:
itemCount:snapshot.data.documents.length
:
问题:
值可以为“空”的表达式必须先进行空检查,然后才能取消引用。 尝试在取消引用之前检查该值是否为“空”。
这是产生错误的代码示例:
CollectionReference dinners =
FirebaseFirestore.instance.collection('DinnerNames');
return Scaffold(
appBar: AppBar(
title: Text('My Dinner Voting App'),),body: StreamBuilder(
stream: dinners.snapshots(),builder: (context,snapshot){
if (!snapshot.hasData) return const Text('Firestore snapshot is loading..');
if (!snapshot.hasError)
return const Text('Firestore snapshot has error..');
if (snapshot.data == null){
return const Text("Snapshot.data is null..");
}else{
return ListView.builder(
itemExtent: 80.0,itemCount: snapshot.data.documents.length,itemBuilder: (context,index) =>
_buildListItem(context,snapshot.data.documents[index]),);
}
}
),);
这是颤振版本:
dave@DaveMacBook-Pro firebasetest % flutter --version
Flutter 1.25.0-8.2.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision b0a2299859 (2 weeks ago) • 2021-01-05 12:34:13 -0800
Engine • revision 92ae191c17
Tools • Dart 2.12.0 (build 2.12.0-133.2.beta)
解决方法
如果您在使用它时确定该对象不是 null
,只需插入一个 Bang !
运算符来丢弃可空性,如下所示:
ListView.builder(
itemCount: snapshot.data!.docs.length,// <-- Notice '!'
)
,
您已经在检查:
snapshot.data == null
但似乎分析表明文档也可以为空,所以也尝试包括:
if (snapshot.data.documents != null) { ... do what you need }
或尝试更改此代码:
if (snapshot.data == null){
return const Text("Snapshot.data is null..");
}
为此:
if (snapshot.data == null || snapshot.data.documents == null){
return const Text("Snapshot.data is null..");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。