TextFormField 字符限制不起作用

pym*_*man 7 dart flutter

TL; DR maxLengthTextFormField有时允许比指定的限制更多的字符。为什么会发生这种情况?

我正在尝试创建一个Form将用户输入的数据提供给我的应用程序。作为其中的一部分TextFormField,我试图限制使用maxLength.

我的问题是,虽然maxLength大部分工作正常,但似乎可以输入比指定限制更多的字符,特别是在快速输入时(例如快速连续按下数字)。在下面的代码片段中,我设置了maxLength6 个字符,但如果您输入的速度足够快,则可以输入 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);
              });
            },
          ),
Run Code Online (Sandbox Code Playgroud)

我也尝试使用以下代码作为 的一部分inputFormatters,但是,它并没有真正做到我想要的。

new LengthLimitingTextInputFormatter(6)
Run Code Online (Sandbox Code Playgroud)

我意识到我也可以添加val.length < 7作为我的验证器功能的一部分,但我试图找到一个不那么挑剔的解决方案。我还想知道发布的这个问题可能有什么其他影响,因为我希望表单验证能让我非常信任输入数据的完整性~100%。

我上面的代码有什么问题导致了这个吗?怎么回事maxLength,为什么在快速输入时可能会超过字符限制?

dev*_*tgs 1

添加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"');
                },
              ),
            ),
          );
        }),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

引用自TextFormField 文档

  • 谢谢你,我从来没有意识到“maxLengthEnforced”是一件事!然而,问题似乎仍然存在。我仍然可以比 maxLength 中指定的限制多 1 位。 (3认同)