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

Flutter空安全下如何获取JSON数组并在ListView展示餐厅数据

错误定位与修复方案

该报错的本质是代码中使用!空校验运算符时,对应的变量实际为null,针对JSON解析+ListView渲染的餐厅数据场景,常见错误点如下:

  • Model类字段定义和JSON结构不匹配:JSON中存在可选返回的字段,比如餐厅简介、营业时间这类可能为空的字段,在Model中被定义为非空类型,解析时直接强制类型转换、或者调用时用!强制解包都会触发报错。修复时需要将可选字段定义为可空类型(比如String?、int?),解析时做兼容处理。
  • ListView.builder的itemCount配置错误:如果itemCount写死为固定数值,或者赋值为大于实际解析得到的餐厅列表长度的数值,滚动到超出实际数据的下标位置时,访问restaurantList[index]!就会触发空校验错误,正确配置应为itemCount: restaurantList.length。
  • 嵌套JSON取值时未做判空:解析嵌套结构时直接用!解包父节点,比如json['data']!['restaurants'],如果接口返回的data字段为null就会直接报错,建议嵌套取值采用可选链写法:json['data']?['restaurants'],再配合空判断处理异常情况。
  • 异步数据未加载完成就渲染视图:接口请求是异步操作,如果未判断数据加载状态就直接构建ListView,此时餐厅列表还未初始化、处于null状态,访问时用!也会触发报错。建议渲染前先做判空加载处理:
// 示例代码
if (restaurantList == null) {
  return const Center(child: CircularProgressIndicator());
}
return ListView.builder(
  itemCount: restaurantList.length,
  itemBuilder: (context, index) {
    final currentRestaurant = restaurantList[index];
    // 后续渲染逻辑
  }
);
  • 渲染时直接强制解包可选字段:UI层渲染字段时直接写Text(currentRestaurant.description!),如果该字段为null就会触发报错,建议做空值 fallback 处理:Text(currentRestaurant.description ?? '暂无简介')。

内容的提问来源于stack exchange,提问作者Vinay Bakle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:48:02