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

如何创建一个文本字段,将金额格式化为PayPal中的格式,以便将输入的数字添加到右侧并移动到左侧


例如,按
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);
     }

   });

   }

     ),