我正在使用TextFormField接受密码.我已经将后缀图标设置为让IconButton子级检测单击事件并切换TextFormField的obcuretext属性.iconButton的回调函数会被调用,但TextFormField不会重新绘制.你有什么办法解决这个问题吗?

static Widget buildTextFormField(String id, 
                               FormFieldValidator<String> validateField,
                               FormFieldSetter<String> saveField,
                               InputDecoration decoration,
                               EdgeInsetsGeometry paddingInfo,
                               EdgeInsetsGeometry marginInfo,
                               TextInputType keyboardType,
                               {bool obscureField:false, double width:328.0,
                                TextEditingController controller}
  ){
return Container(
  padding: paddingInfo,
  margin: marginInfo,
  width: width,
  child: TextFormField(
    key: Key(id),
    obscureText: obscureField,
    validator: validateField,
    onSaved: saveField,
    keyboardType: keyboardType,
    decoration: decoration,
    controller: controller,
  ),
);

}

InputDecoration passwordDecoration = InputDecoration(
   hintText: 'Password',
   labelText: 'Enter your password',
   suffixIcon:
      IconButton(
         icon: Icon(
            _passwordVisible ? Icons.visibility : Icons.visibility_off,
            semanticLabel: _passwordVisible ? 'hide password' : 'show password',
         ),
         onPressed: () {
            setState(() {
               _passwordVisible ^= true;
               //print("Icon button pressed! state: $_passwordVisible"); //Confirmed that the _passwordVisible is toggled each time the button is pressed.
            });
         }),
   labelStyle: TextStyle(
      fontFamily: 'Roboto Medium',
      fontSize: 12.0,
      color: Color(0x99000000),
      letterSpacing: 0.4,
   ),
);
final passwordPaddingInfo = const EdgeInsets.only(top: 15.0, bottom:15.0,
                                                  left: 22.0, right:25.0);
this._passwordField = AdministrationComponents.
buildTextFormField('passwordField', validatePassword,
   (value) => _password = value, passwordDecoration, passwordPaddingInfo,
   null, null, controller:_passwordController,
   obscureField: !_passwordVisible);

推荐答案

谢谢@ShyjuM和@DiegoDeveloper!我知道我做错了什么-我是在State类的构造函数中调用buildTextFormField,而不是在build方法中调用.在Build方法内部移动对buildTextFormField的调用修复了该问题.再次感谢您的帮助!

Flutter相关问答推荐

如何在应用栏中将列置于中心

无效参数(S):隔离消息中的非法参数:try 旋转图像时对象不可发送

分页控制器在到达页面末尾之前或在初始化页面时对每个索引调用API

我有相关的下拉菜单Flutter Windows应用程序的问题

与FTPS连接时出现Flutter FTPConnect HandshakeException错误

在Flutter 中更改扩展瓷砖的高度

使小部件处于有状态状态会导致hasSize异常

摆动更改标记可轻敲文本按钮样式

如何在Flutter 安全存储器中存储对象值?

Android工作室Flutter 热重新加载更新后不工作

使用现有Map方法对子类克隆方法的逻辑进行Dart标准化

如何在点击查看措辞下方添加句子?

谷歌 map 在 flutter 应用程序中显示错误的当前位置

课程中的访问Provider

Flutter居中的SizedBox无法居中

splash_screen 没有被推送到登录页面

使 Row 中的元素保持在中间的空间,如果它们太大,则将它们包裹起来

ListView 后台可见

Flutter 错误:OutletListModel类型的值不能分配给List类型的变量?

Flutter Desktop,如何获取windows用户配置文件名称?