你好,我是 Flutter 的初学者,这里是问题所在——我试图构建一个带有验证和“注册”按钮的注册表单,该按钮必须显示数据是否有效,但存在“NoSuchMethodError: The method '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: () {},
),
],
)
],
)),
),
),
);
}
}
答案 0 :(得分:0)
您的输入字段中没有任何 validator
。
validate()
背后的主要思想是,它从 validator
的成员字段中调用所有 Form
,键为 formstate
(在您的情况下)。
答案 1 :(得分:0)
我是同样的问题,但解决了,因为我声明变量错误。确保正确声明变量。
final _formKey = GlobalKey<FormState>(); //Correct
final GlobalKey _formKey = GlobalKey<FormState>(); //Wrong
GlobalKey _formKey = GlobalKey<FormState>(); //wrong