Flutter 文本字段仅允许用户插入给定范围内的数字

use*_*610 3 dart flutter

我会强制只插入 1-20 之间的值。如果用户输入 2 没问题,但如果用户在 2 (21) 之后输入 1,则文本字段将不允许在 2 之后输入 1。是否有任何正则表达式。

我尝试过这样但它只允许数字

inputFormatters: [FilteringTextInputFormatter.allow(RegExp('[1-9,.,:]'))],
Run Code Online (Sandbox Code Playgroud)

Rav*_*til 6

尝试下面的代码希望对您有帮助。在下面的代码中,如果输入的值超过 20 个,则光标将占据第一个位置。

创建一个类并声明它的最小值和最大值。

class LimitRange extends TextInputFormatter {
  LimitRange(
    this.minRange,
    this.maxRange,
  ) : assert(
          minRange < maxRange,
        );

  final int minRange;
  final int maxRange;

  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    var value = int.parse(newValue.text);
    if (value < minRange) {
      print('value print in between 1 - 20');
      return TextEditingValue(text: minRange.toString());
    } else if (value > maxRange) {
      print('not more 20');
      return TextEditingValue(text: maxRange.toString());
    }
    return newValue;
  }
}
Run Code Online (Sandbox Code Playgroud)

您的小部件:

TextField(
   keyboardType: TextInputType.number,
   inputFormatters: [
             LengthLimitingTextInputFormatter(2),
             LimitRange(1, 20),
         ],
), 

              
Run Code Online (Sandbox Code Playgroud)