为什么http.response不生效?代码中response.body与statusCode无法使用如何解决
问题原因梳理
- 核心问题是无限递归阻塞逻辑执行:你写的
getAllCategories方法最后一行直接调用了return getAllCategories();,属于无终止条件的自调用,函数会一直递归直到栈溢出,你编写的response解析、try语句逻辑完全没有被执行的机会。 - 作用域配置错误:
response、list都是定义在getAllCategories函数内部的局部变量,你把try解析逻辑写在了函数外部,外部作用域无法访问这两个变量,自然无法读取response.statusCode、response.body,也无法向list中添加元素。 - 类名不匹配:你定义的实体类名叫
Kategori,但方法返回值声明、实例化时用的都是Categories,类型完全不对应,就算逻辑跑通也会抛出类型异常。 - 代码细节错误:try语句没有闭合,catch块也缺少处理逻辑和闭合大括号;同时循环变量和外层Map变量重名,会覆盖外层值导致取值错误。
修正后的代码参考
import 'package:http/http.dart' as http; import 'dart:convert'; // 统一类名,避免类型不匹配 class Categories { int? id; String? name; Categories({ this.id, this.name }); Future<List<Categories>> getAllCategories() async { List<Categories> list = []; try { // 所有请求、解析逻辑都放在函数内部 http.Response response = await http.get(Uri.parse('https://www.catshops.com/getAllCategories')); if (response.statusCode == 200) { Map<String, dynamic> resMap = json.decode(response.body); // 循环变量不要和外层变量重名 for (var item in resMap['categories']) { list.add(Categories(id: item['id'], name: item['name'])); } } } catch (e) { // 可自行补充异常处理逻辑 print('请求异常: $e'); } // 直接返回处理完成的列表,禁止递归调用自身 return list; } }
内容的提问来源于stack exchange,提问作者gegentierversuche
相关产品推荐
相关产品推荐

