如何在 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
属性时从 TextField 或 TextFormField 小部件中隐藏计数器值,请尝试以下操作:
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被键盘隐藏,尝试了很多解决方案但不起作用