Flutter 自定义验证TextFormField颤振

Flutter 自定义验证TextFormField颤振,flutter,Flutter,我有表单和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

我有表单和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) {},

  ),
)

现在的问题是当你调用<代码>验证()/<代码>,并且不返回任何代码在<代码>验证()/<代码>方法中,那么它会认为它返回true。 我不想在文本字段下面显示错误,而是作为一个快捷键

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

有谁能告诉我如何处理这种情况,
\u formKey.currentState.validate()
应该返回false和validator方法
内部TextFormField不需要返回错误文本。

如果您不想在TextField中显示错误,您不应该是用户表单小部件和TextFormField

您应该由控制器执行验证

比如说

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,
            )
          ],
        ),
      ),
    );
  }
}
类MyHomePage扩展StatefulWidget{
@凌驾
MyHomePageState createState(){
返回新的MyHomePageState();
}
}
类MyHomePageState扩展了状态{
final _text=TextEditingController();
bool _validate=false;
@凌驾
无效处置(){
_text.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“文本字段演示”),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本('如果按下提交按钮时字段为空,则显示错误'),
文本字段(
控制器:\文本,
装饰:输入装饰(
labelText:“输入值”,
),
),
升起的按钮(
已按下:(){

如果(_text.text.lengthan)我们可以用控制器做什么?只是一个空检查?您也可以按控制器检查字符串的长度。控制器提供文本字段值为什么有设置状态?这是我的要求。更新答案请检查
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,
            )
          ],
        ),
      ),
    );
  }
}