Il existe un moyen de créer un format monétaire dans un champ TextField lorsque l'utilisateur saisit la valeur en cours de formatage en temps réel?
Comme dans l'image ci-dessus, pendant que l'utilisateur tape le format, la mise à jour de la valeur déjà formatée est mise à jour.
[UPDATE]
Je viens de trouver cette bibliothèque qui le fait fonctionner comme un charme: https://pub.dartlang.org/packages/flutter_masked_text
[CE CODE NE FONCTIONNE PAS DANS TOUS LES CAS]
Je viens de le faire fonctionner de cette façon, partager au cas où quelqu'un aurait aussi besoin de:
Champ de texte
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));
}
}
Ceci est le résultat du code:
Une solution simple pour définir un masque monétaire personnalisé consiste à utiliser le flutter_masked_text packege:
1 - Tout d’abord, vous devez ajouter ce paquet au fichier pubspec.yaml de votre paquet:
dependencies:
flutter_masked_text: ^0.7.0
2 - Après cela, installez le paquet en utilisant la ligne de commande (comme ci-dessous), ou utilisez une interface graphique, si vous utilisez IntelliJ IDEA, cliquez simplement sur le bouton "Les paquets obtiennent".
flutter packages get
3 - Maintenant, dans votre code Dart, importez-le ...
import 'package:flutter_masked_text/flutter_masked_text.Dart';
4 - Enfin, changez le code de votre contrôleur TextField de "TextEditingController" à "MoneyMaskedTextController":
//final lowPrice = TextEditingController(); //after
final lowPrice = MoneyMaskedTextController(decimalSeparator: '.', thousandSeparator: ','); //before