AlertDialog中的TextFormField无法验证

时间:2020-09-14 12:07:12

标签: validation flutter dart

所以我遇到了一个问题,即我的TextFormField中的验证器无法验证文本字段中的值...

下面是我整个警报对话框的代码:

showDialog(
            barrierDismissible: false,
            context: context,
            builder: (context) {
              return WillPopScope(
                  onWillPop: () async => false,
                  child: AlertDialog(
                    title: Text('Full name :'),
                    content: Form(
                      key: _nameFormKey,
                      child: TextFormField(
                        controller: displayNameController,
                        validator: (value) {
                          if (!(value.length > 5) && value.isNotEmpty) {
                            return 'Please set your full name';
                          }
                          return null;
                        },
                      ),
                    ),
                    actions: <Widget>[
                      new FlatButton(
                        child: Text('CONFIRM'),
                        onPressed: () {
                          if (_nameFormKey.currentState.validate()) {
                            // prefs.setString(
                            //     'displayName', displayNameController.text);
                            // Navigator.of(context).pop();
                            // displayNameController.clear();
                            print('validated');
                          }
                        },
                      )
                    ],
                  ));
            })

即使我在文本字段中未输入任何值,当我单击按钮时,它也会在调试控制台中打印“已验证”

1 个答案:

答案 0 :(得分:1)

对于全名验证,我这样做:

在您的TextFormField中,验证程序尝试执行此类操作

validator: (value) {
  if (value.isEmpty) {

    // name is empty, don't validate
    return S.of(context).key('errorEmptyField');

  } else if (value.split(' ').length < 2) {

    // name contains only 1 word, don't validate
    return S.of(context).key('errorOnlyFirstName');

  } else if (value.length < 5) {

    // name is too short, don't validate
    return S.of(context).key('errorNameTooShort');

  }
  // validate
  return null;
},

我返回错误字符串以显示给用户,但是您可以返回布尔值或任何您想要的内容,无论如何这是基本的全名验证逻辑。