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

调用返回http.Response的方法时,无法访问状态码和响应体如何解决?

问题描述

我用单独Dart文件中的Services类提供API服务:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class Services {
  static Future<http.Response> login(String username, String password) async {
    var url = "https://10.0.2.2:5001/api/Login/LoginSystem";
    Map data = {"Username": username, "Password": password};
    var body = json.encode(data);
    var response = await http.post(Uri.parse(url),
        headers: {
          "content-type": "application/json",
          "accept": "application/json"
        },
        body: body);

    print(response.statusCode);
    print(response.body);
    return response;
  }
}

调用该服务的login方法时,无法访问response.statusCode和response.body:

onPressed: () {
    var response = Services.login("fa2020", "123");
    if (response.statusCode == 200) {
    showDialog<String>(
    context: context,
    builder: (BuildContext context) =>
    const AlertDialog(
        title: Text("ALert"),
        content: Text(response.body),
        ));
    }
}
修复方案

问题核心是异步方法未正确处理:Services.login返回的是Future<http.Response>,直接赋值得到的是未完成的Future对象,而非实际的响应数据。同时AlertDialog的const修饰符也会导致动态值无法传入,需要同步修正。

修改后的调用代码如下:

onPressed: () async { // 添加async标记异步函数
    // 用await等待login方法执行完成,获取真实的Response对象
    var response = await Services.login("fa2020", "123");
    if (response.statusCode == 200) {
      showDialog<String>(
        context: context,
        // 去掉const,因为response.body是运行时动态值
        builder: (BuildContext context) => AlertDialog(
          title: const Text("Alert"), // 固定文本可保留const
          content: Text(response.body),
        ),
      );
    }
}

关键要点

  • 在onPressed回调前加async,声明这是异步函数
  • 调用Services.login时加await,等待Future执行完毕,此时才能拿到真实的http.Response对象,正常访问statusCode和body属性
  • 移除AlertDialog的const修饰符,因为response.body是运行时生成的动态内容,无法作为常量参数传入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:30:55