Попробуйте этот код. Это не слишком читабельно, но работает:
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");