Flutter中如何遍历HTTP请求返回的响应,解决循环类型不兼容报错
错误原因
报错触发的核心原因是:http.get请求返回的secondResponse.body是原始JSON字符串类型,该类型没有实现Iterable接口,无法直接用于for-in循环遍历。你需要先将JSON字符串解析为Dart的结构化数据,再提取目标数组进行遍历。
修改步骤
- 首先在代码文件头部引入Dart内置的JSON转换库:
import 'dart:convert';
- 拿到响应后先解码JSON字符串,再提取返回结构中的
data数组进行遍历。
完整修改后的代码
http.get(Uri.parse("${Constants.BASE_URL}categories/SubWithSubSub/${itemModel.id}"), headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest', 'lang': Constants.LANG }).then((secondResponse) async { // 解码JSON字符串为Dart Map结构 Map<String, dynamic> res = jsonDecode(secondResponse.body); // 可选:先判断接口请求是否成功,避免异常 if (res['success'] != true) return; // 提取要遍历的分类数组 List categoryList = res['data']; // 遍历数组 for (var item in categoryList) { // 示例:打印对应字段值 print("分类id: ${item['id']}"); print("分类名称: ${item['name']}"); print("二级分类结构: ${item['subSub']}"); } });
额外优化建议
如果项目中该接口使用频次较高,建议为返回结构编写专门的实体类,通过序列化方式转换数据,可避免动态取值的类型错误问题。
内容的提问来源于stack exchange,提问作者Ahmed Wagdi
相关产品推荐
相关产品推荐

