You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:03