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

作者:老图拉丁 时间:2023-07-09 10:28:51 

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,
  ...
})
属性类型说明
controllerTextEditingController控制器,通过它可以获取文本内容,监听编辑文本事件,大多数情况下我们需要主动提供一个控制器
focusNodeInputDecoration焦点控制
decorationInputDecoration用于控制文本的外观,如提示文本、背景色、边框等
keyboardTypeTextInputType用于设置输入框的默认键盘类型
textInputActionTextInputAction键盘动作图标按钮,他是一个枚举值
styleTextStyle正在编辑的文本样式
textAlignTextAlign文本框的在水平方向的对齐方式
autofocusbool是否自动获取焦点
obscureTextbool是否隐藏正在编辑的文本,用于密码输入场景
maxLinesint输入框的最大行数
maxlengthint文本框的最大长度
maxLengthEnforcement
当文本长度超出文本框长度时如何处理
toolbarOptionsToolbarOptions长按时出现的选项
onChangeValueChanged<String>输入框改变时候的回调函数,也可以通过controller来监听
onEditingCompleteVoidCallback输入完后触发的回调函数,不接受参数
onSubmittedValueChanged<String>接收ValueChanged<String>的参数
inputFormattersList<TextInputFormatter>用于指定输入格式,可以用于检验格式
enablebool为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

标签:Flutter,TextField,输入框
0
投稿

猜你喜欢

  • C语言实现通讯录小项目

    2022-10-05 07:33:36
  • Android studio so库找不到问题解决办法

    2023-10-28 02:20:49
  • Android使用Retrofit实现自定义Converter解析接口流程详解

    2022-12-30 23:19:38
  • Android自定义processor实现bindView功能的实例

    2023-09-07 17:16:37
  • Springboot集成graylog及配置过程解析

    2023-06-18 17:15:02
  • C++内存池的简单实现

    2022-05-27 05:20:50
  • 详解Android Service与Activity之间通信的几种方式

    2023-10-26 04:15:48
  • Android SQLite数据库的增 删 查找操作

    2023-02-09 09:47:25
  • c# 委托的常见用法

    2021-08-11 13:44:05
  • Java 反射调用静态方法的简单实例

    2021-10-09 06:47:58
  • Android WebView支持input file启用相机/选取照片功能

    2023-09-15 07:56:48
  • Android实现仿iOS菊花加载圈动画效果

    2023-08-19 12:57:41
  • SpringBoot中的yaml语法及静态资源访问问题

    2021-09-27 20:32:38
  • Hibernate双向多对多映射关系配置代码实例

    2022-12-26 22:30:30
  • Android实现EditText的富文本编辑

    2022-04-14 21:44:29
  • android中TabHost的图标(48×48)和文字叠加解决方法

    2023-05-19 14:13:28
  • 详解C#使用AD(Active Directory)验证内网用户名密码

    2023-03-03 23:17:47
  • java property配置文件管理工具框架过程详解

    2023-10-12 04:35:50
  • Android源码 在Ubuntu上下载,编译和安装

    2022-11-28 14:31:29
  • Java中的CAS和ABA问题说明

    2021-08-19 11:08:18
  • asp之家 软件编程 m.aspxhome.com