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,)

运行效果如图所示:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,717评论 1 9
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,529评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,593评论 2 9
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,186评论 4 8