Flutter控制TextFild输入框只能输入小数点后两位

本文介绍了如何在Flutter中创建一个TextFild输入框,仅允许用户输入小数点后两位的数字,详细阐述了实现这一功能的工具类及其使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.工具类

class PrecisionLimitFormatter extends TextInputFormatter {
  int _scale;

  PrecisionLimitFormatter(this._scale);

  RegExp exp = new RegExp("[0-9.]");
  static const String POINTER = ".";
  static const String DOUBLE_ZERO = "00";

  @override
  TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
    if (newValue.text.startsWith(POINTER) && newValue.text.length == 1) {
      //第一个不能输入小数点
      return oldValue;
    }

    ///输入完全删除
    if (newValue.text.isEmpty) {
      return TextEditingValue();
    }

    ///只允许输入小数
    if (!exp.hasMatch(newValue.text)) {
      return oldValue;
    }

    ///包含小数点的情况
    if (newValue.text.contains(POINTER)) {
      ///包含多个小数
      if (newValue.text.indexOf(POINTER) != newValue.text.lastIndexOf(POINTER)) {
        return oldValue;
      }
      String input = newValue.text;
      int index = input.indexOf(POINTER);

      ///小数点后位数
      int lengthAfterPointer = input.substring(index, input.length).length - 1;

      ///小数位大于精度
      if (lengthAfterPointer > _scale) {
        return oldValue;
      }
    } else if (newValue.text.startsWith(POINTER) || newValue.text.startsWith(DOUBLE_ZERO)) {
      ///不包含小数点,不能以“00”开头
      return oldValue;
    }
    return newValue;
  }
}

2.使用

TextField(
   controller: _controller,
    style: Fonts.normalTitle48Style,
    keyboardType: TextInputType.numberWithOptions(decimal: true),
    maxLength: 10,
    inputFormatters: [PrecisionLimitFormatter(2)],
    decoration: InputDecoration(
      counterText: "",
      hintText: "输入提现金额",
      hintStyle: Fonts.normalA8Grey48Style,
      border: InputBorder.none,
    ),
)
### Vue 3 中 Element Plus 的 `el-checkbox-group` 使用方法 在 Vue 3 中,Element Plus 是 Element UI 的升级版本,专门适配 Vue 3。它提供了丰富的组件集合,其中包括 `el-checkbox` 和 `el-checkbox-group` 组件。这些组件可以用来创建多选框组,并绑定到数据模型。 以下是详细的使用说明以及示例: #### 属性 `el-checkbox-group` 主要用于管理一组复选框的状态。它的核心属性包括: - **v-model**: 双向绑定的数据源,通常是一个数组,表示当前被选中的选项。 - **size**: 设置尺寸大小(可选值为 `medium`, `small`, 或 `mini`),该属性仅在按钮样式下生效[^1]。 #### 子组件 `el-checkbox` 每个单独的复选框可以通过 `el-checkbox` 来定义,其主要属性包括: - **label**: 表示单个复选框对应的值。 - **disabled**: 是否禁用此复选框。 - **border**: 添加边框样式。 #### 示例代码 以下是一个完整的示例,展示如何在 Vue 3 中使用 `el-checkbox-group` 实现多选功能并设置纵向排列布局。 ```html <template> <div> <!-- 纵向排列 --> <el-checkbox-group v-model="selectedValues" style="display: flex; flex-direction: column;"> <el-checkbox label="Option 1">选项一</el-checkbox> <el-checkbox label="Option 2">选项二</el-checkbox> <el-checkbox label="Option 3">选项三</el-checkbox> </el-checkbox-group> <p>已选择:{{ selectedValues }}</p> </div> </template> <script> import { ref } from &#39;vue&#39;; export default { setup() { const selectedValues = ref([]); // 初始化为空数组 return { selectedValues, }; }, }; </script> ``` 上述代码通过 `style="display: flex; flex-direction: column;"` 将复选框垂直堆叠显示[^2]。同时,利用 `v-model` 动态绑定了一个响应式的数组变量 `selectedValues`,当用户勾选或取消某个复选框时,这个数组会自动更新。 #### 结合动态数据渲染 如果需要从后台获取数据或者基于某些条件生成复选框列表,则可以采用如下方式: ```html <template> <el-checkbox-group v-model="dynamicSelected"> <el-checkbox v-for="(item, index) in optionsList" :key="index" :label="item.value">{{ item.label }}</el-checkbox> </el-checkbox-group> </template> <script> import { ref } from &#39;vue&#39;; export default { setup() { const dynamicSelected = ref([]); const optionsList = [ { value: &#39;A&#39;, label: &#39;苹果&#39; }, { value: &#39;B&#39;, label: &#39;香蕉&#39; }, { value: &#39;C&#39;, label: &#39;橙子&#39; } ]; return { dynamicSelected, optionsList, }; }, }; </script> ``` 在此例子中,我们通过循环遍历 `optionsList` 数组来动态生成多个复选框项[^3]。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值