如何在 Flutter 中隐藏 TextField 底部的字母计数器

Posted

技术标签:

【中文标题】如何在 Flutter 中隐藏 TextField 底部的字母计数器【英文标题】:How can I hide letter counter from bottom of TextField in Flutter 【发布时间】:2019-01-24 09:50:30 【问题描述】:

我遇到了一个小问题。如您所见,我在 Flutter 中设置了 TextField 的 maxLength 1,但我无法隐藏文本计数器的底部标签。

【问题讨论】:

【参考方案1】:

这是正确的方法,它可以防止文本字段下方的额外空间,也可以避免设置空小部件的额外代码。

您可以在TextField 中使用输入格式化程序

以下是:

    inputFormatters:[
      LengthLimitingTextInputFormatter(1),
    ]

谢谢!

【讨论】:

它可以工作,但需要您将额外的库导入文件:import 'package:flutter/services.dart'; 我在InputDecoration.collapsed 中使用了这种方法,但它不起作用。但是,user10481267 的回答有效。 这可能很明显,但必须删除maxLength 参数才能正常工作。【参考方案2】:

您可以通过在 textfield 装饰中添加 counterText: '' 来隐藏计数器。它只会显示一个空字符串。

【讨论】:

它仍然占据柜台空间【参考方案3】:

要在使用 maxLength 属性时从 TextFieldTextFormField 小部件中隐藏计数器值,请尝试以下操作:

TextField(
  decoration: InputDecoration(
    hintText: "Email",
    counterText: "",
  ),
  maxLength: 40,
),

在此,我在InputDecoration 属性中设置了counterText 属性,其值为空。希望它会有所帮助。

【讨论】:

如果您只想隐藏它,这很好,但它仍然存在并且占用空间通常会导致文本框不均匀。将 maxLength 替换为 TextField( inputFormatters: [LengthLimitingTextInputFormatter(mMaxLength)] ) 将解决它,但需要您向文件中添加一个额外的库。 这是有效的,但 counterText 占用空间高度并影响 UI 对我来说没有保留空白空间,它被删除,运行最新版本的颤振有帮助吗? @FarhanaNaazAnsari 还设置了您的 helperText = ' ' 。如果它不起作用,用容器包装它【参考方案4】:

您可以使用 InputDecoratoin 来隐藏字母计数器。

