Flutter - 验证器没有响应名称是必需的文本,并且按下后屏幕没有移动到下一个屏幕

问题描述

当我尝试单击按钮而不在框中输入任何内容时,验证器未显示错误消息,即使在填充框后,底部也不会带我进入下一个屏幕。

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 的子项