textField用于文本输入,它提供了很多属性:const TextField({ TextEditingController controller, F
textField用于文本输入,它提供了很多属性:
const TextField({ ... TextEditingController controller, FocusNode focusNode, InputDecoration decoration = const InputDecoration(), TextInputType keyboardType, TextInputAction textInputAction, TextStyle style, TextAlign textAlign = TextAlign.start, bool autofocus = false, bool obscureText = false, int maxLines = 1, int maxLength, this.maxLengthEnforcement, ToolbarOptions? toolbarOptions, ValueChanged<String> onChanged, VoidCallback onEditingComplete, ValueChanged<String> onSubmitted, List<TextInputFormatter> inputFormatters, bool enabled, this.cursorWidth = 2.0, this.cursorRadius, this.cursorColor, this.onTap, ... })
属性 | 类型 | 说明 |
---|---|---|
controller | TextEditingController | 控制器,通过它可以获取文本内容,监听编辑文本事件,大多数情况下我们需要主动提供一个控制器 |
focusNode | InputDecoration | 焦点控制 |
decoration | InputDecoration | 用于控制文本的外观,如提示文本、背景色、边框等 |
keyboardType | TextInputType | 用于设置输入框的默认键盘类型 |
textInputAction | TextInputAction | 键盘动作图标按钮,他是一个枚举值 |
style | TextStyle | 正在编辑的文本样式 |
textAlign | TextAlign | 文本框的在水平方向的对齐方式 |
autofocus | bool | 是否自动获取焦点 |
obscureText | bool | 是否隐藏正在编辑的文本,用于密码输入场景 |
maxLines | int | 输入框的最大行数 |
maxlength | int | 文本框的最大长度 |
maxLengthEnforcement | 当文本长度超出文本框长度时如何处理 | |
toolbarOptions | ToolbarOptions | 长按时出现的选项 |
onChange | ValueChanged<String> | 输入框改变时候的回调函数,也可以通过controller来监听 |
onEditingComplete | VoidCallback | 输入完后触发的回调函数,不接受参数 |
onSubmitted | ValueChanged<String> | 接收ValueChanged<String>的参数 |
inputFormatters | List<TextInputFormatter> | 用于指定输入格式,可以用于检验格式 |
enable | bool | 为bool时,输入框将变为禁用状态 |
cursorWidth、cursorRadius和cursorColor | 这三个属性是用于自定义输入框光标宽度、圆角和颜色 |
示例:注意提示内容都是在InputDecoration中设置的
void mian()=>runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: "文本输出框", home:Scaffold( appBar: AppBar(title:const Text("文本输入框")), body:Column( children:const <Widget>[ TextField( autofocus: true, decoration: InputDecoration( //文本 labelText:"用户名", //提示信息 hintText: "用户名或邮箱", //图标 prefixIcon: Icon(Icons.person), ), //设置最大行数 maxLines: 1, ), TextField( autofocus: true, decoration: InputDecoration( labelText:"密码", hintText: "您的登录密码", prefixIcon: Icon(Icons.lock), ), //隐藏文本 obscureText: true, ), ], ), ) ); } }
监听事件:
获取内容的两种方式:
- 定义两个变量,用于保存用户名和密码,然后再onChanged触发时,各自保存输入内容
- 通过Controller直接获取,onChanged是一种单纯的监听改变事件,但Controller中还有一些其他方法可以使用。
第一种方式:
onChanged: (value){ print("你输入的内容为$value"); }
第二种方式:
定义一个controller:
TextEditingController _unameController = TextEditingController(); _unameController.addListener(() { print("你输入的内容为:${_unameController.text}"); });
完整代码:
void main()=>runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { //定义一个controller TextEditingController _unameController = TextEditingController(); //调用.addListener重写其中的方法 _unameController.addListener(() { print("你输入的内容为:${_unameController.text}"); }); return MaterialApp( title: "文本输出框", home:Scaffold( appBar: AppBar(title:const Text("文本输入框")), body:Column( children: <Widget>[ TextField( //设置监听 controller: _unameController, autofocus: true, decoration: const InputDecoration( //文本 labelText:"用户名", //提示信息 hintText: "用户名或邮箱", //图标 prefixIcon: Icon(Icons.person), ), //设置最大行数 maxLines: 1, ), TextField( autofocus: true, decoration:const InputDecoration( labelText:"密码", hintText: "您的登录密码", prefixIcon: Icon(Icons.lock), ), //隐藏文本 obscureText: true, //表单改变事件 onChanged: (value){ print("你输入的内容为$value"); }, ), ], ), ) ); } }
到此这篇关于介绍Flutter输入框TextField属性及监听事件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持好代码网。