构建MyHomePage抛出NoSuchMethodError,null调用length getter是什么问题?
The following NoSuchMethodError was thrown building MyHomePage(dirty, state: _MyHomePageState#3fc9e):
The getter 'length' was called on null.
Receiver: null
Tried calling: length
报错含义:构建MyHomePage组件时抛出NoSuchMethodError错误,在空值对象上调用了'length' getter属性,接收方为null,尝试调用的属性为length。
报错原因
- 代码中直接对未初始化的可空列表、字符串类型变量调用了
.length属性,变量值为null导致报错 - 后端接口返回的列表、字符串类字段为null,解析后没有做空校验就直接调用length属性
- 状态管理、路由跳转传递的参数为null,接收方没有做判空处理就直接访问length属性
解决方法
- 所有可空类型变量调用
.length前先做判空处理,可配合dart的空安全运算符简化代码:// 错误写法 int listLength = userList.length; // 修正写法:空值时默认返回0 int listLength = userList?.length ?? 0; - 声明列表、字符串类变量时直接赋默认非空值,从根源避免出现null的情况,示例:
// 声明时直接赋值空数组 List<String> userList = []; - 接口数据解析层做兜底处理,所有列表、字符串类型字段如果返回为null,统一赋值为空数组/空字符串,不要保留null值
- 开发阶段开启Flutter严格空安全检查,在编译期提前发现这类空调用风险
内容的提问来源于stack exchange,提问作者Nilay M
相关产品推荐
相关产品推荐