TextFormField(
   decoration: InputDecoration(
     labelText: "username",
     counterStyle: TextStyle(height: double.minPositive,),
     counterText: ""
)

【讨论】:

问题与TextField有关,与TextFormField无关。感谢您对 TextFormField 的建议。 答案是 TextField(decoration: InputDecoration(counterText: '',))【参考方案5】:

你可以这样做:

TextField(
   maxLength: 10,
   buildCounter: (BuildContext context,  int currentLength, int maxLength, bool isFocused ) => null,
)

【讨论】:

【参考方案6】:

另一种解决方案是使用 SizedBox 隐藏计数器小部件:

TextFormField(
...
decoration: InputDecoration(
    contentPadding: EdgeInsets.all(10.0),
    counter: new SizedBox(
      height: 0.0,
    )),
...
)

【讨论】:

很好的解决方案,但这个***.com/a/51895946/1599713 更好【参考方案7】:

只需将计数器设置为 Offstage() 即可。

TextField(
    maxLines: 1,
    decoration: InputDecoration(
      counter: Offstage(),
    ),
),

【讨论】:

【参考方案8】:

大多数答案似乎都有效。另一种方法是为计数器分配一个收缩 SizeBox。

TextField(decoration: InputDecoration(
    hintText: "Email",
    counter: SizedBox.shrink()
),
  maxLength: 40,
),

【讨论】:

为我工作,无需导入任何新库! 您是否为缩小后的尺寸框添加了任何值?【参考方案9】:

当你不需要任何东西时,只需放一个空容器!

TextField(
  decoration: InputDecoration(
    hintText: "Email",
    counter: Container(),
  ),
  maxLength: 20,
),

【讨论】:

这也隐藏了验证错误信息,如果你仍然需要它不是很好的解决方案 不建议使用空容器。最好使用 OffStage 小部件或 SizedBox。【参考方案10】:

使用高度和宽度为零的 SizedBox:

TextField(
          maxLength: 400,
          decoration: InputDecoration(
            counter: SizedBox(
              width: 0,
              height: 0,
            ),),)

【讨论】:

【参考方案11】:

只需将 buildCounter 设置为 null。 它是一个生成自定义 [InputDecorator.counter] 小部件的回调

TextField(
   maxLength: (some length),
   buildCounter: (BuildContext context, int currentLength, int maxLength, bool isFocused) => null,
);

【讨论】:

【参考方案12】:

您可以在 TextField 中使用输入格式化程序设置输入限制,如果您只想隐藏设置输入限制的计数器,这是最好的方法。

import 'package:flutter/services.dart';

inputFormatters:[
      LengthLimitingTextInputFormatter(1),
]

或者你可以自定义装饰制作一个 counter = Container():

 decoration: InputDecoration(
    hintText: "Email",
    counter: Container(),
  ),

如果您更喜欢自定义 buildCounter,这里是正确的做法(您也可以自定义字体、颜色等)。当您的文本字段失去焦点时,计数器限制将消失。或者你可以设置

        TextField(
          controller: _clienteTextEditingController,
          maxLength: 50,
          buildCounter: (BuildContext context,
              int currentLength, int maxLength, bool isFocused) 
            return isFocused
                ? Text(
                    'The Input Limits are: $currentLength/$maxLength ',
                    style: new TextStyle(
                      fontSize: 10.0,
                    ),
                    semanticsLabel: 'Input constraints',
                  )
                : null;
          ,
        ),

【讨论】:

【参考方案13】:

您可以使用 InputDecoratoin 隐藏字母计数器。

TextField(
            keyboardType: TextInputType.number,
            maxLength: 10,
            decoration: InputDecoration(
            **counterText:""**)
           )

【讨论】:

我认为这是最好的答案【参考方案14】:

如果您在 2020 年仍在寻找答案,请点击此处:

decoration: InputDecoration(                                                       
    counter: Spacer(),                                                             
    labelText: "National ID #",                                                    
    border: InputBorder.none,                                                      
    hintText: 'e.g 01-1234567A12',                                                 
    hintStyle: TextStyle(color: Colors.grey)),

在 TextField 中,使用 Spacer() 作为计数器...希望这会有所帮助,我不知道它是否会破坏其他任何东西,但我的工作正常。

【讨论】:

【参考方案15】:

仅此一项就解决了我的问题!

文本字段( 装饰:输入装饰( labelText: "表号", 反文本:“” )

【讨论】:

【参考方案16】:

正如@user10481267 在最佳答案中提到的那样,使用buildCounter 属性。这提供了极大的灵活性,您甚至可以动态决定是否显示计数器。

我正在构建一个动态表单,其中包含 JSON 中所需的属性。我的实现如下:

TextFormField(
    buildCounter: (BuildContext context,
    
            int currentLength,
            int maxLength,
            bool isFocused) 
                    if (isFocused)
                            return formFields[index]["max"] == null
                                    ? null
                                    : Text(
                                        '$currentLength / $maxLength',
                                        semanticsLabel: 'character count',
                                      );
                              else
                                return null;
                            ,
                            maxLength: formFields[index]["max"] ?? 100,
                            decoration: new InputDecoration(
                              labelText: formFields[index]["hint"] ?? "",
                              fillColor: Colors.green,
                              border: new OutlineInputBorder(
                                borderRadius: new BorderRadius.circular(15.0),
                                borderSide: new BorderSide(),
                              ),
                            )
                          )

【讨论】:

【参考方案17】:

您可以按照以下代码。

 TextField(
     controller: myController,
     maxLength: 3,
     buildCounter: (BuildContext context, int currentLength, int maxLength, bool isFocused) =>null
    )

【讨论】:

【参考方案18】:

不漂亮,但可以通过移除计数器来工作:

TextFormField(
  buildCounter: (
    BuildContext context, 
    required int currentLength,
    int? maxLength,
    required bool isFocused,
  ) => null,

【讨论】:

【参考方案19】:

为了零安全使用这个:

TextField(
   maxLength: 10,
   buildCounter: (BuildContext context, int? currentLength, int? maxLength, bool? isFocused) => null,
)

【讨论】:

【参考方案20】:

counterText: "", 添加到 InputDecoration

TextField(
   decoration: InputDecoration(
counterText: "",
),
maxLength: 10,

),

【讨论】:

以上是关于如何在 Flutter 中隐藏 TextField 底部的字母计数器的主要内容,如果未能解决你的问题,请参考以下文章

[译]TextField/TextFormField 如何显示/隐藏密码

Flutter TextField被键盘隐藏,尝试了很多解决方案但不起作用

如何在 Flutter 中完全隐藏密码输入?

如何在flutter中获取TextField值

如何在 Flutter 的 TextField 中禁用预测文本?

Flutter中如何同步两个TextField