Я использую плагин form_validator
Flutter для создания блока формы.
Моя форма содержит множество полей, включая Email
и Email confirmation
:
TextFormField(
validator: ValidationBuilder()
.email()
.maxLength(50)
.required()
.build(),
decoration: const InputDecoration(labelText: 'email'),
),
const SizedBox(height: 30),
TextFormField(
validator: ValidationBuilder()
.email()
.maxLength(50)
.required()
.build(),
decoration:
const InputDecoration(labelText: 'email confirmation'),
),
Они равны, меняется только метка. Как я могу добавить проверку во второе поле (EMAIL CONFIRMATION
), которое контролирует, что это то же значение, что и первое?
Пример:
EMAIL: [email protected]
EMAIL CONFIRMATION: [email protected]
--> ok
EMAIL: [email protected]
EMAIL CONFIRMATION: [email protected]
--> error
@daddygames спасибо за ответ. Я нашел или функция, который может помочь, но я не уверен и не знаю, как его использовать
При беглом взгляде на ValidationBuilder.or
кажется, что он выполняет ту или иную проверку. Он не делает никакого сравнения со значениями. Я не уверен, что это решит вашу проблему.
@daddygames ммм хорошо. что вы предлагаете делать? как я могу быстро использовать свойство onChanged и изменить пользовательский интерфейс?
Я рекомендую использовать опцию CustomValidationBuilder используемого вами пакета. Это даст вам необходимую гибкость, не прибегая к onChanged
или чему-то подобному. Вы захотите добавить TextEditingController
s к своим TextFormField
s, чтобы вы могли сравнить 2 значения внутри вашего пользовательского валидатора. Если я найду время, чтобы написать пример, я отправлю его в качестве ответа.
@daddygames, спасибо! Это будет очень полезно
почему ты не создаешь свою собственную форму?
@Nbn У меня мало времени, и я хотел бы использовать что-то более надежное.
Вы можете просто использовать 2 текстовых контроллера, например,
emailTextController
confirmEmailTextController
Убедитесь, что вы добавили следующий метод проверки в Confirm Email
TextFormField
validator: (value) {
if (value != emailTextController.text) {
return 'Email is not matching';
}
},
И вы получаете соответствующий errorText, чей fontStyle можно настроить.
Пакет, который вы используете, может не поддерживать это из коробки. Поэтому вы можете просто использовать свойство onChanged
TextFormField
, чтобы сравнить значения и при необходимости настроить пользовательский интерфейс. Вы смотрели на API пакета, чтобы увидеть, встроен ли он?