- Flutter和Dart系列文章
- 项目GitHub地址
- 上一篇Flutter之基础Widget文章介绍了
Flutter
中基础的Widget
, 但是由于篇幅的原因, 这篇文章就主要介绍TextField
TextField
TextField
用于文本输入,它提供了很多属性,我们先简单介绍一下主要属性的作用
const TextField({
Key key,
// 编辑框的控制器,跟文本框的交互一般都通过该属性完成,如果不创建的话默认会自动创建
this.controller,
// 用于控制`TextField`是否占有当前键盘的输入焦点, 使我们和键盘交互的`handle`
this.focusNode,
// 用于控制`TextField`的外观显示,如提示文本、背景颜色、边框等
this.decoration = const InputDecoration(),
// 键盘类型
TextInputType keyboardType,
// 决定键盘右下角按钮显示的内容
this.textInputAction,
// 设置什么情况下使用大写字母, 默认不使用大写字母
this.textCapitalization = TextCapitalization.none,
// 正在编辑的文本样式, `TextStyle`
this.style,
// 输入框文本的对其方式
this.textAlign = TextAlign.start,
// 输入框文本的其实位置
this.textDirection,
// 是否自动获取焦点, 默认`false`
this.autofocus = false,
// 是否隐藏正在编辑的文本,如用于输入密码的场景等,文本内容会用“•”替换, 默认`false`
this.obscureText = false,
// 是否自动校验, 默认`false`
this.autocorrect = true,
// 输入框能输入的最大行数
this.maxLines = 1,
// 输入框能输入的最多字符个数
this.maxLength,
// 达到最大长度(`maxLength`)时是否阻止输入, 默认`true`: 不能继续输入, `false`可以继续输入
this.maxLengthEnforced = true,
// 输入文本发生变化时的回调
this.onChanged,
// 点击键盘完成按钮时触发的回调,该回调没有参数,(){}
this.onEditingComplete,
// 点击键盘完成按钮时触发的回调,该回调有参数,参数即为当前输入框中的值。(String){}
this.onSubmitted,
// 对输入文本的校验
this.inputFormatters,
// 输入框是否可用, `false`则输入框会被禁用
this.enabled,
// 光标的宽度
this.cursorWidth = 2.0,
// 光标的圆角
this.cursorRadius,
// 光标的颜色
this.cursorColor,
// 键盘的外观, Brightness.light和dark
this.keyboardAppearance,
// 当TextField滚动时, 设置文本字段在滚动后的位置与可滚动项的边缘的距离
this.scrollPadding = const EdgeInsets.all(20.0),
// 长按输入的文本, 设置是否显示剪切,复制,粘贴按钮, 默认是显示的
this.enableInteractiveSelection = true,
// 点击输入框时的回调(){}
this.onTap,
})
controller
- 编辑框的控制器,通过它可以设置/获取编辑框的内容、选择编辑内容、监听编辑文本改变事件
- 大多数情况下我们都需要显式提供一个
controller
来与文本框交互 - 如果没有提供
controller
,则TextField
内部会自动创建一个 - 下面是一个
TextField
的取值和赋值的操作
class TextFieldWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return ControllerText();
}
}
class ControllerText extends State<TextFieldWidget> {
TextEditingController _textController = TextEditingController();
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
width: 414.0,
height: 600.0,
color: Colors.white12,
child: Column(
children: <Widget>[
TextField(
controller: _textController,
decoration: InputDecoration(icon: Icon(Icons.phone_iphone), hintText: 'hintText'),
),
RaisedButton(
child: Text('赋值'),
onPressed: (){
setState(() {
_textController.text =