TextField和TextFormField的属性
输入框是比较复杂的组件,文本输入是最常见的一种交互方式,应用的情况也比较多。在上一个项目中,关于输入框的组件处理了很多,所以觉得很有必要单独拎出来了解下。
以下是输入框的属性和方法:
| 属性名 | 类型 | 说明 |
|---|---|---|
| decoration | InputDecoration | 输入框的装饰器,设置内容或者装饰 |
| controller | TextEditingController | 控制器,跟输入框的交互一般都通过该属性完成,如果不创建的话默认会自动创建 |
| focusNode | FocusNode | 焦点控制 |
| keyboardType | TextInputType | 设置输入类型(键盘类型) |
| inputFormatters | List | 限制输入文本的格式 |
| obscureText | bool | 是否隐藏输入的文字 |
| textInputAction | TextInputAction | 键盘事件类型 |
| textCapitalization | TextCapitalization | 设置文本大写 |
| style | TextStyle | 输入文本的样式 |
| textAlign | TextAlign | 文本的对齐方式 |
| textDirection | TextDirection | 文字的排列方向 |
| autofocus | bool | 是否自动获取焦点 |
| autocorrect | bool | 是否自动校验 |
| maxLines | int | 最大行数 |
| maxLength | int | 输入的最大字符个数 |
| maxLengthEnforced | bool | 配合maxLength一起使用,在达到最大长度时是否阻止输入 |
| onEditingComplete | VoidCallback | 点击键盘完成按钮时触发的回调,该回调没有参数,(){} |
| onSubmitted | VoidCallback | 点击键盘完成按钮时触发的回调,该回调有参数,参数即为当前输入框中的值。(v){} |
| enabled | bool | 输入框是否可用 |
| cursorWidth | double | 光标的宽度 |
| cursorRadius | Radius | 光标的圆角 |
| cursorColor | Color | 光标的颜色 |
TextField(普通输入框)
普通输入框指的是单独的输入框,没有在表单中的输入框。它和表单中的输入框TextFormField方法略有不同,TextFormField是在TextField的基础上扩展的。
| 属性名 | 类型 | 说明 |
|---|---|---|
| onChanged | VoidCallback | 用户输入时的回调(v){} |
| onTap | VoidCallback | 点击输入框时的回调 |
TextFormField(表单里的输入框)
表单中的输入框最主要的特点就是提供了表单验证。
| 属性名 | 类型 | 说明 |
|---|---|---|
| validator | FormFieldValidator<T> | 表单验证器 |
| autovalidate | bool | 自动验证值 |
| onSaved | FormFieldSetter<T> | 表单保存的回调方法 |
| initalValue | T | 表单字段初始值 |
InputDecoration
TextField装饰器,可以理解成输入框的默认属性和一些样式定义,以下是它的构造方法:
1 | InputDecoration({ |
inputFormatters
用于限制输入的内容。
- WhitelistingTextInputFormatter 白名单校验,也就是只允许输入符合规则的字符
- BlacklistingTextInputFormatter 黑名单校验,除了规定的字符其他的都可以输入
- LengthLimitingTextInputFormatter 长度限制,跟maxLength作用类似
例如:只允许输入数字,并且不超过6个字符
1 | inputFormatters: [ |
实例
文本监听
新建一个简单的输入框,并实现文本监听,栗子1:
1 | String _inputText = ''; |
当使用TextFormField时没有onChanged,只能手动实现监听,栗子2:
1 | String _inputText = ''; |
实现文本清除按钮
在输入框有内容时显示清除按钮,在输入框内容为空时隐藏清除按钮,栗子3:
1 | TextEditingController _controller = new TextEditingController(); |


