flutter - 自定义TextFiled 输入框的样式,以及参数说明

系统默认的输入框样式

在这里插入图片描述

命名参数使用说明
obscureText让输入的文字模糊化, 也就是变成密码输入框, 填入布尔值
contentPadding设置输入框中的文字内边距, 使用在装饰器中
focusNode动态设置输入框的焦点 FocusNode 类型
maxLength输入框的输入的长度
maxLengthEnforced当输入的文字超过限制长度后,是否还能继续输入,如果是 false,则继续可以输入,但是边框线变红 ,为 true, 则不能再输入
decoration输入框的样式, 用 InputDecoration() 修饰
onSubmitted当软键盘上的 textInputAction: TextInputAction.done, 时触发
controller让输入控制器,可以监听输入框的变化,能灵活操作输入框
onEditingComplete输入框完成输入后的回调
autofocus输入框是否是焦点状态 ,传入布尔值
onChanged输入框的值变化时的回调,可以获取输入框的值
maxLines输入框可以输入几行,同 web 端的 textArea
readOnly输入框是否可编辑,布尔值
onTap点击输入框时回调
inputFormatters可以限制用户输入的内容,比如只想让用户输入字符 , 传入一个数组, [WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")),]
showCursor是否显示光标 传入布尔值 如:false
cursorWidth光标的宽度 如: 2
cursorRadius光标的圆角 如: Radius.circular(10)
cursorColor光标的颜色 如:Colors.red
toolbarOptions表示长按时弹出的菜单 有 copy、cut、paste、selectAll ,如: ToolbarOptions(copy: true,cut: true,paste: true,selectAll: true)
textAlignVertical表示垂直方向的对齐方式
textDirection表示文本方向
textCapitalization配置键盘是大写还是小写, 仅控制软键盘是大写模式还是小写模式,你也可以切换大小写,系统并不会改变输入框内的内容

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        children: [
          UserNameInputTextField(),
          PassWordTextFiled(),
        ],
      ),
    );
  }
}

TextEditingController _userNameController = TextEditingController();
TextEditingController _pwdController = TextEditingController();

// 焦点
FocusNode passWordFocusNode = FocusNode();

class UserNameInputTextField extends StatefulWidget {
  @override
  _UserNameInputTextFieldState createState() => _UserNameInputTextFieldState();
}

class _UserNameInputTextFieldState extends State<UserNameInputTextField> {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _userNameController.addListener(() {
      _userNameController.text = "Hello world";
    });
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      textInputAction: TextInputAction.next,
      autofocus: true,
      readOnly: false,
      controller: _userNameController,
      keyboardType: TextInputType.emailAddress,
      decoration: InputDecoration(
        prefixIcon: Icon(Icons.people),
        hintText: "请输入账号",
        labelText: "用户名",
      ),
      onEditingComplete: () {
        FocusScope.of(context).requestFocus(passWordFocusNode);
      },
      onChanged: (value) {
        print("userName: ${value}");
      },
    );
  }
}

class PassWordTextFiled extends StatefulWidget {
  @override
  _PassWordTextFiledState createState() => _PassWordTextFiledState();
}

class _PassWordTextFiledState extends State<PassWordTextFiled> {
  @override
  Widget build(BuildContext context) {
    return TextField(
      obscureText: true,
      textInputAction: TextInputAction.done,
      onSubmitted: (content) => print(
        "userName: ${_userNameController.text}" +
            '\n' +
            "password: ${_pwdController.text}",
      ),
      focusNode: passWordFocusNode,
      maxLength: 8,
      controller: _pwdController,
      maxLengthEnforced: false,
      decoration: InputDecoration(
        prefixIcon: Icon(Icons.lock),
        hintText: "请输入密码",
        labelText: "密码",
      ),
    );
  }
}

