所以我遇到了一个问题,即我的TextFormField中的验证器无法验证文本字段中的值...
下面是我整个警报对话框的代码:
showDialog(
barrierDismissible: false,
context: context,
builder: (context) {
return WillPopScope(
onWillPop: () async => false,
child: AlertDialog(
title: Text('Full name :'),
content: Form(
key: _nameFormKey,
child: TextFormField(
controller: displayNameController,
validator: (value) {
if (!(value.length > 5) && value.isNotEmpty) {
return 'Please set your full name';
}
return null;
},
),
),
actions: <Widget>[
new FlatButton(
child: Text('CONFIRM'),
onPressed: () {
if (_nameFormKey.currentState.validate()) {
// prefs.setString(
// 'displayName', displayNameController.text);
// Navigator.of(context).pop();
// displayNameController.clear();
print('validated');
}
},
)
],
));
})
即使我在文本字段中未输入任何值,当我单击按钮时,它也会在调试控制台中打印“已验证”
答案 0 :(得分:1)
对于全名验证,我这样做:
在您的TextFormField中,验证程序尝试执行此类操作
validator: (value) {
if (value.isEmpty) {
// name is empty, don't validate
return S.of(context).key('errorEmptyField');
} else if (value.split(' ').length < 2) {
// name contains only 1 word, don't validate
return S.of(context).key('errorOnlyFirstName');
} else if (value.length < 5) {
// name is too short, don't validate
return S.of(context).key('errorNameTooShort');
}
// validate
return null;
},
我返回错误字符串以显示给用户,但是您可以返回布尔值或任何您想要的内容,无论如何这是基本的全名验证逻辑。