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

为何Dart DevTools的Network页面不显示响应内容?

Dart DevTools Network页面Response标签无内容问题排查

我发起了一个指向http://postman-echo.com/get?foo=bar的简单请求,但Dart DevTools的Network页面中Response标签未显示任何内容。想知道这是bug,还是需要进行某些设置才能默认显示结果?

发起请求的代码

var headers = {'Content-Type': 'application/json'};
var request = http.Request('GET', Uri.parse('http://postman-echo.com/get?foo=bar'));

request.headers.addAll(headers);

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
    dynamic jsonData = jsonDecode(await response.stream.bytesToString());
}

Network页面截图

Network页面截图


原因分析

这不是bug,核心问题出在StreamedResponse的特性上:当你调用response.stream.bytesToString()时,流数据已经被一次性消费完毕,而Dart DevTools默认不会主动缓存流内容,因此无法在Network标签页中展示响应结果。

解决方法

有两种可行方案:

  • 改用http.get()方法:该方法会自动处理响应并缓存内容,DevTools能直接捕获完整响应:
var headers = {'Content-Type': 'application/json'};
var response = await http.get(
  Uri.parse('http://postman-echo.com/get?foo=bar'),
  headers: headers,
);

if (response.statusCode == 200) {
  dynamic jsonData = jsonDecode(response.body);
}
  • 手动缓存流数据:如果必须使用StreamedResponse,可以先将流内容缓存为字节列表,再从缓存中读取:
var headers = {'Content-Type': 'application/json'};
var request = http.Request('GET', Uri.parse('http://postman-echo.com/get?foo=bar'));
request.headers.addAll(headers);

http.StreamedResponse response = await request.send();

// 先缓存流内容
List<int> bytes = await response.stream.toList();
// 从缓存读取并解析
dynamic jsonData = jsonDecode(utf8.decode(bytes));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:42:43