пробел не удаляется из строки во флаттере - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть вопрос о функции обрезки. когда я использую отделку, это не работает. когда я добавляю пробел, а затем использовал функцию обрезки, но все равно моя проверка верна. вместо обрезки приходится убирать все пробелы. Надеюсь, вы понимаете вопрос. заранее спасибо.

 Widget _buildUserNameField() {
    return EnsureVisibleWhenFocused(
      focusNode: _emailFocusNode,
      child: TudoEmailWidget(
        focusNode: _emailFocusNode,
        prefixIcon: Icon(Icons.email),
        labelText: AppConstantsValue.appConst['login']['email']['translation'],
        validator: Validators().validateEmail,
        onSaved: (val) => _username = val.trim(),
      ),
    );
  }

1 Ответ

1 голос
/ 30 сентября 2019

Событие onSaved вызывается только при сохранении формы (вызов form.save()).

Если вы хотите проверить значение перед отправкой формы, просто передайте значение вашему валидатору thisпуть:

validator: (val) => Validators().validateEmail(val)

и обновите ваш validateEmail, чтобы принять параметр.

Также, если вы хотите удалить только конечные пробелы, используйте функцию trimRight () .

В качестве примера, это отлично работает на моей стороне:

class Validators {
  static String validateEmail(String value) {
    String pattern =
        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,}))$';
    RegExp regExp = new RegExp(pattern);
    if (value == null || value.length <= 0) {
      return "Email is Required";
    } else if (!regExp.hasMatch(value)) {
      return "Invalid Email";
    } else {
      return null;
    }
  }
}
TextFormField(
  maxLines: 1,
  inputFormatters: [LengthLimitingTextInputFormatter(128)],
  validator: (val) => Validators.validateEmail(val.trimRight()),
  onSaved: (val) => _currMember.email = val,
  initialValue: _currMember.email,
),
...