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

Flutter调用http.get时无法访问result.body属性报错如何解决

问题描述

Flutter开发中使用http包发起网络请求时,无法访问返回结果的.body属性,即使执行print(result.body);语句也会触发错误,报错信息如下:
获取到的报错信息
原有问题代码:

String url = "https://jsonplaceholder.typicode.com/posts/1/comments";
var result = http.get(Uri.parse(url));
apiList = jsonDecode(result.body)
报错原因

http.get()是异步方法,返回值类型为Future<Response>。上述代码没有使用await等待异步请求执行完毕,此时变量result存的是未完成的Future对象,不是请求完成后返回的Response响应实例,本身不存在.body属性,直接访问就会触发报错。

修复方案
  • 调用http.get()时添加await关键字,等待请求执行完成,拿到真实的Response响应对象
  • 包裹请求逻辑的函数必须添加async关键字,标记为异步函数
  • 拿到响应后先校验状态码,确认请求成功(状态码200)后再解析响应体,避免接口报错时触发解析异常
  • 安卓端运行前,需要在android/app/src/main/AndroidManifest.xml的<manifest>节点下添加网络权限,否则请求会被系统拦截:
<uses-permission android:name="android.permission.INTERNET" />

修复后的可正常运行代码:

// 顶部不要遗漏导包
import 'package:http/http.dart' as http;
import 'dart:convert';

// 抽离独立的异步请求方法
Future<void> fetchCommentList() async {
  const String url = "https://jsonplaceholder.typicode.com/posts/1/comments";
  // 等待请求完成,获取真实响应对象
  final http.Response result = await http.get(Uri.parse(url));

  if (result.statusCode == 200) {
    final apiList = jsonDecode(result.body);
    // 后续写数据赋值、UI刷新逻辑即可
    print('请求成功,返回数据:$apiList');
  } else {
    print('请求失败,状态码:${result.statusCode}');
  }
}

注意:如果是在StatefulWidget的initState生命周期中触发请求,不要直接给initState方法加async,在initState内部调用上述异步方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:09:25