Дополнительное поле 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;
}