Flutter TextFiled 文本输入

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 文本输入)