You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

240 lines
8.9 KiB

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:youmazgestion/Views/historique.dart';
import 'package:youmazgestion/Views/addProduct.dart';
import 'package:youmazgestion/Views/bilanMois.dart';
import 'package:youmazgestion/Views/gestionProduct.dart';
import 'package:youmazgestion/Views/gestionStock.dart';
import 'package:youmazgestion/Views/listUser.dart';
import 'package:youmazgestion/Views/loginPage.dart';
import 'package:youmazgestion/Views/registrationPage.dart';
import 'package:youmazgestion/Views/gestionRole.dart';
import 'package:youmazgestion/accueil.dart';
import 'package:youmazgestion/controller/userController.dart';
class CustomDrawer extends StatelessWidget {
final UserController userController = Get.find<UserController>();
Future<void> clearUserData() async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove('username');
await prefs.remove('role');
}
CustomDrawer({super.key});
@override
Widget build(BuildContext context) {
return Drawer(
backgroundColor: Colors.white,
child: ListView(
children: [
GetBuilder<UserController>(
builder: (controller) => UserAccountsDrawerHeader(
accountEmail: Text(controller.email),
accountName: Text(controller.name),
currentAccountPicture: const CircleAvatar(
backgroundImage: AssetImage("assets/youmaz2.png"),
),
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [Colors.white, Color.fromARGB(255, 4, 54, 95)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
),
),
),
ListTile(
leading: const Icon(Icons.home),
iconColor: Colors.lightBlueAccent,
title: const Text("Accueil"),
onTap: () {
Get.to(const AccueilPage());
},
),
ListTile(
leading: const Icon(Icons.person_add),
iconColor: Colors.green,
title: const Text("Ajouter un utilisateur"),
onTap: () async {
bool hasPermission = await userController.hasAnyPermission(['create']);
if (hasPermission) {
Get.to(const RegistrationPage());
} else {
Get.snackbar(
"Accès refusé",
"Vous n'avez pas les droits pour ajouter un utilisateur",
backgroundColor: Colors.red,
colorText: Colors.white,
icon: const Icon(Icons.error),
duration: const Duration(seconds: 3),
snackPosition: SnackPosition.TOP,
);
}
},
),
ListTile(
leading: const Icon(Icons.supervised_user_circle),
iconColor: const Color.fromARGB(255, 4, 54, 95),
title: const Text("Modifier/Supprimer un utilisateur"),
onTap: () async {
bool hasPermission = await userController.hasAnyPermission(['update', 'delete']);
if (hasPermission) {
Get.to(const ListUserPage());
} else {
Get.snackbar(
"Accès refusé",
"Vous n'avez pas les droits pour modifier/supprimer un utilisateur",
backgroundColor: Colors.red,
colorText: Colors.white,
icon: const Icon(Icons.error),
duration: const Duration(seconds: 3),
snackPosition: SnackPosition.TOP,
);
}
},
),
ListTile(
leading: const Icon(Icons.add),
iconColor: Colors.indigoAccent,
title: const Text("Ajouter un produit"),
onTap: () async {
bool hasPermission = await userController.hasAnyPermission(['create']);
if (hasPermission) {
Get.to(const AddProductPage());
} else {
Get.snackbar(
"Accès refusé",
"Vous n'avez pas les droits pour ajouter un produit",
backgroundColor: Colors.red,
colorText: Colors.white,
icon: const Icon(Icons.error),
duration: const Duration(seconds: 3),
snackPosition: SnackPosition.TOP,
);
}
},
),
ListTile(
leading: const Icon(Icons.edit),
iconColor: Colors.redAccent,
title: const Text("Modifier/Supprimer un produit"),
onTap: () async {
bool hasPermission = await userController.hasAnyPermission(['update', 'delete']);
if (hasPermission) {
Get.to(GestionProduit());
} else {
Get.snackbar(
"Accès refusé",
"Vous n'avez pas les droits pour modifier/supprimer un produit",
backgroundColor: Colors.red,
colorText: Colors.white,
icon: const Icon(Icons.error),
duration: const Duration(seconds: 3),
snackPosition: SnackPosition.TOP,
);
}
},
),
ListTile(
leading: const Icon(Icons.bar_chart),
title: const Text("Bilan"),
onTap: () async {
bool hasPermission = await userController.hasAnyPermission(['read']);
if (hasPermission) {
Get.to(const BilanMois());
} else {
Get.snackbar(
"Accès refusé",
"Vous n'avez pas les droits pour accéder au bilan",
backgroundColor: Colors.red,
colorText: Colors.white,
icon: const Icon(Icons.error_outline_outlined),
duration: const Duration(seconds: 3),
snackPosition: SnackPosition.TOP,
);
}
},
),
ListTile(
leading: const Icon(Icons.warning_amber),
title: const Text("Gérer les rôles"),
onTap: () async {
bool hasPermission = await userController.hasAnyPermission(['update', 'delete','create']);
if (hasPermission) {
Get.to(const HandleUserRole());
} else {
Get.snackbar(
"Accès refusé",
"Vous n'avez pas les droits pour gérer les rôles",
backgroundColor: Colors.red,
colorText: Colors.white,
icon: const Icon(Icons.error_outline_outlined),
duration: const Duration(seconds: 3),
snackPosition: SnackPosition.TOP,
);
}
},
),
ListTile(
leading: const Icon(Icons.inventory),
iconColor: Colors.blueAccent,
title: const Text("Gestion de stock"),
onTap: () async {
bool hasPermission = await userController.hasAnyPermission(['update']);
if (hasPermission) {
Get.to(const GestionStockPage());
} else {
Get.snackbar(
"Accès refusé",
"Vous n'avez pas les droits pour accéder à la gestion de stock",
backgroundColor: Colors.red,
colorText: Colors.white,
icon: const Icon(Icons.error),
duration: const Duration(seconds: 3),
snackPosition: SnackPosition.TOP,
);
}
},
),
ListTile(
leading: const Icon(Icons.history),
iconColor: Colors.blue,
title: const Text("Historique"),
onTap: () {
Get.to(HistoryPage());
},
),
ListTile(
leading: const Icon(Icons.logout),
iconColor: Colors.red,
title: const Text("Déconnexion"),
onTap: () {
Get.defaultDialog(
title: "Déconnexion",
content: const Text("Voulez-vous vraiment vous déconnecter ?"),
actions: [
ElevatedButton(
child: const Text("Oui"),
onPressed: () {
clearUserData();
Get.offAll(const LoginPage());
},
),
ElevatedButton(
child: const Text("Non"),
onPressed: () {
Get.back();
},
),
],
);
},
),
],
),
);
}
}