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

如何在发送HTTP请求的登录方法中实现try语句并返回状态码?

实现登录方法异常时返回对应状态码

要实现异常时返回状态码而非打印信息,你可以针对不同类型的异常构造对应的http.Response对象,确保方法始终返回符合类型要求的响应,同时携带错误状态码和信息。以下是修改后的代码:

import 'dart:convert';
import 'dart:io'; // 导入用于捕获网络类异常
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import '../Services/baseHttp.dart' as base;

class Services {
  late var token = '';

  Future<http.Response> login(String username, String password) async {
    try {
      var url = base.BaseURL.loginUrl;
      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);
      token = response.body;
      print(token);
      return response;
    } on SocketException {
      // 网络连接异常,返回408请求超时状态码
      return http.Response(json.encode({"error": "网络连接失败"}), 408);
    } on FormatException {
      // JSON解析异常,返回400请求无效状态码
      return http.Response(json.encode({"error": "数据解析失败"}), 400);
    } catch (e) {
      // 其他未知异常,返回500服务器错误状态码
      return http.Response(json.encode({"error": "未知错误: $e"}), 500);
    }
  }
}

关键说明:

  • 捕获特定异常:通过on SocketException、on FormatException分别捕获网络连接、数据解析这类常见异常,返回对应HTTP标准状态码,让上层逻辑可以根据状态码区分错误类型。
  • 构造响应对象:在每个异常分支里,手动创建http.Response实例,包含错误描述的JSON body和对应状态码,保证方法返回值始终符合Future<http.Response>类型要求,避免返回空值。
  • 统一兜底处理:最后的catch (e)处理所有未匹配的异常,返回500状态码并携带异常信息,方便调试。

内容的提问来源于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.10 06:10:28