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

为什么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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:30:01