自定义带连字符的数字TextInputFormatter(bank3)输入异常问题
修复bank3账号输入格式重复问题
问题根源
你当前处理bank3的逻辑存在明显错误:当输入数字长度超过3位时,先将所有纯数字赋值给formattedText,随后又追加了从第3位开始的子串,导致数字重复拼接。比如输入1234时,formattedText先被赋值为1234,再加上-4,最终变成1234-4,这就是重复现象的原因。
修正后的代码
将bank3对应的代码块替换为以下逻辑,就能实现123-4567890123的格式要求:
else if (bankName == 'bank3') { if (newText.isNotEmpty) { // 先截取最多13位纯数字 final trimmedText = newText.substring(0, newText.length < 13 ? newText.length : 13); if (trimmedText.length > 3) { // 前3位 + 连字符 + 剩余部分(最多10位) formattedText = '${trimmedText.substring(0, 3)}-${trimmedText.substring(3)}'; } else { // 长度<=3时直接返回 formattedText = trimmedText; } } }
验证效果
- 输入
123后再输入第4位数字,文本框内容会变成123-4 - 继续输入下一位数字,内容变为
123-45 - 直到输入满13位数字时,格式为
123-4567890123,完全符合预期
内容的提问来源于stack exchange,提问作者Richard Johnson
相关产品推荐
相关产品推荐

