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
相关产品推荐
相关产品推荐

