paypal - 金额输入,如 Flutter 中的 PayPal
问题描述
如何创建一个像 PayPal 一样格式化金额的 TextField,以便输入的数字被添加到右侧并移动到左侧?
例如,按1
应该显示0,01
而不是1
。后跟一个2
应该导致0,12
. 并且在删除时,它应该在另一个方向上做同样的事情,这样0,12
就变成了0,01
.
解决方案
试试这个代码。它不太可读但有效:
TextField(
keyboardType: TextInputType.number,
controller: controller,
onChanged: (str){
String newVal;
if(lastState.length<str.length){
String newChar = str.substring(str.length-1).trim();
int valueToAdd = int.parse(newChar);
int current = int.parse(lastState.replaceAll(r",", ""));
newVal = (current*10+valueToAdd).toString();
} else
if(lastState.length>str.length){
int currentValue = int.parse(lastState.replaceAll(r",", ""));
newVal = (currentValue ~/ 10).toString();
}
if(newVal.length<3){
int x = 3-newVal.length;
for(int i=0;i<x;i++){
newVal = "0$newVal";
}
}
lastState = newVal.replaceRange(newVal.length-2, newVal.length, ",${newVal.substring(newVal.length-2)}");
setState(() {
controller.text = lastState;
});
},
),
在你的类扩展State
添加:
String lastState = "0,00";
TextEditingController controller;
并在您的initState()
方法中添加以下行:
controller = new TextEditingController(text: "0,00");
推荐阅读
- vba - Unable to reuse the same driver between two subs
- javascript - Django没有应用链接的js和css
- ios - This app could not be installed at this time in Xcode Simulator
- swift - When isn't necessary to initialize lazy variable with lambda execution?
- eclipse - 如何在 STS 中以更好的方式格式化 JS 代码
- java - 如何在函数中重用返回子块?
- php - Serverless PHP slim framework POST does not get posted data
- python - use of method startswith() and re.findall() in python to extract exact words
- azure - error while installing heptio ark (velero) on Azure AKS
- php - 输入错误凭据时显示错误消息而不是重定向