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

Flutter登录功能:如何添加账号/密码错误提示判断逻辑?

解决方案

你需要在现有代码基础上补充登录失败的判断逻辑,同时处理API请求可能出现的异常(比如网络问题),具体修改如下:

void login(BuildContext context) async {
  AppFocus.unfocus(context);
  if (loginFormKey.currentState!.validate()) {
    try {
      final res = await apiRepository.login(
        LoginRequest(
          email: loginEmailController.text,
          password: loginPasswordController.text,
        ),
      );

      final prefs = Get.find<SharedPreferences>();

      if (res != null && res.accessToken.isNotEmpty) {
        // 登录成功逻辑
        prefs.setString(StorageConstants.token, res.accessToken);
        Get.toNamed(Routes.HOME);
        Get.snackbar("Berhasil", "Selamat Berhasil Login");
      } else {
        // 用户名/密码错误或登录失败
        Get.snackbar("登录失败", "用户名/密码错误");
      }
    } catch (e) {
      // 处理网络异常、服务器错误等情况
      Get.snackbar("登录失败", "网络异常或服务器错误,请稍后重试");
    }
  }
}

关键逻辑说明

  • 异常捕获:用try-catch包裹API请求,避免网络问题或服务器错误导致程序崩溃,同时给用户明确的异常提示。
  • 登录失败判断:
    1. 如果API返回的res为null(说明请求未获取到有效响应),直接触发错误提示。
    2. 如果res.accessToken为空字符串,说明服务器验证账号密码失败,弹出“用户名/密码错误”提示。
  • 交互统一:用Get.snackbar统一弹出消息,和成功提示保持一致的交互体验。

进阶优化(结合Postman返回调整)

如果你的API在登录失败时会返回明确的错误码或错误消息(比如Postman截图里的专属错误字段),可以进一步细化判断逻辑。假设你的LoginResponse模型包含error字段,可修改如下:

if (res != null) {
  if (res.accessToken.isNotEmpty) {
    // 成功逻辑
  } else if (res.error != null) {
    // 根据服务器返回的错误类型精准提示
    Get.snackbar(
      "登录失败", 
      res.error == "invalid_credentials" ? "用户名/密码错误" : res.error
    );
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:20:30