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

Flutter注册新用户时触发FormatException异常的问题求助

Flutter注册新用户时触发FormatException异常的问题求助

大家好,我在开发Flutter应用的用户注册功能时,一直碰到FormatException异常,折腾了好久没找到问题所在,想请各位帮忙分析下。

先贴出我的核心代码:

validateUserEmail() async {
  try {
    var res = await http.post(
      Uri.parse(API.validateEmail),
      body: {
        'user_email': emailController.text.trim(),
      },
    );
    if(res.statusCode == 200) //The HTTP 200 OK success status response code indicates that the request has succeeded.
    {
      var resBodyOfValidateEmail = jsonDecode(res.body);
      if(resBodyOfValidateEmail['emailFound'] == true)
      {
        Fluttertoast.showToast(msg: "Email already in use.");
      }
      else
      {
        //register and save new user to database
        registerAndSaveUserRecord();
      }
    }
  }
  catch(e)
  {
    print(e.toString());
    Fluttertoast.showToast(msg: e.toString());
  }
}

registerAndSaveUserRecord() async {
  User userModel = User(
    1,
    nameController.text.trim(),
    emailController.text.trim(),
    passwordController.text.trim(),
  );
  try {
    var res = await http.post(
      Uri.parse(API.signUp),
      body: userModel.toJson(),
    );
    if(res.statusCode == 200)
    {
      var resBodyOfSignUp = jsonDecode(res.body);
      if(resBodyOfSignUp['success'] == true)
      {
        Fluttertoast.showToast(msg: "You have signup successfully.");
      }
      else
      {
        Fluttertoast.showToast(msg: "Error try again");
      }
    }
  }
  catch(e)
  {
    print(e.toString());
    Fluttertoast.showToast(msg: e.toString());
  }
}

问题描述:当我尝试注册新用户时,Android Studio里会抛出FormatException(我截图标记了疑似出问题的区域,但这里没法展示截图)。我已经仔细检查过代码,没发现拼写错误或者语法问题,实在搞不清哪里出问题了。

有没有大佬能帮我梳理下可能的原因,或者给一些排查的方向?


补充排查建议(结合常见问题整理)

  • 先确认API返回的内容是否为有效JSON:jsonDecode()抛出FormatException最常见的原因就是后端返回的不是合法JSON。可以在调用jsonDecode前先打印返回的body内容,看看是不是有HTML错误页面、多余字符或者格式错误:
    // 在validateUserEmail里添加打印
    print("Validate Email Response: ${res.body}");
    var resBodyOfValidateEmail = jsonDecode(res.body);
    
  • 检查API端点的正确性:确认API.validateEmail和API.signUp的URL是否完全正确,有没有少写路径、域名错误或者HTTP/HTTPS协议写错的情况,错误的URL可能返回404页面(HTML格式),导致解析失败。
  • 处理非200状态码的情况:目前代码只处理了statusCode == 200的场景,如果后端返回400、500等错误状态码,返回的内容大概率不是JSON,这时候调用jsonDecode就会报错。建议补充非200状态的处理逻辑:
    if(res.statusCode == 200) {
      // 现有解析逻辑
    } else {
      print("请求失败,状态码:${res.statusCode},返回内容:${res.body}");
      Fluttertoast.showToast(msg: "请求出错,请稍后重试");
    }
    
  • 检查User模型的toJson方法:确保userModel.toJson()转换后的参数格式完全符合后端API的要求,有没有字段名拼写错误、数据类型不匹配的情况,这些都可能导致后端返回非JSON的错误提示。
  • 查看完整的异常信息:catch块里直接把e.toString()显示在toast里可能信息不全,建议在控制台打印完整的异常栈信息,比如print("注册出错:$e");,这样能看到更详细的错误细节,帮助定位问题。

备注:内容来源于stack exchange,提问作者Jonar _254

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:27:57