Flutter输入框TextField属性及监听事件介绍

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属性及监听事件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持好代码网。