一 表单组件

表单组件时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对象
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