【问题标题】:Flutter - After form validation helperText property can't be changed with bloc patternFlutter - 表单验证后 helperText 属性不能用 bloc 模式更改
【发布时间】:2020-06-23 20:34:29
【问题描述】:

我有一个类似这样的验证表单:

class Example extends StatelessWidget{

  Widget build(BuildContext context){
  ... widgets ...
  child: Form(
    key: _formKey,     // type: GlobalKey<FormState>()
     ... more widgets ...
       child: TextFormField(
         _helperText = "Some text",
         validator: (String text){
           return "Error text!";
         }
         decoration: InputDecoration(
            ...
            _helperText: helperText   // I mutate the helperText somewhere else and rebuild the
            ...                       // widget tree if something notifies it to do so ...
         )
     ...
     MaterialButton(
       onPressed: _formKey.currentState.validate(),
     )
     ...

在验证之前 helperText 的文本是“一些文本”,但在我验证它之后,它会得到“错误文本!”并变成红色。到目前为止,一切都很好。我操作 helperText 属性时对 bloc 模式没有任何问题(因此在这种特殊情况下,我使用 StatelessWidget 而不是 StatefulWidget 和 setState() - 但我认为这不会解决问题),但在验证之后(如果这是一个错误),更改 helperText 对 TextFormField 小部件的 helperText 属性没有视觉效果。

注意:如果我使用return null; 而不是return "Error text!";,helperText 将不会处于“错误”状态,因此在这种情况下改变 helperText 属性将正常工作。当返回 null 以外的值时会出现此问题。

那么我可以做些什么来验证表单,即使在那之后 - 尽管这是一个错误 - 我仍然能够编辑 helperText 以及 TextFormField 装饰颜色和 helperText 颜色等?

对不起,这个极简主义的例子,但也许你有一个想法,或者你遇到了类似的问题。

非常感谢。

【问题讨论】:

    标签: forms validation flutter


    【解决方案1】:

    经过一些研究,结果发现 InputDecoration 下有一个 errorText 属性,如果它不为空,它似乎会覆盖(不是字面上而是视觉上)helperText 属性,这就是为什么我没有看到 helperText 中所做的更改。

    因此,一种解决方案是将其值设置为 null。然后 helperText 中的更改将再次可见。

    【讨论】:

      【解决方案2】:

      你可以在里面使用错误文本

       TextFormField(
          decoration: InputDecoration(
             errorText: validate ? "Enter email" : null
      )
      )
      

      这里的 validate 是一个布尔值,用于判断是否必须显示错误文本。

      【讨论】:

      • 我的想法非常相似,但不知何故,它在获得非空值后不起作用。在那之后,我不知何故无法摆脱那个错误文本。我真的不明白为什么......
      • 您需要使用 TextEditingController 根据值检查条件并相应地使用 setState() 它将起作用。
      猜你喜欢
      • 1970-01-01
      • 2019-05-24
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 2020-06-15
      • 2020-08-06
      • 2020-07-20
      相关资源
      最近更新 更多