![](/img/trans.png)
[英]Flutter - NoSuchMethodError: The method '[]' was called on null
[英]NoSuchMethodError: The method 'validate' was called on null ...... flutter-Firebase
你好,我是 Flutter 的初学者,这是问题所在 - 我试图构建一个带有验证和“注册”按钮的注册表单,该按钮必须显示数据是否有效,但存在“NoSuchMethodError:调用了“验证”方法当我按下这个“注册”按钮时,调试器中的 null'。 这是代码:
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: () {},
),
],
)
],
)),
),
),
);
}
}
您在输入字段中没有任何validator
。
validate()
背后的主要思想是,它使用formstate
的键(在您的情况下)从属于Form
成员的字段中调用所有validator
。
我是同样的问题,但解决了,因为我声明变量错误。 确保正确声明变量。
final _formKey = GlobalKey<FormState>(); //Correct
final GlobalKey _formKey = GlobalKey<FormState>(); //Wrong
GlobalKey _formKey = GlobalKey<FormState>(); //wrong
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.