Flutter自定义TextInputFormatter实现金额输入框,同时解决iOS数字键盘不能输入小数点的问题

一、实现的效果

二、金额输入框基本要求

  • 只能输入.数字
  • 小数点后只能有俩位
  • 小数点不能作为开头

三、在iOS设备上这里还有个坑,数字键盘上这个小数点会根据你手机设置的不同国家地区来决定显示是.还是, 如下

所以这个时候最好的解决办法是允许输入.数字,然后在动态的将,替换成.

四、完整代码

import 'package:flutter/services.dart';class AmountTextFieldFormatter extends FilteringTextInputFormatter {final int digit;final String _decimalComma = ',';final String _decimalDot = '.';String _oldText = '';AmountTextFieldFormatter({this.digit = 2,bool allow = true,}) : super(RegExp('[0-9.,]'), allow: allow);TextEditingValue formatEditUpdate(TextEditingValue oldValue,TextEditingValue newValue,) {///替换`,`为`.`if (newValue.text.contains(_decimalComma)) {newValue = newValue.copyWith(text: newValue.text.replaceAll(_decimalComma, _decimalDot),);}final handlerValue = super.formatEditUpdate(oldValue, newValue);String value = handlerValue.text;int selectionIndex = handlerValue.selection.end;///如果输入框内容为.直接将输入框赋值为0.if (value == _decimalDot) {value = '0.';selectionIndex++;}if (_getValueDigit(value) > digit || _pointCount(value) > 1) {value = _oldText;selectionIndex = _oldText.length;}_oldText = value;return TextEditingValue(text: value,selection: TextSelection.collapsed(offset: selectionIndex),);}///输入多个小数点的情况int _pointCount(String value) {int count = 0;value.split('').forEach((e) {if (e == _decimalDot) {count++;}});return count;}///获取目前的小数位数int _getValueDigit(String value) {if (value.contains(_decimalDot)) {return value.split(_decimalDot)[1].length;} else {return -1;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TS中断言、转换的应用

1.TS 类型断言定义 把两种能有重叠关系的数据类型进行相互转换的一种 TS 语法,把其中的一种数据类型转换成另外一种数据类型。类型断言和类型转换产生的效果一样,但语法格式不同。 2.TS 类型断言语法格式 A 数据类型的变量 as B 数据类型 。 A 数据类…

【Clickhouse】float 计算误差

Float 为二进制 精度有损,每次求和的结果可能一样,由于相加顺序不一样导致。 bigDecimal是无损的,底层为十进制,但是存储占用更大。 举例: SELECT 0.1 0.2 AS result 在 ClickHouse 中,运行上述查询&am…

尚硅谷JavaWeb电子书城项目(Java+Mysql+Tomcat+Jsp)

自己写的在线电子书城项目,可改写,添加功能,如打折,分类,用户管理,评论等功能。 使用方法: 1.使用idea导入项目。 2.数据库要用项目resource文件里的book.sql文件建立。 3.修改jdbc.properi…

C++ 重载括号运算符示例

重载括号运算符的写法是, 返回值 operator() ( 表达式表 ) 参数个数不限; VC6新建一个单文档工程; 添加一个示例类,比较短,直接加到视类h文件的头部; class A { public:// 重载 括号 () 运算符int oper…

理解 Proxy 和 Object.defineProperty:提升你的 JavaScript 技能(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

IDEA利用插件完成properties与yml的互相转换(mac与wins通用)

步骤一、插件安装 点击屏幕左上方的IDEA,然后点击Preferences(相当于wins里的settings) 进入后点击Plugins,在插件商城中搜索并安装 Convert YAML and Properties File 这个插件 二、使用 右键选择你需要转换的配置文件,选择Convert YAML …

HarmonyOS给应用添加视频播放功能

Video组件的使用 概述 在手机、平板或是智慧屏这些终端设备上,媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集,还是视频的播放、切换、循环,亦或是相机的预览、拍照等功能,媒体组件都是必不可少的。…

JAVA高级(后端需深入移步)

单元测试:使用Junit单元测试框架 使用Junit单元测试: 通过左侧的对❌来进行提示 Junit框架的常见注解: 反射(用于框架,也是最重要):展示框架的成员信息 由于是用于对象,即使在获取…

CDN是如何实现网络加速的?

最近很多网站用户都在谈论香港服务器的同时,也在讨论CDN加速服务的相关话题,谈论的目的就是想通过相关的设置和服 务来有一个好的上网体验,同时减少同行DDOS的攻击。 那么,对网站进行CDN加速服务到底能够让网络实现哪些功能呢&am…

低代码开发:数字化“装配线”的崛起

一、什么是低代码 首先,我们不妨从低代码开发的定义和起源说起。低代码开发(Low Code Development),指通过可视化的图形界面来进行应用程序开发和部署的方式,大大降低了开发门槛,用户不需要掌握传统文本编程语言就可以进行开发。 低代码开发起源于20世纪90年代,经历了3个发展…

力扣300. 最长递增子序列

动态规划 思路: 假设 dp[i] 为前 i 个元素构成的最长递增子序列的个数,包含 nums[i];则 dp[i] 构成序列上一个元素 nums[j] 构成最长递增子序列 dp[j],则 dp[i] dp[j] 1;如果动态取 j ∈ [0, i - 1],则选…

Github入门

简介 github是一个基于git的代码仓库,可以通过git来上传和下载代码。国内类似的有gitee。 开源项目一般会申明开源协议。我们可以基于可商用的代码开发我们自己的项目,以期进行快速开发。 一般情况下gitee上的项目基本都够我们使用了。 git基础 Git…

二叉树(接口函数的实现)

今天继续来分享的是二叉树,我们废话不多说,直接来看下面的几个接口函数,然后我们把他们实现,我们就掌握二叉树的二分之一(今天粉丝破千了,属实有点高兴了)。 typedef char BTDataType;typedef s…

OSG加载地形

这是网上下的一个代码; 先看一下代码; KeyboardHandler.h; #ifndef KEYBOARD_HANDLER_H #define KEYBOARD_HANDLER_H #include <iostream> #include <osgGA/GUIEventHandler>class keyboardEventHandler : public osgGA::GUIEventHandler { public:typedef v…

HTML插入视频和音频(详解)

&#x1f4cd;文章目录&#x1f4cd; &#x1f9c0;一&#xff0c;简介&#x1f9c0;二&#xff0c;视频(video)&#x1f367;1&#xff0c;普通的视频插入&#x1f367;2&#xff0c;在html5中嵌入视频网站视频 &#x1f9c0;三&#xff0c;音频(audio) &#x1f9c0;一&#…

linux中的od命令与hexdump命令

初步解读两个命令 在Linux中&#xff0c;"od"和"hexdump"命令都用于以十六进制和其他格式显示文件的内容。它们提供了对文件进行二进制查看和分析的功能。以下是它们的简要说明&#xff1a; od命令&#xff1a; “od”&#xff08;octal dump&#xff09;…

德语 Alt 代码表

德语的 Alt 代码表&#xff0c;请参考下图。 输入方法就是按住 Alt 键不松开&#xff0c;然后在小键盘上输入字符&#xff0c;松开 Alt 键&#xff0c;计算机就能输出上面的字符了。 德语 Alt 代码表 - 系统容器 - iSharkFly德语的 Alt 代码表&#xff0c;请参考下图。 输入方…

Spring Security(一)架构概览

一、 Spring Security 架构概览 1. Spring Security 简介 在Java企业级开发中&#xff0c;安全管理方面的框架非常少&#xff0c;一般来说&#xff0c;主要是三种方案&#xff1a; ShiroSpring Security开发者自己实现 Spring Security基于Spring框架&#xff0c;提供了一套…

Java常用注解

文章目录 第一章、Java注解与元数据1.1&#xff09;元数据与注解概念介绍1.2&#xff09;Java注解的作用和使用1.3&#xff09;注解的分类 第二章、Mybatis框架常用注解2.1&#xff09;Mybatis注解概览2.2&#xff09;常用注解MapperScanMapperSelectInsertUpdateDeleteParam结…

学习openAI 短长期AGI计划、使命、宪章、开创性研究、产品、工作待遇等

网站的设计&#xff1a;简洁而现代 主页 使命&#xff1a;Creating safe AGI that benefits all of humanity. &#xff08;比人类更聪明的人工智能系统&#xff09;&#xff08;自己实现或帮别人实现都认为是达成使命&#xff09;&#xff08;造福全人类&#xff1a;最大限…