问题描述
当我尝试单击按钮而不在框中输入任何内容时,验证器未显示错误消息,即使在填充框后,底部也不会带我进入下一个屏幕。
return Scaffold(
appBar: AppBar(
title: Text("Feedback Form"),),body: Container(
child: Center(
key: _formKey,child: Column(
mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[
Padding(
padding: EdgeInsets.symmetric(horizontal: 50,vertical: 40),child: TextFormField(
validator: (String value) {
if (value.isEmpty) {
return "Name is required";
}
return null;
},decoration: Inputdecoration(
border: UnderlineInputBorder(),labelText: 'Enter your Name'),ButtonTheme(
child: ElevatedButton(
child: Text("Next"),onpressed: () {
if (!_formKey.currentState.validate()) {
return;
}
Navigator.push(
context,MaterialPageRoute(builder: (context) => SecondScreen()),);
},style: ElevatedButton.styleFrom(
padding:
EdgeInsets.symmetric(horizontal: 25,vertical: 15),],));
} }
解决方法
您忘记了表单小部件
return Scaffold(
appBar: AppBar(
title: Text("Feedback Form"),),body: Container(
child: Center(
child: Form( // add this
autovalidateMode: AutovalidateMode.onUserInteraction,// this to show error when user is in some textField
key: _formKey,child: Column(
mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[
Padding(
padding: EdgeInsets.symmetric(horizontal: 50,vertical: 40),child: TextFormField(
validator: (String value) {
if (value.isEmpty) {
return "Name is required";
}
return null;
},decoration: InputDecoration(
border: UnderlineInputBorder(),labelText: 'Enter your Name'),ButtonTheme(
child: ElevatedButton(
child: Text("Next"),onPressed: () {
if (_formKey.currentState.validate()) { // to check if the form is validate then navigate
Navigator.push(
context,MaterialPageRoute(
builder: (context) => SecondScreen()),);
}
},style: ElevatedButton.styleFrom(
padding:
EdgeInsets.symmetric(horizontal: 25,vertical: 15),],)));
,
将 Form 添加为 Center Widget 的子项