首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用dio的post请求中出现颤动错误403

使用dio的post请求中出现颤动错误403
EN

Stack Overflow用户
提问于 2021-10-18 19:08:13
回答 1查看 509关注 0票数 0

我有一个仇恨的问题。我正在尝试使用dio登录,login方法工作得很好,但当我放置无效凭据时,dio会给我这个错误:

DioError

Error in execution

我创建了一个布尔函数,它将返回true或false,如果statuscode为200,它将返回true,否则将返回false,但当使用正确的凭据登录时,一切正常,一切正常,但当使用无效凭据登录时,上面的错误会导致错误。我使用共享首选项将tolken存储在应用程序中,逻辑很简单,如果是200,我会登录应用程序,否则它会显示我在另一个文件中创建的快餐栏,这是我的代码:

代码语言:javascript
复制
loginFinal() async {
    if (formKey.currentState!.validate()) {
      bool loginIsOk = await loginConect();
      if (loginIsOk) {
        Get.offAllNamed("/home");
        await Future.delayed(const Duration(seconds: 1));
        message(MessageModel.info(
          title: "Sucesso",
          message: "Seja bem vindo(a) influenciador(a)",
        ));
      } else {
        loaderRx(false); //LOADER
        message(MessageModel.error(
          title: "Erro",
          message: "Erro ao realizar login",
        ));
      }
    }
  }

  //LOGICA DE ENTRAR NO APP

  Future<bool> loginConect() async {
    final dio = Dio();
    String baseUrl = "https://soller-api-staging.herokuapp.com";

    loaderRx(true); //LOADER

    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();

    final response = await dio.post(
      baseUrl + "/auth",
      data: jsonEncode(
        {
          "login": emailController.text,
          "senha": passWordController.text,
        },
      ),
      options: Options(
        headers: {'Content-Type': 'application/json; charset=UTF-8'},
        method: "post",
      ),
    );
    if (response.statusCode == 200) {
      await sharedPreferences.setString(
        "token",
        "string: ${response.data["string"]}",
      );
      print("Resposta: ${response.data["string"]}");

      loaderRx(false);

      return true;
    } else {
      print("RESPOSTA: ${response.data}");

      return false;
    }
    
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-18 19:49:09

如果头部中的状态码不是200,Dio总是会抛出异常,你需要使用try catch来捕捉异常。

在catch方法中,您可以检查错误类型是否为DioError,然后处理该异常。

下面是我在代码中用来处理此行为的登录过程的代码片段。

代码语言:javascript
复制
Future<SignInApiResponse> signInUser(String _email,String _password) async {
try {
  final dio = Dio(ApiConstants.headers());
  final Response response = await dio.post(
    ApiConstants.baseUrl + ApiConstants.signInUrl,
    data: {"email": _email,
"password": _password,
    },
      );
      if (response.statusCode == 200) {
        return SignInApiResponse.fromJson(response.data);
      } else {
        return SignInApiResponse(message: response.toString());
      }
    } catch (e) {
      if (e is DioError) {
        if (e.response?.data == null) {
          return SignInApiResponse(message: Messages.loginFailed);
        }
        return SignInApiResponse.fromJson(e.response?.data);
      } else {
        return SignInApiResponse(message: e.toString());
      }
    }
  }

希望这会有所帮助,如果不是这样,您可以始终使用在类似情况下不抛出异常的http package

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69621314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档