我正在尝试验证表单中的文本字段,并在其为空时显示警报。
我的问题是所有字段都在同时验证,但是我一次需要一个字段来验证
我当前的代码:
finiti = 0
答案 0 :(得分:0)
需要指出的几件事。首先,验证器希望返回一个字符串,以便它可以在字段下方显示错误消息,但是您正在调用的方法m()不返回任何内容。参见validator documentation。例如:
new Text("Name"),
new TextFormField(
validator: (str){
if (str.isEmpty) {
return "Please enter a name";
}
},),
如果要显示警报对话框而不是使用该字段下方的错误文本,请不要在每个TextFormField中使用validator
也不在form.validate()
中使用。这种方法存在的一个问题是您没有捕获任何TextFormField输入。为此,您可以使用onSaved
属性,也可以为每个TextFormField分配一个GlobalKey。我将显示onSaved方法:
new TextFormField(
onSaved: (value){
setState(() {
_name = value
});
},),
现在您已经在状态变量中设置了值,您可以将pressed()
更改为以下内容:
pressed() {
var form = formkey.currentState;
form.save(); //Calling form.save() in turns calls all TextFormField's onSaved function
var errorMsg = ""
if (_name.isEmpty) {
errorMsg += "Name is empty\n";
}
if (_last.isEmpty) {
errorMsg += "Last is empty\n";
}
if (_add.isEmpty) {
errorMsg += "Add is empty";
}
//Print debug if errorMsg is not empty
if (!errorMsg.isEmpty) (
debugPrint(errorMsg);
}
}