Firebase NoSuchMethodError:方法';验证';被调用为空。。。。。。扑动火基

Firebase NoSuchMethodError:方法';验证';被调用为空。。。。。。扑动火基,firebase,flutter,Firebase,Flutter,你好,我是Flatter中的一个新手,这里有个问题-我试图构建一个带有验证和“注册”按钮的注册表单,该按钮必须显示数据是否有效,但存在“NoSuchMethodError:当我按下此“注册”按钮时,调试程序中的“null”调用了“validate”方法。代码如下: import 'package:flutter/material.dart'; import 'package:flutter_auth/Screens/Login/login_screen.dart'; import 'packag

你好,我是Flatter中的一个新手,这里有个问题-我试图构建一个带有验证和“注册”按钮的注册表单,该按钮必须显示数据是否有效,但存在“NoSuchMethodError:当我按下此“注册”按钮时,调试程序中的“null”调用了“validate”方法。代码如下:

import 'package:flutter/material.dart';
import 'package:flutter_auth/Screens/Login/login_screen.dart';
import 'package:flutter_auth/Screens/Signup/components/background.dart';
import 'package:flutter_auth/Screens/Signup/components/or_divider.dart';
import 'package:flutter_auth/Screens/Signup/components/social_icon.dart';
import 'package:flutter_auth/Screens/Signup/signup_screen.dart';
import 'package:flutter_auth/components/already_have_an_account_acheck.dart';
import 'package:flutter_auth/components/rounded_button.dart';
import 'package:flutter_auth/components/rounded_input_field.dart';
import 'package:flutter_auth/components/rounded_password_field.dart';
import 'package:flutter_svg/svg.dart';
import 'package:firebase_auth/firebase_auth.dart';

class Body extends StatefulWidget {
  Body({Key key}) : super(key: key);
  @override
  _BodyState createState() => _BodyState();
}

class _BodyState extends State<Body> {
  var myemail, mypassword;
  GlobalKey<FormState> formstate = new GlobalKey<FormState>();
  body() async {
    var formdata = formstate.currentState;
    if (formdata.validate()) {
      print("============================================");
      print("valid");
    } else {
      print("============================================");
      print("not valid");
    }
  }

  @override
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    return Background(
      child: SingleChildScrollView(
        child: Container(
          alignment: Alignment.center,
          child: Form(
              key: formstate,
              child: Column(
                children: [
                  Text(
                    "SIGNUP",
                    style: TextStyle(fontWeight: FontWeight.bold),
                  ),
                  SizedBox(height: size.height * 0.03),
                  SvgPicture.asset(
                    "assets/icons/signup.svg",
                    height: size.height * 0.35,
                  ),
                  RoundedInputField(
                    /*********************************email************************/
                    hintText: "Your Email",
                    onChanged: (value) {
                      myemail = value;
                      if (value.length > 100) {
                        return "email can't be larger than 100 letter";
                      }
                      if (value.length < 2) {
                        return "email can't be less than 2 letter";
                      }
                      return null;
                    },
                  ),
                  RoundedPasswordField(
                    /*********************************password************************/
                    onChanged: (value) {
                      mypassword = value;
                      if (value.length > 100) {
                        return "password can't be larger than 100 letter";
                      }
                      if (value.length < 4) {
                        return "Password can't be less than 4 letter";
                      }
                      return null;
                    },
                  ),
                  RoundedButton(
                    /*********************************Button************************/
                    text: "SIGNUP",
                    press: () async {
                      print("there is the prooooooooob");
                      return await body();
                    },
                  ),
                  SizedBox(height: size.height * 0.03),
                  AlreadyHaveAnAccountCheck(
                    login: false,
                    press: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) {
                            return LoginScreen();
                          },
                        ),
                      );
                    },
                  ),
                  OrDivider(),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      SocalIcon(
                        iconSrc: "assets/icons/facebook.svg",
                        press: () {},
                      ),
                      SocalIcon(
                        iconSrc: "assets/icons/twitter.svg",
                        press: () {},
                      ),
                      SocalIcon(
                        iconSrc: "assets/icons/google-plus.svg",
                        press: () {},
                      ),
                    ],
                  )
                ],
              )),
        ),
      ),
    );
  }
}

