【问题标题】:Is there a way to automatically remove or avoid leading and trailing spaces in a TextField?有没有办法自动删除或避免 TextField 中的前导和尾随空格?
【发布时间】:2019-11-27 07:06:31
【问题描述】:

我正在创建一个电子邮件字段,我想避免或自动删除其中的前导和尾随空格。

我尝试过使用

myTextFieldController.addListener(() { myTextFieldController.text = myTextFieldController.text.trim(); });

但只要用户键入任何字符,它就会将光标移到开头。

还有其他方法吗?

您认识用户,所以我需要删除它,否则他们将永远留在那里试图验证该字段。

当然我知道我可以在验证之前做到这一点,但我想知道是否有更强大的方法。

【问题讨论】:

    标签: flutter controller textfield


    【解决方案1】:

    您可以使用TextFieldinputFormatters 属性。 它不允许用户在 textField 中添加空格。

    TextField(
            inputFormatters: [
                    BlacklistingTextInputFormatter(RegExp('[ ]')),
                  ]
    );
    

    更新: 对于 1.20.* 以上的颤振版本,请改用它

    TextField(
                inputFormatters: [
                        FilteringTextInputFormatter.deny(RegExp('[ ]')),
                      ]
        );
    

    【讨论】:

    • BlacklistingTextInputFormatter 在 v1.20.0-1.0.pre 之后被弃用。现在使用 FilteringTextInputFormatter.deny(RegExp('[ ]')) 代替。
    【解决方案2】:

    如果您对用户输入这些空格感到满意,但只是不希望将它们传递给您的处理方法,您可以使用 validator 向用户显示错误消息('没有前导/允许尾随空格')或者您可以在处理之前从结果字符串中修剪它。如果您想采用验证器方法,也可以使用 Regex 表达式来验证电子邮件。您可以使用inputFormatter 禁用空格,但请记住,这将禁用TextField 中的所有空格,这对于电子邮件字段应该不是问题,但可能会导致其他地方出现问题(名称字段、地址字段等)

    【讨论】:

    • 是的,现在我在处理它之前使用验证器和 trim()。但我想要一个更强大的选项。也就是说,以后不用记得检查,完全避免就好了。
    • 没有办法自动做到这一点,这对我来说没有意义 - 你也许可以检测到第一个字符是空格,但不知道他们刚刚输入的空格是否会是最后一个。让听众监听输入的变化并相应地删除空格只会删除空格,句号。您可以自定义自己的TextFormField,以便它带有开箱即用的验证和修剪逻辑,但这就是“做一次就忘记”的方法......或者至少我想不到一种方法。
    • 监听器的问题是,每次我更改 textFieldController.text 时,它都会将光标移到开头。我会试试 inputFormatters。
    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 2018-10-04
    • 2013-05-10
    • 2012-02-28
    • 1970-01-01
    • 2020-08-20
    • 2019-07-03
    • 1970-01-01
    相关资源
    最近更新 更多