[英]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.