Flutter TextField输入框高度随内容自适应

TextField属性介绍

初始样式
根据内容撑开

思路:

        1、在TextField组件中,用到controller: _textController,属性,用来监听输入内容变化;

        2、为_textController编写监听事件,计算输入内容的高度,赋值给整个输入框;

        3、用setState()及时更新;

代码实现:

        

TextEditingController _textController = TextEditingController();   // 用来监听TextField的输入内容 

@override
  Widget build(BuildContext context) {
    /*
    * 输入内容变化:监听输入内容变化,(1)动态展示“发送”按钮;(2)动态修改输入框高度
    */
    _textController.addListener(() {
      var value = _textController.text;
      if ( value != null && value != "" && _isShowVoice ) {
        _isShowSentButton = true;
      } else {
        _isShowSentButton = false;
      }
      _textFieldHeight = _calculateTextFieldHeight(value);
      setState(() {});
    });

    return Column(
        children:[
            Container(
              decoration: const BoxDecoration(color: Color.fromRGBO(241, 243, 244, 0.9)),
              child: _buildInputTextComposer(),   // 输入框
            ),
        ]  
    );
}

// 输入框组件
Widget _buildInputTextComposer(){
    return Container(
        height: _textFieldHeight,
        child: TextField(
            style: const TextStyle(
                 fontSize: 16
            ),
            controller: _textController,
            onSubmitted: _submitMsg,
            maxLines: 5  // 最多显示5行
        )
    )
}

  // 计算输入框区域的高度的方法
  double _calculateTextFieldHeight(String value){
    final textSpan = TextSpan(
      text: value,
      style: TextStyle(fontSize: 16.0),
    );
    final textPainter = TextPainter(
      text: textSpan,
      textDirection: TextDirection.ltr,
      maxLines: 5,   // 最多显示5行
    )..layout(maxWidth: MediaQuery.of(context).size.width - 210 );   // 减去/加上的数值根据自己需求调整,下同
    return textPainter.height + 24;
  }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值