【问题标题】:What is the correct way of disabling the button when it contains empty string or spaces当按钮包含空字符串或空格时禁用按钮的正确方法是什么
【发布时间】:2020-09-09 07:34:31
【问题描述】:

我有一个用户信息表单,如果其中一个字段为空,我想禁用提交按钮,但我的 setState 没有更新标志。 这是我的validateFields 函数,它在build 方法中被调用。 正则表达式 100% 正确(我检查了多次)

void validateFields() {
    RegExp regExp = new RegExp(r'[!@#<>?"\s:_`~;[\]\\|=+)(*&^%-]|^$');
    if (regExp.hasMatch(nameController.text) || regExp.hasMatch(surnameController.text) || regExp.hasMatch(phoneController.text)){
      setState(() {
        isButtonDisabled = true;
      });
    }
    else {
      setState(() {
        isButtonDisabled = false;
      });
    }
  }

这是我的提交按钮

onPressed: isButtonDisabled ? null : (){
 //upload the form
}

【问题讨论】:

  • 什么时候调用函数validateFields?
  • @AnirudhBagri 我在return语句之前的build方法中调用它
  • 我认为 isButtonDisabled = true;这应该在 else 块中,反之亦然
  • @jutsm555 不应该

标签: flutter dart


【解决方案1】:

setState 方法会重建小部件树,因此您的所有小部件都会得到刷新。

一种方法是在单击按钮后考虑检查正则表达式验证。 如果正则表达式不匹配,只需显示一个小吃吧警告,如果匹配,则执行下一步操作。

其次是在文本字段中提交一些文本时更改按钮的状态。您可以使用TextController 来更改按钮的状态,无论何时写入内容。

【讨论】:

    【解决方案2】:

    我通过将监听器添加到 textController 解决了这个问题

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

    【讨论】:

      猜你喜欢
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2015-04-24
      • 2021-05-03
      • 1970-01-01
      • 2020-02-18
      相关资源
      最近更新 更多