获取JSON时出现Null check operator used on a null value错误是什么原因?
错误原因及修复方案
核心错误点
- 构造函数内变量作用域错误
你在Stored的构造函数中写的bool b = post-number == "1";声明的是构造函数内部的局部变量,完全没有给类定义的late bool b成员变量赋值,导致类成员b从未被初始化,调用时触发late变量的空检查异常。 - 变量命名语法错误
Dart标识符不允许使用-符号,post-number = json["posts"];属于非法语法,需要修改为下划线或驼峰格式的命名。 - 未校验
widget.stored本身的空值
判断条件中直接对widget.stored使用空断言!,如果widget.stored本身为null,就会直接抛出你遇到的空检查异常。 - 原代码存在隐藏逻辑漏洞
builder方法必须始终返回Widget,你原代码没有写判断不命中时的返回逻辑,同时GridView.count缺少必填参数crossAxisCount,运行时也会触发报错。
修复代码示例
1. 修复Stored类代码
class Stored extends Base { late bool b; // 修正变量命名 late String postNumber; Stored(Map<String, dynamic> json) : super(json) { postNumber = json["posts"]; // 直接给类成员b赋值,不要额外加bool声明 b = postNumber == "1"; } }
2. 修复页面判断逻辑
builder: (context, snapshot) { // 先校验stored非空再访问b属性,空安全下不会抛异常 if (snapshot.data != null && widget.stored?.b == true) { return GridView.count( // 补充GridView必填的交叉轴数量参数,可根据业务调整数值 crossAxisCount: 2, children: List.generate(snapshot.data!.length, (index) { return _buildCell(snapshot.data![index]); }) ); } // 补充非命中条件下的默认返回Widget return const SizedBox.shrink(); }
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

