Flutter 不允许在 TextField 中使用前导空格

问题描述

我有一个简单的 TextField,不允许用户输入前导空格。我找到了一些关于从 Strings删除空格或不允许任何空格的类似答案。但就我而言,唯一的限制应该是前导空格。

This 是我为 TextFields 找到的,但它删除了所有空格。

有人可以帮我吗?

解决方法

您可以使用 trimRight() 方法:

没有任何尾随空格的字符串。

作为 trim,但只删除尾随空格。

void main() {
 print('\t Space\t. Dart is fun\t\t'.trimRight()); // '  Space  . Dart is fun'
}
,

创建您自己的 TextInputFormatter 并更改 formatEditUpdate(...) 的返回值。

示例:

class NoLeadingSpaceFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
    TextEditingValue oldValue,TextEditingValue newValue,) {
    if (newValue.text.startsWith(' ')) {
      final String trimedText = newValue.text.trimLeft();

      return TextEditingValue(
        text: trimedText,selection: TextSelection(
          baseOffset: trimedText.length,extentOffset: trimedText.length,),);
    }

    return newValue;
  }
}

用法:

TextField(
  inputFormatters: [
    NoLeadingSpaceFormatter(),],
,

没有前导空格正则表达式

^\S
^(?!\s)

在 Dart 中,不要忘记使用原始字符串文字,r"^\S"r"^(?!\s)"

参见regex demo

详情

  • ^\S - 字符串开头的任何非空白字符 (\S)
  • ^(?!\s) - 字符串的开头 (^) 位置,不能紧跟空格((?!\s) 是负前瞻)。