zoukankan      html  css  js  c++  java
  • Flutter学习笔记(42)--限定TextField输入内容,仅允许数字和小数点后两位

    import 'package:flutter/services.dart';
    import 'dart:math' as math;
    class InputFormat extends TextInputFormatter {
    
      InputFormat({this.decimalRange = 2})
          : assert(decimalRange == null || decimalRange > 0);
    
      final int decimalRange;
    
      @override
      TextEditingValue formatEditUpdate(TextEditingValue oldValue,
          TextEditingValue newValue) {
        // 拿到录入后的字符
        String nValue = newValue.text;
        //当前所选择的文字区域
        TextSelection nSelection = newValue.selection;
    
        // 先来一波过滤,过滤出数字及小数点
        // 匹配包含数字和小数点的字符
        Pattern p = RegExp(r'(d+.?)|(.?d+)|(.?)');
        nValue = p.allMatches(nValue)
            .map<String>((Match match) => match.group(0))
            .join();
    
        // 用匹配完的字符判断
        if (nValue.startsWith('.')) { //如果小数点开头,我们给他补个0
          nValue = '0.';
        } else if (nValue.contains('.')) {
          //来验证小数点位置
          if (nValue.substring(nValue.indexOf('.') + 1).length > decimalRange) {
            nValue = oldValue.text;
          } else {
            if (nValue.split('.').length > 2) { //多个小数点,去掉后面的
              List<String> split = nValue.split('.');
              nValue = split[0] + '.' + split[1];
            }
          }
        }
    
        //使光标定位到最后一个字符后面
        nSelection = newValue.selection.copyWith(
          baseOffset: math.min(nValue.length, nValue.length + 1),
          extentOffset: math.min(nValue.length, nValue.length + 1),
        );
    
        return TextEditingValue(
            text: nValue,
            selection: nSelection,
            composing: TextRange.empty
        );
      }
    }

    使用:

    keyboardType: TextInputType.numberWithOptions(decimal: true),
    inputFormatters: [InputFormat()],
  • 相关阅读:
    Python基础练习
    理解信息管理系统
    datatime处理日期和时间
    中文词频统计
    文件方式实现完整的英文词频统计实例
    组合数据类型练习,英文词频统计实例上
    英文词频统计预备,组合数据类型练习
    凯撒密码、GDP格式化输出、99乘法表
    字符串基本操作
    条件、循环、函数定义 练习
  • 原文地址:https://www.cnblogs.com/upwgh/p/14212261.html
Copyright © 2011-2022 走看看