Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在颤振中添加表单验证_Flutter - Fatal编程技术网

Flutter 如何在颤振中添加表单验证

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

我确实没有收到代码错误,但无法验证表单并显示错误消息。我有三个组成部分的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')),
            ),
          )
        ]));
  
}
我确实没有收到代码错误,但无法验证表单并显示错误消息。我有三个组成部分的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是一个布尔值