首页 > 其他分享 >Flutter TextField组件的使用

Flutter TextField组件的使用

时间:2023-11-08 18:44:17浏览次数:49  
标签:focusNode 焦点 文本框 提示信息 组件 TextField Flutter 输入

Flutter TextField组件

简单的说,这个组件其实就是个输入框。

1. 属性

const TextField({
Key key,
this.controller,//控制器
this.focusNode,//焦点
this.decoration = const InputDecoration(),//装饰
TextInputType keyboardType,//键盘类型,即输入类型
this.textInputAction,//键盘按钮
this.textCapitalization = TextCapitalization.none,//大小写
this.style,//样式
this.strutStyle,
this.textAlign = TextAlign.start,//对齐方式
this.textDirection,
this.autofocus = false,//自动聚焦
this.obscureText = false,//是否隐藏文本,即显示密码类型
this.autocorrect = true,//自动更正
this.maxLines = 1,//最多行数,高度与行数同步
this.minLines,//最小行数
this.expands = false,
this.maxLength,//最多输入数,有值后右下角就会有一个计数器
this.maxLengthEnforced = true,
this.onChanged,//输入改变回调
this.onEditingComplete,//输入完成时,配合TextInputAction.done使用
this.onSubmitted,//提交时,配合TextInputAction
this.inputFormatters,//输入校验
this.enabled,//是否可用
this.cursorWidth = 2.0,//光标宽度
this.cursorRadius,//光标圆角
this.cursorColor,//光标颜色
this.keyboardAppearance,
this.scrollPadding = const EdgeInsets.all(20.0),
this.dragStartBehavior = DragStartBehavior.start,
this.enableInteractiveSelection,
this.onTap,//点击事件
this.buildCounter,
this.scrollPhysics,
})

2. InputDecoration() 属性:

const InputDecoration({
this.icon, // 装饰器外小图标
this.labelText, // 文本框描述标签
this.labelStyle, // 文本框描述标签样式
this.helperText, // 文本框辅助标签
this.helperStyle, // 文本框辅助标签样式
this.hintText, // 文本框默认提示信息
this.hintStyle, // 文本框默认提示信息样式
this.hintMaxLines, // 文本框默认提示信息最大行数
this.errorText, // 文本框错误提示信息
this.errorStyle, // 文本框错误提示信息样式
this.errorMaxLines, // 文本框错误提示信息最大行数
this.hasFloatingPlaceholder = true, // 文本框获取焦点后 labelText 是否向上浮动
this.isDense, // 是否问紧凑型文本框
this.contentPadding, // 文本内边距
this.prefixIcon, // 前置图标
this.prefix, // 前置预填充 Widget
this.prefixText, // 前置预填充文本
this.prefixStyle, // 前置预填充样式
this.suffixIcon, // 后置图标
this.suffix, // 后置预填充 Widget
this.suffixText, // 后置预填充文本
this.suffixStyle, // 后置预填充样式
this.counter, // 输入框右下角 Widget
this.counterText, // 输入框右下角文本
this.counterStyle, // 输入框右下角样式
this.filled, // 是否颜色填充文本框
this.fillColor, // 填充颜色
this.errorBorder, // errorText 存在时未获取焦点边框
this.focusedBorder, // 获取焦点时边框
this.focusedErrorBorder, // errorText 存在时获取焦点边框
this.disabledBorder, // 不可用时边框
this.enabledBorder, // 可用时边框
this.border, // 边框
this.enabled = true, // 输入框是否可用
this.semanticCounterText,
this.alignLabelWithHint, // 覆盖将标签与 TextField 的中心对齐
})

3. controller 使用:

3.1 获取和赋值

TextEditingController _textController = TextEditingController();
String text = _textController.text.toString(); //获取
_textController.text = text; //赋值

3.2 监听

_textController.addListener((){
  print('有变化');
});

//如果要知道有变化,还可以直接用事件
TextField(
  onChanged: (str){
    print('内容=$str');
  },
)

4. 焦点focusNode的使用

这个我实际上目前没用到,记录一下,参考的别人的文档,这部分我没试过

//创建FocusNode对象实例
FocusNode _focusNode = FocusNode();
//使用

return TextField(

focusNode: _focusNode,

);

/// 输入框焦点事件的捕捉与监听
@override
void initState() {
  super.initState()
  //添加listener监听
  //对应的TextField失去或者获取焦点都会回调此监听
  _focusNode.addListener(() {
    
    if (_focusNode.hasFocus) {
      //获取焦点
      print("获取焦点");
    } else {
      //失去焦点
      print("失去焦点");
    }
  });
 
}

5. 输入限制

TextField(
  inputFormatters: [
    FilteringTextInputFormatter.allow(RegExp("[0-9]")),
    LengthLimitingTextInputFormatter(4),
  ],
),

5.1 限制输入内容

