内容简介:TextField允许从用户处收集信息,声明一个基础的TextField代码十分简单:这会创建一个基础TextField组件:由于TextFields没有像Android中那样有一个ID,因此无法根据需要检索文本,而必须在更改时将其存储在变量中或使用控制器。
TextField允许从用户处收集信息,声明一个基础的TextField代码十分简单:
TextField() 复制代码
这会创建一个基础TextField组件:
从TextField收集信息
由于TextFields没有像Android中那样有一个ID,因此无法根据需要检索文本,而必须在更改时将其存储在变量中或使用控制器。
1.最简单的方式就是使用 onChanged
回调方法,将TextField当前的值保存在一个变量内,下面是示例代码。
String value = ""; TextField( onChanged: (text) { value = text; }, ) 复制代码
2.第二种方式就是使用 TextEditingController
。控制器依附在TextField组件上,并且我们可以监听和控制TextField的文本。
TextEditingController controller = TextEditingController(); TextField( controller: controller, ) 复制代码
接着就可以使用下面代码监听变化:
controller.addListener(() { // Do something here }); 复制代码
用控制器获取和设置文本:
print(controller.text); // Print current value controller.text = "Demo Text"; // Set new value 复制代码
TextField的其他回调
//键盘上按了done onEditingComplete: () {}, onSubmitted: (value) {}, 复制代码
TextField获得焦点
TextField获得焦点意味着有一个TextField被激活并且任何来自键盘的输入都会被键入到获得焦点的TextField内。
1.自动获得焦点
为了让TextField在widget创建的时候自动获取焦点,设置autofocus属性为true。
TextField( autofocus: true, ), 复制代码
2.自定义焦点切换
如果我们想代码变化焦点而不是仅仅自动获得焦点需要怎么做呢?由于我们需要某种方式来引用我们想要关注的TextField,我们将FocusNode附加到TextField并使用它来切换焦点。
// Initialise outside the build method FocusNode nodeOne = FocusNode(); FocusNode nodeTwo = FocusNode(); // Do this inside the build method TextField( focusNode: nodeOne, ), TextField( focusNode: nodeTwo, ), RaisedButton( onPressed: () { FocusScope.of(context).requestFocus(nodeTwo); }, child: Text("Next Field"), ), 复制代码
这里我们创建了两个focus node并且将他们依附到TextField上,当点击NextField按钮时,使用 FocusScope
去为下一个TextField申请获取焦点。
TextField更换键盘属性
在Flutter中,TextField允许你定制和键盘相关的属性。
1.键盘类型
TextField可以在弹出键盘的时候修改键盘类型。使用以下代码:
TextField( keyboardType: TextInputType.number, ), 复制代码
类型有如下几种:
- TextInputType.text (Normal complete keyboard)
- TextInputType.number (A numerical keyboard)
- TextInputType.emailAddress (Normal keyboard with an “@”)
- TextInputType.datetime (Numerical keyboard with a “/” and “:”)
- TextInputType.multiline (Numerical keyboard with options to enabled signed and decimal mode)
2.键盘操作按钮行为
更改TextField的textInputAction可以更改键盘本身的操作按钮。
//发送操作 TextField( textInputAction: TextInputAction.send, ), 复制代码
完整的行为列表太长,这里不做展示了,需要的可以进入TextInputAction类查看。
启用或禁用特定TextField的自动更正。使用自动更正字段进行设置。这同时也会禁用输入建议。
TextField( autocorrect: false, ), 复制代码
3.文本大写
TextField提供了一些选项,用来对用户输入的文本大写化。
TextField( textCapitalization: TextCapitalization.sentences, ), 复制代码
1.TextCapitalization.sentences
这是最常见的大写化类型,每个句子的第一个字母被转换成大写。
2.TextCapitalization.characters
大写句子中的所有字符。
3. TextCapitalization.words
对每个单词首字母大写。
文本对齐
使用textAlign属性设置TextField内的光标对齐方式。
TextField( textAlign: TextAlign.center, ), 复制代码
光标和文字会从TextField组件中间开始。
文本样式
我们使用style属性来更改TextField内部文本的外观。 使用它来更改颜色,字体大小等。这类似于文本小部件中的样式属性,因此我们不会花太多时间来探索它。
TextField( style: TextStyle(color: Colors.red, fontWeight: FontWeight.w300), ), 复制代码
更换光标样式
可以直接从TextField小部件自定义光标。 您可以更改角落的光标颜色,宽度和半径。 例如,这里我制作一个圆形的红色光标。
TextField( cursorColor: Colors.red, cursorRadius: Radius.circular(16.0), cursorWidth: 16.0, ), 复制代码
控制最大字符数
TextField( maxLength: 4, ), 复制代码
设置maxLength属性后,TextField会默认添加一个长度计数器。
可扩展TextField
有时,我们需要一个TextField,当一行完成时会扩展。 在Flutter中,它有点奇怪(但很容易)。 为此,我们将maxLines设置为null,默认为1。 设置为null不是我们习以为常的东西,但是它很容易做到。
注意:将maxLines属性设置为一个确定的数值,会将TextField直接扩大到对应的最大行
TextField( maxLines: 3, ) 复制代码
隐藏文本内容
TextField( obscureText: true, ), 复制代码
装饰TextField
到目前为止,我们专注于Flutter提供的输入功能。 现在我们将实际设计一个花哨的TextField。 为了装饰TextField,我们使用带有InputDecoration的decoration属性。 由于InputDecoration类非常庞大,我们将尝试快速查看大多数重要属性。
hint和label
hint:
label:
图标
//输入框外图标 TextField( decoration: InputDecoration( icon: Icon(Icons.print) ), ), //前缀图标 TextField( decoration: InputDecoration( prefixIcon: Icon(Icons.print) ), ), //输入框前缀组件 TextField( decoration: InputDecoration( prefix: CircularProgressIndicator(), ), ), 复制代码
每个属性像hint,label都有各自的style设置
1.用hintstyle修改hint样式
TextField( decoration: InputDecoration( hintText: "Demo Text", hintStyle: TextStyle(fontWeight: FontWeight.w300, color: Colors.red) ), ), 复制代码
2.帮助性提示
和label不一样,它会一直显示在输入框下部
TextField( decoration: InputDecoration( helperText: "Hello" ), ), 复制代码
3.使用decoration: null或者InputDecoration.collapsed可以去除默认的下划线。
TextField( decoration: InputDecoration.collapsed(hintText: "") ), 复制代码
以上所述就是小编给大家介绍的《深入Flutter TextField》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【1】JavaScript 基础深入——数据类型深入理解与总结
- 深入理解 Java 函数式编程,第 5 部分: 深入解析 Monad
- 深入理解 HTTPS
- 深入理解 HTTPS
- 深入浅出Disruptor
- 深入了解 JSONP
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ordering Disorder
Khoi Vinh / New Riders Press / 2010-12-03 / USD 29.99
The grid has long been an invaluable tool for creating order out of chaos for designers of all kinds—from city planners to architects to typesetters and graphic artists. In recent years, web designers......一起来看看 《Ordering Disorder》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
正则表达式在线测试
正则表达式在线测试