flutter - 验证时 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)),
));
}
解决方案
推荐阅读
- typescript-generics - 在条件类型中使用 unknown 似乎没有按预期工作?
- java - 使用 Builder 模式时如何添加额外的构造函数
- android - Android WifiManager 未启用/禁用 WiFi 状态
- laravel - Laravel 8 最新登录控制器代码 | 电话号码登录
- mysql - 任何人都可以解释为什么mysql没有按预期使用索引
- mysql - 有没有其他方法可以加快我的 MySQL 查询速度?
- excel - Google 表格 - 尝试在合并的单元格上执行 2 个条件的 sumifs
- android - 如何开发语音控制的 Android 应用架构?
- spring - concurrentmessagelistenercontainer spring kafka is not working
- python - Pygame 动画不适用于左侧动作,只有右侧动作有效