如何从用户Flutter导航抽屉隐藏管理菜单



我试图向普通用户隐藏管理菜单。将登录响应和角色存储在共享首选项中,其中isAdmin变量具有布尔数据,其存储的登录提供程序位于其中。

请找到我尝试过的代码:

[
buildMenuItem(
text: 'Home',
icon: Icons.home,
onClicked: () => selectedItem(context, 0),
),
const SizedBox(height: 16),
buildMenuItem(
text: 'Schedule Parking',
icon: Icons.update,
onClicked: () => selectedItem(context, 1),
),
const SizedBox(height: 16),
buildMenuItem(
text: 'Status',
icon: Icons.info,
onClicked: () => selectedItem(context, 2),
),
const SizedBox(height: 24),
const Divider(color: Colors.white70),
const Text(
'ADMIN',
style: TextStyle(
color: Colors.green, fontWeight: FontWeight.bold),
),
const SizedBox(height: 10),
buildMenuItem(
text: 'Request',
icon: Icons.read_more,
onClicked: () => selectedItem(context, 4),
),
const Divider(color: Colors.white70),
const SizedBox(height: 24),
buildMenuItem(
text: 'Logout',
icon: Icons.logout,
onClicked: () => selectedItem(context, 3),
),
]

参考资料屏幕截图:屏幕截图

请帮我解决任何问题。

对于基于用户的角色,您可以在这里简单地使用三元运算符的帮助。您从登录提供商处收到的信息。例如:

isAdmin ? const Text('ADMIN') : const Text('Normal User')              

您可以添加一个if,该if检查isAdmin变量并连接小部件列表中的iten,下面是一个基于代码的示例:

[
buildMenuItem(
text: 'Home',
icon: Icons.home,
onClicked: () => selectedItem(context, 0),
),
const SizedBox(height: 16),
buildMenuItem(
text: 'Schedule Parking',
icon: Icons.update,
onClicked: () => selectedItem(context, 1),
),
const SizedBox(height: 16),
buildMenuItem(
text: 'Status',
icon: Icons.info,
onClicked: () => selectedItem(context, 2),
),
if(isAdmin) ...[
const SizedBox(height: 24),
const Divider(color: Colors.white70),
const Text(
'ADMIN',
style: TextStyle(
color: Colors.green, fontWeight: FontWeight.bold),
),
],
const SizedBox(height: 10),
buildMenuItem(
text: 'Request',
icon: Icons.read_more,
onClicked: () => selectedItem(context, 4),
),
const Divider(color: Colors.white70),
const SizedBox(height: 24),
buildMenuItem(
text: 'Logout',
icon: Icons.logout,
onClicked: () => selectedItem(context, 3),
),
]

运算符只有在变量isAdmin为true的情况下才会插入子列表的元素。

最新更新