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

Flutter密码框显隐状态不生效问题求助

Flutter密码输入框切换显示/隐藏无响应问题修复

问题根源

你的代码里存在变量不匹配的关键错误:

  • TextFormField的obscureText绑定的是isPassword参数
  • 点击后缀图标时切换的却是_isObscure成员变量

这就导致调用setState修改_isObscure后,obscureText的值根本没变化,界面自然不会更新。

修复步骤

  1. 统一绑定的状态变量
    将obscureText的值改为_isObscure,让UI和状态变量保持一致:

    obscureText: _isObscure,
    
  2. 确认成员变量声明
    确保_isObscure是当前State类的成员变量,并且初始值符合需求(默认隐藏密码的话初始化为true):

    bool _isObscure = true;
    

修正后的完整代码片段

return Padding(
  padding: const EdgeInsets.symmetric(vertical: 5),
  child: TextFormField(
    obscureText: _isObscure, // 这里改成_isObscure
    controller: controller,
    decoration: InputDecoration(
      hintText: hint,
      hintStyle: const TextStyle(color: kTextFieldColor),
      focusedBorder: const UnderlineInputBorder(
        borderSide: BorderSide(color: kPrimaryColor),
      ),
      suffixIcon: isPassword
          ? IconButton(
              onPressed: () {
                setState(() {
                  _isObscure = !_isObscure;
                });
              },
              icon: _isObscure
                  ? const Icon(
                      Icons.visibility_off,
                      color: kTextFieldColor,
                    )
                  : const Icon(
                      Icons.visibility,
                      color: kPrimaryColor,
                    ),
            )
          : null,
    ),
    validator: validator,
    onSaved: onSaved,
    keyboardType: keyboardType,
    inputFormatters: inputFormatters,
  ),
);

额外说明

回退旧版本仍未解决,大概率是旧代码也存在同样的变量不匹配问题,或者_isObscure没有在State类中正确声明为成员变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:25:57