Дополнительное поле TextFormField в форме

У меня есть 1 форма с 2 TextFormField, firstName и lastName. Мне нужно проверить эти два данных с помощью условия и регулярного выражения, а затем передать данные на вторую страницу с помощью навигатора.

Проблема в том, что я хочу, чтобы lastName было необязательным или могло быть пустым. Но я не могу удалить валидатор, потому что мне все еще нужно использовать его с регулярным выражением или другими.

TextEditingController firstName = TextEditingController();
TextEditingController lastName = TextEditingController();

GlobalKey<FormState> _key = GlobalKey();
bool _validate = false;
String first, last;

Form(
  key: _key,
  autovalidate: _validate,
  child: Column(children: [
    InputName(
      controller: firstName,
      placeholder: 'Nama depan',
      validator: validateFirstName,
      onSaved: (String val) {
        first = val;
      },
    ),
    InputName(
      controller: lastName,
      placeholder: 'Nama belakang',
      validator: validateLastName,
      onSaved: (String val) {
        last = val;
      },
    ),
  ]),
),

Button(
  text: 'Lanjut mengisi Email',
  onPressed: () {
    if (_key.currentState.validate()) {
      _key.currentState.save();
      
      String a = firstName.text.capitalize();
      String b = lastName.text.capitalize();
      Navigator.push(
        context,
        PageRouteBuilder(
          pageBuilder: (context, animation1, animation2) =>
              Regist2Page([a, b]),
          transitionDuration: Duration(seconds: 0),
        ),
      );
    } else {
      setState(() {
        _validate = true;
      });
    }
  },
),

String validateLastName(String value) {
  if (value.isNotEmpty) {
    if (value.length > 20) {
      return 'Maksimal 20 karakter';
    }
    return null;
  }
  return null;
}

3 ответа

Попробуйте этот валидатор

String validateLastName(String value) {
if (value == "") {
  // if value were null, is true and then return null
  return null;
}

if (value.length > 20) {
  return 'Maksimal 20 karakter';
}

return null;
}

Решено Агус Сетя Р.

String b = lastName.text == '' ? '' : lastName.text.capitalize();

Попробуй это!

String validateLastName(String value,{bool isOptional = false})) {
  if(isOptional && (value==null || value.isEmpty)){
    return null;
  }
  if (value.isNotEmpty) {
    if (value.length > 20) {
      return 'Maksimal 20 karakter';
    }
    return null;
  }
  return null;
}
Другие вопросы по тегам