flutter TextField 金额输入 保留2位小数

2019-11-27  本文已影响0人  林祖朋
//需要配合以下限制
// 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();
  }
}
上一篇 下一篇

猜你喜欢

热点阅读