Flutter TextField 限制只允许输入数字,字母,小数,设置限制小数位数

TextField(
          inputFormatters: [
          //只允许输入字母
            WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")),
          ],
   ),
    TextField(
    //只允许输入数字
          inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
   ),
    TextField(
      			inputFormatters: [
                          //只允许输入小数
                            WhitelistingTextInputFormatter(RegExp("[0-9.]")),
                          ],,
    TextField(
      			inputFormatters: [
                          //限制小数位数
                            _MyNumberTextInputFormatter(digit:5),
                          ],// 限制小数位数
class _MyNumberTextInputFormatter extends TextInputFormatter {
  static const defaultDouble = 0.001;
  ///允许的小数位数,-1代表不限制位数
  int digit;
  _MyNumberTextInputFormatter({this.digit=-1});
  static double strToFloat(String str, [double defaultValue = defaultDouble]) {
    try {
      return double.parse(str);
    } catch (e) {
      return defaultValue;
    }
  }
  ///获取目前的小数位数
  static int getValueDigit(String value){
    if(value.contains(".")){
      return value.split(".")[1].length;
    }else{
      return -1;
    }
  }


  @override
  TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
    String value = newValue.text;
    int selectionIndex = newValue.selection.end;
      if (value == ".") {
      value = "0.";
      selectionIndex++;
    } else if(value=="-"){
      value = "-";
      selectionIndex++;
    }else if (value != "" &&
            value != defaultDouble.toString() &&
            strToFloat(value, defaultDouble) == defaultDouble ||
        getValueDigit(value) > digit) {
      value = oldValue.text;
      selectionIndex = oldValue.selection.end;
    }
    return new TextEditingValue(
      text: value,
      selection: new TextSelection.collapsed(offset: selectionIndex),
    );
  }
}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Flutter是一款功能强大的移动端开发框架,支持在移动端构建高性能、美观的应用程序。在Flutter中,TextField是一个常用的控件,可以让用户输入单行或多行文本。 与单行文本输入不同的是,多行文本的输入需要支持换行,这对于一些需要输入较长文本的应用场景非常重要。FlutterTextField组件允许用户进行多行文本的输入,并且默认支持自动换行。 在Flutter中,设置一个TextField控件支持多行文本输入很简单,只需要设置其maxLines属性即可。maxLines可以设置为任意大于1的整值,表示该TextField支持的最大行。当用户输入的文本超过指定的最大行时,TextField会自动换行。 例如,以下是一个简单的Flutter多行文本输入的示例代码: ``` TextField( maxLines: 5, ) ``` 上述代码创建了一个最大行为5的TextField控件,用户可以在该控件中输入多行文本,并且当超过5行时自动换行。需要注意的是,在设置maxLines属性时,建议根据实际情况进行调整,例如对于一些输入较长文本的应用场景,可以将maxLines设置为较大的值,以方便用户进行输入。 在多行文本输入完成后,可以通过对TextField输入框内的文本进行获取来进一步处理用户输入的文字内容。 综上所述,FlutterTextField控件提供了非常方便的多行文本输入功能,并且可以自动换行,使得用户输入更加便捷和高效。因此,Flutter是一款非常适合移动端应用开发的开发框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倚栏静望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值