美文网首页
Flutter TextFiled 文本输入

Flutter TextFiled 文本输入

作者: 景小帮 | 来源:发表于2021-04-15 15:08 被阅读0次

    TextFiled 用于文本输入,提供了很多属性,我们先简单介绍一下主要属性的作用

    keyboardType:用于设置该输入框默认的键盘输入类型,取值如下:

    textInputAction:键盘动作按钮图标(即回车键位图标),它是一个枚举值,有多个可选值,全部的取值列表读者可以查看 API 文档,下面是当值为TextInputAction.search时,原生Android系统下键盘样式如图所示:

    onChange:输入框内容改变时的回调函数,注:内容改变事件也可以通过controller来监听。

    decoration:InputDecoration用于控制外观的显示,常用属性:

    ///设置隐藏文字

    hintText: text,

    ///设置去除下划线

    // border: InputBorder.none,

    ///设置左边图标

    prefixIcon:Icon(leftIconData),

    ///设置右边图标

    suffixIcon:IconButton(

    onPressed: (){

    controller.clear();

      },

      icon: controller.text.length >0 ?Icon(rightIconData) :Icon(null),

    ),

    ///设置外边框样式

    border:OutlineInputBorder(

    ///设置圆角20

     borderRadius:BorderRadius.all(Radius.circular(20)),  

    ///设置边框宽度为1 颜色

      borderSide:BorderSide(color: Colors.grey, width:1),

    ),

    ///未选中时候的颜色

    enabledBorder: OutlineInputBorder(

      borderRadius: BorderRadius.circular(5.0),

       borderSide: BorderSide(color: Colors.grey, width: 1),

     ),

    ///选中时外边框颜色

     focusedBorder: OutlineInputBorder(

     borderRadius: BorderRadius.circular(5.0),

     borderSide: BorderSide(color: Colors.red, width: 1),

     ),

    获取输入内容有两种方式:

    1.定义两个变量,用于保存用户名和密码,然后在onChange触发时,个子保存一下输入内容

    ///监听文本变化

     onChanged: (value){

       LogUtil.d('$value');

     },

    2.通过Controller 直接获取

    (1):定义一个controller

    TextEditingController nameController =TextEditingController();

    (2):设置输入框controller

    TextField(

        autofocus: true,

        controller: nameController, //设置controller

     )

    (3):监听输入改变

        Namecontroller.addListener(() {

        setState(() {

        LogUtil.d(Namecontroller.text);

          });

        });

    代码如下:

    /*

    * 输入框和表单

    */

    import 'package:common_utils/common_utils.dart';

    import 'package:flutter/material.dart';

    class TextFieldPage extends StatefulWidget {

    @override

      _TextFieldPageState createState() =>_TextFieldPageState();

    }

    class _TextFieldPageState extends State {

    TextEditingController Namecontroller =TextEditingController();

      TextEditingController Pascontroller =TextEditingController();

      bool isClear =false;

      @override

      void dispose() {

       Namecontroller.dispose();

        Pascontroller.dispose();

        super.dispose();

      }

    @override

      void initState() {

    super.initState();

        // Namecontroller.text="hello world!";

    // Namecontroller.selection=TextSelection(

    //    baseOffset: 2,

    //    extentOffset: Namecontroller.text.length

    // );

        Namecontroller.addListener(() {

    setState(() {

    LogUtil.d(Namecontroller.text);

          });

        });

        Pascontroller.addListener(() {

    setState(() {

    LogUtil.d(Pascontroller.text);

          });

        });

      }

    @override

      Widget build(BuildContext context) {

    return Scaffold(

    appBar:AppBar(

    title:Text('输入框和表单'),

            ),

            body:Column(

    children: [

    myInputFiled(

    '请输入用户名或邮箱', Icons.person, Namecontroller, Icons.close),

                myInputFiled('请输入密码', Icons.admin_panel_settings, Pascontroller,

                    Icons.close),

                Container(

    width: double.infinity,

                  alignment: Alignment.center,

                  height:45,

                  margin:EdgeInsets.all(20),

                  decoration:BoxDecoration(

    color: Colors.blue,

                    borderRadius:BorderRadius.all(Radius.circular(20)),

                  ),

                  child:Text(

    '确定',

                    style:TextStyle(color: Colors.white),

                  ),

                )

    ],

            ));

      }

    /*

    * 设置文字,左右

    */

      myInputFiled(String text, IconData leftIconData,

          TextEditingController controller, IconData rightIconData) {

    return Container(

    alignment: Alignment.center,

          margin:EdgeInsets.fromLTRB(20, 10, 20, 10),

          child:TextField(

    autofocus:true,

            controller: controller,

            ///设置键盘输入

            keyboardType: TextInputType.text,

            ///键盘动作按钮图标(即回车键位图标)

            textInputAction: TextInputAction.search,

            ///用于控制外观显示

            decoration:InputDecoration(

    ///设置隐藏文字

              hintText: text,

              ///设置去除下划线

              // border: InputBorder.none,

              ///设置左边图标

              prefixIcon:Icon(leftIconData),

              ///设置右边图标

              suffixIcon:IconButton(

    onPressed: (){

    controller.clear();

                },

                icon: controller.text.length >0 ?Icon(rightIconData) :Icon(null),

              ),

              ///设置外边框样式

              border:OutlineInputBorder(

    borderRadius:BorderRadius.all(Radius.circular(20)),

                borderSide:BorderSide(color: Colors.grey, width:1),

              ),

              ///未选中时候的颜色

              // enabledBorder: OutlineInputBorder(

    //  borderRadius: BorderRadius.circular(5.0),

    //  borderSide: BorderSide(color: Colors.grey, width: 1),

    // ),

    // ///选中时外边框颜色

    // focusedBorder: OutlineInputBorder(

    //  borderRadius: BorderRadius.circular(5.0),

    //  borderSide: BorderSide(color: Colors.red, width: 1),

    // ),

            ),

            ///监听文本变化

            // onChanged: (value){

    //  LogUtil.d('$value');

    // },

          ),

        );

      }

    }

    两种方式相比,onChanged是专门用于监听文本变化,而controller的功能却多一些,除了能监听文本变化外,它还可以设置默认值、选择文本,下面我们看一个例子:

    TextEditingController Namecontroller =TextEditingController();

    Namecontroller.text="hello world!";

    ///设置默认值,并从第三个字符开始选中后面的字符

    Namecontroller.selection=TextSelection(

       baseOffset:2,

        extentOffset:Namecontroller.text.length

    );

    设置controlle

    TextField( controller: _selectionController,)

    运行效果如图所示:

    相关文章

      网友评论

          本文标题:Flutter TextFiled 文本输入

          本文链接:https://www.haomeiwen.com/subject/bzdclltx.html