导入“包装:颤振/材料.省道”;
导入“包:flatter_auth/Screens/Login/Login_screen.dart”;
导入“包:flatter_auth/Screens/Signup/components/background.dart”;
导入“包装:颤振验证/屏幕/注册/组件/或分割器.dart”;
导入“包:flatter_auth/Screens/Signup/components/social_icon.dart”;
导入“包:flatter_auth/Screens/Signup/Signup_screen.dart”;
导入“包:flatter\u auth/components/ready\u have\u ache\u acheck.dart”;
导入“包装:颤振验证/组件/圆形按钮.省道”;
导入“package:flatter_auth/components/rounded_input_field.dart”;
导入“package:flatter_auth/components/rounded_password_field.dart”;
导入“package:flatter_svg/svg.dart”;
导入“包:firebase_auth/firebase_auth.dart”;
类主体扩展了StatefulWidget{
Body({Key}):super(Key:Key);
@凌驾
_BodyState createState();
}
类_BodyState扩展了状态{
var myemail,mypassword;
GlobalKey formstate=新的GlobalKey();
body()异步{
var formdata=formstate.currentState;
if(formdata.validate()){
打印(“================================================================”);
打印(“有效”);
}否则{
打印(“================================================================”);
打印(“无效”);
}
}
@凌驾
小部件构建(构建上下文){
Size Size=MediaQuery.of(context).Size;
返回背景(
子:SingleChildScrollView(
子:容器(
对齐:对齐.center,
孩子:表格(
关键词:formstate,
子:列(
儿童:[
正文(
“注册”,
样式:TextStyle(fontWeight:fontWeight.bold),
),
SizedBox(高度:size.height*0.03),
SvgPicture.asset(
“资产/图标/注册.svg”,
高度:size.height*0.35,
),
圆形计算机场(
/*********************************电子邮件************************/
hintText:“您的电子邮件”,
一旦更改:(值){
myemail=值;
如果(value.length>100){
return“电子邮件不能超过100个字母”;
}
如果(值.长度<2){
返回“电子邮件不能少于2封”;
}
返回null;
},
),
圆形密码字段(
/*********************************密码************************/
一旦更改:(值){
mypassword=值;
如果(value.length>100){
返回“密码不能大于100个字母”;
}
如果(值。长度<4){
返回“密码不能少于4个字母”;
}
返回null;
},
),
圆形按钮(
/*********************************钮扣************************/
文本:“注册”,
按:()异步{
打印(“有Prooob”);
返回等待体();
},
),
SizedBox(高度:size.height*0.03),
已准备好进行帐户检查(
登录:false,
新闻界:(){
导航器。推(
上下文
材料路线(
生成器:(上下文){
返回LoginScreen();
},
),
);
},
),
OrDivider(),
划船(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
索卡利森(
ICONRC:“资产/图标/facebook.svg”,
按:(){},
),
索卡利森(
ICONRC:“资产/图标/twitter.svg”,
按:(){},
),
索卡利森(
ICONRC:“资产/图标/google plus.svg”,
按:(){},
),
],
)
],
)),
),
),
);
}
}

输入字段中没有任何
验证程序

validate()
背后的主要思想是,它使用
formstate
键从
表单的成员字段调用所有
validator
(在您的例子中)


我也遇到了同样的问题,但问题解决了,因为我声明变量错误。确保正确声明变量

final _formKey = GlobalKey<FormState>(); //Correct
final GlobalKey _formKey = GlobalKey<FormState>(); //Wrong
GlobalKey _formKey = GlobalKey<FormState>(); //wrong
final_formKey=GlobalKey()//对的
最终的GlobalKey _formKey=GlobalKey()//错
GlobalKey _formKey=GlobalKey()//错误的