Flutter文本输入框TextField控制器TextEditingController,TextField预设内容,获取TextField中的输入内容,兼听TextField中的内容变化

朴灿烈づ我的快乐病毒、 2023-10-08 11:14 66阅读 0赞

题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精。





















github? 你可能需要 百度同步
CSDN 网易云课堂教程 掘金
知乎 Flutter系列文章 头条同步

本文章首发于微信公众号(biglead) 我的大前端生涯 ,同步刊登各技术论坛。


在这里插入图片描述

TextField 系列文章

  • TextField的基本使用以及TextField常用属性精讲《点击查看详情》
  • TextField 焦点获取控制篇《点击查看详情》
  • TextField 输入文本样式 TextStyle 篇《正在发文中》
  • TextField 输入文本 textAlign 对齐分析篇《点击查看详情》
  • TextField 输入文本 decoration 配置边框样式以及提示文本分析篇《点击查看详情》
  • TextField TextEditingController 分析篇《就是本文章了》

1 简述

一句话 TextEditingController 用来操作 TextField。

  • 为绑定的输入框 TextField 预设内容
  • 获取 TextField 中输入的内容
  • 兼听文字输入变化与焦点变化
2 TextEditingController 的基本使用

第一步创建TextEditingController实例对象,其构造函数可选传参数text,通过构造函数text设置的内容将会在TextField创建时就显示到输入框内,代码如下:

  1. ///创建文本控制器实例
  2. ///创建方式一
  3. TextEditingController _editingController = new TextEditingController();
  4. ///创建方式二
  5. TextEditingController _controller2 = new TextEditingController(text: "初始化的");

第二步是对文本输入框TextField绑定控制器,代码如下:

  1. new TextField(
  2. //绑定控制器
  3. controller: _editingController,
  4. ),

第三步就是TextEditingController控制器常用方法,代码如下:

  1. /// 获取TextField中输入的内容
  2. String getEditeInputTextFunction(){
  3. return _editingController.text;
  4. }
  5. /// 设置TextField中显示的内容
  6. void setEditeInputTextFunction(String flagText){
  7. _editingController.text = flagText;
  8. }
  9. /// 清除TextField中显示的内容
  10. void clearEditeInputTextFunction(){
  11. _editingController.text = "";
  12. ///或者使用clear方法
  13. _editingController.clear();
  14. }

初始化的时候光标保持在文字最后,代码实例如下

  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. ///整理
  4. ///TextField TextEditingController 分析篇
  5. class TextFeildHomePage6 extends StatefulWidget {
  6. @override
  7. State<StatefulWidget> createState() {
  8. return TextFeildHomePageState();
  9. }
  10. }
  11. class TextFeildHomePageState extends State {
  12. ///用于文本输入框
  13. TextEditingController controller = new TextEditingController();
  14. ///用来控制 TextField 焦点的获取与关闭
  15. FocusNode focusNode = new FocusNode();
  16. @override
  17. void initState() {
  18. super.initState();
  19. ///预设输入框的内容
  20. String preText = "";
  21. ///控制 初始化的时候光标保持在文字最后
  22. controller = TextEditingController.fromValue(
  23. ///用来设置初始化时显示
  24. TextEditingValue(
  25. ///用来设置文本 controller.text = "0000"
  26. text: preText,
  27. ///设置光标的位置
  28. selection: TextSelection.fromPosition(
  29. ///用来设置文本的位置
  30. TextPosition(
  31. affinity: TextAffinity.downstream,
  32. /// 光标向后移动的长度
  33. offset: preText.length),),),
  34. );
  35. /// 添加兼听 当TextFeild 中内容发生变化时 回调 焦点变动 也会触发
  36. /// onChanged 当TextFeild文本发生改变时才会回调
  37. controller.addListener((){
  38. ///获取输入的内容
  39. String currentStr = controller.text;
  40. print(" controller 兼听 $currentStr");
  41. });
  42. }
  43. @override
  44. Widget build(BuildContext context) {
  45. return Scaffold(
  46. appBar: AppBar(
  47. title: Text("TextField 讲解"),
  48. actions: <Widget>[
  49. FlatButton(child: Text("保存",style: TextStyle(color: Colors.white),),onPressed: (){
  50. ///获取文本输入框的内容
  51. String inputText = controller.text;
  52. print("点击了保存 $inputText");
  53. },)
  54. ],
  55. ),
  56. body: Center(
  57. ///SizedBox 用来限制一个固定 width height 的空间
  58. child: SizedBox(
  59. width: 400,
  60. height: 110,
  61. child: Container(
  62. color: Colors.white24,
  63. padding:EdgeInsets.all(10) ,
  64. ///Alignment 用来对齐 Widget
  65. alignment: Alignment(0,0),
  66. ///文本输入框
  67. child: TextField(
  68. controller: controller,
  69. ///当TextField中输入的内容发生改变时回调
  70. onChanged: (value){
  71. print("TextField 中输入的内容 $value");
  72. },
  73. ),
  74. ),
  75. ),
  76. ),
  77. );
  78. }
  79. }

完毕
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,66人围观)

还没有评论,来说两句吧...

相关阅读