如何在Flutter的TextFormField输入和errorText之间编辑间距

时间:2019-01-07 04:28:31

标签: dart flutter

有没有办法减小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,
                ),
              ),

5 个答案:

答案 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团队经常重写组件,所以要小心!下一个版本可能会有变化。