Flutter 密码不匹配时显示错误
我想验证密码。小部件Flutter 密码不匹配时显示错误,flutter,validation,dart,Flutter,Validation,Dart,我想验证密码。小部件\u buildRepeatPasswordTF有一个TextFormField,用于验证值是否不等于\u buildPasswordTF()中的控制器 Widget\u buildPasswordTF(){ 返回列( crossAxisAlignment:crossAxisAlignment.start, 子项:[ 容器( 对齐:alignment.centerLeft, 装饰:kBoxDecorationStyle, 身高:60.0, 孩子:TextField( 控制器:
\u buildRepeatPasswordTF
有一个TextFormField
,用于验证值是否不等于\u buildPasswordTF()
中的控制器
Widget\u buildPasswordTF(){
返回列(
crossAxisAlignment:crossAxisAlignment.start,
子项:[
容器(
对齐:alignment.centerLeft,
装饰:kBoxDecorationStyle,
身高:60.0,
孩子:TextField(
控制器:_passwordController,
蒙昧文字:对,
样式:TextStyle(
颜色:color.fromRGBO(0,128,128,1),
fontFamily:“OpenSans”,
),
装饰:输入装饰(
边框:InputBorder.none,
contentPadding:仅限边集(顶部:14.0),
前缀:图标(
Icons.lock,
颜色:color.fromRGBO(0,128,128,1),
),
hintText:'密码',
hintStyle:kHintTextStyle,
),
),
),
],
);
}
小部件_buildRepeatPasswordTF(){
返回列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
容器(
对齐:alignment.centerLeft,
装饰:kBoxDecorationStyle,
身高:60.0,
子项:TextFormField(
控制器:_repeatPasswordController,
蒙昧文字:对,
样式:TextStyle(
颜色:color.fromRGBO(0,128,128,1),
fontFamily:“OpenSans”,
),
验证器:(值){
if(值!=\u passwordController.text){
返回“密码不匹配”;
}
返回null;
},
装饰:输入装饰(
边框:InputBorder.none,
contentPadding:仅限边集(顶部:14.0),
前缀:图标(
Icons.lock,
颜色:color.fromRGBO(0,128,128,1),
),
hintText:“重复密码”,
hintStyle:kHintTextStyle,
),
),
),
],
);
}
小部件_buildSignUpBtn(){
返回容器(
填充:边缘组。对称(垂直:25.0),
宽度:double.infinity,
孩子:升起按钮(
标高:5.0,
onPressed:()异步{
var password=\u passwordController.text;
var email=_emailController.text;
var nom=_nameController.text;
var cognoms=\u cognomsController.text;
试一试{
var r=wait_provider.attemptSignUp(电子邮件、密码、名称、cognoms、兴趣、sexe、数据执行);
if(r['success']==false){
显示对话框(上下文,“错误”,r['data']['message']);
}
否则{
显示对话框(上下文,“注册”,“验证正确性”)。然后((val){
Navigator.of(context.pop();
});
}
}捕捉(错误){
displayDialog(上下文,“Error”,err.response.toString());
}
},
填充:所有边缘设置(15.0),
形状:圆形矩形边框(
边界半径:边界半径。圆形(30.0),
),
颜色:color.fromRGBO(0,128,128,1),
子:文本(
‘注册主任se’,
样式:TextStyle(
颜色:颜色,白色,
字母间距:1.5,
字体大小:18.0,
fontWeight:fontWeight.bold,
fontFamily:“OpenSans”,
),
),
),
);
}
您错过了一个主窗体和GlobalKeys 这里是一个完整的功能示例:
import 'package:flutter/material.dart';
class Password extends StatefulWidget {
@override
_PasswordState createState() => _PasswordState();
}
class _PasswordState extends State<Password> {
final TextEditingController _password = TextEditingController();
final TextEditingController _confirmPassword = TextEditingController();
final GlobalKey<FormState> _form = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(30),
child: Form(
key: _form,
child: Column(children: <Widget>[
TextFormField(
controller: _password,
validator: (validator) {
if (validator.isEmpty) return 'Empty';
return null;
}),
TextFormField(
controller: _confirmPassword,
validator: (validator) {
if (validator.isEmpty) return 'Empty';
if (validator != _password.text)
return 'The passwords do not match';
return null;
}),
RaisedButton(
child: Text(
'Registrar-se',
),
elevation: 5.0,
onPressed: () async {
_form.currentState.validate();
})
])),
);
}
}
导入“包装:颤振/材料.省道”;
类密码扩展StatefulWidget{
@凌驾
_PasswordState createState();
}
类_PasswordState扩展状态{
最终文本编辑控制器_密码=文本编辑控制器();
最终TextEditingController _confirmPassword=TextEditingController();
最终的GlobalKey _form=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回填充(
填充:常量边集。全部(30),
孩子:表格(
键:_形式,
子项:列(子项:[
TextFormField(
控制器:_密码,
验证器:(验证器){
如果(validator.isEmpty)返回“空”;
返回null;
}),
TextFormField(
控制器:\ u确认密码,
验证器:(验证器){
如果(validator.isEmpty)返回“空”;
如果(验证器!=\u password.text)
返回“密码不匹配”;
返回null;
}),
升起的按钮(
子:文本(
‘注册主任se’,
),
标高:5.0,
onPressed:()异步{
_form.currentState.validate();
})
])),
);
}
}
我还使用RxDart和Streams使验证更加复杂 你错过了一个主要形式和GlobalKeys 这里是一个完整的功能示例:
import 'package:flutter/material.dart';
class Password extends StatefulWidget {
@override
_PasswordState createState() => _PasswordState();
}
class _PasswordState extends State<Password> {
final TextEditingController _password = TextEditingController();
final TextEditingController _confirmPassword = TextEditingController();
final GlobalKey<FormState> _form = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(30),
child: Form(
key: _form,
child: Column(children: <Widget>[
TextFormField(
controller: _password,
validator: (validator) {
if (validator.isEmpty) return 'Empty';
return null;
}),
TextFormField(
controller: _confirmPassword,
validator: (validator) {
if (validator.isEmpty) return 'Empty';
if (validator != _password.text)
return 'The passwords do not match';
return null;
}),
RaisedButton(
child: Text(
'Registrar-se',
),
elevation: 5.0,
onPressed: () async {
_form.currentState.validate();
})
])),
);
}
}
导入“包装:颤振/材料.省道”;
类密码扩展StatefulWidget{
@凌驾
_PasswordState createState();
}
类_PasswordState扩展状态{
最终文本编辑控制器_密码=文本编辑控制器();
最终TextEditingController _confirmPassword=TextEditingController();
最终的GlobalKey _form=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回填充(
填充:常量边集。全部(30),
孩子:表格(
键:_形式,
孩子:科伦