Flutter中如何根据邮箱后缀控制登录页面跳转?
实现邮箱后缀校验与跳转控制
直接修改登录按钮的回调逻辑即可,核心是在非空校验通过后,判断邮箱后缀并跳转对应页面:
修改后的登录按钮回调代码
signInButton( context, () { if (_mail.text.isEmpty || _password.text.isEmpty) { Fluttertoast.showToast( msg: "Yanlış veya eksik bilgi girdiniz.", toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM_RIGHT, timeInSecForIosWeb: 3, backgroundColor: Colors.red, textColor: Colors.white, fontSize: 16.0); } else { final email = _mail.text.trim(); // 判断邮箱后缀 if (email.endsWith("@gmail.com")) { // 跳转到Gmail对应的页面,比如原有的StudentWidget Navigator.of(context).push(MaterialPageRoute( builder: (context) => const StudentWidget(), )); } else if (email.endsWith("@hotmail.com")) { // 跳转到Hotmail对应的页面,替换成你的目标页面 Navigator.of(context).push(MaterialPageRoute( builder: (context) => const HotmailTargetWidget(), )); } else { // 后缀不匹配时的提示 Fluttertoast.showToast( msg: "Desteklenmeyen e-posta son ekleri.", toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM_RIGHT, timeInSecForIosWeb: 3, backgroundColor: Colors.orange, textColor: Colors.white, fontSize: 16.0); } } }, false, )
关键说明
- 用
trim()去除邮箱前后空格,避免输入空格导致判断错误 - 用
endsWith()方法精准匹配邮箱后缀,比contains()更可靠(防止邮箱中间出现这些字符串的情况) - 新增了后缀不匹配的提示逻辑,提升用户体验
额外优化建议
你当前TextFormField的validator逻辑存在问题(if (value == "@hotmail") return 'Hata';),可以改成更合理的邮箱格式校验,提前在输入阶段给出提示:
validator: (value) { if (value == null || value.isEmpty) { return "E-posta boş olamaz"; } // 基础邮箱格式校验 final emailRegex = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$'); if (!emailRegex.hasMatch(value)) { return "Geçersiz e-posta formatı"; } // 提前校验后缀合法性 if (!value.endsWith("@gmail.com") && !value.endsWith("@hotmail.com")) { return "Sadece @gmail.com veya @hotmail.com adresleri desteklenir"; } return null; },
内容的提问来源于stack exchange,提问作者ckot
相关产品推荐
相关产品推荐

