【发布时间】:2019-12-26 12:40:39
【问题描述】:
我需要一个只有数字(没有小数点)的 numberInputKeyboard。我已经尝试过 keyboardType: TextInputType.numberWithOptions(decimal: false) 但这仍然对我没有帮助
【问题讨论】:
标签: flutter dart custom-keyboard
我需要一个只有数字(没有小数点)的 numberInputKeyboard。我已经尝试过 keyboardType: TextInputType.numberWithOptions(decimal: false) 但这仍然对我没有帮助
【问题讨论】:
标签: flutter dart custom-keyboard
一个答案建议使用BlacklistingTextInputFormatter,这肯定适用于您的英语语言环境。但是,这可能不适用于使用 , 而不是 . 作为十进制分隔符的其他语言环境。
所以我建议使用WhitelistingTextInputFormatter:
import "package:flutter/services.dart";
TextFormField(
keyboardType: TextInputType.number,
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
)
这将只允许数字[0-9]。
更新:
WhitelistingTextInputFormatter 已重命名!以下是最新版本,FilteringTextInputFormatter.allow 不再弃用,并且还提供了数字的快捷方式:
import "package:flutter/services.dart";
TextFormField(
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)
【讨论】:
第一种方法:-
根据这个 stackoverflow 答案,您必须为其创建自定义键盘。
Android - is it possible to hide certain characters from the soft keyboard?
第二种方法:-
您可以使用RegExp 将这些东西列入黑名单,在这种情况下您不能输入点(.)。
更多内容可以参考:https://api.flutter.dev/flutter/services/TextInputFormatter-class.html
body: Center(
child: TextFormField(
decoration: InputDecoration(
labelText: "Title",
suffixIcon: GestureDetector(
onTap: () {
setState(() {
});
},
child: Icon(Icons.clear),
)),
inputFormatters: [
BlacklistingTextInputFormatter(RegExp("[.]"))
],
)));
【讨论】:
package:flutter/services.dart。谢谢..!!
BlacklistingTextInputFormatter 和 WhitelistingTextInputFormatter 已弃用。如果你只想承认数字,你可以使用:
FilteringTextInputFormatter.digitsOnly
如果你想接受带小数点的数字:
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')
【讨论】:
为了解决这个问题,我做了这个,帮助Amit Prajapati 提供的链接,它是一个但更手动但在我的情况下工作得很好
inputFormatters: [
TextInputFormatter.withFunction((oldValue, newValue) {
if (textInputType.decimal == true) {
return newValue.copyWith(
text: newValue.text.replaceAll(RegExp(r"\,"), "."),
);
}
return newValue;
}),
],
编辑:textInputType 是自定义文本字段的变量
【讨论】: