//需要配合以下限制
// WhitelistingTextInputFormatter(RegExp("[0-9.]")),
// LengthLimitingTextInputFormatter(9),
class MoneyTextInputFormatter extends TextInputFormatter{
@override
TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
// TODO: implement formatEditUpdate
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),
);
}
}
demo:
class TestPageState extends State<TestPage> {
TextEditingController _textEditingController;
@override
void initState() {
// TODO: implement initState
super.initState();
_textEditingController=new TextEditingController();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text('Test'),
),
body: Center(
child: TextField(
keyboardType: TextInputType.number,
enableInteractiveSelection: false,
inputFormatters: [
WhitelistingTextInputFormatter(RegExp("[0-9.]")),
LengthLimitingTextInputFormatter(9),
MoneyTextInputFormatter()],
controller: _textEditingController,
),
),
);
}
@override
void dispose() {
// TODO: implement dispose
_textEditingController.dispose();
super.dispose();
}
}








网友评论