flutter - 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),
))
],
),
),
),
解决方案
您必须维护 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();
推荐阅读
- python - 使用 networkx 为每个句子创建一个图
- angular - Angular MonoRepo Nx - 在应用程序中使用库
- graph - Gremlin - 按成本排序最短加权路径输出
- amazon-web-services - AWS s3 访问因所有权而被拒绝?
- java - 如何在 WKT 几何中绘制带孔的多边形
- javascript - 如果另一个用户添加了 React Node.js 内容,如何刷新标题
- python - 在 Python 中构建时间非均匀马尔可夫链
- apache-spark - 为什么我们在切换到 EMRFS 一致视图后会看到 parquet 写入错误?
- tensorflow - 如何在语义分割中删除特定的标记像素
- awk - awk 变量赋值在 switch/case 下不起作用