我试图向普通用户隐藏管理菜单。将登录响应和角色存储在共享首选项中,其中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的情况下才会插入子列表的元素。