在Form小部件中验证TextFormField的正确方法

时间:2018-12-19 12:22:11

标签: dart flutter

除了编写每个TextFormField的单独的validate方法之外,没有任何方法可以通过以下一种方法来管理。

String _isValidatedField(String strInputText) {
    String pEmailChk =
        r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';

    if (_conFirstName.text.isEmpty) {
      return 'Please enter first name';
    } else if (_conLastName.text.isEmpty) {
      return 'Please enter last name';
    } else if (_conUserName.text.isEmpty) {
      return 'Please enter username';
    } else if (_conEmailName.text.isEmpty) {
      return 'Please enter email address';
    } else if (RegExp(pEmailChk).hasMatch(_conEmailName.text) == false) {
      return 'Please enter valid email addres';
    }
    else if (_conEmailName.text.length != 10) {
      return 'Please enter valid phone number';
    }

    return null;
  }

问题是,当任何验证失败时,每个TextFormField都会发生错误,而不是在失败的特定TextFormField上显示错误。

1 个答案:

答案 0 :(得分:0)

TextformField具有验证器参数,您可以通过该参数来验证特定的文本表单字段

TextFormField(
        key: new Key('email'),
        decoration: new InputDecoration(labelText: 'Email'),
        autocorrect: false,
        validator: (val) => val.isEmpty ? 'Email can\'t be empty.' : null,
        onSaved: (val) => _email = val,
      )