有没有办法减小TextFormField小部件中实际输入和错误文本之间的间距?就目前而言,在表单上显示错误文本几乎使表单的大小增加一倍,我希望在包含或不包含错误文本的情况下,将表单区域保持相同的大小。从下面的图片中,您可以看到它进行了多少更改,并且输入和错误消息之间有很大的空间可以减少使用。
Form before errors Form after errors
以下是其中一个表单域的示例
Padding(
padding: EdgeInsets.only(
top: 5.0, bottom: 5.0, left: 25.0, right: 25.0),
child: TextFormField(
focusNode: myFocusNodeName,
controller: signupNameController,
keyboardType: TextInputType.text,
textCapitalization: TextCapitalization.words,
style: TextStyle(
fontFamily: "WorkSansSemiBold",
fontSize: 16.0,
color: Colors.black),
decoration: InputDecoration(
border: InputBorder.none,
icon: Icon(
FontAwesomeIcons.user,
color: Colors.black,
),
errorText: signupLastNameErrorText,
hintText: "Last Name",
hintStyle: TextStyle(
fontFamily: "WorkSansSemiBold", fontSize: 16.0),
),
validator: (value) =>
value.isEmpty ? 'Last Name can\'t be empty' : null,
onSaved: (value) => _lastname = value,
),
),
答案 0 :(得分:3)
在TextFormField小部件中添加装饰。
InputDecoration(
contentPadding: EdgeInsets.only(left: 11, right: 3, top: 14, bottom: 14),
errorStyle: TextStyle(fontSize: 9, height: 0.3),
)
答案 1 :(得分:1)
errorText
的垂直填充设置在 input_decorator.dart
中:
final double helperErrorHeight =
!helperErrorExists ? 0 : helperError.size.height + subtextGap;
subtextGap
是一个静态常量,等于 8.0
。不幸的是,没有简单的方法可以覆盖该值。
答案 2 :(得分:0)
除非打开InputDecoration的源代码(在sdk文件夹flutter / packages / flutter / lib / src / material / input_decorator.dart上),否则似乎没有办法做到这一点
寻找_buildError
用Container包裹文本
Container(
padding: EdgeInsets.only(bottom: 4),
child: Text(
widget.errorText,
style: widget.errorStyle,
textAlign: widget.textAlign,
overflow: TextOverflow.ellipsis,
maxLines: widget.errorMaxLines,
)
)
答案 3 :(得分:0)
我的解决方案, 您可以使用:
maxLength 对于每个TextFeild, =>显示错误时,您将拥有所需的空间, 之后,您可以使用透明色计数器, 可行,
答案 4 :(得分:0)
我尝试更改文本高度,但我注意到动画正在跳跃。
我找到了另一个解决方案。问题位于 material/input_decorator.dart 文件中。在 _RenderDecoration 类中。它包含:
static const double subtextGap = 8.0;
我复制了所有文件,删除了 InputDecorationTheme 并将值更改为 0.0。
它还包含 InputDecoration。我扩展了 InputDecoration 并删除了覆盖方法:
class CustomInputDecoration extends InputDecoration
然后我在组件中使用它:
TextFormField(
decoration: CustomInputDecoration(...)
我的颤振版本:2.2.1。我注意到flutter团队经常重写组件,所以要小心!下一个版本可能会有变化。