Flutter调用API报错:期望Iterable<dynamic>类型却得到Null
解决Flutter API数据获取中productData为Null的问题
问题原因
你调用的JSON Bin v3接口返回的JSON结构里,products字段并非直接在顶层,而是嵌套在record字段内部。直接通过decodedData["products"]取值自然会得到Null,进而触发后续Iterable转换的错误。
修复后的代码
url = "https://api.jsonbin.io/v3/b/6405e540c0e7653a05834f86"; loadData() async{ // 移除不必要的延迟等待 final response = await http.get(Uri.parse(url)); // 先判断响应状态码是否正常 if(response.statusCode == 200){ final catalogJson = response.body; final decodedData = jsonDecode(catalogJson); // 先获取record层级,再取products字段 var productData = decodedData["record"]["products"]; // 增加空值判断,避免Null传递到后续逻辑 if(productData != null){ CatalogModel.items = List.from(productData).map<Item>((item) => Item.fromMap(item)).toList(); setState(() {}); } } }
额外优化点
- 删除无意义的
Future.delayed,它只会延长数据加载时间 - 增加HTTP状态码校验,确保接口请求成功再解析数据
- 可以添加try-catch包裹JSON解析和数据转换逻辑,处理格式异常或其他意外情况
内容的提问来源于stack exchange,提问作者Shubham Shinde
相关产品推荐
相关产品推荐

