flutter - 如何扩展 TextInputFormatter 以将数字范围和格式限制为 1 个小数位 ("000.0") 。在颤振中
问题描述
这个想法是限制用户输入从 0 到任何给定最大值的任何值。
这是我到目前为止的代码。它确实可以限制最大值,但它不允许我使用小数(例如:10.7、35.3、98.2 等......)
class CustomRangeTextInputFormatter extends TextInputFormatter {
final double maxValue;
CustomRangeTextInputFormatter({@required this.maxValue});
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue,
) {
if (newValue.text == '')
return TextEditingValue();
else if (int.parse(newValue.text) < 0) return TextEditingValue().copyWith(text: '0');
return int.parse(newValue.text) > maxValue ? TextEditingValue().copyWith(text: maxValue.toString()) : newValue;
}
}
如何改进此代码以允许用户使用小数,同时将其限制为 1 个小数位?多谢你们。
解决方案
您可以使用 String 方法“indexOf”和“substring”,如下所示。
class CustomRangeTextInputFormatter extends TextInputFormatter {
final double maxValue;
final int decimalLengthLimit;
CustomRangeTextInputFormatter(
{@required this.maxValue, @required this.decimalLengthLimit});
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue,
) {
if (newValue.text.contains('.')) {
return TextEditingValue().copyWith(text: oldValue.text);
}
if (newValue.text.isEmpty) {
return TextEditingValue(
text: '',
selection: TextSelection.collapsed(offset: 0),
);
}
if (newValue.text.length == 1) {
return TextEditingValue().copyWith(text: newValue.text);
} else {
return TextEditingValue().copyWith(text: newValue.text.substring(1, 2));
}
}
}
推荐阅读
- freemarker - 将字符串中的空格规范化为 1 个空格
- c++ - 使用 std::filesystem::path 将 UTF8 转换为 UTF16
- reactjs - 运行函数和调用返回函数的函数之间的区别
- javascript - 如何使用 multer 和 GridFS 显示从 API 检索的图像?
- flutter - 使用 upi_india 包颤振交易失败
- c++ - 我写了一个 for 循环,它从 i=n-1 到 i=0 以相反的顺序进行,在其中我调用了一个向量 ans2 但向量的顺序相反,为什么?
- java - IntelliJ 2019 - 图像显示当我“运行 Gui”而不是当我执行 jar 时
- python - 在 Python 中使用复杂的索引加速 for 循环?
- python - Savefig 不为 png 文件保存轴
- laravel - 如何使用nprogress显示惯性进度条的百分比?