可换行输入框
// TextField属性设置
keyboardType: TextInputType.multiline,
textInputAction: TextInputAction.newline,
整数输入框
// TextField属性设置
keyboardType: TextInputType.number,
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
价格输入框(保留2位小数点)
在ios中TextInputType.number键盘类型将没有小数点,解决这个问题可以使用TextInputType.numberWithOptions(decimal: true)。
另外需要注意的是不能在onChange事件中去获取输入结果,因为输入真实结果跟onChange中的监听参数会出现不一致的情况,确保真实有效,建议使用TextEditingController()中的text属性值。
import 'package:flutter/services.dart';
// 输入格式类
class MoneyTextInputFormatter extends TextInputFormatter{
@override
TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
String newvalueText=newValue.text;
if(newvalueText=="."){
//第一个数为.
newvalueText="0.";
} else if(newvalueText.contains(".")){
if(newvalueText.lastIndexOf(".")!=newvalueText.indexOf(".")){
//输入了2个小数点
newvalueText= newvalueText.substring(0,newvalueText.lastIndexOf('.'));
}else if(newvalueText.length-1-newvalueText.indexOf(".")>2){
//输入了1个小数点 小数点后两位
newvalueText=newvalueText.substring(0,newvalueText.indexOf(".")+3);
}
}
return TextEditingValue(
text: newvalueText,
selection: new TextSelection.collapsed(offset: newvalueText.length),
);
}
}
// TextField属性设置
inputFormatters: [
WhitelistingTextInputFormatter(RegExp("[0-9.]")),
LengthLimitingTextInputFormatter(9),
MoneyTextInputFormatter()
],
keyboardType: TextInputType.numberWithOptions(decimal: true),
跳转到下一步设置
TextEditingController priceCtrl = TextEditingController();
FocusNode priceNode = FocusNode();
// TextField属性设置
controller: priceCtrl,
focusNode: priceNode,
textInputAction: TextInputAction.next,
onEditingComplete: () {
priceNode.nextFocus();
},