Flutter输入框TextField属性及监听事件介绍
作者:老图拉丁 发布时间:2023-07-09 10:28:51
标签: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");
},
),
],
),
)
);
}
}
来源:https://blog.csdn.net/m0_55721894/article/details/121598084


猜你喜欢
- 这篇文章主要介绍了Jenkins Host key verification failed问题解决,文中通过示例代码介绍的非常详细,对大家的
- 本文实例为大家分享了java微信公众号支付示例代码,供大家参考,具体内容如下开始之前,先准备好:appid、商家号、商户密匙。工具类:MD5
- public String[] split(String regex) 默认limit为0public String[] split(Str
- 因为最近重新看了泛型,又看了些反射,导致我对Object、T(以下代指泛型)、?产生了疑惑。我们先来试着理解一下Object类,学习Java
- 1. 注解开发依赖注入1.1 使用@Autowired注解开启自动装配模式@Servicepublic class BookServiceI
- Android页面嵌套了一个h5,H5页面内部有用户登陆页面,发现h5页面的登陆功能无法使用,一直登陆失败。和web那边商量一会,发现js写
- java模拟实现图书检索系统 (基础版),供大家参考,具体内容如下练习实现3个简单的功能,没有优化,可以根据需求,自行添加想要实现的功能。B
- 效果明细用Popup实现的,录gif时,Popup显示不出来,不知道为什么,所以静态图凑合看吧大体思路图表使用Arc+Popup实现图表分为
- 上一次自己写了一个多线程断点续传下载的demo,过于麻烦,bug超多,所以我学习使用xutils来完成此功能。先将xutils依赖搭建好(上
- C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解。还有托管堆,栈,ref,out等等概念也是每个C#程序员
- 为大家提供的MySQL忘记密码的解决方案,供大家参考,具体内容如下1.在操作系统windows操作系统,xp或win7.中进入如下目录:C:
- 投影(Projection) 是一种可以将查询结果进行 塑性 的一种操作,你可以使用 投影 将一个 object 转成仅包含你需要属性的新对
- 折半查找法仅适用于对已有顺序的数组、数据进行操作!!!(从小到大)自我总结:折半查找法就是相当于(通过改变low或high的大小)把中间位置
- Class类中获取方法:public Method[] getMethods();//获取包括自身和继承(实现)过来的所有的public方法
- 大家好,我叫柠檬水,今天马上就要放假,突然想到自己以前的伙伴、同学,好像想到他们空间没怎么发过动态,难道是把我屏蔽了吗,好友又那么多,行吧,
- 一、前言Hello,又见面了,今天分享如何使用Unity制作计算器,难度中等,可以用来学习,或者当成其他项目的小组件导入。当然,也可以导出来
- 用过新版本android 360手机助手都人都对 360中只在桌面显示一个小小悬浮窗口羡慕不已吧? 其实实现这种功能,主要有两步: 1.判断
- 在C语言中,想要获取字符串长度可以有很多方法,下面分别介绍一、使用sizeof()运算符在C语言中,sizeof() 是长度的运算符,括号中
- 前言今天在逛某知名论坛的时候,看到一篇"请不要使用包装类型,避免造成性能损失"的文章。一下子就吸引了我的注意。大意就是,
- 这篇文章主要介绍了如何使用mybatis-generator自动生成代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考