Для проверки текстового поля используйте TextFormField вместо TextField. TextFormField необходимо обернуть виджетом Form (если есть два или более текстовых полей, вы можете обернуть их родительский виджет виджетом формы). пользователь, когда они не подтвердили и как только они подтвердят сообщение перестает отображаться). Мы создаем две переменные и присваиваем их форме. Затем нам нужен валидатор , в котором мы проверяем в соответствии с нашими требованиями. (Если вам нужно добавить больше проверок, вы можете добавить несколько условий if.). Наконец, в поле отправив, мы проверяем, подтвердил ли пользователь форму, если проверено, мы выполняем желаемое действие, иначе мы устанавливаем для переменной autovalidate значение true для выполнения автоматической проверки.
var formKey = GlobalKey<FormState>();
bool autoValidate = false;
Form(
key: formKey,
autovalidate: autoValidate,
child: TextFormField(
validator: (value){
return value.length < 2 ? 'Name must be greater than two characters' : null;
},
autofocus: true,
textCapitalization: TextCapitalization.words,
textAlign: TextAlign.center,
decoration: InputDecoration(
labelStyle: TextStyle(color: Colors.blue[900]),
border: InputBorder.none,
hintText: 'VORNAME',
),
style: TextStyle(
color: Colors.blue[900],
fontWeight: FontWeight.w600,
fontSize: MediaQuery.of(context).size.width * 0.075),
cursorColor: Colors.greenAccent,
inputFormatters: <TextInputFormatter>[
WhitelistingTextInputFormatter(RegExp("[a-zA-ZÄäÖöÜü]")) //Only Text as input
],
onChanged: (value) {
userData.forename = value;
},
onFieldSubmitted: (value){
if(formKey.currentState.validate()){
Navigator.of(context).push(
CupertinoPageRoute(builder: (context) => SurName()));
}else{
setState(() {
autoValidate=true;
});
}
},
),
),