【问题标题】:Custom Validation TextFormField Flutter自定义验证 TextFormField Flutter
【发布时间】:2019-08-12 10:17:15
【问题描述】:

我里面有 Form 和 TextFormField :

 new Expanded(
  child: TextFormField(
    style: new TextStyle(color: Colors.white),
    keyboardType: TextInputType.text,
    validator: (String value) {
      if (value.length <= 5) {
       //Show error as a Snackbar
      }
    },
    onSaved: (String value) {},

  ),
)

在按钮按下时,我正在检查是否所有字段都有效:

 if (_formKey.currentState.validate()) {
      _submit();
 }

现在的问题是,当您调用 validate() 并且在 validate() 方法中不返回任何文本时,它会认为它返回 true。

我不想在 textField 下方显示错误,而是将错误显示为 Snackbar。

另外,我尝试在每个验证器方法中设置一个额外的标志和设置,但如果表单中有多个字段,它会变得复杂。

谁能告诉我如何处理_formKey.currentState.validate() 应该返回 false 和验证器方法的情况 TextFormField里面不需要返回错误文本。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您不应该使用 Form 小部件和 TextFormField 在 TextField 中显示错误。

    改为通过控制器进行验证

    举例

    class MyHomePage extends StatefulWidget {
      @override
      MyHomePageState createState() {
        return new MyHomePageState();
      }
    }
    
    class MyHomePageState extends State<MyHomePage> {
      final _text = TextEditingController();
      bool _validate = false;
    
      @override
      void dispose() {
        _text.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('TextField Demo'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text('Error Showed if Field is Empty on Submit button Pressed'),
                TextField(
                  controller: _text,
                  decoration: InputDecoration(
                    labelText: 'Enter the Value',
                  ),
                ),
                RaisedButton(
                  onPressed: () {
                            if(_text.text.length<=5){
                        // open dialog
                      }
                  },
                  child: Text('Submit'),
                  textColor: Colors.white,
                  color: Colors.blueAccent,
                )
              ],
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 我们可以用控制器做什么?只是一张空支票?
    • 您也可以通过控制器检查字符串的长度。
    • 控制器提供TextField值
    • 为什么会有 setState ?
    • 这是我的要求。更新答案请检查
    猜你喜欢
    • 1970-01-01
    • 2019-12-04
    • 2020-10-01
    • 2020-10-27
    • 1970-01-01
    • 2021-08-10
    • 2019-04-11
    • 2019-09-12
    • 2021-01-19
    相关资源
    最近更新 更多