Нужно форматировать ввод пользователя в вид: "x,xxx.xx", ну и соответственно каждые 3 новых порядка также ставить запятую, при этом после точки должно быть фиксировано 2 знака.
Для расстановки запятых у меня есть контроллер:
myController.addListener(() {
String text = (myController.text).replaceAllMapped(RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), (Match m) => '${m[1]},');
myController.value = myController.value.copyWith(
text: text,
selection:
TextSelection(baseOffset: text.length, extentOffset: text.length),
composing: TextRange.empty,
);
});
TextField(
controller: myController,
),
Для предотвращения ввода букв у меня есть inputFormatter. Через него же пытаюсь предотвратить ввод двух точек подряд и более двух цифр после точки:
inputFormatters:[
FilteringTextInputFormatter.allow(RegExp("[0-9.]")),
FilteringTextInputFormatter.deny(RegExp(r"\.\.")),
FilteringTextInputFormatter.deny(RegExp(r"\....")),
],
Оно конечно работает, да вот проблема в том, что оно всё удаляет. То есть если после точки попытаться ввести вторую точку, то она также удалится, тоже самое произойдёт и если попытаться ввести третью цифру после точки. Что с этим делать? И если с двумя точками я могу попытаться заменять через replacementString на точку, то как поступать с цифрами не совсем понятно.