用于空值 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 的空值检查运算符的主要内容,如果未能解决你的问题,请参考以下文章

用于空值的空检查运算符

如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?

Flutter:FCM未处理异常:空值检查运算符用于空值

在运行时出现此错误“用于空值的空检查运算符”

Navigator.pushReplacement 提供用于空值的空检查运算符。这次是 - 状态

Flutter Bloc Test:空值检查运算符用于空值(空安全)