Flutter 表单属性用法详解

4.1 表单属性代码实现

在Flutter开发中,表单处理是非常常见的需求。下面是一个完整的表单实现示例,包含了用户名和密码的输入验证:

//变量定义
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(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('提示'),
          content: Text('确认退出吗?'),
          actions: [
            FlatButton(
              child: Text('取消'),
              onPressed: () {
                Navigator.of(context).pop(false);
              },
            ),
            FlatButton(
              child: Text('确认'),
              onPressed: () {
                Navigator.of(context).pop(true);
              },
            ),
          ],
        );
      });
  },
  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);
          }
        },
        child: Text("登录"),
      )
    ],
  ),
  onChanged: () {},
));

//login方法
void login(String name, String pwd) {
  print("用户名:$name,密码:$pwd");
  userNameController.clear();
  passWordController.clear();
}

4.2 表单属性详解

Form属性

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

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 日期时间类型
emailAddress Email地址类型
multiline 多行文本类型
number 数字键盘类型
phone 电话类型
text 文本类型
url 网址链接类型
textCapitalization类型
名称 说明
characters 使用字符进行断行
words 使用单词进行断行
sentences 使用句子进行断行
textInputAction类型
名称 说明
continueAction 继续按钮
done 完成按钮
emergencyCall 紧急电话按钮(IOS)
go 前进按钮
join 加入按钮
newline 换行按钮
next 下一步按钮
previous 上一步按钮
route 跳转按钮
search 查找按钮
send 发送按钮
unspecified 默认按钮

开发小贴士

在iOS应用开发过程中,使用AppUploader可以大大简化应用上传到App Store的流程。这个工具提供了直观的界面和自动化功能,帮助开发者快速完成应用打包、签名和上传等操作,特别适合需要频繁测试和发布的应用场景。

对于Flutter开发者来说,掌握表单处理技巧非常重要,因为它是用户交互的核心部分。合理使用表单验证和状态管理可以显著提升应用的用户体验。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