Flutter:使用obscureText仍显星号前字符,如何实现完全隐藏?
解决obscureText无法完全隐藏输入字符的问题
默认情况下设置obscureText: true后,输入的字符会短暂显示再转为掩码,如果你想完全隐藏所有输入字符(包括输入瞬间的原字符),可以通过以下两种方式实现:
方法一:自定义文本编辑控制器
创建一个自定义的TextEditingController,将显示的文本全部替换为掩码字符,实际输入内容会被正常保存:
class FullObscureController extends TextEditingController { // 自定义掩码字符,默认用* final String obscureChar; FullObscureController({this.obscureChar = '*'}); @override TextSpan buildTextSpan({required BuildContext context, TextStyle? style, required bool withComposing}) { // 把所有显示内容替换为掩码 return TextSpan(style: style, text: obscureChar * value.text.length); } } // 使用示例 TextField( controller: FullObscureController(), enableSuggestions: false, autocorrect: false, decoration: InputDecoration( hintText: '请输入密码', ), )
方法二:结合属性配置(适用于可接受极短原字符显示的场景)
如果你只是想减少原字符显示时长或避免系统干扰,可以同时设置以下属性:
obscureText: trueenableSuggestions: falseautocorrect: falsetextInputType: TextInputType.visiblePassword
示例代码:
TextField( obscureText: true, enableSuggestions: false, autocorrect: false, textInputType: TextInputType.visiblePassword, decoration: InputDecoration( hintText: '请输入密码', ), )
注意:方法二仍会有极短的原字符显示时间,若要彻底隐藏所有输入痕迹,优先使用方法一的自定义控制器方案。
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

