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请求,避免网络问题或服务器错误导致程序崩溃,同时给用户明确的异常提示。 - 登录失败判断:
- 如果API返回的
res为null(说明请求未获取到有效响应),直接触发错误提示。 - 如果
res.accessToken为空字符串,说明服务器验证账号密码失败,弹出“用户名/密码错误”提示。
- 如果API返回的
- 交互统一:用
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
相关产品推荐
相关产品推荐

