You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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: true
  • enableSuggestions: false
  • autocorrect: false
  • textInputType: TextInputType.visiblePassword

示例代码:

TextField(
  obscureText: true,
  enableSuggestions: false,
  autocorrect: false,
  textInputType: TextInputType.visiblePassword,
  decoration: InputDecoration(
    hintText: '请输入密码',
  ),
)

注意:方法二仍会有极短的原字符显示时间,若要彻底隐藏所有输入痕迹,优先使用方法一的自定义控制器方案。

内容的提问来源于stack exchange,提问作者ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:05:32