Flutter中TextFormField自定义错误文本对齐及去除错误文本内边距问题
解决方案
方案1:使用InputDecoration原生参数(推荐,适配性高)
直接修改你的InputDecoration配置,新增errorPadding和errorTextAlign两个参数即可,这两个参数和contentPadding完全独立,不会互相影响:
child: TextFormField( controller: _text, keyboardType: widget.inputType, onSaved: widget.onSaveData, validator: widget.validator, decoration: InputDecoration( fillColor: _focus_bg, filled: true, hintText: widget.hintText, // 仅作用于输入框内部内容的边距 contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 10.0), errorStyle: TextStyle(fontSize: 12, height: 0.3), // 新增:控制错误文本的边距,设置为0即可和输入框左边缘对齐,也可自定义数值 errorPadding: EdgeInsets.symmetric(horizontal: 0), // 新增:控制错误文本的对齐样式,可选TextAlign.left/right/center等值 errorTextAlign: TextAlign.left, border: OutlineInputBorder(borderRadius: BorderRadius.circular(10)), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: AppColor.textBorderFocused) ), ), focusNode: _textFieldFocus, ),
方案2:自定义错误文本(适合高度定制场景)
如果需要更复杂的错误样式(比如加图标、自定义行高、调整和输入框的间距),可以隐藏InputDecoration的默认错误提示,自己在外部维护错误文本:
- 第一步:在State中定义错误文本存储变量
String? _errorText;
- 第二步:修改validator逻辑,把错误结果赋值给变量,同时返回null关闭默认错误提示
validator: (value) { final validateResult = widget.validator?.call(value); setState(() { _errorText = validateResult; }); return null; },
- 第三步:把TextFormField包入Column,下方添加自定义错误文本
Column( crossAxisAlignment: CrossAxisAlignment.start, // 全局控制错误文本对齐方式 mainAxisSize: MainAxisSize.min, children: [ TextFormField( controller: _text, keyboardType: widget.inputType, onSaved: widget.onSaveData, validator: (value) { final validateResult = widget.validator?.call(value); setState(() { _errorText = validateResult; }); return null; }, decoration: InputDecoration( fillColor: _focus_bg, filled: true, hintText: widget.hintText, contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 10.0), border: OutlineInputBorder(borderRadius: BorderRadius.circular(10)), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: AppColor.textBorderFocused) ), ), focusNode: _textFieldFocus, ), if(_errorText != null) Padding( // 自定义错误文本的边距,完全不受输入框padding影响 padding: EdgeInsets.only(top: 4, left: 0), child: Text( _errorText!, style: TextStyle(fontSize: 12, color: Colors.red, height: 0.3), textAlign: TextAlign.left, ), ) ], )
内容的提问来源于stack exchange,提问作者muhammed faisal v.v
相关产品推荐
相关产品推荐

