本文介绍了Flutter –设置电话号码文本字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建一个文本字段,以正确设置电话号码的格式.我尝试使用
I am trying to make a text field that properly formats a phone number. I have tried using
NumberFormat("+# ### ### ####");
但是它不会保留空格
我试图通过在前面添加一个+来简化它,但是设置偏移量时我不能退格.
I have tried simplifying it by just adding a + to the front but I cannot backspace when I set the offset.
class PhoneInputFormatter extends TextInputFormatter { TextEditingValue formatEditUpdate( TextEditingValue oldValue, TextEditingValue newValue) { final text = newValue.text.replaceAll(RegExp(r'\D'), ''); final offset = text.length + 1; return newValue.copyWith( text: text.length >= 1 ? '+$text' : '', selection: TextSelection.collapsed(offset: offset), ); } }任何帮助将不胜感激
推荐答案这应该有效:
class NumberTextInputFormatter extends TextInputFormatter { @override TextEditingValue formatEditUpdate( TextEditingValue oldValue, TextEditingValue newValue) { final int newTextLength = newValue.text.length; int selectionIndex = newValue.selection.end; int usedSubstringIndex = 0; final StringBuffer newText = new StringBuffer(); if (newTextLength >= 1) { newText.write('+'); if (newValue.selection.end >= 1) selectionIndex++; } if (newTextLength >= 3) { newText.write(newValue.text.substring(0, usedSubstringIndex = 2) + ' '); if (newValue.selection.end >= 2) selectionIndex += 1; } // Dump the rest. if (newTextLength >= usedSubstringIndex) newText.write(newValue.text.substring(usedSubstringIndex)); return new TextEditingValue( text: newText.toString(), selection: new TextSelection.collapsed(offset: selectionIndex), ); } } final _mobileFormatter = NumberTextInputFormatter(); TextFormField( keyboardType: TextInputType.phone, maxLength: 15, inputFormatters: <TextInputFormatter>[ WhitelistingTextInputFormatter.digitsOnly, _mobileFormatter, ], decoration: InputDecoration( icon: Icon(Icons.phone_iphone), hintText: "Mobile*", ), )更多推荐
Flutter –设置电话号码文本字段
发布评论