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

Flutter调用Edamam API无响应 求问题排查帮助

解决Edamam API调用无响应且无输出的问题

以下是针对你代码问题的具体修复步骤:

1. 修复方法语法错误

你的getAPiData方法缺少闭合的},这会导致代码编译异常,先补上:

getAPiData() async {
  var response = await http.get(Uri.parse(url));
  Map json = jsonDecode(response.body);
  print(response.body);
} // 补上该闭合括号

2. 添加网络请求异常处理

网络请求可能因无网络、超时、API错误等静默失败,添加try-catch捕获异常并打印关键信息:

getAPiData() async {
  try {
    var response = await http.get(Uri.parse(url));
    print('响应状态码: ${response.statusCode}'); // 先打印状态码排查问题
    if (response.statusCode == 200) {
      Map<String, dynamic> jsonData = jsonDecode(response.body);
      print(response.body);
      // 后续数据解析逻辑
    } else {
      print('API请求失败,状态码: ${response.statusCode}');
    }
  } catch (e) {
    print('请求异常: $e');
  }
}

3. 正确解析Edamam API数据并更新UI

Edamam的返回数据中,食谱信息嵌套在hits数组的recipe对象里,需要解析后填充到list,并调用setState更新UI:

getAPiData() async {
  try {
    var response = await http.get(Uri.parse(url));
    print('响应状态码: ${response.statusCode}');
    if (response.statusCode == 200) {
      Map<String, dynamic> jsonData = jsonDecode(response.body);
      List<dynamic> hits = jsonData['hits'];
      setState(() {
        list = hits.map((hit) {
          Map<String, dynamic> recipe = hit['recipe'];
          return RecipeModel(
            image: recipe['image'],
            url: recipe['url'],
            source: recipe['source'],
            label: recipe['label'],
          );
        }).toList();
      });
      print('解析到${list.length}条食谱数据');
    } else {
      print('API请求失败,状态码: ${response.statusCode}');
    }
  } catch (e) {
    print('请求异常: $e');
  }
}

4. 检查Android网络权限

确保Android项目的android/app/src/main/AndroidManifest.xml中添加了网络权限,否则无法发起网络请求:

<uses-permission android:name="android.permission.INTERNET"/>

5. 优化RecipeModel解析(可选)

为了更规范地处理数据解析,给RecipeModel添加fromJson构造方法:

class RecipeModel{
  String? image;
  String? url;
  String? source;
  String? label;

  RecipeModel({this.image, this.url, this.source, this.label});

  RecipeModel.fromJson(Map<String, dynamic> json) {
    image = json['image'];
    url = json['url'];
    source = json['source'];
    label = json['label'];
  }
}

之后解析时可简化为:

list = hits.map((hit) => RecipeModel.fromJson(hit['recipe'])).toList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:20:25