123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- import 'package:flutter/material.dart';
- import 'package:provider/provider.dart';
- import 'package:turquessa_mesas_hoster/mvvm/viewmodels/home_view_model.dart';
- class CustomDrawer extends StatelessWidget {
- const CustomDrawer({Key? key}) : super(key: key);
- @override
- Widget build(BuildContext context) {
- return Drawer(
- child: Container(
- color: Colors.white,
- child: ListView(
- padding: EdgeInsets.zero,
- children: [
- // Cabecera del drawer
- DrawerHeader(
- decoration: const BoxDecoration(
- color: Colors.blue,
- borderRadius: BorderRadius.only(
- bottomLeft: Radius.circular(20),
- bottomRight: Radius.circular(20),
- ),
- ),
- padding: EdgeInsets.zero,
- margin: EdgeInsets.zero,
- child: Stack(
- children: [
- const Positioned(
- left: 20,
- top: 40,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(
- 'Menú',
- style: TextStyle(
- fontSize: 28,
- fontWeight: FontWeight.bold,
- color: Colors.white,
- ),
- ),
- SizedBox(height: 8),
- Text(
- 'Opciones disponibles',
- style: TextStyle(
- fontSize: 16,
- color: Colors.white,
- ),
- ),
- ],
- ),
- ),
- // Icono decorativo
- Positioned(
- right: 20,
- top: 40,
- child: Container(
- padding: const EdgeInsets.all(8),
- decoration: const BoxDecoration(
- color: Colors.yellow,
- shape: BoxShape.circle,
- ),
- child: const Icon(
- Icons.menu_book,
- color: Colors.white,
- size: 24,
- ),
- ),
- ),
- ],
- ),
- ),
- // Tarjeta de perfil del usuario
- Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
- child: Container(
- width: double.infinity,
- padding: const EdgeInsets.all(20),
- decoration: BoxDecoration(
- color: const Color(0xFFF5F5F5),
- borderRadius: BorderRadius.circular(16),
- ),
- child: Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Expanded(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- const Text(
- 'Usuario Conocido',
- style: TextStyle(
- fontSize: 22,
- fontWeight: FontWeight.bold,
- color: Colors.black87,
- ),
- ),
- const SizedBox(height: 8),
- const Text(
- 'usuario@gmail.com',
- style: TextStyle(
- fontSize: 16,
- color: Colors.black54,
- ),
- ),
- const SizedBox(height: 12),
- GestureDetector(
- onTap: () {
- // Acción al pulsar en Ver perfil
- },
- child: const Text(
- 'Ver perfil',
- style: TextStyle(
- fontSize: 16,
- fontWeight: FontWeight.w500,
- color: Colors.blue,
- ),
- ),
- ),
- ],
- ),
- ),
- Container(
- width: 60,
- height: 60,
- decoration: BoxDecoration(
- shape: BoxShape.circle,
- color: Colors.grey[200],
- ),
- child: const Icon(
- Icons.person,
- size: 36,
- color: Colors.blue,
- ),
- ),
- ],
- ),
- ),
- ),
- // Opciones del menú
- _buildMenuItem(
- icon: Icons.home_outlined,
- title: "Inicio",
- onTap: () {
- Navigator.pop(context);
- // Navegación a la pantalla de inicio
- },
- ),
- _buildMenuItem(
- icon: Icons.shopping_bag_outlined,
- title: "Mis Pedidos",
- onTap: () {
- Navigator.pop(context);
- // Navegación a pedidos
- },
- ),
- _buildMenuItem(
- icon: Icons.favorite_outline,
- title: "Favoritos",
- onTap: () {
- Navigator.pop(context);
- // Navegación a favoritos
- },
- ),
- _buildMenuItem(
- icon: Icons.notifications_outlined,
- title: "Notificaciones",
- onTap: () {
- Navigator.pop(context);
- // Navegación a notificaciones
- },
- ),
- _buildMenuItem(
- icon: Icons.settings_outlined,
- title: "Configuración",
- onTap: () {
- Navigator.pop(context);
- // Navegación a configuración
- },
- ),
- const SizedBox(height: 20),
- // Opción para modo oscuro
- Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
- child: ClipRRect(
- borderRadius: BorderRadius.circular(16),
- child: Container(
- height: 80,
- padding: const EdgeInsets.symmetric(horizontal: 16),
- width: double.infinity,
- color: Colors.white,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- const Row(
- children: [
- Icon(Icons.nights_stay_rounded, size: 28),
- Padding(
- padding: EdgeInsets.only(left: 8),
- child: Text(
- "Modo oscuro",
- style: TextStyle(
- fontSize: 20,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- ],
- ),
- Switch(
- activeColor: Theme.of(context).primaryColor,
- value: false,
- onChanged: (value) {
- // Cambiar tema claro/oscuro
- },
- ),
- ],
- ),
- ),
- ),
- ),
- // Botón de cerrar sesión
- Padding(
- padding: const EdgeInsets.all(16),
- child: ClipRRect(
- borderRadius: BorderRadius.circular(16),
- child: Container(
- decoration: BoxDecoration(
- color: Colors.white,
- borderRadius: BorderRadius.circular(16),
- border: Border.all(color: Colors.red, width: 3),
- ),
- height: 60,
- padding: const EdgeInsets.symmetric(horizontal: 16),
- width: double.infinity,
- child: InkWell(
- onTap: () {
- // Acción para cerrar sesión
- },
- child: const Center(
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Icon(
- Icons.logout_outlined,
- size: 24,
- color: Colors.red,
- ),
- SizedBox(width: 8),
- Text(
- "Cerrar Sesión",
- style: TextStyle(
- fontWeight: FontWeight.bold,
- fontSize: 18,
- color: Colors.red,
- ),
- ),
- ],
- ),
- ),
- ),
- ),
- ),
- ),
- ],
- ),
- ),
- );
- }
- Widget _buildMenuItem({
- required IconData icon,
- required String title,
- required VoidCallback onTap,
- }) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
- child: ClipRRect(
- borderRadius: BorderRadius.circular(16),
- child: Container(
- height: 60,
- color: Colors.white,
- child: InkWell(
- onTap: onTap,
- child: Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: Row(
- children: [
- Icon(icon, size: 24),
- const SizedBox(width: 12),
- Text(
- title,
- style: const TextStyle(
- fontSize: 18,
- fontWeight: FontWeight.bold,
- ),
- ),
- const Spacer(),
- const Icon(Icons.arrow_forward_ios_rounded, size: 16),
- ],
- ),
- ),
- ),
- ),
- ),
- );
- }
- }
|