В настоящее время у меня есть функция проверки с регулярным выражением, как показано ниже:
validateFormula(String value) {
String pattern = (r'^[+-]?\d+((\.\d{1,2})|\d*)$');
RegExp regExp = new RegExp(pattern);
if (value.length == 0) {
return "Number cannot be empty";
} else if (!regExp.hasMatch(value)) {
return "Number not valid";
}
return null;
}
Приведенный выше код служит для проверки чисел ввода для приложения калькулятора в соответствии с форматом, заданным регулярным выражением.
У меня есть пользовательский класс формата валюты, как показано ниже:
class CurrencyFormat extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
if (newValue.selection.baseOffset == 0) {
return newValue;
}
double value = double.parse(newValue.text);
final money = NumberFormat("###,###,###", "en_US");
String newText = money.format(value);
return newValue.copyWith(
text: newText,
selection: TextSelection.collapsed(offset: newText.length));
}
}
Вышеупомянутый класс функционирует для создания автоматического формата валюты в TextFormField, если пользователь вводит 1000, тогда TextFormField будет записан непосредственно 1000
Затем я объединяю функции и классы в TextFormField, как показано ниже:
TextFormField(
inputFormatters: [
WhitelistingTextInputFormatter(RegExp("[0-9.]")),
CurrencyFormat(),
],
validator: (value){
return Validator().validateFormula(value);
},
onSaved: (e) => number = double.parse(e),
keyboardType: TextInputType.number,
...
),
Когда я запускаю приложение, результаты выглядят так:
Как объединить его с результатом, если пользователь наберет 1000, тогда выход в TextFormFiels автоматически будет равен 1000 с проверкой регулярного выражения. И если введенный пользователем десятичный номер является максимальным, десятичное число составляет 2 цифры. Пример: 40,18 и 1000,58
Поскольку я не могу записать десятичное число в виде TextFormField.