【问题标题】:Ensure only valid input number format in Flutter TextField确保 Flutter TextField 中只有有效的输入数字格式
【发布时间】:2022-01-11 13:45:42
【问题描述】:

我的 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 个小数点,以确保数字始终采用正确的格式(即始终是整数或双精度数)?

谢谢!

【问题讨论】:

    标签: flutter double textfield inputformatter


    【解决方案1】:

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

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

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

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

    {0,1} 的范围可以解决问题

    【讨论】:

    • 我实际上并没有想过尝试DecimalTextInputFormatter 输入格式化程序,尽管我已经将我的正则表达式修改为与您的一样,并且它似乎工作得很好,谢谢!
    猜你喜欢
    • 2019-09-02
    • 2021-10-06
    • 2022-12-04
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多