AlertDialog 中的 TextFormField 未验证
Posted
技术标签:
【中文标题】AlertDialog 中的 TextFormField 未验证【英文标题】:TextFormField in AlertDialog not validating 【发布时间】:2020-09-14 12:07:12 【问题描述】:所以我遇到了一个问题,我的 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');
,
)
],
));
)
即使在文本字段中没有输入任何值,当我单击按钮时,它也会在调试控制台中打印“已验证”
【问题讨论】:
为什么你添加了'!'在验证器中?? errr.. 我真的不知道如何为全名编写正确的验证逻辑,对我来说这似乎是正确的逻辑.. 还是你建议另一种逻辑? 【参考方案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;
,
我返回错误字符串显示给用户,但你可以返回布尔值或任何你想要的,无论如何这是一个基本的全名验证逻辑。
【讨论】:
@ETCasual 很好,谢谢,我已经编辑了答案,因为排序检查错误,现在更好了 :)以上是关于AlertDialog 中的 TextFormField 未验证的主要内容,如果未能解决你的问题,请参考以下文章
如何与 Espresso 中的 alertdialog 交互?
如何对 AlertDialog Kotlin 中的项目使用 OnClickListener?