Flutter 当按钮包含空字符串或空格时,禁用该按钮的正确方法是什么
我有一个用户信息表单,如果其中一个字段为空,我想禁用提交按钮,但我的Flutter 当按钮包含空字符串或空格时,禁用该按钮的正确方法是什么,flutter,dart,Flutter,Dart,我有一个用户信息表单,如果其中一个字段为空,我想禁用提交按钮,但我的setState没有更新标志。 这是我的validateFields函数,它在build方法中被调用正则表达式100%正确(我检查了多次) setState方法重新构建小部件树,因此所有小部件都将刷新 一种方法是在单击按钮之后考虑检查正则表达式验证。 如果正则表达式不匹配,只需显示一个snackbar警告,如果匹配,则执行下一个操作 第二种方法是在文本字段中提交某些文本时更改按钮的状态。您可以使用TextController在写
setState
没有更新标志。
这是我的validateFields
函数,它在build
方法中被调用正则表达式100%正确(我检查了多次)
setState
方法重新构建小部件树,因此所有小部件都将刷新
一种方法是在单击按钮之后考虑检查正则表达式验证。 如果正则表达式不匹配,只需显示一个snackbar警告,如果匹配,则执行下一个操作
第二种方法是在文本字段中提交某些文本时更改按钮的状态。您可以使用
TextController
在写入内容时更改按钮的状态。我通过将侦听器添加到TextController解决了此问题
nameController.addListener(() {
validateField(nameController.text);
});
void validateField(文本){
RegExp RegExp=new RegExp(r'[!@#?“\s:`~;[\]\\\\\\\\\\\=+)(*&^%-]\^$);
if(regExp.hasMatch(文本)){
设置状态(){
isButtonDisabled=真;
});
}否则{
设置状态(){
isButtonDisabled=假;
});
}
}
}
什么时候调用函数validateFields?@anirudbagri我在返回语句之前的build方法中调用它。我认为isButtonDisabled=true;这应该在else块中,反之亦然versa@jutsm555不,不应该。请检查这个
onPressed: isButtonDisabled ? null : (){
//upload the form
}
nameController.addListener(() {
validateField(nameController.text);
});
void validateField(text) {
RegExp regExp = new RegExp(r'[!@#<>?"\s:_`~;[\]\\|=+)(*&^%-]|^$');
if (regExp.hasMatch(text)) {
setState(() {
isButtonDisabled = true;
});
} else {
setState(() {
isButtonDisabled = false;
});
}
}
}