Несколько вещей, на которые нужно указать. Во-первых, валидатор ожидает, что строка будет возвращена, чтобы он мог отобразить сообщение об ошибке под полем, но вы вызываете метод m (), который ничего не возвращает. См. документация валидатора . Например:
new Text("Name"),
new TextFormField(
validator: (str){
if (str.isEmpty) {
return "Please enter a name";
}
},),
Если вы хотите иметь диалоговое окно с предупреждением вместо использования текста ошибки под полем, не используйте validator
в каждом TextFormField или form.validate()
. Проблема, связанная с этим подходом, заключается в том, что вы не захватываете какие-либо входные данные TextFormField. Для этого вы можете использовать свойство onSaved
или назначить GlobalKey для каждого TextFormField. Я покажу метод onSaved:
new TextFormField(
onSaved: (value){
setState(() {
_name = value
});
},),
Теперь, когда у вас есть значения, установленные в ваших переменных состояния, вы можете изменить pressed()
на что-то вроде этого:
pressed() {
var form = formkey.currentState;
form.save(); //Calling form.save() in turns calls all TextFormField's onSaved function
var errorMsg = ""
if (_name.isEmpty) {
errorMsg += "Name is empty\n";
}
if (_last.isEmpty) {
errorMsg += "Last is empty\n";
}
if (_add.isEmpty) {
errorMsg += "Add is empty";
}
//Print debug if errorMsg is not empty
if (!errorMsg.isEmpty) (
debugPrint(errorMsg);
}
}