这里用到了正则表达式,自己可以研究,下面列出常用的

  • 上面这句FilteringTextInputFormatter.allow(RegExp("[0-9]")),是限制允许输入数字
  • FilteringTextInputFormatter.allow(RegExp("[0-9.]")), 是允许输入数字和小数点
  • FilteringTextInputFormatter.allow(RegExp("[a-zA-Z]")), 是允许输入大小写字母

这里要注意的是除了用allow来限制,还可以用deny来限制不允许输入的

5.2 限制输入长度

LengthLimitingTextInputFormatter(4),

6. 使用

记录下我使用的。

TextField(
  inputFormatters: [
    FilteringTextInputFormatter.allow(RegExp("[0-9]")),
    LengthLimitingTextInputFormatter(4),
  ],
  textCapitalization: TextCapitalization.none,
  decoration: const InputDecoration(
    hintText: "Filter Time",
    hintStyle: TextStyle(color: Colors.black12),
    border: OutlineInputBorder(
      borderRadius: BorderRadius.all(
        Radius.circular(5),
      ),
      borderSide: BorderSide(
        color: Colors.blue,
        width: 1,
      ),
    ),
  ),
  controller: _phFilterTimeController,
),

当前版本是这么用,之前找到早几年有别的写法,试了下已经不能用了

————————————————

参考内容:

原文链接:https://blog.csdn.net/shiyangkai/article/details/124733440

标签:focusNode,焦点,文本框,提示信息,组件,TextField,Flutter,输入
From: https://www.cnblogs.com/PopFish/p/17818073.html

相关文章

  • 封装 Vue 组件的过程?
    组件可以提升整个项目的开发效率。能够把页面抽象成多个相对独立的模块,解决了我们传统项目开发:效率低、难维护、复用性等问题分析需求:确定业务需求,把页面中可以复用的结构,样式以及功能,单独抽离成一个文件,实现复用具体步骤:使用Vue.extend方法创建一个组件,然后使用Vue.comp......
  • vue3 使用elementUI饿了么el-table组件 动态循环自定义表头列数据
     在vue3上使用el-table组件自定义循环表头列;<el-table:data="list"v-loading="loading"border>      <!--@selection-change="handleSelectionChange"-->      <!--<el-table-columntype="selection"wi......
  • vue3异步组件
    父组件中,子组件的加载一般是按照先后顺序加载的,子组件加载后才会加载父组件。一个页面的子组件很多,由于会先加载子组件,那么父组件可能会出现比较长的白屏等待时间大型项目,可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件Vue提供defineAsyncComponent方法:import......
  • 第三方组件及计算属性传参的问题解决方式
    1.前言唉,好想玩滋嘣。2.计算属性直接传参接收不到表格数据某一列需要用的计算属性时,模板中使用计算属性fullName就会直接调用fullName函数,而在模板中fullName(item)相当于fullName()(item),此处为函数柯里化。<el-table-columnlabel="名称"align="center"min-width=......
  • vue3异步组件
    父组件中,子组件的加载一般是按照先后顺序加载的,子组件加载后才会加载父组件。一个页面的子组件很多,由于会先加载子组件,那么父组件可能会出现比较长的白屏等待时间大型项目,可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件Vue提供defineAsyncComponent方法:import......
  • 使用 Flutter 构建 Facebook Clone UI
    在本教程中,我将向您展示如何使用Flutter构建FacebookCloneUI,因此这里是源代码。该项目将需要许多文件,一个用于应用程序,3个用于某些自定义小部件,因此请确保为每个组件创建一个文件main.dartimport'package:bttom_sheet/actionbtn.dart';import'package:bttom_sheet/feedbox......
  • vuejs3.0 从入门到精通——Element Plus 组件库
    ElementPlus组件库一、ElementPlus 基于Vue3,面向设计师和开发者的组件库。二、完整导入https://element-plus.org/zh-CN/guide/quickstart.html#完整引入 如果你对打包后的文件大小不是很在乎,那么使用完整导入会更方便。//main.tsimport{createApp}from'vu......
  • 最全面的移动端UI组件设计详解:下篇
    上一期给大家讲解了《最全面的移动端UI组件设计详解:中篇》,主要分享了:基础组件、表单组件和反馈组件3个部分;这次给大家带来:数据展示组件和其他组件详解,希望你在设计APP、小程序、H5页面中,能熟练使用和理解各种的UI组件,今天给大家总结了关于移动端UI组件,希望可以在工作中帮到你。......
  • 最全面的移动端 UI组件设计详解:上篇
    作为一名UI设计师,我们经常要进行PC端和移动端的设计任务,上一次给大家分享了:《最全Web端UI组件设计详解》,这次给大家带来移动端UI组件设计详情,尤其在我们APP、小程序、H5页面设计中,我们要使用和熟知各种的UI组件,今天给大家总结了关于移动端UI组件,希望可以在工作中帮到你。什么......
  • 6、Flutter 列表组件
    列表有以下分类:1、垂直列表classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnCenter(child:ListView(children:const[Icon(Icons.search,color:Colors.red,size:50),......