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

Flutter注册页遇FormatException错误,数据无法插入本地数据库求助

解决Flutter注册页面插入数据时的FormatException错误

错误根源分析

FormatException: Unexpected end of input 本质是你尝试解析的HTTP响应不是有效JSON格式,大概率是服务器端PHP脚本未返回标准JSON,或是返回了空内容、错误提示文本。结合你的代码,还有几处明显逻辑问题需要修正:

分步修复方案

1. 修正表单验证逻辑

你当前用||(或)判断字段是否为空,这会导致只要有一个字段不为空就提交请求,空数据传到服务器后触发PHP错误,返回非JSON内容。必须改成&&(且),确保所有必填字段都已填写:

if(nama.text.isNotEmpty && email.text.isNotEmpty && password.text.isNotEmpty ){
  // 提交请求逻辑
}else{
  print("请填写所有必填字段");
}

(推荐用isNotEmpty替代!="",更符合Dart代码规范)

2. 先校验响应再解析JSON

在调用jsonDecode前,必须先检查HTTP响应状态码和内容是否有效,避免解析空内容或错误内容:

var res = await http.post(Uri.parse(uri), body: {
  "nama": nama.text,
  "email": email.text,
  "password": password.text
});

// 先判断HTTP请求是否成功
if (res.statusCode == 200) {
  // 确保响应内容非空再解析
  if (res.body.isNotEmpty) {
    try {
      var response = jsonDecode(res.body);
      // 注意:如果PHP返回的是布尔值,不要用字符串"true"比较
      if(response["success"] == true){ 
        print("数据保存成功");
        // 只有插入成功才跳转页面
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const MainHome()),
        );
      }else{
        print("数据保存失败: ${response["message"] ?? "未知错误"}");
      }
    } catch (e) {
      print("JSON解析错误: $e");
      print("服务器返回内容: ${res.body}"); // 打印返回内容方便排查问题
    }
  } else {
    print("服务器返回空内容");
  }
} else {
  print("HTTP请求失败,状态码: ${res.statusCode}");
}

3. 调整页面跳转时机

你当前调用insertrecord()后立刻跳转,完全不等待请求结果。必须把跳转逻辑放在请求成功的分支里,确保数据插入完成后再跳转到首页。

4. 检查服务器端PHP脚本(核心)

这是最可能的问题根源,确保insert_data.php满足以下要求:

  • 无论成功/失败,都返回标准JSON格式,示例:
    // 插入成功时
    echo json_encode(["success" => true, "message" => "数据插入成功"]);
    // 插入失败时
    echo json_encode(["success" => false, "message" => "数据库连接失败"]);
    
  • 禁止输出任何额外内容(比如调试echo、HTML错误页面),否则会破坏JSON结构。
  • 直接用Postman或浏览器模拟POST请求,查看PHP返回的内容是否为有效JSON,排查数据库连接、SQL语法等问题。

额外优化建议

  • 将RegisterPage改为StatefulWidget,或使用Form组件配合GlobalKey实现更严谨的表单验证(比如邮箱格式校验)。
  • 给密码输入框添加obscureText: true属性,隐藏密码输入内容。
  • 提交请求时添加加载状态,防止用户重复点击按钮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:47:46