Flutter3.0运行报Null check operator used on a null value解决方法

问题复现代码
class News { int? id; String? title; String? imageUrl; } return Container( child: Center( child: ListView( children: [ Card( child: Column( children: [ Padding( padding: const EdgeInsets.all(8.0), child: Image.network(_featuredNews.imageUrl!), ), Padding( padding: const EdgeInsets.all(8.0), child: Text( _featuredNews.title!, style: TextStyle( fontSize: 18.0, fontWeight: FontWeight.bold, color: Colors.black), ), ),
错误产生原因
News类中声明的title、imageUrl属性都带?后缀,属于可空类型,本身就允许被赋值为null- Flutter 3.0默认开启健全空安全校验,代码中使用的
!是空值强制解包运算符,作用是向编译器承诺“这个值绝对不为null”,一旦运行时_featuredNews对象本身、或者它的imageUrl/title属性实际值为null,就会直接抛出该运行时错误 - 高频触发场景:异步接口请求的新闻数据还未返回就提前渲染UI、接口返回的新闻数据本身缺失标题或图片链接字段
修复方案
不要直接使用!对可空值做强制解包,对所有可能为空的场景做兼容兜底,参考修复代码如下:
class News { int? id; String? title; String? imageUrl; } return Container( child: Center( // 新闻数据未加载完成时展示加载态 child: _featuredNews == null ? const CircularProgressIndicator() : ListView( children: [ Card( child: Column( children: [ Padding( padding: const EdgeInsets.all(8.0), // 图片链接为空时展示占位组件 child: _featuredNews.imageUrl?.isNotEmpty == true ? Image.network(_featuredNews.imageUrl!) : Container( height: 120, color: Colors.grey[200], child: const Icon(Icons.image_not_supported, size: 40), ), ), Padding( padding: const EdgeInsets.all(8.0), // 标题为空时展示兜底文案 child: Text( _featuredNews.title ?? "暂无新闻标题", style: const TextStyle( fontSize: 18.0, fontWeight: FontWeight.bold, color: Colors.black), ), ), ], ), ) ], ), ), );
- 核心调整逻辑:
- 渲染列表前先判断
_featuredNews是否为空,数据加载阶段展示进度指示器,避免直接访问空对象的属性 - 加载网络图片前先校验图片链接是否有效,无效时展示本地占位组件,避免图片组件加载崩溃
- 文本组件使用
??运算符做空值兜底,空值时自动展示默认文案,无需强制解包也不会触发空异常
- 渲染列表前先判断
内容的提问来源于stack exchange,提问作者Irfan Tariq
相关产品推荐
相关产品推荐

