首页 > 解决方案 > 根据用户选择颤动改变不安全的文本

问题描述

我很想做一个带有眼睛图标的密码 textFormField ,所以当用户按下图标时,obsecure 字段将被更改。但这似乎对我不太有效,如果有人知道我的代码中的问题出在哪里,那将非常有帮助。谢谢
这是我的代码:

class LogInPage extends StatefulWidget {
  const LogInPage({Key? key}) : super(key: key);
  @override
  _LogInPageState createState() => _LogInPageState();
}
class _LogInPageState extends State<LogInPage> {
  @override
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    double defaultLoginSize = size.height - (size.height * 0.2);
    bool _secureText = true;
    return Scaffold(
      body: Container(
        child: Align(
          alignment: Alignment.center,
          child: SingleChildScrollView(
            child: Container(
              width: size.width,
              height: defaultLoginSize,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  SizedBox(height: 40),
                  Image.asset('assets/Image.png'),
                  SizedBox(height: 25),
                  Padding(
                    padding: EdgeInsets.only(left: 25, right: 25),
                    child: TextFormField(
                      decoration: InputDecoration(
                        focusedBorder: UnderlineInputBorder(
                          borderSide: BorderSide(color: Colors.green),
                        ),
                        labelText: 'Password',
                        labelStyle: TextStyle(color: Colors.black),
                        // from now on it's the part of the code when I am trying to change                         
                        // the obsecure text
                        suffixIcon: GestureDetector(
                          onTap: () {
                            setState(() {
                              _secureText = !_secureText;
                            });
                          },
                          child: Icon(_secureText
                              ? Icons.visibility_off
                              : Icons.visibility),
                        ),
                      ),
                      obscureText: _secureText,
                    ),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

标签: flutter

解决方案


将这条线移到bool _secureText = true; 上面

@override
  Widget build(BuildContext context) {

你很高兴。问题是您正在重绘小部件并且变量在小部件中并且每次都使用默认值重新创建。


推荐阅读