gpt4 book ai didi

flutter - TextFormField 字符限制不起作用

转载 作者:行者123 更新时间:2023-12-03 02:43:21 29 4
gpt4 key购买 nike

TL;博士 maxLengthTextFormField有时允许超过指定限制的字符数。为什么会发生这种情况?
我正在尝试创建一个 Form将用户输入的数据提供给我的应用程序。作为其中的一部分,我有一个 TextFormField我试图限制允许输入的最大字符数 maxLength .
我的问题是,而 maxLength大多数情况下工作正常,似乎可以输入比指定限制更多的字符,特别是在快速输入时(例如快速连续按下数字)。
在下面的代码片段中,我设置了 maxLength 6 个字符,但如果您输入足够快,则可以输入 7 个字符。即可能的最大数字应该是 999,999,但可以输入 9,999,999。
我的代码片段

TextFormField(// text form field for inputting a number
validator: (val) => val.isEmpty ? 'Please enter a target to save' : null,

// Using inputFormatters to only accept digits as inputs
inputFormatters: <TextInputFormatter>[WhitelistingTextInputFormatter.digitsOnly,],
keyboardType: TextInputType.number,

// When I specify a maxLength of 6, it can still receive up to 7 digits if entered quickly
maxLength: 6,

onChanged: (val) {
setState(() {
_new_number_to_input = int.parse(val);
});
},
),
我也尝试使用以下代码作为 inputFormatters 的一部分,然而,它并没有真正做到我想要的。
new LengthLimitingTextInputFormatter(6)
我意识到我也可以添加 val.length < 7作为我的验证器功能的一部分,但我试图找到一个不那么挑剔的解决方案。我还想知道发布的这个问题可能有什么其他影响,因为我希望表单验证能让我几乎 100% 地信任输入数据的完整性。
我上面的代码有什么问题导致了这个吗?怎么了 maxLength ,以及为什么在快速输入时可能会超出字符数限制?

最佳答案

添加 maxLengthEnforced: true,TextFormField连同 maxLength: 6, .
小例子:

class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Form(
autovalidate: true,
onChanged: () {
Form.of(primaryFocus.context).save();
},
child: Wrap(
children: List<Widget>.generate(5, (int index) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: ConstrainedBox(
constraints: BoxConstraints.tight(Size(200, 50)),
child: TextFormField(
maxLength: 6,
maxLengthEnforced: true,
onSaved: (String value) {
print('Value for field $index saved as "$value"');
},
),
),
);
}),
),
);
}
}
引用自 TextFormField Docs

关于flutter - TextFormField 字符限制不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62788250/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com