如标题所述,如何在Flutter中实现文本掩码。
我只写了一个示例,但不是很适合,因为当用户输入时无法向用户显示掩码。例如,当文本掩码为'MM/HH'时,在用户输入期间如果我们不显示斜杠'/',用户将会自己输入斜杠'/',因为他们不知道斜杠将自动填充输入。这里有一个示例可以解释我的意思(这是一个Web实现,而不是Flutter),那么如何在Flutter中实现与此链接类似的掩码?
这是我的当前实现。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class MaskedTextInputFormatter extends TextInputFormatter {
final String mask;
final String separator;
MaskedTextInputFormatter({
@required this.mask,
@required this.separator,
}) {
assert(mask != null);
assert(separator != null);
}
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
if (newValue.text.length > 0) {
if (newValue.text.length > oldValue.text.length) {
if (newValue.text.length > mask.length) return oldValue;
if (newValue.text.length < mask.length &&
mask[newValue.text.length - 1] == separator) {
return TextEditingValue(
text:
'${oldValue.text}$separator${newValue.text.substring(newValue.text.length - 1)}',
selection: TextSelection.collapsed(
offset: newValue.selection.end + 1,
),
);
}
}
}
return newValue;
}
}
希望能得到任何帮助!
PS:我搜索了一个名为mask_text_input_formatter的Flutter包,似乎在输入时也无法显示掩码,请参见问题。
allow
参数的含义是什么?FilteringTextInputFormatter
又是什么? - Kevin Zhangguide
参数一样。 - Kevin Zhang