美文网首页flutter
Flutter Widget => TextField

Flutter Widget => TextField

作者: charmingcheng | 来源:发表于2019-07-25 11:36 被阅读0次
     const TextField({
        Key key,
        this.controller,            //控制器,控制TextField文字
        this.focusNode,
        this.decoration: const InputDecoration(),      //输入器装饰
        TextInputType keyboardType: TextInputType.text, //输入的类型
        this.style,
        this.textAlign: TextAlign.start,
        this.autofocus: false,
        this.obscureText: false,  //是否隐藏输入
        this.autocorrect: true,
        this.maxLines: 1,
        this.maxLength,
        this.maxLengthEnforced: true,
        this.onChanged,            //文字改变触发
        this.onSubmitted,          //文字提交触发(键盘按键)
        this.onEditingComplete,  //当用户提交可编辑内容时调用
        this.inputFormatters,
        this.enabled,
        this.cursorWidth = 2.0,
        this.cursorRadius,
        this.cursorColor,
        this.keyboardAppearance,
      })
    

    只有输入框的TextField

    TextField()
    

    一个TextField示例,实例中是传入一个controller。通过controller添加通知来获取TextField的值,这种使用场景不一定合适,更多的时候是在点击按钮的时候直接读取controller.text的值

    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    
    class TextFieldPage extends StatelessWidget {
      Widget buildTextField(TextEditingController controller) {
        return TextField(
          controller: controller,
          maxLength: 30,//最大长度,设置此项会让TextField右下角有一个输入数量的统计字符串
          maxLines: 1,//最大行数
          autocorrect: true,//是否自动更正
          autofocus: true,//是否自动对焦
          obscureText: true,//是否是密码
          textAlign: TextAlign.center,//文本对齐方式
          style: TextStyle(fontSize: 30.0, color: Colors.blue),//输入文本的样式
          inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],//允许的输入格式
          onChanged: (text) {//内容改变的回调
            print('change $text');
          },
          onSubmitted: (text) {//内容提交(按回车)的回调
            print('submit $text');
          },
          enabled: true,//是否禁用
        );
      }
    
      @override
      Widget build(BuildContext context) {
        final controller = TextEditingController();
        controller.addListener(() {
          print('input ${controller.text}');
        });
        return Scaffold(
          appBar: AppBar(
            title: Text('TextField'),
          ),
          body: Padding(
            padding: const EdgeInsets.all(20.0),
            child: buildTextField(controller),
          ),
        );
      }
    }
    

    InputDecoration装饰器

    InputDecoration({
        this.icon,    //位于装饰器外部和输入框前面的图片
        this.labelText,  //用于描述输入框,例如这个输入框是用来输入用户名还是密码的,当输入框获取焦点时默认会浮动到上方,
        this.labelStyle,  // 控制labelText的样式,接收一个TextStyle类型的值
        this.helperText, //辅助文本,位于输入框下方,如果errorText不为空的话,则helperText不会显示
        this.helperStyle, //helperText的样式
        this.hintText,  //提示文本,位于输入框内部
        this.hintStyle, //hintText的样式
        this.hintMaxLines, //提示信息最大行数
        this.errorText,  //错误信息提示
        this.errorStyle, //errorText的样式
        this.errorMaxLines,   //errorText最大行数
        this.hasFloatingPlaceholder = true,  //labelText是否浮动,默认为true,修改为false则labelText在输入框获取焦点时不会浮动且不显示
        this.isDense,   //改变输入框是否为密集型,默认为false,修改为true时,图标及间距会变小
        this.contentPadding, //内间距
        this.prefixIcon,  //位于输入框内部起始位置的图标。
        this.prefix,   //预先填充的Widget,跟prefixText同时只能出现一个
        this.prefixText,  //预填充的文本,例如手机号前面预先加上区号等
        this.prefixStyle,  //prefixText的样式
        this.suffixIcon, //位于输入框后面的图片,例如一般输入框后面会有个眼睛,控制输入内容是否明文
        this.suffix,  //位于输入框尾部的控件,同样的不能和suffixText同时使用
        this.suffixText,//位于尾部的填充文字
        this.suffixStyle,  //suffixText的样式
        this.counter,//位于输入框右下方的小控件,不能和counterText同时使用
        this.counterText,//位于右下方显示的文本,常用于显示输入的字符数量
        this.counterStyle, //counterText的样式
        this.filled,  //如果为true,则输入使用fillColor指定的颜色填充
        this.fillColor,  //相当于输入框的背景颜色
        this.errorBorder,   //errorText不为空,输入框没有焦点时要显示的边框
        this.focusedBorder,  //输入框有焦点时的边框,如果errorText不为空的话,该属性无效
        this.focusedErrorBorder,  //errorText不为空时,输入框有焦点时的边框
        this.disabledBorder,  //输入框禁用时显示的边框,如果errorText不为空的话,该属性无效
        this.enabledBorder,  //输入框可用时显示的边框,如果errorText不为空的话,该属性无效
        this.border, //正常情况下的border
        this.enabled = true,  //输入框是否可用
        this.semanticCounterText,  
        this.alignLabelWithHint,
      })
    

    圆角矩形的边框

    import 'package:flutter/material.dart';
    
    class TextFieldPage extends StatelessWidget {
      Widget buildTextField() {
        return TextField(
          decoration: InputDecoration(
              contentPadding: EdgeInsets.all(10.0),
              border: OutlineInputBorder(
                borderRadius: BorderRadius.circular(15.0),
                borderSide: BorderSide(color: Colors.red, width: 3.0, style: BorderStyle.solid)
              )),
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('TextField'),
          ),
          body: Container(
            color: Colors.blue.shade100,
            child: Padding(
              padding: const EdgeInsets.all(30.0),
              child: buildTextField(),
            ),
          ),
        );
      }
    }
    

    相关文章

      网友评论

        本文标题:Flutter Widget => TextField

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