可换行输入框
// 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{@overrideTextEditingValue 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();},
