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

Flutter无法获取Laravel返回的注册验证错误数组问题求助

Flutter无法获取Laravel返回的注册验证错误数组问题求助

我来帮你排查这个问题!你遇到的情况其实是Dio的默认行为导致的,我之前也踩过这个坑😅

首先,Dio在接收到4xx、5xx这类非成功状态码时,默认会直接抛出DioException异常,而不是进入正常的响应处理流程。所以你代码里的if(result.statusCode == 422)这段逻辑根本不会被执行到,自然拿不到Laravel返回的错误数组。另外还有个小细节:Dio的响应数据是存在data字段里的,不是你写的body,这也是影响你获取数据的一个点。

解决方案一:捕获DioException并处理响应

把请求逻辑用try-catch包裹,在catch块里获取异常的response对象,这样就能拿到完整的错误数据了:

on<SignUpUser>((event, emit) async {
  final dio = getIt<Dio>();
  try {
    dynamic result = await dio.post('/api/register', data: {
      'name': event.name,
      'email': event.email,
      'password': event.password,
      'password_confirmation': event.passwordConfirmation
    }, options: Options(
      headers: {
        "Accept": "application/json",
        "Content-Type": "application/json"
      },
    ));
    // 处理注册成功的逻辑
  } on DioException catch (e) {
    // 检查是否有响应且状态码为422
    if (e.response != null && e.response!.statusCode == 422) {
      // 这里就能正常打印Laravel返回的错误数组了
      print(e.response!.data['errors']);
    } else {
      // 处理其他请求异常,比如网络错误、服务器500等
      print('请求失败:${e.message}');
    }
  } catch (e) {
    // 捕获其他类型的异常
    print('未知错误:$e');
  }
});

解决方案二:修改Dio的validateStatus配置

如果你不想用try-catch,也可以通过设置validateStatus选项,让Dio不把422这类状态码当成异常:

on<SignUpUser>((event, emit) async {
  final dio = getIt<Dio>();
  dynamic result = await dio.post('/api/register', data: {
    'name': event.name,
    'email': event.email,
    'password': event.password,
    'password_confirmation': event.passwordConfirmation
  }, options: Options(
    // 让状态码小于500的都不抛出异常
    validateStatus: (status) => status! < 500,
    headers: {
      "Accept": "application/json",
      "Content-Type": "application/json"
    },
  ));

  if(result.statusCode == 422){
    print(result.data['errors']); // 这里要改成result.data
  }
});

额外检查点

最后再确认下Laravel后端的配置:

  • 确保返回的响应格式是JSON,并且Content-Type头为application/json
  • 验证错误的返回结构确实是{"errors": {"字段名": ["错误信息"]}}这种格式

这样调整后应该就能正常获取到Laravel返回的验证错误数组了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:33:16