Flutter TextField с валютным форматом

Есть какой-нибудь способ сделать денежный формат в TextField, когда пользователь вводит значение, которое он уже форматирует в реальном времени?

formating while typing.

Как и на изображении выше, пока пользователь печатает, формат обновляет уже отформатированное значение.

[ОБНОВЛЕНИЕ]

Я только что нашел эту библиотеку, которая заставляет ее работать как шарм:https://pub.dartlang.org/packages/flutter_masked_text

Ответы

Ответ 1

Простое решение для установки пользовательской маски денег - использовать пакет flutter_masked_text :

1 - Прежде всего, вам нужно добавить этот пакет в файл пакета pubspec.yaml:

dependencies:
  flutter_masked_text: ^0.7.0

2 - После этого установите пакет с помощью командной строки (как показано ниже) или используйте графический интерфейс для него, если вы используете IntelliJ IDEA, просто нажмите кнопку "Получить пакеты".

flutter packages get

3 - Теперь импортируйте его в свой код Dart...

import 'package:flutter_masked_text/flutter_masked_text.dart';

4 - Наконец, измените код контроллера TextField с "TextEditingController" на "MoneyMaskedTextController":

  //final lowPrice = TextEditingController(); //before
  final lowPrice = MoneyMaskedTextController(decimalSeparator: '.', thousandSeparator: ','); //after

Ответ 2

[Этот код не работает для всех случаев]

Я так и сделал, поделившись, если кому-то тоже понадобится:

TextField

new TextFormField(
          //validator: ,
          controller: controllerValor,
          inputFormatters: [
            WhitelistingTextInputFormatter.digitsOnly,
            // Fit the validating format.
            //fazer o formater para dinheiro
            new CurrencyInputFormatter()
          ],
          keyboardType: TextInputType.number, ...

TextInputFormatter

class CurrencyInputFormatter extends TextInputFormatter {

  TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {

if(newValue.selection.baseOffset == 0){
  print(true);
  return newValue;
}

double value = double.parse(newValue.text);

final formatter = new NumberFormat("###,###.###", "pt-br");

String newText = formatter.format(value/100);

return newValue.copyWith(
    text: newText,
    selection: new TextSelection.collapsed(offset: newText.length));
  }
}

Это результат кода:

enter image description here