import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:prosappco/blocs/my_user_bloc/my_user_bloc.dart'; import 'package:prosappco/blocs/professional_bloc/professional_bloc.dart'; import 'package:prosappco/components/general_drawer_header.dart'; import 'package:prosappco/components/general_drawer_item.dart'; import 'package:prosappco/screens/configuration/configuration_screen.dart'; import 'package:prosappco/screens/configuration/configuration_support_screen.dart'; import 'package:prosappco/screens/professional/professional_denied_screen.dart'; import 'package:prosappco/screens/professional/professional_form_screen.dart'; import 'package:prosappco/screens/professional/professional_pending_screen.dart'; import 'package:prosappco/screens/professional/professional_profile_screen.dart'; import 'package:prosappco/screens/web/web_view_screen.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:user_repository/user_repository.dart'; class GeneralDrawer extends StatelessWidget { const GeneralDrawer({super.key}); Future _irSugerencias() async { const url = 'https://admin.prosapp.co/sugerencias'; final Uri _url = Uri.parse(url); if (await canLaunchUrl(_url)) { await launchUrl(_url); } else { throw 'No se pudo abrir la URL $url'; } } @override Widget build(BuildContext context) { return BlocBuilder( builder: (context, userState) { return BlocBuilder( builder: (context, professionalState) { return Drawer( backgroundColor: Theme.of(context).colorScheme.background, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const GeneralDrawerHeader(), Divider( color: Theme.of(context) .colorScheme .onSurface .withOpacity(0.1), thickness: 0.5, height: 1, ), Expanded( child: SingleChildScrollView( child: Column( children: [ shouldProModeActive(context, professionalState) ? GeneralDrawerItem( leading: Icons.person_outline_rounded, label: 'Perfil profesional', onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (context) => const ProfessionalProfileScreen(), ), ); }, ) : const SizedBox(), GeneralDrawerItem( leading: Icons.history, label: 'Mis servicios', onTap: () { Navigator.pop(context); }, ), GeneralDrawerItem( leading: Icons.settings_outlined, label: 'Configuración', onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (context) => const ConfigurationScreen(), ), ); }, ), GeneralDrawerItem( leading: Icons.help_outline, label: 'Soporte', onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (context) => const ConfigurationSupportScreen(), ), ); }, ), GeneralDrawerItem( leading: Icons.campaign_outlined, label: 'Sugerencias', onTap: () { if (kIsWeb) { _irSugerencias(); } else { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { return WebViewScreen( label: 'Sugerencias', link: 'https://admin.prosapp.co/sugerencias'); }, ), ); } }, ), shouldProModeActive(context, professionalState) ? const GeneralDrawerItem( label: 'Calendario', leading: Icons.calendar_month_outlined, ) : const SizedBox(), ], ), ), ), Divider( color: Theme.of(context) .colorScheme .onSurface .withOpacity(0.1), thickness: 0.5, height: 1, ), const SizedBox(height: 15), Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: buttonOfState(context, professionalState), ), const SizedBox(height: 15), ], ), ); }, ); }, ); } buttonOfState(BuildContext context, ProfessionalState state) { return ElevatedButton( onPressed: () { final myUserState = context.read().state; if (myUserState.status == MyUserStatus.success) { final user = myUserState.user!; switch (user.proState) { case ProState.active: context .read() .add(const SwitchProModeEvent()); Navigator.pop(context); break; case ProState.inactive: Navigator.push( context, CupertinoPageRoute( builder: (context) => const ProfessionalFormScreen(), ), ); break; case ProState.pending: Navigator.push( context, CupertinoPageRoute( builder: (context) => const ProfessionalPendingScreen(), ), ); break; case ProState.denied: Navigator.push( context, CupertinoPageRoute( builder: (context) => const ProfessionalDeniedScreen(), ), ); break; } } else {} }, style: ElevatedButton.styleFrom( backgroundColor: Theme.of(context).colorScheme.primary, padding: const EdgeInsets.symmetric(vertical: 15), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), )), child: (state is LoadedModeProState) ? Text( state.isProModeActive ? 'Modo cliente' : 'Modo profesional', style: const TextStyle(color: Colors.white, fontSize: 18), ) : const CircularProgressIndicator( color: Colors.white, )); } shouldProModeActive(BuildContext context, ProfessionalState state) { return (state is LoadedModeProState) ? state.isProModeActive : false; } }