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

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

(0)

相关推荐

  • flutter 输入框组件TextField的实现代码

    TextField 顾名思义文本输入框,类似于iOS中的UITextField和Android中的EditText和Web中的TextInput.主要是为用户提供输入文本提供方便.相信大家在原生客户端上都用过这个功能,就不在做具体介绍了,接下来还是具体介绍下Flutter中TextField的用法. 以下内容已更新到 github TextField的构造方法: const TextField({ Key key, this.controller, //控制器,控制TextField文字 thi

  • flutter TextField换行自适应的实现

    无论哪种界面框架输入文本框都是非常重要的控件, 但是发现flutter中的输入框TextField介绍的虽然多,但是各个属性怎么组合满足需要很多文章却说不清楚, 再加上控件版本变更频繁很多功能的介绍都是比较陈旧的属性.现在就需要一个类似微信的输入文本框, 这样一个非常实用的效果flutter要如何实现?前提是尽量用已有属性,少写或不写代码. 先明确这种输入文本框有哪些功能点? 能够自定义各种间距.主要是控件外边距(margin); 内间距(padding); 能够自定义样式. 输入框边框(圆角(

  • Flutter 如何封装文本输入框组件

    UI组件封装的考虑要点 封装一个 UI 组件,通常需要考虑下面这三个点: 接口如何定义:即组件接收什么输入参数来控制组件的外观和行为: 与业务分离:UI 组件应当只负责界面,而不负责业务,具体的业务应当由业务层完成: 简单易用:因为是 UI 组件,要尽可能地简单易用,方便使用者快速上手. 文本输入框接口定义 首先先看一下我们上一篇使用文本框的代码,这里实际上只是调用了一个函数返回新的组件,之所以要这么做是因为用户名.密码使用了成员属性,需要根据不同的成员属性来设置不同的行为,主要有: 文本框装饰

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

    textField用于文本输入,它提供了很多属性: const TextField({ ... TextEditingController controller, FocusNode focusNode, InputDecoration decoration = const InputDecoration(), TextInputType keyboardType, TextInputAction textInputAction, TextStyle style, TextAlign textA

  • android输入框内容改变的监听事件实例

    android输入框内容改变的监听事件一般用于比如我们常见的:登录qq时 用户名输入完整时头像自动显示,或者注册用户时实时提示注册格式是否正确等.那么我们在这里举例:判断输入框是否有内容,来改变按钮的状态,常用于搜索一类.截图如下:(布局代码不再给出) 首先所在的activity要 implements TextWatcher并实现其方法: public void afterTextChanged(Editable arg0) { // 文字改变后出发事件 String content = ed

  • Vue监听事件实现计数点击依次增加的方法

    1.实现计数器功能,每点击一次按钮,count值增加一或增加二,鼠标在cordinates行移动时会更新当前坐标,通过自定义函数或者stop属性禁止事件传播. 效果如下: 代码如下: <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>计数器自增函数</title> <script src="vue.js"></s

  • 如何利用原生JS实现触摸滑动监听事件

    前言 今天写一个小Demo,有个地方涉及到了左滑右滑的逻辑,本来想着用插件来着,但是想到自己好久没用原生JS写滑动的监听了,所以试着用原生JS来实现了一下,毕竟温故而知新嘛,同时做个记录.先把实现的效果贴出来: 构思 想要写出丝滑的触摸滑动事件的监听,要考虑以下3个方面的逻辑: 距离: 滑动距离要大于40 时间: 滑动时间小于在0.5秒,即500毫秒内完成手指按下,拖动,离开(避免只是手指在屏幕就触发) 滑动方向: 左右滑动的条件是:X轴移动的距离大于Y轴移动的距离,为正则向左,为负则向右 上下

  • 关于vue路由监听事件跳转的问题

    目录 vue路由监听事件跳转 1.监听路由触发事件的语法 2.可能遇到的问题 vue路由监听不到怎么办 方法一 方法二 方法三 vue路由监听事件跳转 1.监听路由触发事件的语法  watch: {     $route: function clearSelectionRow() {       console.log("success");       this.$emit("setSelectionFile", []);     },   } 代码实现功能:当本

  • 详解使用vue-router进行页面切换时滚动条位置与滚动监听事件

    按照正常的产品逻辑,我们在进行页面切换时滚动条应该是在页面顶部的,可是...在使用vue-router进行页面切换时,发现滚动条所处的位置被自动记录了下来,且在另一个组件内定义的滚动监听事件仍会运行,着实吃了一大惊... 说说我的破解方法: 1.在每个需要用vue-router切换的组件的mounted钩子内将页面的位置自动回滚到页面顶部,解决滚动条位置自动记录问题: 2.在每个组件内定义一条变量scrollWatch默认为true,在绑定滚动监听事件时加个if判断,只有在scrollWatch

  • vue v-on监听事件详解

    在html或jsp页面中我们总能碰到监听DOM事件来触发javaScript代码,下面我们就简单聊聊Vue.js中的监听事件是怎么处理的. 在vue.js中监听事件是通过v-on指令来实现的,先看一下简单的监听事件代码. <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <scrip

  • Android NavigationView头部设置监听事件

    NavigationView头部设置监听事件的方法,供大家参考,具体内容如下 1.将XML里的静态引入删除: <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravit

  • Laravel给生产环境添加监听事件(SQL日志监听)

    本文主要给大家介绍的是关于Laravel给生产环境添加监听事件(SQL日志监听)的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: laravel版本:5.2.* 一.创建监听器 php artisan make:listener QueryListener --event=Illuminate\\Database\\Events\\QueryExecuted or sudo /usr/local/bin/php artisan make:listener QueryListener

  • Android编程实现音量按钮添加监听事件的方法

    本文实例讲述了Android编程实现音量按钮添加监听事件的方法.分享给大家供大家参考,具体如下: 很多Android应用都应用到音量按钮,比如翻页,调整音乐声音大小等,但是如果没有对音量按钮进行监听,则无法达到预期的效果.如下代码,就是监听Android手机的音量按钮,开发者可以在相应的位置添加自己需要实现的功能. @Override public boolean onKeyDown (int keyCode, KeyEvent event) { // 获取手机当前音量值 int i = get

随机推荐