首页 > 解决方案 > Flutter Login/Logout button 基于用户登录/注销的可见性

问题描述

我已经实现了登录和注销按钮,但不知道如何显示/隐藏按钮(Listview 中的列表)。按钮位于 Listview 中(抽屉内),并希望在顶部登录时显示按钮,如果用户已登录,则希望在 Listview 末尾显示注销

验证登录是否存储在共享首选项中的用户 ID

 SharedPreferences prefs = await SharedPreferences.getInstance();
    dynamic userid = prefs.getInt('userId');
Padding(
          padding: EdgeInsets.only(top: 10, bottom: 10),
          child: InkWell(
            onTap: (){
              Navigator.push(context, MaterialPageRoute(builder: (context)=> LoginandSignupScreen()));
              },
            child: Row(
              children: <Widget>[
                Expanded(flex: 2, child: Icon(Icons.card_travel)),
                Expanded(
                    flex: 10,
                    child: Text(
                      'Login',
                      style: TextStyle(fontSize: 15),
                    ))
              ],
            ),
          ),
        ),
        Padding(
          padding: EdgeInsets.only(top: 10, bottom: 10),
          child: InkWell(
            onTap: (){
              Provider.of<Auth>(context, listen: false).logout();

              Navigator.push(context, MaterialPageRoute(builder: (context)=> HomeScreen()));},
            child: Row(
              children: <Widget>[
                Expanded(flex: 2, child: Icon(Icons.card_travel)),
                Expanded(
                    flex: 10,
                    child: Text(
                      'Logout',
                      style: TextStyle(fontSize: 15),
                    ))
              ],
            ),
          ),
        ),

标签: flutter

解决方案


您必须维护 bool 以了解用户是否已登录。在您的情况下,您可以让三元运算符来验证这一点,与此类似,您可以申请登录

userid != null ? Padding(
          padding: EdgeInsets.only(top: 10, bottom: 10),
          child: InkWell(
            onTap: (){
              Provider.of<Auth>(context, listen: false).logout();

              Navigator.push(context, MaterialPageRoute(builder: (context)=> HomeScreen()));},
            child: Row(
              children: <Widget>[
                Expanded(flex: 2, child: Icon(Icons.card_travel)),
                Expanded(
                    flex: 10,
                    child: Text(
                      'Logout',
                      style: TextStyle(fontSize: 15),
                    ))
              ],
            ),
          ),
        ) : Container();

推荐阅读