controller 参数说明 ( 一个输入框对应一个 控制器)
TextEditingController 的实例TextEditingController userNameController = TextEditingController();
userNameController.addListener()监听某个输入框,传入函数 () { }
userNameController.text获取输入框的值
userNameController.text = “Hello”给输入框设置默认值
// 控制器
TextEditingController _userNameController = TextEditingController();
TextEditingController _pwdController = TextEditingController();
// 焦点
FocusNode passWordFocusNode = FocusNode();

InputDecoration() ,实现自定义输入框的样式

参数说明 (用于设置输入框的样式,使用InputDecoration()修饰)
contentPadding设置文字的内边距, 如contentPadding: EdgeInsets.all(10),
prefixIcon设置输入框左侧的图标
hintText输入框的默认提示语,如:请输入账号
labelText输入框的标题, 如用户名, 密码
errorText出错时,显示的提示语,一般需要配合具体的条件
fillColor配置输入框的背景色
filled是否填充背景色, 默认false ,同 fillColor 一块使用
enabledBorder设置没有焦点时输入框的底部边框
focusedBorder设置获取焦点后输入框的底部边框

在这里插入图片描述

  • 实现一个圆角输入框
  Widget build(BuildContext context) {
    return TextField(
      // obscureText: true,
      textInputAction: TextInputAction.done,
      onSubmitted: (content) => print(
        "userName: ${_userNameController.text}" +
            '\n' +
            "password: ${_pwdController.text}",
      ),
      focusNode: passWordFocusNode,
      maxLength: 8,
      controller: _pwdController,
      maxLengthEnforced: false,
      decoration: InputDecoration(
        filled: true,
        enabledBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Color(0x00FF0000)),
          borderRadius: BorderRadius.all(
            Radius.circular(100),
          ),
        ),
        focusedBorder: OutlineInputBorder(
          borderSide: BorderSide(color: Color(0x00000000)),
          borderRadius: BorderRadius.all(
            Radius.circular(100),
          ),
        ),
        contentPadding: EdgeInsets.all(10),
        prefixIcon: Icon(Icons.lock),
        // fillColor: Colors.blue,
        hintText: "请输入密码",
      ),
    );
  }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter中的TextField是一个常用的输入控件,它允许用户在应用程序中输入文本。 TextField通常用于表单中,可以接收用户输入的文本,比如用户名、密码、电子邮件地址等。 以下是一个基本的TextField示例: ```dart TextField( decoration: InputDecoration( hintText: '请输入文本', ), ); ``` 在上面的示例中,我们使用了decoration属性来设置TextField的外观,其中hintText属性用于设置提示文本。 TextField还有许多其他的属性可以设置,比如maxLength(允许输入的最大长度)、keyboardType(键盘类型)、obscureText(是否隐藏输入内容)等等。 下面是一个更完整的TextField示例: ```dart class MyTextField extends StatefulWidget { @override _MyTextFieldState createState() => _MyTextFieldState(); } class _MyTextFieldState extends State<MyTextField> { final TextEditingController _controller = TextEditingController(); @override Widget build(BuildContext context) { return TextField( controller: _controller, maxLength: 10, keyboardType: TextInputType.text, obscureText: true, decoration: InputDecoration( hintText: '请输入文本', labelText: '文本框', prefixIcon: Icon(Icons.text_fields), suffixIcon: IconButton( icon: Icon(Icons.clear), onPressed: () { setState(() { _controller.clear(); }); }, ), border: OutlineInputBorder(), ), onChanged: (value) { print('输入的文本为:$value'); }, ); } } ``` 在上面的示例中,我们使用了TextEditingController来控制TextField的文本内容,maxLength属性限制了用户输入的最大长度为10,keyboardType属性指定了键盘类型为文本类型,obscureText属性设置为true表示隐藏输入内容。 此外,我们还设置了decoration属性来自定义TextField的外观,包括了输入提示文本、标签文本、前缀图标、后缀图标和边框样式等。 最后,我们通过onChanged回调函数来监听用户输入的文本,并打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值