用于空值 Flutter 的空值检查运算符
Posted
技术标签:
【中文标题】用于空值 Flutter 的空值检查运算符【英文标题】:Null check operator used on a null value Flutter 【发布时间】:2022-01-18 02:42:45 【问题描述】:我知道这个问题与 dart null 安全性有关,但我无法解决这个问题,因为我收到了这个“Null check operator used on a null value Flutter”错误。请帮我解决这个问题
我的代码是:
class _ListStudentPageState extends State<ListStudentPage>
final Stream<QuerySnapshot> studentStream =
FirebaseFirestore.instance.collection('students').snapshots();
@override
Widget build(BuildContext context)
return StreamBuilder<QuerySnapshot>(
stream: studentStream,
builder:(BuildContext context , AsyncSnapshot<QuerySnapshot> snapshot)
if(snapshot.hasError)
print('something went wrong');
if(snapshot.connectionState == ConnectionState.waiting)
return const Center(
child: CircularProgressIndicator(),
);
final List storeDocs =[];
snapshot.data!.docs.map((DocumentSnapshot document)
Map a = document.data() as Map<String , dynamic>;
storeDocs.add((a));
a['id'] = document.id;
).toList();
【问题讨论】:
检查调试器,snapshot.data
可能为空。
如果快照有错误,下一个 if 语句后面的代码仍将执行,因为您没有返回或抛出。也许snapshot.hasError
是真的,然后snapshot.data
是空的,你得到了错误。
【参考方案1】:
我会试试这个:
final List storeDocs =[];
if(snapshot.data=null)
snapshot.data!.docs.map((DocumentSnapshot document)
Map a = document.data() as Map<String , dynamic>;
storeDocs.add((a));
a['id'] = document.id;
).toList();
或者更漂亮的方式
final List storeDocs =[];
snapshot.data?.docs??[].map((DocumentSnapshot document)
Map a = document.data() as Map<String , dynamic>;
storeDocs.add((a));
a['id'] = document.id;
).toList();
【讨论】:
以上是关于用于空值 Flutter 的空值检查运算符的主要内容,如果未能解决你的问题,请参考以下文章
如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?