Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 当按钮包含空字符串或空格时,禁用该按钮的正确方法是什么_Flutter_Dart - Fatal编程技术网

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;
       });
     }
  }
}