繁体   English   中英

具有空安全性的 Flutter 表单验证

[英]Flutter Form validation with null safety

TextFormField validate 参数采用一个函数,如果字段内容有效则返回 null,如果内容无效则返回字符串。 我的颤振项目中有 null 安全性,我无法从我的 validate 函数中返回 null。 如何编写一个启用空安全的有效验证函数?

AppWidget.buildUserInput(
     hint: 'Referral code',
     borderRadius: BorderRadius.circular(5),
     prefixIcon: Icon(Icons.local_offer_outlined),
     onSaved: (val) => model.save(
     CreateAccountViewModel.REFERRAL_CODE, val!),
     validate: (val) {
         return null; // The return type 'Null' isn't a 'String', as required by the 
                       //closure's context
         },
      ),

我找到了解决方案,我将自定义验证函数的返回类型设置为可为空,这样我就可以返回 null。 感谢你们。

static Widget buildUserInput(
      {String? hint,
      String? labelText,
      TextAlign textAlign = TextAlign.start,
      required Function(String? val) onSaved,
      Function(String val)? onChanged,
      required String? Function(String? val)? validate,
      TextInputType? keyboardType,
      BorderRadius borderRadius = BorderRadius.zero,
      TextEditingController? controller,
      String? initialValue,
      Widget? suffixIcon,
      ...

问题不清楚。 所以如果你想使用 Flutter Form()。 您需要一个表单键 = GlobalKey()。 如果您想在无效时收到警告,则不能返回 ''。 当您的值无效时,它会发出红色警告。

   Form(
      key: GlobalKey<FormState>()
      child: TextFormField(
        validator: (value) {
          if (value invalid) {
            return '';
          }
          return null;
        },
      ),
    )

您可以按照此示例来解决您的问题。 假设这是我用于电子邮件验证的 TextFormField:-

          TextFormField(
          decoration: InputDecoration(
              labelText: 'EMAIL',
              labelStyle: TextStyle(
                  fontFamily: 'Trueno',
                  fontSize: 12.0,
                  color: Colors.grey.withOpacity(0.5)),
              focusedBorder: UnderlineInputBorder(
                borderSide: BorderSide(color: greenColor),
              )),
          onChanged: (value) {
            this.email = value;
          },
          validator: (value) =>
              value!.isEmpty ? 'Email is required' : validateEmail(value))

这是我的电子邮件验证方法:-

  String? validateEmail(String value) {
RegExp regex = RegExp(some regex pattern);
if (!regex.hasMatch(value))
  return 'Enter Valid Email';
else
  return null; }

要在返回null 时修复错误,我们必须将validateEmail(String value)方法的返回类型设为可空。即String?

这是我一直在努力解决的一个问题,所以我希望我能帮助一些人。 在我将我的项目迁移到空安全后,我收到了这个错误:

错误:不能将参数类型“字符串函数(字符串)”分配给参数类型“字符串? 函数(字符串?)?

这意味着我的函数应该返回一个可以为空的字符串,并且参数也应该可以为空。

所以我声明了我的验证器函数如下:

下面是我创建的函数示例:

对于那些试图弄清楚全貌的人,我会发布完整的代码。

这是我创建的自定义 TextFeild:<\/strong>

这是验证器类:<\/strong>

这是我如何使用这些 textFeilds 之一<\/strong>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM