Необработанное исключение: ошибка NoSuchMethodError: метод ‘validate’ был вызван при null. (Пакет FormBuilder)

#forms #flutter #dart

#формы #флаттер #dart

Вопрос:

Ребята, у меня возникла эта ошибка, и я уже видел, что есть другие вопросы по поводу этой же ошибки, но у меня все по-другому, потому что я использую пакет flutter_form_builder и использую GlobalKey, и он не объявлен при сборке. На самом деле я знаю, где это вызвано, но не знаю, как это исправить.

Проблема возникает при использовании валидаторов FormBuilder. Когда он статичен, он работает отлично. Но в моем случае я использую одну и ту же форму как для создания, так и для редактирования объекта. Затем мне нужно проверить, какой из них я использую, чтобы установить нужные мне валидаторы, потому что при редактировании это будет не всегда, мне нужно будет отредактировать пароль. Но если будет, мне также нужно выполнить проверку той информации, которую пишет пользователь…

Я приведу здесь код этого контекста, чтобы его было легче понять.

 final List<String Function(dynamic)> _passwordValidators = [
  FormBuilderValidators.required(errorText: strings.requiredMsg),
  FormBuilderValidators.minLength(6, errorText: strings.passwordMinLength),
  FormBuilderValidators.maxLength(40, errorText: strings.passwordMaxLength),
];

final List<String Function(dynamic)> _confPasswordValidators = [
  FormBuilderValidators.required(errorText: strings.requiredMsg),
  FormBuilderValidators.minLength(6, errorText: strings.passwordMinLength),
  FormBuilderValidators.maxLength(40, errorText: strings.passwordMaxLength),
      (val){
    if( val != _formKey.currentState.fields["password"]
        .currentState.value) {
      return strings.passwordMatch;
    }
    return null;
  }
];

final List<String Function(dynamic)> _emptyPassword = [ ];
Padding(
          padding: const EdgeInsets.only(left: 16, right: 16),
          child: FormBuilderTextField(
            attribute: "conf_password",
            controller: _confPasswordController,
            obscureText: true,
            decoration: InputDecoration(
              labelText: strings.confPassword,
              counter: SizedBox(),
            ),
            validators: _customerId != null
                ? _confPasswordController.text.isEmpty ? _emptyPassword
                : _confPasswordValidators
                : _confPasswordValidators
          ),
        ),
  

Я был бы признателен за любую помощь или лучший подход, чтобы исправить это.
Я уже открыл проблему в своем репозитории GitHub. Любой ответ, который у меня есть, я опубликую здесь. Спасибо!

Ответ №1:

Я сам нашел ошибку и обнаружил, что это было setState, которое было установлено в методе button . Таким образом, перед проверкой ключа он установил для ключа формы значение null. Теперь я переместил это setState на после проверки, чтобы ошибка исчезла.