我在里面有表单和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()方法中不返回任何文本时,它将认为它返回了真。
我不想在文本字段下面显示错误,而是将其作为一个障碍。
另外,我尝试在每个验证器方法中设置一个额外的标志和设置,但是如果表单中有多个字段,它就会变得复杂。
有人能告诉我如何处理_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,
            )
          ],
        ),
      ),
    );
  }
}

关于flutter - 自定义验证TextFormField Flutter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55282476/

10-10 23:28