Flutter开发之——表单组件
在Flutter开发中,表单处理是非常常见的需求。
·
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开发者来说,掌握表单处理技巧非常重要,因为它是用户交互的核心部分。合理使用表单验证和状态管理可以显著提升应用的用户体验。
更多推荐


所有评论(0)