Flutter中如何在TextFormField输入值旁添加RichText或后缀文本?
在Flutter中实现TextFormField内带固定后缀的输入显示
要在TextFormField里实现类似「5000rs」这种输入值加固定后缀的效果,不用嵌套Row绕弯路,直接用Flutter自带的输入装饰属性就能搞定,下面是几种实用方案:
方案一:直接用InputDecoration的suffixText属性
这是最简单的实现方式,suffixText会自动紧贴输入内容,完全在TextFormField的边框内部,不会出现多余间距:
TextFormField( keyboardType: TextInputType.number, // 限制输入数字 decoration: InputDecoration( border: OutlineInputBorder(), hintText: "请输入金额", suffixText: "rs", // 固定后缀文本 suffixStyle: TextStyle(color: Colors.black87), // 自定义后缀样式 ), )
方案二:自定义后缀Widget(支持复杂样式)
如果需要给后缀设置和输入文本不同的样式(比如颜色、字号),可以用suffix属性传入自定义Text组件:
TextFormField( keyboardType: TextInputType.number, decoration: InputDecoration( border: OutlineInputBorder(), hintText: "请输入金额", suffix: Text( "rs", style: TextStyle( color: Colors.grey, fontSize: 14, fontWeight: FontWeight.w500, ), ), ), )
方案三:输入内容与后缀完全融合(适用于特殊场景)
如果需要让后缀和输入内容看起来完全是一个整体(比如后缀样式随输入内容变化),可以通过TextEditingController监听输入,配合自定义输入框的文本渲染逻辑实现,但这种场景较少,一般前两种方案足够覆盖需求。
为什么之前的Row嵌套方案不行?
Row组件默认的布局逻辑会给子组件之间添加默认间距,而且TextField和Text是两个独立的组件,无法做到完全贴合,也不属于同一个输入框容器,自然达不到「在TextFormField内显示」的效果。
内容的提问来源于stack exchange,提问作者Bunny
相关产品推荐
相关产品推荐

