How to show/hide password in TextFormField?

前端 未结 9 1248
故里飘歌
故里飘歌 2021-02-01 00:54

Currently I have my password TextFormField like this:

TextFormField(
  decoration: const InputDecoration(
         


        
相关标签:
9条回答
  • 2021-02-01 01:12

    I have created a solution as per @Hemanth Raj but in a more robust way.

    First declare a bool variable _passwordVisible.

    Initiate _passwordVisible to false in initState()

    @override
      void initState() {
        _passwordVisible = false;
      }
    

    Following is the TextFormField widget :

    TextFormField(
       keyboardType: TextInputType.text,
       controller: _userPasswordController,
       obscureText: !_passwordVisible,//This will obscure text dynamically
       decoration: InputDecoration(
           labelText: 'Password',
           hintText: 'Enter your password',
           // Here is key idea
           suffixIcon: IconButton(
                icon: Icon(
                  // Based on passwordVisible state choose the icon
                   _passwordVisible
                   ? Icons.visibility
                   : Icons.visibility_off,
                   color: Theme.of(context).primaryColorDark,
                   ),
                onPressed: () {
                   // Update the state i.e. toogle the state of passwordVisible variable
                   setState(() {
                       _passwordVisible = !_passwordVisible;
                   });
                 },
                ),
              ),
            );
    
    0 讨论(0)
  • 2021-02-01 01:14
        TextFormFeild(
        decoration:InputDecoration(
         icon: _isSecurityIcon == true
      ? IconButton(
       icon: Icon(Icons.visibility_off_outlined),
    onPressed: () {
       setState(() {
    _isSecurityIcon = false;
       });
      },
    )
    : IconButton(
    icon: Icon(Icons.visibility_outlined),
    onPressed: () {
    setState(
    () {
    _isSecurityIcon = true;
        },
        );
        },
       ),
       ),
      );```
    
    0 讨论(0)
  • 2021-02-01 01:20
    class SignIn extends StatefulWidget {
    
      @override
      _SignInState createState() => _SignInState();
    }
    
    class _SignInState extends State<SignIn> {
    
            // Initially password is obscure
      bool _obscureText = true;
        // Toggles the password show status
      void _togglePasswordStatus() {
        setState(() {
          _obscureText = !_obscureText;
        });
      }
      @override
      Widget build(BuildContext context) {
        return 
        Scaffold(
          backgroundColor: Colors.brown[100],
          appBar: AppBar(
            backgroundColor: Colors.brown[400],
            elevation: 0.0,
            title: Text('Sign In'),
          ),
          body: Container(
            padding: EdgeInsets.symmetric(vertical:20.0,horizontal:50.0),
            child: Form(
              key: _formKey,
              child: Column(children: <Widget>[
                TextFormField(
                  decoration: InputDecoration(
                    hintText: 'Password',
                    suffixIcon:  IconButton(
                      icon:Icon(_obscureText ? Icons.visibility:Icons.visibility_off,),
                       onPressed: _togglePasswordStatus,
                       color: Colors.pink[400],
                       ),
                  ),
                  validator: (val){
                    return
                    val.length < 6 ? 'Enter A Password Longer Than 6 Charchters' :null;
                  },
                  obscureText: _obscureText,
                  onChanged: (val){
                    setState(() {
                      password = val.trim();
                    });
                  },
                ),
            ],),),
          ),
        );
      }
    }
    
    0 讨论(0)
提交回复
热议问题