Flutter Dio请求API报NoSuchMethodError '[]'空值调用异常
错误原因
你遇到的NoSuchMethodError: The method '[]' was called on null报错由两个问题导致,其中JSON解析错误是直接触发运行时崩溃的核心原因,布局约束问题会导致修复解析后依然无法正常渲染列表:
- 核心解析错误:
QuotesModel的fromJson方法层级写多了。你请求的接口返回的列表每一项就是直接包含text、author字段的平面对象,不存在外层包裹的quotes键。代码里执行json['quotes']时拿到的是null,再对null调用['text']/['author']就直接触发空指针调用错误。 - 布局隐患:水平滚动的
ListView直接放在SliverToBoxAdapter中时,没有指定垂直方向的固定高度,会触发Flutter的布局约束报错,列表无法正常渲染。
修复方案
1. 修正模型JSON解析逻辑
删除多余的['quotes']层级,直接从当前JSON对象取对应字段:
class QuotesModel { QuotesModel(this.text, this.author); final String text; final String author; QuotesModel.fromJson(Map<String, dynamic> json) : text = json['text'] as String, author = json['author'] as String; }
2. 给水平列表添加高度约束
用固定高度的组件包裹水平ListView,解决垂直方向无边界的布局问题,高度值可以根据你的卡片设计自行调整:
case Status.success: return SizedBox( height: 120, // 可根据卡片样式调整高度 child: ListView( scrollDirection: Axis.horizontal, children: [ for (final quotesModel in state.results) QoutesCard(quotesModel: quotesModel) ], ), );
补充说明:你当前的DataSource层、Repository层逻辑没有功能性错误,空值判断逻辑也正常,不需要额外修改。修复上述两个问题后即可正常拉取接口数据,渲染出你预期的水平滚动励志语录列表。
内容的提问来源于stack exchange,提问作者Jarosław Gawlik
相关产品推荐
相关产品推荐

