确保在 Flutter TextField 中只有有效的输入数字格式

Ensure only valid input number format in Flutter TextField

我的 flutter 应用程序中有一个 TextField,用于帮助输入计算器功能的数字。对于此 TextField,我已将键盘设置为仅数字键盘,使用

keyboardType: TextInputType.number

现在,这完美地工作了,从某种意义上说,它确保只出现数字输入键盘。该键盘允许用户输入从 0 到 9 的数字,以及小数点。问题是,它不会阻止用户输入多个小数点。一旦用户加了一个以上,就会使数字无效,计算器也不起作用。

本质上,我需要做的是确保用户只能输入1个小数点和数字,而不能输入其他字符。

我在这个论坛的另一个问题上遇到了 inputFormatters 功能,我试过这样使用它:

TextField(
 inputFormatters: <TextInputFormatter>[
      FilteringTextInputFormatter.allow(RegExp("[0-9].")),
  ], // Only numbers and a decimal point can be entered
),

虽然这确实有助于确保只输入数字和小数点,但它不会阻止输入多个小数点,而应该只输入一个小数点。

如何编辑此过滤规则,或者我还能做什么,以确保只能输入 1 个小数点,以确保数字始终采用正确的格式(即始终为整数或双精度)?

谢谢!

您是否尝试过使用 DecimalTextInputFormatter 输入格式化程序?

TextFormField(
  inputFormatters: [DecimalTextInputFormatter(decimalRange: 1)],
  keyboardType: TextInputType.numberWithOptions(decimal: true),
)

您可以使用正则表达式和 FilteringTextInputFormatter(按照您的方法)获得相同的结果,例如:

FilteringTextInputFormatter.allow(RegExp(r'^\d+\.?\d{0,1}')),

范围 {0,1} 就可以了