有没有办法自动删除或避免 TextField 中的前导和尾随空格?

Is there a way to automatically remove or avoid leading and trailing spaces in a TextField?

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

我尝试使用

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

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

还有其他方法吗?

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

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

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

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

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

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

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