Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 密码不匹配时显示错误_Flutter_Validation_Dart - Fatal编程技术网

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),
孩子:表格(
键:_形式,
孩子:科伦