import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import '../../navigation/app_navigation.dart'; import '../../services/auth_service.dart'; import 'nav_item_tile.dart'; class SidebarWidget extends StatelessWidget { const SidebarWidget({super.key}); static const double _width = 260; @override Widget build(BuildContext context) { final cs = Theme.of(context).colorScheme; final currentRoute = GoRouterState.of(context).matchedLocation; return SizedBox( width: _width, child: Material( color: cs.surfaceContainerLow, child: Column( children: [ _SidebarHeader(), const Divider(height: 1), Expanded( child: ListView( padding: const EdgeInsets.symmetric(vertical: 8), children: kAdminNavItems .map((item) => NavItemTile( item: item, currentRoute: currentRoute, )) .toList(), ), ), const Divider(height: 1), _SidebarFooter(), ], ), ), ); } } class _SidebarHeader extends StatelessWidget { @override Widget build(BuildContext context) { final cs = Theme.of(context).colorScheme; return Padding( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20), child: Row( children: [ CircleAvatar( radius: 20, backgroundColor: cs.primaryContainer, child: Icon(Icons.sports, color: cs.onPrimaryContainer, size: 22), ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'DeporOS', style: Theme.of(context).textTheme.titleMedium?.copyWith( fontWeight: FontWeight.bold, color: cs.onSurface, ), ), Text( 'Panel de administración', style: Theme.of(context).textTheme.labelSmall?.copyWith( color: cs.onSurfaceVariant, ), ), ], ), ), ], ), ); } } class _SidebarFooter extends StatelessWidget { @override Widget build(BuildContext context) { final cs = Theme.of(context).colorScheme; return Padding( padding: const EdgeInsets.all(8), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 1), child: Material( color: Colors.transparent, borderRadius: BorderRadius.circular(12), child: InkWell( borderRadius: BorderRadius.circular(12), onTap: () => _logout(context), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), child: Row( children: [ Icon(Icons.logout, size: 20, color: cs.error), const SizedBox(width: 12), Text( 'Salir', style: Theme.of(context).textTheme.bodyMedium?.copyWith( color: cs.error, fontWeight: FontWeight.w500, ), ), ], ), ), ), ), ), ); } Future _logout(BuildContext context) async { await AuthService().logout(); if (context.mounted) context.go('/login'); } }