首页 > 解决方案 > 验证时 globalkey formstate 返回 false

问题描述

我在验证时遇到表单状态返回错误的问题,应该是真的谁能解决这个问题?

我是 Flutter 的新手,我正在尝试创建登录表单验证,但是当我调用 formKey.currentState.validate() 时总是会出错。formKey 是全局键表单状态我正在为我的表单定义键,如下所示:

 class LoginState extends State<LogIn> {
  final name = TextEditingController();

  // TextEditingController name = new TextEditingController();
  final password = TextEditingController();
  final email = TextEditingController();

  // TextEditingController email = new TextEditingController();
  // TextEditingController password = new TextEditingController();
  TextEditingController cofipassword = new TextEditingController();

  GlobalKey<FormState> formstatesingup = new GlobalKey<FormState>();
  GlobalKey<FormState> formstatesingin = new GlobalKey<FormState>();

函数看起来像:

  singin() {
    var formdate = formstatesingin.currentState;
    if (formdate.validate()) {
      // formdate.save();
      // var data = {'email': email.text, 'password': password.text};
      // var response = await http.post(
      //     Uri.parse('https://onlinestore1997.000webhostapp.com/login.php'),
      //     body: data);
      // var responsebody = jsonDecode(response.body);
      // if (responsebody['status'] == 'success') {
      //   print(responsebody['username']);
      // }
      //
      print('vaildate');
    } else {
      print(Text(email.text));
      print(formstatesingin.currentState.validate());
      print('not vaildate');
    }
  }

表格框:

 Center buildFormBoxSingIn(double mdw) {
    return Center(
      child: AnimatedContainer(
        duration: Duration(milliseconds: 300),
        curve: Curves.easeInOutBack,
        margin: EdgeInsets.only(top: 20),
        height: 250,
        width: mdw / 1.2,
        decoration: BoxDecoration(
            color: Colors.white,
            boxShadow: [BoxShadow(color: Colors.black, spreadRadius: 1)]),
        child: Form(
          key: formstatesingin,
          child: Container(
            margin: EdgeInsets.only(top: 20),
            padding: EdgeInsets.all(10),
            child: SingleChildScrollView(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  //start
                  Text(' Email ',
                      style: TextStyle(
                        color: Colors.blue[800],
                      )),
                  SizedBox(
                    height: 10,
                  ),
                  buildTextFormFieldAll(
                      "Enter your Email", false, email, vaildglobal),

                  //end Email
                  SizedBox(
                    height: 10,
                  ),
                  //start
                  Text(' Passworld ',
                      style: TextStyle(
                        color: Colors.blue[800],
                      )),
                  SizedBox(
                    height: 10,
                  ),
                  buildTextFormFieldAll(
                      "Enter passworld", true, password, vaildglobal),
                  //end Email
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }

像这样的文本形式:

  TextFormField buildTextFormFieldAll(String myhinttext, bool pass,
      TextEditingController myController, myvalid) {
    return TextFormField(
        validator: myvalid,
        controller: myController,
        obscureText: pass,
        decoration: InputDecoration(
          contentPadding: EdgeInsets.all(4),
          hintText: myhinttext,
          filled: true,
          fillColor: Colors.grey[100],
          enabledBorder: OutlineInputBorder(
              borderSide: BorderSide(
                  color: Colors.grey[500], style: BorderStyle.solid, width: 1)),
          focusedBorder: OutlineInputBorder(
              borderSide: BorderSide(
                  color: Colors.blue[500], style: BorderStyle.solid, width: 1)),
        ));
  }

标签: flutterdart

解决方案


推荐阅读