尽管不满足条件,但颤振的表单验证仍然通过



我正在构建一个具有多个TextFormFields的Flutter应用程序。我创建了一个可重用的TextFormfield Widget来保持模块化。问题是,当点击提交按钮时,即使文本表单字段无效,它也会像有效一样运行。

我的TextFormField小部件:

class AndroidTextField extends StatelessWidget {
final ValueChanged<String> onChanged;
final String Function(String?)? validator;
const AndroidTextField(
{Key? key,
required this.onChanged,
this.validator})
: super(key: key);
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Container(
width: size.width * .9,
child: TextFormField(
validator: validator,
onChanged: onChanged,
);
}
}

如何在Scaffold中使用

AndroidTextField(
validator: (value) {
if (value == null || value.isEmpty) {
return 'Enter a valid name';
}
return '';
},
onChanged: (val) {
setState(() {
lastName = val;
});
}),

的形式
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Form(
key: _formKey, 
AndroidTextField(
validator: (value) {
if (value == null || value.isEmpty) {
return 'Enter a valid name';
}
return '';
},
onChanged: (val) {
setState(() {
firstName = val;
});
}),
TextButton(
child: Text('Press),
onPressed:(){
if (_formKey.currentState!.validate()){
//do something
}else{
//don't do the something
}
}
));
}

我觉得一个颤振验证器应该返回null如果有效,而不是一个空字符串。

所以代码应该是:
AndroidTextField(
validator: (value) {
if (value == null || value.isEmpty) {
return 'Enter a valid name';
}
return null;
}
...

同时,尝试:

final String? Function(String?) validator;

不是

final String Function(String?)? validator;

最新更新