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

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;