#forms #validation #flutter
#формы #проверка #flutter
Вопрос:
Есть 2 проблемы, с которыми я сталкиваюсь.
-
Форма запоминает значение только для первого поля (здесь поле имени) при
submit
первом щелчке. -
только
full name
поле получает границу ошибки проверки приsubmit
первом нажатии.
Примечание: 1) После этого первого раза все работает нормально. 2) Валидатор работает для всех, поскольку мы можем видеть, что изображение четко показывает ошибки для всех полей в форме flutter.
Рассматриваемый код выглядит следующим образом:
void _handleRegistration() async {
FormState formState = _formKey.currentState;
formState.save();
if (formState.validate()) {
// No error in validation
setState(() {
_isLoading = true;
});
...
}
Обновление: добавление TextFormField
кода:
TextFormField buildCPassFormField() {
return TextFormField(
onSaved: (newValue) => cpass = newValue,
onChanged: (value) {
if (value.isNotEmpty ||
value.length >= 6 ||
pass == cpass amp;amp; errors["cpass"] != null) {
setState(() {
errors["cpass"] = "";
});
return "";
}
return null;
},
validator: (value) {
if (value.isEmpty || value == null) {
setState(() {
errors["cpass"] = kCPassNullError;
});
return "";
} else if (value.length < 6) {
setState(() {
errors["cpass"] = kShortPassError;
});
return "";
} else if (value != pass) {
setState(() {
errors["cpass"] = kMatchPassError;
});
return "";
}
setState(() {
cpass = value;
});
return null;
},
obscureText: true,
keyboardType: TextInputType.text,
autofillHints: [AutofillHints.password],
decoration: InputDecoration(
floatingLabelBehavior: FloatingLabelBehavior.always,
suffixIcon:
CustomSurffixIcon(svgIcon: "assets/icons/md-lock-closed.svg"),
labelText: 'Confirm Password',
),
);
}
TextFormField buildPassFormField() {
return TextFormField(
onSaved: (newValue) => pass = newValue,
onChanged: (value) {
if (value.isNotEmpty || value.length > 6 amp;amp; errors["pass"] != null) {
setState(() {
errors["pass"] = "";
});
return "";
}
return null;
},
validator: (value) {
if (value.isEmpty || value == null) {
setState(() {
errors["pass"] = kPassNullError;
});
return "";
} else if (value.length < 6) {
setState(() {
errors["pass"] = kShortPassError;
});
return "";
}
setState(() {
pass = value;
});
return null;
},
obscureText: true,
keyboardType: TextInputType.text,
autofillHints: [AutofillHints.password],
decoration: InputDecoration(
floatingLabelBehavior: FloatingLabelBehavior.always,
suffixIcon:
CustomSurffixIcon(svgIcon: "assets/icons/md-lock-closed.svg"),
labelText: 'Password',
),
);
}
TextFormField buildEmailFormField() {
return TextFormField(
onSaved: (newValue) => email = newValue,
onChanged: (value) {
if (value.isNotEmpty ||
value != null amp;amp; !emailValidatorRegExp.hasMatch(value)) {
setState(() {
errors["email"] = "";
});
return "";
}
setState(() {
email = value;
});
return null;
},
validator: (value) {
if (value.isEmpty || value == null) {
setState(() {
errors["email"] = kEmailNullError;
});
return "";
} else if (!emailValidatorRegExp.hasMatch(value)) {
setState(() {
errors["email"] = kInvalidEmailError;
});
return "";
}
return null;
},
autofocus: true,
autofillHints: [AutofillHints.email],
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
floatingLabelBehavior: FloatingLabelBehavior.always,
suffixIcon: CustomSurffixIcon(svgIcon: "assets/icons/md-mail.svg"),
labelText: 'Email ID',
),
);
}
TextFormField buildNameFormField() {
return TextFormField(
onSaved: (newValue) => name = newValue,
onChanged: (value) {
if (value.isNotEmpty || nameValidatorRegExp.hasMatch(value)) {
setState(() {
errors["name"] = "";
});
}
setState(() {
name = value;
});
return null;
},
validator: (value) {
if (value.isEmpty || value == null) {
setState(() {
errors["name"] = kNameNullError;
});
return "";
} else if (!nameValidatorRegExp.hasMatch(value)) {
setState(() {
errors["name"] = kInvalidNameError;
});
return "";
}
return null;
},
autofocus: true,
autofillHints: [AutofillHints.name],
keyboardType: TextInputType.text,
decoration: InputDecoration(
floatingLabelBehavior: FloatingLabelBehavior.always,
suffixIcon: CustomSurffixIcon(svgIcon: "assets/icons/md-user.svg"),
labelText: 'Your Full Name',
),
);
}
Комментарии:
1. поделитесь кодом вместе, чтобы люди могли лучше вам помочь.
2. @theCaptainXgod вы хотите, чтобы я добавил
TextFormField
код?