尽管不满足条件,但颤振中的表单验证通过
Form validation in flutter passes despite not meeting conditions
我正在构建一个包含多个 TextFormField 的 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,
);
}
}
我如何在脚手架中使用它
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
}
}
));
}
我觉得 flutter 验证器应该 return 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;
我正在构建一个包含多个 TextFormField 的 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,
);
}
}
我如何在脚手架中使用它
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
}
}
));
}
我觉得 flutter 验证器应该 return 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;