我正在用 Flutter 制作一个应用程序。现在我已将validator
其用于验证电子邮件。但我希望如果有 google gmail 帐户或任何其他有效的电子邮件(实际上有用户),那么只有用户应该在应用程序中创建帐户。
例如 - 目前,如果我输入xyz@gmail.com
,那么该帐户也会在我的应用程序上创建,尽管此电子邮件不作为 google 帐户存在。
所以我的问题是,应用程序有什么方法应该首先验证(如果电子邮件是 gmail、outlook 或任何其他的有效帐户但应该是有效的)然后帐户将创建,否则它应该给出错误Enter valid email
???
我正在使用Firebase for Authentication
.
我的代码如下LoginPage.dart
class _LoginPageState extends State<LoginPage> {
final _formKey = GlobalKey<FormState>();
String _email, _password, error = '';
bool _obscureText = true;
final Auth _auth = Auth();
_toggle(){
setState(() {
_obscureText = !_obscureText;
});
}
_submit() async {
if(_formKey.currentState.validate()){
_formKey.currentState.save();
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('email', _email);
dynamic result = await _auth.login(_email, _password);
if(result == null){
setState(() => error = 'There is no user record found. Please create account first!!!');
} else {
Navigator.pushNamed(context, HomePage.id);
}
print(_email);
print(_password);
}
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: (){
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
},
child: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
'Login',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
Form(
key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 30.0, vertical: 10.0),
child: Padding(
padding: EdgeInsets.only(left: 5, right: 5, top: 5),
child: TextFormField(
decoration: InputDecoration(
labelText: 'Email',
border: InputBorder.none,
filled: true,
fillColor: Colors.white60,
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.blue,width: 2.0),
borderRadius: BorderRadius.circular(10.0)
),
/*enabledBorder: UnderlineInputBorder(
borderRadius: BorderRadius.circular(10.0)
)*/
),
validator: (input) => !input.contains('@')
? 'Please enter valid email'
: null,
onSaved: (input) => _email = input,
),
),
),
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 30.0, vertical: 10.0),
child: Stack(
alignment: const Alignment(0, 0),
children: <Widget>[
TextFormField(
decoration: InputDecoration(
labelText: 'Password',
border: InputBorder.none,
filled: true,
fillColor: Colors.white60,
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.blue,width: 2.0),
borderRadius: BorderRadius.circular(10.0)
),
),
validator: (input) => input.length < 6
? 'Must be at least 6 characters'
: null,
onSaved: (input) => _password = input,
obscureText: _obscureText,
),
Positioned(
right: 15,
child: Container(
height: 30,
child: ElevatedButton(
onPressed: (){
_toggle();
},
child: Text(
_obscureText ? 'Show' : 'Hide'
),
),
),
),
],
),
),
verticalSpaceMedium,
Container(
width: 200.0,
child: TextButton(
onPressed: _submit,
style: TextButton.styleFrom(
primary: Colors.white,
backgroundColor: Colors.blue,
elevation: 5,
),
child: Text(
'Login',
style: TextStyle(color: Colors.white, fontSize: 16.0),
),
),
),
verticalSpaceMedium,
Container(
width: 200.0,
child: TextButton(
style: TextButton.styleFrom(
primary: Colors.white,
backgroundColor: Colors.blue,
elevation: 5,
),
onPressed: () => Navigator.pushNamed(context, SignupPage.id),
child: Text(
'Create Account',
),
),
),
verticalSpaceMedium,
Text(error, style: TextStyle(color: Colors.red, fontSize: 14),)
],
),
)
],
),
),
),
);
上面的代码工作正常,但想添加我上面解释过的验证器。