You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中输入文本超出输入框后被隐藏的问题解决方法

解决Flutter文本输入框文本超出隐藏问题

当输入的文本长度超出输入框范围时,文本会被隐藏,效果如下:

输入框文本超出隐藏效果

原输入框代码如下:

Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        labelFormStyle("Nome do equipamento"),
                        Container(
                          height: hasErrorForm && equipmentNameController.text.isEmpty ? 55 : 35,
                          child: Container(
                          height: hasErrorForm && equipmentNameController.text.isEmpty ? 55 : 35,
                          child: TextFormField(
                            validator: (value){
                              return validatorEmpty(value);
                            },
                            controller: equipmentNameController,
                            keyboardType: TextInputType.multiline,
                            maxLines: null,
                            textInputAction: TextInputAction.next,
                            style: TextStyle(
                                fontSize: 14
                            ),
                            decoration: InputDecoration(
                                isDense: true,
                                enabledBorder: enableBorderField(),
                                focusedBorder: enableBorderField(),
                                disabledBorder: enableBorderField(),
                                border: enableBorderField(),
                                focusedErrorBorder: errorBorderField(equipmentNameController.text.isEmpty),
                                errorBorder: errorBorderField(equipmentNameController.text.isEmpty)
                            ),
                            onChanged: (value){
                              if(hasErrorForm){
                                setState(() {
                                  _formKey.currentState!.validate();
                                });
                              }
                            },
                          ),
                        ),
                      ],
                    ),

问题原因

你给TextFormField嵌套了两层固定高度的Container,虽然设置了maxLines: null允许文本自动换行,但固定高度限制了输入框的可展开空间,导致文本超出后被裁剪隐藏。同时isDense: true过度压缩了输入框内边距,加剧了文本被遮挡的问题。

解决方案

移除固定高度的Container,让TextFormField根据输入内容自适应高度;若需处理错误状态,利用TextFormField自身的错误提示机制自动调整高度,无需手动固定。

修改后的代码示例:

Column(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    labelFormStyle("Nome do equipamento"),
    // 移除固定高度的嵌套Container,让输入框自适应高度
    TextFormField(
      validator: (value){
        return validatorEmpty(value);
      },
      controller: equipmentNameController,
      keyboardType: TextInputType.multiline,
      maxLines: null, // 保持自动换行和高度自适应
      textInputAction: TextInputAction.next,
      style: TextStyle(fontSize: 14),
      decoration: InputDecoration(
        isDense: true,
        // 手动设置内边距,避免isDense过度压缩导致文本拥挤
        contentPadding: EdgeInsets.symmetric(vertical: 8, horizontal: 12),
        enabledBorder: enableBorderField(),
        focusedBorder: enableBorderField(),
        disabledBorder: enableBorderField(),
        border: enableBorderField(),
        focusedErrorBorder: errorBorderField(equipmentNameController.text.isEmpty),
        errorBorder: errorBorderField(equipmentNameController.text.isEmpty)
      ),
      onChanged: (value){
        if(hasErrorForm){
          setState(() {
            _formKey.currentState!.validate();
          });
        }
      },
    ),
  ],
),

补充说明

  • 如果需要在错误状态下给输入框预留更多空间,无需手动固定高度,TextFormField会在validator返回错误信息时,自动扩展高度显示错误文本。
  • 若必须设置最小高度,可以给TextFormField包裹一层SizedBox并设置minHeight,而非固定height,这样既保证基础高度,又能让输入框随内容展开。

内容的提问来源于stack exchange,提问作者Gabi Mangili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:55:14