Flutter 如何在颤振中添加表单验证
我确实没有收到代码错误,但无法验证表单并显示错误消息。我有三个组成部分的dart代码,即密码、输入字段和按钮。图书馆里还有一个人体飞镖Flutter 如何在颤振中添加表单验证,flutter,Flutter,我确实没有收到代码错误,但无法验证表单并显示错误消息。我有三个组成部分的dart代码,即密码、输入字段和按钮。图书馆里还有一个人体飞镖 import 'package:flutter_auth/Screens/Login/components/background.dart'; import 'package:flutter_auth/Screens/Login/components/uploadpage.dart'; import 'package:flutter_auth/component
import 'package:flutter_auth/Screens/Login/components/background.dart';
import 'package:flutter_auth/Screens/Login/components/uploadpage.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';
class Body extends StatelessWidget {
const Body({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Background(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"LOGIN",
style: TextStyle(fontWeight: FontWeight.bold),
),
SizedBox(height: size.height * 0.03),
RoundedInputField(
hintText: "Username",
keyboardType: TextInputType.emailAddress,
validator: (value) {
if (value.length == 0)
return "Please enter email";
else if (!value.contains("@"))
return "Please enter valid email";
else
return null;
},
onChanged: (value) {},
),
PasswordField(
onSaved: (value) {},
),
RoundedButton(
text: "LOGIN",
press: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
},
),
],
),
),
);
}
}
class SecondScreen extends StatelessWidget {
goBackToPreviousScreen(BuildContext context) {
Navigator.pop(context);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Home Page"),
actions: <Widget>[
IconButton(
icon: Icon(
Icons.upload_file,
color: Colors.white,
),
onPressed: () {
{
Navigator.push(
context,
MaterialPageRoute(builder: (context) => uploadpage()),
);
} // do something
},
)
],
),
body: Stack(fit: StackFit.expand, children: <Widget>[
Positioned(
bottom: 0,
width: MediaQuery.of(context).size.width,
child: Center(
child: RaisedButton(
color: Colors.purple[400],
textColor: Colors.white,
onPressed: () {
goBackToPreviousScreen(context);
},
child: Text('Logout')),
),
)
]));
}
我确实没有收到代码错误,但无法验证表单并显示错误消息。我有三个组成部分的dart代码,即密码、输入字段和按钮。图书馆里还有一个人体飞镖
import 'package:flutter_auth/Screens/Login/components/background.dart';
import 'package:flutter_auth/Screens/Login/components/uploadpage.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';
class Body extends StatelessWidget {
const Body({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Background(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"LOGIN",
style: TextStyle(fontWeight: FontWeight.bold),
),
SizedBox(height: size.height * 0.03),
RoundedInputField(
hintText: "Username",
keyboardType: TextInputType.emailAddress,
validator: (value) {
if (value.length == 0)
return "Please enter email";
else if (!value.contains("@"))
return "Please enter valid email";
else
return null;
},
onChanged: (value) {},
),
PasswordField(
onSaved: (value) {},
),
RoundedButton(
text: "LOGIN",
press: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
},
),
],
),
),
);
}
}
class SecondScreen extends StatelessWidget {
goBackToPreviousScreen(BuildContext context) {
Navigator.pop(context);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Home Page"),
actions: <Widget>[
IconButton(
icon: Icon(
Icons.upload_file,
color: Colors.white,
),
onPressed: () {
{
Navigator.push(
context,
MaterialPageRoute(builder: (context) => uploadpage()),
);
} // do something
},
)
],
),
body: Stack(fit: StackFit.expand, children: <Widget>[
Positioned(
bottom: 0,
width: MediaQuery.of(context).size.width,
child: Center(
child: RaisedButton(
color: Colors.purple[400],
textColor: Colors.white,
onPressed: () {
goBackToPreviousScreen(context);
},
child: Text('Logout')),
),
)
]));
}
import'包:flatter_auth/Screens/Login/components/background.dart';
导入“包:flatter_auth/Screens/Login/components/uploadpage.dart”;
导入“包装:颤振验证/组件/圆形按钮.省道”;
导入“package:flatter_auth/components/rounded_input_field.dart”;
导入“package:flatter_auth/components/rounded_password_field.dart”;
类主体扩展了无状态小部件{
常量体({
关键点,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
Size Size=MediaQuery.of(context).Size;
返回背景(
子:SingleChildScrollView(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
正文(
“登录”,
样式:TextStyle(fontWeight:fontWeight.bold),
),
SizedBox(高度:size.height*0.03),
圆形计算机场(
hintText:“用户名”,
键盘类型:TextInputType.emailAddress,
验证器:(值){
如果(value.length==0)
返回“请输入电子邮件”;
如果(!value.contains(@)),则为else
返回“请输入有效电子邮件”;
其他的
返回null;
},
一旦更改:(值){},
),
密码字段(
onSaved:(值){},
),
圆形按钮(
文本:“登录”,
新闻界:(){
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>SecondScreen()),
);
},
),
],
),
),
);
}
}
类SecondScreen扩展了无状态小部件{
goBackToPreviousScreen(构建上下文){
Navigator.pop(上下文);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“主页”),
行动:[
图标按钮(
图标:图标(
Icons.upload\u文件,
颜色:颜色,白色,
),
已按下:(){
{
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>uploadpage()),
);
}//做点什么
},
)
],
),
正文:堆栈(拟合:StackFit.expand,子项:[
定位(
底部:0,
宽度:MediaQuery.of(context).size.width,
儿童:中心(
孩子:升起按钮(
颜色:颜色。紫色[400],
textColor:Colors.white,
已按下:(){
goBackToPreviousScreen(上下文);
},
子项:文本(“注销”),
),
)
]));
}
以下是表单工作原理的基本示例:
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
GlobalKey<FormState> formKey = new GlobalKey();
String formFieldValue;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Form(
key: formKey,
child: Column(
children: [
TextFormField(
validator: (input) {
if (input.isEmpty) {
return 'Please type something';
}
return null;
},
onSaved: (input) => formFieldValue = input,
),
RaisedButton(
onPressed: submitForm,
child: Text(
'Submit'
),
)
],
),
)
);
}
submitForm() {
final formState = formKey.currentState;
if (formState.validate()) {
formState.save();
// then do something
}
}
}
类MyApp扩展StatefulWidget{
@凌驾
State createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
GlobalKey formKey=新的GlobalKey();
字符串formFieldValue;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:表格(
key:formKey,
子:列(
儿童:[
TextFormField(
验证器:(输入){
if(input.isEmpty){
返回“请键入内容”;
}
返回null;
},
onSaved:(输入)=>formFieldValue=输入,
),
升起的按钮(
onPressed:submitForm,
子:文本(
“提交”
),
)
],
),
)
);
}
submitForm(){
最终formState=formKey.currentState;
if(formState.validate()){
formState.save();
//那就做点什么
}
}
}
此处验证程序不会自动调用。您必须在按下按钮或其他按钮时手动调用它
在这里,您需要在表单小部件中包装您的列,并给它一个键
final\u formreg=GlobalKey();
表单(键:_formreg,子项:列(子项:
[RoundedInputField()]
));
升起按钮(按下时:()=>{
a=_formreg.currentState.validate();
} )
a是一个布尔值