Firebase NoSuchMethodError:方法';验证';被调用为空。。。。。。扑动火基
你好,我是Flatter中的一个新手,这里有个问题-我试图构建一个带有验证和“注册”按钮的注册表单,该按钮必须显示数据是否有效,但存在“NoSuchMethodError:当我按下此“注册”按钮时,调试程序中的“null”调用了“validate”方法。代码如下: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
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()//错误的