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

Flutter点击按钮提交数据至API失败,直接请求API却成功

Flutter API提交失败排查与解决

你的代码进入catch块返回"failed",说明请求过程中抛出了异常,以下是具体排查和解决步骤:

第一步:捕获具体异常信息

首先修改registercontroller.dart中的catch逻辑,打印详细错误,才能定位问题:

catch (e) {
  print('请求异常详情: $e'); // 打印具体错误,比如网络错误、证书问题等
  return "failed";
}

重新运行后查看控制台输出的错误信息,这是定位问题的关键。

常见问题及解决方法

1. 网络权限缺失

  • Android:打开android/app/src/main/AndroidManifest.xml,添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • iOS:打开ios/Runner/Info.plist,添加ATS配置(若需要允许HTTPS请求):
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

2. URL格式错误

你的API URL末尾带有多余的问号,去掉后再尝试:

Uri.parse("https://********.in/index.php")

3. 请求内容类型不匹配

如果API要求接收JSON格式的请求体,而非默认的表单格式,修改请求代码:

final response = await http.post(
  Uri.parse("https://********.in/index.php"),
  headers: {'Content-Type': 'application/json'},
  body: jsonEncode({
    'act': "register",
    'name': name,
    'mobile': mobileno,
  }),
);

4. SSL证书验证失败

若目标网站的SSL证书不被系统信任,会导致请求失败。可临时添加证书信任(仅用于测试,上线需修复证书问题):

  1. 创建自定义HttpOverrides类:
import 'dart:io';

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
  }
}
  1. 在main函数中初始化:
void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(const Register());
}

5. 参数名称不匹配

确认直接调用API时使用的参数名称与代码中完全一致,比如API是否接受mobile而非mobileno,act参数是否为register,避免拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:57:16