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

Flutter登录报错FormatException: Unexpected end of input 求解

解决Flutter登录时的FormatException错误

你遇到的FormatException: Unexpected end of input错误,本质是尝试解析空字符串或非合法JSON格式的响应体导致的,结合你的代码和API地址,按以下步骤排查修复:


1. 先确认API返回的实际内容

在获取响应后立刻打印返回体,明确API到底返回了什么(是空字符串、HTML错误页还是非JSON内容):

var response = await http.post(Uri.parse(puclicUrl),
    body: <String, String>{
      "username": username.text,
      "password": password.text,
    });
print('API返回内容: ${response.body}'); // 新增这行打印

执行登录操作后,查看控制台输出,就能定位问题根源——比如可能API返回空字符串、404页面的HTML,或者格式错误的JSON。

2. 调整JSON解析的逻辑顺序

你的代码目前是先解析再判断响应体是否为空,这会直接触发空内容的解析错误。改成先判断非空再解析,同时给解析加单独的异常捕获:

if (response.statusCode == 200) {
  print('API返回内容: ${response.body}');
  if (response.body.isNotEmpty) {
    try {
      var data = jsonDecode(response.body); // response.body本身是String,无需toString()
      // 这里可以加一步判断:比如检查data是否包含预期的登录成功标识(如token、用户ID)
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => const HomePage()),
      );
      print("Logged in");
    } catch (jsonErr) {
      print('JSON解析失败: ${jsonErr.toString()}');
    }
  } else {
    print('API返回空内容,登录逻辑异常');
  }
} else {
  print('请求失败,状态码: ${response.statusCode}');
}

3. 检查请求格式是否匹配API要求

你的代码目前用的是form-data格式提交参数,但有些API要求JSON格式的请求体。如果测试后发现API不支持form-data,就修改请求头和body格式:

var response = await http.post(
  Uri.parse(puclicUrl),
  headers: <String, String>{
    'Content-Type': 'application/json; charset=UTF-8', // 修正原拼写错误的Context-Type
  },
  body: jsonEncode(<String, String>{
    "username": username.text,
    "password": password.text,
  }),
);

注意:这一步需要先通过Postman等工具测试API,确认它接受的参数格式是form-data还是JSON。

4. 清理冗余代码

原代码里有重复的json.decode(response.body)调用,还有注释掉的冗余逻辑,直接删除这些无效代码即可。


内容的提问来源于stack exchange,提问作者Pimpi Rimpà

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:00:45