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.
213 lines
8.0 KiB
213 lines
8.0 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 '../Views/addProduct.dart';
|
|
import '../Views/bilanMois.dart';
|
|
import '../Views/gestionProduct.dart';
|
|
import '../Views/gestionStock.dart';
|
|
import '../Views/listUser.dart';
|
|
import '../Views/loginPage.dart';
|
|
import '../Views/registrationPage.dart';
|
|
import '../accueil.dart';
|
|
import '../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, const 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: () {
|
|
// Action lorsque l'utilisateur clique sur "Accueil"
|
|
Get.to(const AccueilPage());
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.person_add),
|
|
iconColor: Colors.green,
|
|
title: const Text("Ajouter un utilisateur"),
|
|
onTap: () {
|
|
if (userController.role == "admin") {
|
|
Get.to(const RegistrationPage());
|
|
} else {
|
|
Get.snackbar(
|
|
"Accés refusé",
|
|
backgroundColor: Colors.red,
|
|
colorText: Colors.white,
|
|
icon: const Icon(Icons.error),
|
|
duration: const Duration(seconds: 3),
|
|
snackPosition: SnackPosition.TOP,
|
|
"Vous n'avez pas les droits pour ajouter un utilisateur");
|
|
}
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.supervised_user_circle),
|
|
iconColor: const Color.fromARGB(255, 4, 54, 95),
|
|
title: const Text("Modifier/Supprimer un utilisateur"),
|
|
onTap: () {
|
|
// Action lorsque l'utilisateur clique sur "Modifier/Supprimer un utilisateur"
|
|
if (userController.role == "admin") {
|
|
Get.to(const ListUserPage());
|
|
} else {
|
|
Get.snackbar(
|
|
"Accés refusé",
|
|
backgroundColor: Colors.red,
|
|
colorText: Colors.white,
|
|
icon: const Icon(Icons.error),
|
|
duration: const Duration(seconds: 3),
|
|
snackPosition: SnackPosition.TOP,
|
|
"Vous n'avez pas les droits pour modifier/supprimer un utilisateur");
|
|
}
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.add),
|
|
iconColor: Colors.indigoAccent,
|
|
title: const Text("Ajouter un produit"),
|
|
onTap: () {
|
|
if (userController.role == "admin") {
|
|
// Action lorsque l'utilisateur clique sur "Ajouter un produit"
|
|
Get.to(const AddProductPage());
|
|
} else {
|
|
Get.snackbar(
|
|
"Accés refusé",
|
|
backgroundColor: Colors.red,
|
|
colorText: Colors.white,
|
|
icon: const Icon(Icons.error),
|
|
duration: const Duration(seconds: 3),
|
|
snackPosition: SnackPosition.TOP,
|
|
"Vous n'avez pas les droits pour ajouter un produit");
|
|
}
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.edit),
|
|
iconColor: Colors.redAccent,
|
|
title: const Text("Modifier/Supprimer un produit"),
|
|
onTap: () {
|
|
if (userController.role == "admin") {
|
|
// Action lorsque l'utilisateur clique sur "Modifier/Supprimer un produit"
|
|
Get.to(GestionProduit());
|
|
} else {
|
|
Get.snackbar(
|
|
"Accés refusé",
|
|
backgroundColor: Colors.red,
|
|
colorText: Colors.white,
|
|
icon: const Icon(Icons.error),
|
|
duration: const Duration(seconds: 3),
|
|
snackPosition: SnackPosition.TOP,
|
|
"Vous n'avez pas les droits pour modifier/supprimer un produit");
|
|
}
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.bar_chart),
|
|
title: const Text("Bilan"),
|
|
onTap: () {
|
|
if (userController.role == "admin") {
|
|
Get.to(const BilanMois());
|
|
} else {
|
|
Get.snackbar(
|
|
"Accés refusé",
|
|
backgroundColor: Colors.red,
|
|
colorText: Colors.white,
|
|
icon: const Icon(Icons.error_outline_outlined),
|
|
duration: const Duration(seconds: 3),
|
|
snackPosition: SnackPosition.TOP,
|
|
"Vous n'avez pas les droits pour accéder au bilan");
|
|
}
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.inventory),
|
|
iconColor: Colors.blueAccent,
|
|
title: const Text("Gestion de stock"),
|
|
onTap: () {
|
|
if (userController.role == "admin") {
|
|
// Action lorsque l'utilisateur clique sur "Gestion de stock"
|
|
Get.to(const GestionStockPage());
|
|
} else {
|
|
Get.snackbar(
|
|
"Accés refusé",
|
|
backgroundColor: Colors.red,
|
|
colorText: Colors.white,
|
|
icon: const Icon(Icons.error),
|
|
duration: const Duration(seconds: 3),
|
|
snackPosition: SnackPosition.TOP,
|
|
"Vous n'avez pas les droits pour accéder à la gestion de stock");
|
|
}
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.history),
|
|
iconColor: Colors.blue,
|
|
title: const Text("Historique"),
|
|
onTap: () {
|
|
// Action lorsque l'utilisateur clique sur "Historique"
|
|
Get.to(HistoryPage());
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: const Icon(Icons.logout),
|
|
iconColor: Colors.red,
|
|
title: const Text("Déconnexion"),
|
|
onTap: () {
|
|
// Action lorsque l'utilisateur clique sur "Déconnexion"
|
|
// display confirmation dialog
|
|
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();
|
|
},
|
|
)
|
|
],
|
|
);
|
|
},
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|