如上图,此类需求,身份证号码输入需要格式处理

import 'package:flutter/material.dart';class CardIdItem extends StatefulWidget {const CardIdItem({Key? key}) : super(key: key);@overrideState<CardIdItem> createState() => _CardIdItemState();
}class _CardIdItemState extends State<CardIdItem> {final TextEditingController codeEdit = TextEditingController();String _oldInputCodeText = "";@overrideWidget build(BuildContext context) {return Container(margin: const EdgeInsets.all( 20),height: 56,// color: Colors.blueAccent,child: Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[Container(width: 70,height: 30,alignment: Alignment.centerLeft,child: const Text("身份证",style: TextStyle(fontSize: 16),),),Flexible(child: TextField(controller: codeEdit,keyboardType:  const TextInputType.numberWithOptions(signed: true),maxLength: 21,obscureText:  false,onChanged: (value) {_splitPhoneNumber(value);},style: const TextStyle(fontSize: 16),decoration: const InputDecoration(// contentPadding: EdgeInsets.only(top: 4.px),counterText: "", //此处控制最大字符是否显示hintText: "请输入身份证",hintStyle: TextStyle(color: Colors.grey),enabledBorder: UnderlineInputBorder(borderSide: BorderSide(color: Colors.grey)),focusedBorder: UnderlineInputBorder(borderSide: BorderSide(color: Colors.grey)),),),),],),);}void _splitPhoneNumber(String text) {//输入身份证号格式String codeText = getIdCode(text); //去除空格//记录此时光标位置int currentSelection = codeEdit.selection.base.offset;//删除空格,相当于删除空格前一位if (_oldInputCodeText.length > text.length &&codeText.isNotEmpty &&_oldInputCodeText.substring(currentSelection, currentSelection + 1) ==" ") {String oldStartString =_oldInputCodeText.substring(0, currentSelection + 1);//定位删除空格位置oldStartString = getIdCode(oldStartString);codeText = codeText.replaceRange(oldStartString.length - 1, oldStartString.length, "");}String newCodeText = "";for (int index = 0; index < codeText.length; index++) {if (index == 5 || index == 9 || index == 13) {newCodeText = "$newCodeText${codeText[index]} ";} else {newCodeText = newCodeText + codeText[index];}}_oldInputCodeText = newCodeText;codeEdit.text = newCodeText;if (newCodeText.length > text.length) {currentSelection = currentSelection + 1;} else if (newCodeText.length < text.length) {currentSelection = currentSelection - 1;}//设置光标位置codeEdit.selection = TextSelection.fromPosition(TextPosition(affinity: TextAffinity.downstream, offset: currentSelection));}String getIdCode(String text) {return text.replaceAll(RegExp(r"\s+\b|\b\s"), "");}
}

Flutter 身份证号格式化输入相关推荐

  1. Android实战场景 - 输入手机号、银行卡号、身份证号时动态格式化

    在日常项目开发中,如果稍微严谨点的话,其中关于手机号.银行卡号.身份证号的输入格式有做了限制格式化操作,主要是为了给用户带来更好的体验感: 最近同事正好问到了我这个问题,虽然以前做过这类型功能,但是并 ...

  2. python 根据身份证号计算年龄和性别_excel如何根据身份证号计算男女出生日期、性别和年龄?分享了!...

    工作中,有时需要从身份证号中提取性别.出生日期.年龄等.如果手工统计,不仅容易出错,还耗时耗力.春暖花开的时候,有那时间不如出去踏青散步,赏花游玩. 下面小编为大家分享一种方法,使用Excel函数轻松 ...

  3. 身份证号第18位(效验码)计算方法 用于检测身份证号是否正确

    前言: 由于在某些时候,可能需要用户输入真实的身份证号,但是用户可能会胡乱输入虚假的身份证号,导致信息的不真实性,所以为了防止用户胡乱输入,可以通过一些小方法来检测身份证号是否输入正确,本文将介绍一种 ...

  4. 火车票身份证号打码真的安全吗

    火车票身份证号4位打码安全吗? 科普居民身份证号的生成和计算方式. 如果看上面这个太抽象,那么如下方式让你明白 身份证号码作为独一无二代表公民信息的号码,它的组成是由一下的数字表示的: (1)第1.2 ...

  5. 根据身份证号获取出生日期

    先去这个地址拷贝解析身份证号码的封装方法:(直接全部拷贝) https://blog.csdn.net/weixin_44542781/article/details/116377458?spm=10 ...

  6. 使用 python 进行身份证号校验

    使用 python 代码进行身份证号校验 先说,还有很多可以优化的地方. 1.比如加入15位身份证号的校验,嗯哼,15位的好像没有校验,那就只能提取个出生年月日啥的了. 2.比如判断加入地址数据库,增 ...

  7. 通过selenium,暴力穷举身份证号登陆某网站

    偶然发现小学女神在某大学读研,想联系一波.十多年没有联系,怎么办?发现研究生录取查询只用身份证号+姓名+验证码,身份证号学校在某些文件公布了14位,剩下四位要穷举,身份证最后一位校验位,倒数第二位性别 ...

  8. 不要在朋友圈晒火车票了,Python 会算出你的身份证号!

    事情的经过是这样的: 我的同事李大伟最近出差去了. 昨晚睡觉前翻了翻朋友圈, 就跟他愉快地 互怼 交流了起来. 估计是他想起了我朱小五从不打无把握之赌,后面就怂了. 一杯奶茶嘛,也可以接受, 像杰伦一 ...

  9. BankCardUtils(根据银行卡号 获取 银行卡类型、银行名称和银行编码 自动格式化银行卡号、手机号、身份证号输入的工具类)

    BankCardUtils 根据银行卡号 获取 银行卡类型.银行名称和银行编码 自动格式化银行卡号.手机号.身份证号输入的工具类 效果图 特点 支持自动根据银行卡号获取出银行名称.银行编码.银行卡类型 ...

最新文章

  1. [SPOJ-COT]Count on a tree
  2. python3基础教程廖雪峰云-廖雪峰Python3教程---实战day1-day13总结
  3. linux下载哪个python版本-Linux安装python3.6
  4. python刷题+leetcode(第二部分)
  5. 硬核!从0到1学习Spring Cloud微服务章节《建议收藏》
  6. 嵌套点击事件只执行第一次
  7. 对if...else if...的理解
  8. 五款可以取代 Slack 的开源工具
  9. java单例模式深入详解_javascript 模块依赖管理的本质深入详解
  10. 小D课堂 - 新版本微服务springcloud+Docker教程_6-04 自定义Zuul过滤器实现登录
  11. unity调用dll打开双目
  12. Teamviewer远程连接提示疑似商业用途处理替代软件
  13. Eclipse简明使用教程(java集成开发环境)
  14. esp32~MP3音频文件学习
  15. 北京内推 | 微软亚洲研究院机器学习组招聘NLP/语音合成等方向全职研究员
  16. 第一个web项目-微信小程序后端开发
  17. 开发历程:网页视频流媒体播放器EasyPlayer.JS开发web H5网页播放H.265视频支持FLV与HLS直播与点播
  18. 虚拟服务器不识别网银盾,电脑浏览器无法使用建行E路航网银盾的解决方法
  19. 计算机模拟计算 电脑配置,Material Studio材料模拟计算的工作站配置方案
  20. 揭秘TVS管在电压与电流中的奥秘

热门文章

  1. C++第二堂课:初来乍到
  2. zzulioj 1052
  3. dz安装教程php,DZ论坛网站安装,设置步骤
  4. mt7620芯片处理器核心资料
  5. matlab的length是什么,大家好!matlab中length是什么意思?,matlab中的length表示什么?应该如何使用?...
  6. 关于fedora35下载速度慢的办法
  7. 第二次作业-关于Steam游戏平台的简单分析
  8. 尤里的复仇II 回归【7题】
  9. 2016 IT 互联网 各大公司内推
  10. 锁策略、CAS、synchronized原理