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

Flutter(Dart)如何正确接收服务器响应?问题排查求助

问题分析与解决方案

核心问题排查

你的问题主要出在两个方面:网络连接的localhost映射问题,以及缺少异常处理导致错误信息不明确。虽然服务器能正常创建用户,但Flutter端因为网络请求的基础问题无法正确接收响应。


1. 替换localhost为模拟器/真机可访问的地址

在移动设备(模拟器/真机)中,localhost指向的是设备自身,而非你的开发电脑。需要根据设备类型替换地址:

  • 安卓模拟器:用10.0.2.2代替localhost,这是安卓模拟器内置的主机IP映射地址
  • iOS模拟器:可直接用localhost,或你的电脑局域网IP
  • 真机:必须使用开发电脑的局域网IP地址(比如192.168.x.x)

修改后的URL代码示例:

// 安卓模拟器适配
final url = Uri.parse('http://10.0.2.2/create_user.php');
// 真机/局域网适配示例
// final url = Uri.parse('http://192.168.1.100/create_user.php');

2. 添加异常捕获与响应状态码校验

原代码未做任何异常处理,网络请求失败时会直接抛出错误,导致控制台仅显示“连接错误”却无法定位具体原因。同时,应先校验响应状态码,确保请求成功后再解析JSON。

修改后的完整方法:

Future<void> _sendLanguages(List<String> selectedLanguages, String firstName, String lastName, String email, String password) async {
  try {
    // 替换为适配设备的地址
    final url = Uri.parse('http://10.0.2.2/create_user.php');
    final response = await http.post(
      url,
      headers: {"Content-Type": "application/json"},
      body: jsonEncode({
        'first_name': widget.firstName,
        'last_name': widget.lastName,
        'email': widget.email,
        'password': widget.password,
        'languages': _selectedLanguages.map((language) => language.code).toList(),
      }),
    );

    // 先校验响应状态码
    if (response.statusCode == 200) {
      final jsonResponse = json.decode(response.body);
      // 显式判断布尔值,避免类型转换问题
      if (jsonResponse["success"] == true) {
        Navigator.pop(context);
      } else {
        print('服务器返回失败: ${jsonResponse["message"] ?? "未知错误"}');
      }
    } else {
      print('请求失败,状态码: ${response.statusCode}');
      print('响应内容: ${response.body}');
    }
  } catch (e) {
    // 捕获所有网络异常,打印详细错误信息
    print('网络请求异常: $e');
  }
}

3. 额外排查点

  • 真机测试时,确保开发电脑和移动设备处于同一局域网
  • 检查服务器是否允许跨域请求(本地开发一般无此问题,但部分服务器配置会限制来源)
  • 确认服务器返回的Content-Type头确实为application/json,避免JSON解析失败

内容的提问来源于stack exchange,提问作者Xlain 8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:03:34