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

Flutter对接登录API带参仍提示邮箱密码必填的解决

Flutter登录接口对接报错修复方案

问题根因

从日志和代码可定位两处核心错误,直接导致服务器收不到有效参数、判断逻辑失效:

  • 请求体传值错误,最终提交到服务器的是空内容
  • 响应判断逻辑完全不匹配后端返回的JSON结构

具体修复步骤

1. 修正请求传参逻辑

你当前代码的请求行存在明显错误:

var response = await http.post(url, body: json.encode(data[email]));

这里data[email]是把你输入的邮箱字符串(比如rashid.david12@gmail.com)作为key去取data字典的值,但data字典的键只有email、password,不存在对应邮箱字符串的键,最终取到的值是null,相当于给服务器传了空请求体,才会触发“email、password字段必填”的报错。
根据接口实际接收格式调整传参(从报错格式可判断是Laravel风格接口):

  • 若接口接收表单格式(application/x-www-form-urlencoded,Laravel默认接收格式),直接传完整数据字典即可:
    var response = await http.post(
      Uri.parse(url),
      body: data,
    );
    
  • 若接口要求接收JSON格式,需添加JSON请求头,编码完整数据字典:
    var response = await http.post(
      Uri.parse(url),
      headers: {'Content-Type': 'application/json'},
      body: json.encode(data),
    );
    

注意:http包新版本要求传入的地址必须转为Uri类型,不能直接传字符串,否则会触发参数格式错误。

2. 重写响应判断逻辑

你当前代码直接把解析后的JSON结果和字符串'success'对比,但后端实际返回结构为:

  • 失败时返回带errors字段的错误对象(和你日志里打印的结构一致)
  • 成功时一般返回包含登录token、用户信息的JSON对象,并非纯字符串
    正确处理逻辑参考:
// 解析服务器返回数据
final responseData = jsonDecode(response.body);
// 登录成功判断:状态码正常且无错误字段
if (response.statusCode == 200 && responseData['errors'] == null) {
  setState(() => visible = false);
  Navigator.pushNamed(context, '/home');
} else {
  // 登录失败处理:提取错误信息并提示
  setState(() => visible = false);
  final errMsg = (responseData['errors'] as List).join('\n');
  showDialog(
    context: context,
    builder: (context) => AlertDialog(
      title: const Text('登录失败'),
      content: Text(errMsg),
      actions: [
        TextButton(
          onPressed: () => Navigator.pop(context),
          child: const Text('确定'),
        )
      ],
    ),
  );
}

3. 补充配置(必做)

因为接口用的是http://明文地址,Android 9+默认禁止明文流量传输,需要在android/app/src/main/AndroidManifest.xml的<application>标签下添加配置:

android:usesCleartextTraffic="true"

否则就算参数修正完成,请求也可能被系统拦截无法发出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 21:27:03