Flutter:TextFormField文本无法居中,prefixIcon引发额外内边距问题
解决TextFormField文本居中及额外内边距问题
问题根源是prefixIcon自带默认内边距,即使设置contentPadding: EdgeInsets.zero也无法消除,导致输入文本偏移无法正常居中。以下是两种有效解决方法:
方法一:用prefix替代prefixIcon
prefix无默认内边距,可完全自定义前缀样式,配合文本对齐属性实现居中:
@override Widget build(BuildContext context) { return TextFormField( maxLines: 1, minLines: 1, maxLength: 13, keyboardType: TextInputType.phone, textAlign: TextAlign.center, // 设置水平居中 textAlignVertical: TextAlignVertical.center, // 保持垂直居中 cursorWidth: 1.5, decoration: const InputDecoration( contentPadding: EdgeInsets.symmetric(vertical: 16), // 自定义垂直内边距,优化垂直居中效果 counterText: "", prefix: Padding( padding: EdgeInsets.only(right: 8), // 自定义前缀与输入文本的间距 child: Text( '+254', style: TextStyle( color: Colors.black, fontWeight: FontWeight.w400, fontSize: 18, ), ), ), ), ); }
方法二:移除prefixIcon的默认内边距
若坚持使用prefixIcon,可通过prefixIconConstraints消除默认的内边距限制:
@override Widget build(BuildContext context) { return TextFormField( maxLines: 1, minLines: 1, maxLength: 13, keyboardType: TextInputType.phone, textAlign: TextAlign.center, textAlignVertical: TextAlignVertical.center, cursorWidth: 1.5, decoration: const InputDecoration( contentPadding: EdgeInsets.zero, counterText: "", prefixIcon: Text( '+254', style: TextStyle( color: Colors.black, fontWeight: FontWeight.w400, fontSize: 18, ), ), prefixIconConstraints: BoxConstraints(minWidth: 0, minHeight: 0), // 移除默认内边距限制 ), ); }
内容的提问来源于stack exchange,提问作者Anton Bogomolov
相关产品推荐
相关产品推荐

