Flutter TextField с валютным форматом
Есть какой-нибудь способ сделать денежный формат в TextField, когда пользователь вводит значение, которое он уже форматирует в реальном времени?
Как и на изображении выше, пока пользователь печатает, формат обновляет уже отформатированное значение.
[ОБНОВЛЕНИЕ]
Я только что нашел эту библиотеку, которая заставляет ее работать как шарм: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));
}
}
Это результат кода: