Flutter:没有小数点的键盘
Flutter : Keyboard without decimal point
我需要一个只有数字(没有小数点)的 numberInputKeyboard。我试过 keyboardType: TextInputType.numberWithOptions(decimal: false)
但这仍然对我没有帮助
第一种方法 :-
根据这个 Whosebug 答案,您必须为其创建自定义键盘。
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("[.]"))
],
)));
一个答案建议使用 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],
)
BlacklistingTextInputFormatter 和 WhitelistingTextInputFormatter 已弃用。如果你只想接受数字,你可以使用:
FilteringTextInputFormatter.digitsOnly
如果你想接受带小数点的数字:
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')
为了转移这个线程,我这样做了,帮助 Amit Prajapati 提供的 link,它是一个但更多的手册,但在我的情况下工作得很好
inputFormatters: [
TextInputFormatter.withFunction((oldValue, newValue) {
if (textInputType.decimal == true) {
return newValue.copyWith(
text: newValue.text.replaceAll(RegExp(r"\,"), "."),
);
}
return newValue;
}),
],
编辑:textInputType
是自定义文本字段的变量
我需要一个只有数字(没有小数点)的 numberInputKeyboard。我试过 keyboardType: TextInputType.numberWithOptions(decimal: false)
但这仍然对我没有帮助
第一种方法 :-
根据这个 Whosebug 答案,您必须为其创建自定义键盘。
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("[.]"))
],
)));
一个答案建议使用 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],
)
BlacklistingTextInputFormatter 和 WhitelistingTextInputFormatter 已弃用。如果你只想接受数字,你可以使用:
FilteringTextInputFormatter.digitsOnly
如果你想接受带小数点的数字:
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')
为了转移这个线程,我这样做了,帮助 Amit Prajapati 提供的 link,它是一个但更多的手册,但在我的情况下工作得很好
inputFormatters: [
TextInputFormatter.withFunction((oldValue, newValue) {
if (textInputType.decimal == true) {
return newValue.copyWith(
text: newValue.text.replaceAll(RegExp(r"\,"), "."),
);
}
return newValue;
}),
],
编辑:textInputType
是自定义文本字段的变量