Ввод суммы, как в PayPal в Flutter - PullRequest
0 голосов
/ 08 марта 2019

Как можно создать TextField, форматирующий суммы, как в PayPal, чтобы введенный номер добавлялся вправо и перемещался влево?

Например, нажатие 1 должно отобразить 0,01 вместо 1. После 2 должно получиться 0,12. И при удалении он должен сделать то же самое просто в другом направлении, чтобы 0,12 стало 0,01.

1 Ответ

0 голосов
/ 11 марта 2019

Попробуйте этот код. Это не слишком читабельно, но работает:

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");
...