Paypal 如贝宝在颤振中输入的金额
如何创建一个文本字段,将金额格式化为PayPal中的格式,以便将输入的数字添加到右侧并移动到左侧Paypal 如贝宝在颤振中输入的金额,paypal,dart,flutter,textfield,text-formatting,Paypal,Dart,Flutter,Textfield,Text Formatting,如何创建一个文本字段,将金额格式化为PayPal中的格式,以便将输入的数字添加到右侧并移动到左侧 例如,按1应显示0,01,而不是1。后跟2应导致0,12。当删除时,它应该在另一个方向执行相同的操作,以便0,12变为0,01尝试此代码。它的可读性不太强,但很有效: TextField( keyboardType: TextInputType.number, controller: controller, onCh
例如,按
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;
});
},
),
在initState()方法中添加以下行:
controller = new TextEditingController(text: "0,00");
试试这个,会有用的
TextField(keyboardType:
TextInputType.numberWithOptions(signed: false, decimal: false),
controller: _controller,
onChanged : (value){
setState((){
value = value.replaceAll(RegExp(r"\D"), "");
switch (value.length){
case 0:
_controller.text = "0,00";
_controller.selection = TextSelection.collapsed(offset: 4);
break;
case 1:
_controller.text = "0,0${value}";
_controller.selection = TextSelection.collapsed(offset: 3);
case 2:
_controller.text = "0,${value}";
_controller.selection = TextSelection.collapsed(offset: 2);
case 3:
_controller.text = "${value.subString(0,1)},${value.subString(1,3)}";
_controller.selection = TextSelection.collapsed(offset: 0);
}
});
}
),
您应该放置controller.selection=TextSelection.fromPosition(TextPosition(偏移量:controller.text.length))
在最后一个setState()函数中,否则它可能会在android上产生颠簸。也要考虑将<代码> CursSoosix:0 放到TeXFieldE中,使它看起来更酷。@瓦伦蒂西豪森,我很久以前就编写了这个代码,我甚至不记得我在做什么。
TextField(keyboardType:
TextInputType.numberWithOptions(signed: false, decimal: false),
controller: _controller,
onChanged : (value){
setState((){
value = value.replaceAll(RegExp(r"\D"), "");
switch (value.length){
case 0:
_controller.text = "0,00";
_controller.selection = TextSelection.collapsed(offset: 4);
break;
case 1:
_controller.text = "0,0${value}";
_controller.selection = TextSelection.collapsed(offset: 3);
case 2:
_controller.text = "0,${value}";
_controller.selection = TextSelection.collapsed(offset: 2);
case 3:
_controller.text = "${value.subString(0,1)},${value.subString(1,3)}";
_controller.selection = TextSelection.collapsed(offset: 0);
}
});
}
),