Проверка формы при флаттер-проходах, несмотря на невыполнение условий

Я создаю приложение Flutter с несколькими TextFormFields. Я создаю многоразовый виджет TextFormfield, чтобы сохранить модульность. Проблема в том, что когда нажимается кнопка отправки, даже если поля текстовой формы недействительны, она работает так, как будто она действительна.

Мой виджет TextFormField:

class AndroidTextField extends StatelessWidget {
  final ValueChanged<String> onChanged;
  final String Function(String?)? validator;
  const AndroidTextField(
      {Key? key,
      required this.onChanged,
      this.validator})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    return Container(
      width: size.width * .9,
      child: TextFormField(
        validator: validator,
        onChanged: onChanged,
    );
  }
}

Как я использую это в Scaffold

                        AndroidTextField(
                            validator: (value) {
                              if (value == null || value.isEmpty) {
                                return 'Enter a valid name';
                              }
                              return '';
                            },
                            onChanged: (val) {
                              setState(() {
                                lastName = val;
                              });
                            }),

Форма

  final _formKey = GlobalKey<FormState>();
  @override
   Widget build(BuildContext context) {
    return Scaffold(
     body: Form(
        key: _formKey, 
        AndroidTextField(
            validator: (value) {
               if (value == null || value.isEmpty) {
               return 'Enter a valid name';
               }
               return '';
          },
            onChanged: (val) {
            setState(() {
            firstName = val;
            });
            }),

       TextButton(
         child: Text('Press),
         onPressed:(){
            if (_formKey.currentState!.validate()){
                  //do something
            }else{
                 //don't do the something
            }

        }
      ));

     }

Я думаю, вы должны вернуть null вместо пустой строки

M.Nasri 17.05.2022 01:18

Тип возвращаемого значения «Null» не является «String», как того требует контекст замыкания ------- Я получаю эту ошибку, когда возвращаю null

Sky Lurk 17.05.2022 01:20

@SkyLurk String Function(String?)? выглядит странно. Попробуйте String? Function(String?)

Dabbel 17.05.2022 01:23

окончательная строка? Функция (строка?) валидатор;

M.Nasri 17.05.2022 01:27
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
4
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я чувствую, что флаттер-валидатор должен возвращать null, если он действителен, а не пустую строку.

Итак, код должен быть:

AndroidTextField(
 validator: (value) {
   if (value == null || value.isEmpty) {
     return 'Enter a valid name';
   }
   return null;
 }
...

Также попробуйте:

final String? Function(String?) validator;

вместо

final String Function(String?)? validator;

Когда я возвращаю null, я получаю сообщение об ошибке: возвращаемый тип «Null» не является «String», как того требует контекст закрытия.

Sky Lurk 17.05.2022 01:21

Другие вопросы по теме