app_drawer.dart 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import 'package:flutter/material.dart';
  2. import '../../database/database.dart';
  3. class AppDrawer extends StatelessWidget {
  4. final Agente? agente;
  5. final VoidCallback? onDashboard;
  6. final VoidCallback? onOrders;
  7. final VoidCallback? onCustomers;
  8. final VoidCallback? onCatalog;
  9. final VoidCallback? onPromotions;
  10. final VoidCallback? onPayments;
  11. final VoidCallback? onStatistics;
  12. final VoidCallback? onSync;
  13. final VoidCallback? onSwitchAgent;
  14. final VoidCallback? onLogout;
  15. const AppDrawer({
  16. super.key,
  17. this.agente,
  18. this.onDashboard,
  19. this.onOrders,
  20. this.onCustomers,
  21. this.onCatalog,
  22. this.onPromotions,
  23. this.onPayments,
  24. this.onStatistics,
  25. this.onSync,
  26. this.onSwitchAgent,
  27. this.onLogout,
  28. });
  29. @override
  30. Widget build(BuildContext context) {
  31. final theme = Theme.of(context);
  32. return Drawer(
  33. child: ListView(
  34. padding: EdgeInsets.zero,
  35. children: [
  36. DrawerHeader(
  37. decoration: BoxDecoration(color: theme.colorScheme.primaryContainer),
  38. child: Column(
  39. crossAxisAlignment: CrossAxisAlignment.start,
  40. mainAxisAlignment: MainAxisAlignment.end,
  41. children: [
  42. CircleAvatar(
  43. radius: 28,
  44. backgroundColor: theme.colorScheme.primary,
  45. child: Text(
  46. agente?.ragioneSociale?.substring(0, 1).toUpperCase() ?? 'A',
  47. style: TextStyle(
  48. fontSize: 24,
  49. color: theme.colorScheme.onPrimary,
  50. ),
  51. ),
  52. ),
  53. const SizedBox(height: 8),
  54. Text(
  55. agente?.ragioneSociale ?? 'Agente',
  56. style: theme.textTheme.titleMedium?.copyWith(
  57. color: theme.colorScheme.onPrimaryContainer,
  58. ),
  59. ),
  60. Text(
  61. 'Cod. ${agente?.codAgente ?? ''}',
  62. style: theme.textTheme.bodySmall?.copyWith(
  63. color: theme.colorScheme.onPrimaryContainer.withAlpha(180),
  64. ),
  65. ),
  66. ],
  67. ),
  68. ),
  69. _item(Icons.dashboard_outlined, 'Dashboard', onDashboard),
  70. _item(Icons.receipt_long_outlined, 'Ordini', onOrders),
  71. _item(Icons.people_outline, 'Clienti', onCustomers),
  72. _item(Icons.inventory_2_outlined, 'Catalogo', onCatalog),
  73. _item(Icons.local_offer_outlined, 'Promozioni', onPromotions),
  74. _item(Icons.account_balance_wallet_outlined, 'Scadenze', onPayments),
  75. _item(Icons.bar_chart_outlined, 'Statistiche', onStatistics),
  76. _item(Icons.sync_outlined, 'Sincronizzazione', onSync),
  77. _item(Icons.swap_horiz, 'Cambia agente', onSwitchAgent),
  78. const Divider(),
  79. _item(Icons.logout, 'Logout', onLogout),
  80. ],
  81. ),
  82. );
  83. }
  84. Widget _item(IconData icon, String label, VoidCallback? onTap) {
  85. return ListTile(
  86. leading: Icon(icon),
  87. title: Text(label),
  88. onTap: onTap,
  89. );
  90. }
  91. }