Flutter开发之——表单组件

一 表单组件

表单组件时Flutter中用来进行用户输入,提交用户输入信息的组件。在使用表单组件时,需要将其放入表单容器中,使用时类似于H5中的form。常用表单组件有:

  • Form
  • FormField
  • TextFormField

二 表单组件介绍

2.1 Form

  • Form类似于H5中的form,是表单控件的容器
  • Form的child通常为多组件容器,比如Column,Row

2.2 FormField

  • FormField是一个表单控件,此控件包含表单的状态,方便更新UI
  • 通常情况下,我们不会直接使用FormField,而是使用TextFormField

2.3 TextFormField

  • TextFormField继承自FormField,是一个输入框表单
  • TextFormField用于接收输入信息,比如:用户名,密码

三 表单组件基本用法

3.1 基本用法代码

Form(child: Column(
          children: [
            Text("用户名:"),
            TextFormField(),
            Text("密码:"),
            TextFormField(),
            RaisedButton(onPressed: (){},child: Text("登录"),)
          ],
        ),)

3.2 效果图

四 表单属性用法

4.1 表单属性代码

 //变量定义
 var userNameController = new TextEditingController();
  var passWordController = new TextEditingController();
  var _userNameFieldValue = '';
  var _passWordFieldValue = '';
  
  var _name = '';
  var _pwd = '';
  final _formKey = GlobalKey<FormState>();
  
  //body部分
  body: Form(
          key: _formKey,
          onWillPop: () async {
            return await showDialog<bool>(
                context: context,
                builder: (BuildContext context) {
                  return AlertDialog(
                    title: Text('提示'),
                    content: Text('确认退出吗?'),
                    actions: <Widget>[
                      FlatButton(
                        child: Text('取消'),
                        onPressed: () {
                          Navigator.of(context).pop(false);
                        },
                      ),
                      FlatButton(
                        child: Text('确认'),
                        onPressed: () {
                          Navigator.of(context).pop(true);
                        },
                      ),
                    ],
                  );
                });
          },
          //autovalidateMode:AutovalidateMode.disabled ,
          child: Column(
            children: [
              Text(
                "用户名",
                style: TextStyle(
                    color: Colors.black,
                    fontSize: 16,
                    fontWeight: FontWeight.bold),
              ),
              TextFormField(
                controller: userNameController,
                decoration: InputDecoration(
                    icon: Icon(Icons.person),
                    suffixIcon: Icon(Icons.delete),
                    labelText: "请输入用户名",
                    counterText: "${_userNameFieldValue.length}/32"),
                autovalidateMode: AutovalidateMode.disabled,
                validator: (userName) {
                  if (userName.length < 3) {
                    return "用户名过短";
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _userNameFieldValue = value;
                  });
                },
                onSaved: (value) {
                  _name = value;
                },
                keyboardType: TextInputType.number,
                textCapitalization: TextCapitalization.words,
                textInputAction: TextInputAction.search,
              ),
              Text("密码",
                  style: TextStyle(
                      color: Colors.black,
                      fontSize: 16,
                      fontWeight: FontWeight.bold)),
              TextFormField(
                controller: passWordController,
                decoration: InputDecoration(
                  icon: Icon(Icons.lock),
                  suffixIcon: Icon(Icons.delete),
                  labelText: "请输入密码",
                  counterText: "${_passWordFieldValue.length}/32",
                ),
                autovalidateMode: AutovalidateMode.disabled,
                obscureText: true,
                validator: (passWord) {
                  if (passWord.length < 3) {
                    return "密码过短";
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _passWordFieldValue = value;
                  });
                },
                onSaved: (value) {
                  _pwd = value;
                },
              ),
              RaisedButton(
                onPressed: () {
                  var _state = _formKey.currentState;
                  if (_state.validate()) {
                    _state.save();
                    login(_name, _pwd);
                  }
                  //login(_userNameFieldValue, _passWordFieldValue);
                },
                child: Text("登录"),
              )
            ],
          ),
          onChanged: () {
            //print("用户名:${userNameController.text}");
            //print("密码:${passWordController.text}");
          },
        ));
  //login方法
  void login(String name, String pwd) 
  {
    print("用户名:$name,密码:$_pwd");
    userNameController.clear();
    passWordController.clear();
  }

4.2 效果图

4.3 Form属性

属性说明取值
key整个应用程序中唯一的密钥Key对象
onWillPop返回按钮拦截后的小控件的方法WillPopCallback对象
autovalidateMode输入框变化校验bool对象
onChanged输入框发生变化时的回调函数Function对象

4.4 TextFormField

属性说明取值
initialValue初始值String对象
keyboardType①键盘类型TextInputType对象
textCapitalization②文本的断行方式TextCapitalization枚举值
textInputAction③键盘输入按钮的类型TextInputAction枚举值
decoration④输入框试图InputDecoration对象
style文本风格TextStyle对象
textDirection文本方向TextDirection枚举值
textAlign文本对齐方式TextAlign枚举值
obscureText文本显示是否加密bool对象
autocorrect是否开启自动更正bool对象
autovalidate是否自动有效性检查bool对象
maxLines最大行数int对象
onEditingComplete编辑完成时的回调Function
onFieldSubmitted表单提交时的回调Function
onSaved表单保存时的回调Function
validator有效性校验函数Function
enabled输入框是否可用bool对象
keyboardType①
名称说明
datetime日期时间类型
emailAddressEmail地址类型
multiline多行文本类型
number数字键盘类型
phone电话类型
text文本类型
url网址链接类型
textCapitalization②
名称说明
characters使用字符进行断行
words使用单词进行断行
sentences使用句子进行断行
textInputAction③
名称说明
continueAction继续按钮
done完成按钮
emergencyCall紧急电话按钮(IOS)
go前进按钮
join加入按钮
newline换行按钮
next下一步按钮
previous上一步按钮
route跳转按钮
search查找按钮
send发送按钮
unspecified默认按钮
decoration(InputDecoration)④
属性说明取值
border提示试图边框InputBorder对象
counterPadding内容的内间距EdgeInsetsGeometry对象
counterText输入框下方标识文字个数String对象
counterStyle显示字数文本的风格TextStyle对象
disabledBorder不可用时的边框InputBorder对象
enabled是否可用bool对象
enabledBorder可用时的边框InputBorder对象
errorBorder出错是的边框InputBorder对象
errorMaxLines出错文本的最大行数int对象
errorStyle出错文本的风格TextStyle对象
errorText错误文本String对象
fillColor填充颜色Color对象
helperText帮助文本String对象
helperStyle帮助文本的字体风格TextStyle对象
hintText提示文本显示文本String对象
hintStyle提示文本字体风格TextStyle对象
icon图标Widget对象
labelText标签文本String对象
labelStyle标签文本的字体风格TextStyle对象
prefix前缀组件Widget对象
prefixIcon前缀图标Widget对象
prefixText前缀文本String对象
prefixStyle前缀文本的字体风格TextStyle对象
suffix后缀组件Widget对象
suffixIcon后缀图标Widget对象
suffixText后缀文字String对象
suffixStyle后缀文字字体风格TextStyle对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值