formatter method
Implementation
List<TextInputFormatter>? formatter(OwlnextInputState state) {
List<TextInputFormatter> arr = [];
if (state.widget.type == TextInputSubType.amount) {
arr = [
FilteringTextInputFormatter.allow(RegExp(r"[0-9,.-]")),
TextInputFormatter.withFunction((oldValue, newValue) {
try {
String text = newValue.text;
if (text.contains(',') == true) {
text = text.replaceAll(',', '.');
}
if (text.isNotEmpty && state.widget.amountMaxLimit != null && double.parse(text) > state.widget.amountMaxLimit!) {
return oldValue;
}
int limit = 2;
if (state.widget.decimalsMaxLimit != null) {
limit = state.widget.decimalsMaxLimit!;
}
List<String> splitted = text.split('.');
if (splitted.length >= 2 && splitted[1].length > limit) {
return oldValue;
}
if (text.isNotEmpty && text[0] != "-") {
double.parse(text);
}
if (text.contains('.')) {
TextEditingValue finalController = newValue.copyWith(
text: newValue.text.replaceAll('.', ',')
);
return finalController;
}
return newValue;
} catch (e) {
log(e.toString());
}
return oldValue;
}),
];
}
if (state.widget.type == TextInputSubType.numbers) {
arr = [
FilteringTextInputFormatter.allow(RegExp(r"[0-9]")),
TextInputFormatter.withFunction((oldValue, newValue) {
try {
final text = newValue.text;
if (text.isNotEmpty) {
int.parse(text);
} else {
return newValue;
}
if (state.widget.numberMaxLimit != null && int.parse(newValue.text) > int.parse(state.widget.numberMaxLimit.toString())) {
return oldValue;
}
if (state.widget.numberMinLimit != null && int.parse(newValue.text) < int.parse(state.widget.numberMinLimit.toString())) {
return oldValue;
}
return newValue;
} catch (e) {
log(e.toString());
}
return oldValue;
}),
];
}
if (state.widget.type == TextInputSubType.date) {
List<TextInputFormatter> temp = [];
try {
temp = [
FilteringTextInputFormatter.allow(RegExp(r"[0-9/]")),
LengthLimitingTextInputFormatter(10),
DateFormatter(),
];
} catch (e) {
temp = [
FilteringTextInputFormatter.allow(RegExp(r"[0-9/]")),
LengthLimitingTextInputFormatter(10)
];
}
arr = temp;
}
if (state.widget.type == TextInputSubType.shortDate) {
List<TextInputFormatter> temp = [];
try {
temp = [
FilteringTextInputFormatter.allow(RegExp(r"[0-9/]")),
LengthLimitingTextInputFormatter(5),
ShortDateFormatter(),
];
} catch (e) {
temp = [
FilteringTextInputFormatter.allow(RegExp(r"[0-9/]")),
LengthLimitingTextInputFormatter(5)
];
}
arr = temp;
}
if (state.widget.type == TextInputSubType.hours) {
List<TextInputFormatter> temp = [];
try {
temp = [
FilteringTextInputFormatter.allow(RegExp(r"[0-9:]")),
LengthLimitingTextInputFormatter(10),
HoursFormatter(),
];
} catch (e) {
temp = [
FilteringTextInputFormatter.allow(RegExp(r"[0-9:]")),
LengthLimitingTextInputFormatter(10)
];
}
arr = temp;
}
if (state.widget.charsLimit != null) {
arr.add(
LengthLimitingTextInputFormatter(state.widget.charsLimit)
);
}
if (state.widget.customRegex != null) {
arr = [
FilteringTextInputFormatter.allow(state.widget.customRegex!)
];
}
return arr;
}