import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; import 'package:prosappco/src/components/photo_view.dart'; import 'package:prosappco/src/models/user_model.dart'; import 'package:prosappco/src/presentation/screens/calendar.dart'; import 'package:prosappco/src/presentation/screens/messages.dart'; import 'package:prosappco/src/presentation/screens/my_services_pro.dart'; import 'package:prosappco/src/presentation/screens/professional.dart'; import 'package:prosappco/src/presentation/screens/profile/profile.dart'; import 'package:prosappco/src/presentation/screens/profile/profile_pro.dart'; import 'package:prosappco/src/presentation/screens/profile/profile_pro_web.dart'; import 'package:prosappco/src/presentation/screens/reputacion_pro.dart'; import 'package:prosappco/src/presentation/screens/web_view.dart'; import '../models/scores_model.dart'; import '../presentation/screens/configuracion.dart'; import '../presentation/screens/support.dart'; import 'package:url_launcher/url_launcher.dart'; class DrawerProfessional extends StatefulWidget { @override State createState() => _DrawerProfessionalState(); } class _DrawerProfessionalState extends State { final uid = AuthenticationRepository.instance.getCurrentUserUid(); UserModel? user; ScoresModel? scoresModel; Future _irSugerencias() async { const url = 'https://admin.prosapp.co/sugerencias '; // Aquí debes poner la URL a la que quieres dirigirte if (await canLaunch(url)) { await launch(url); } else { throw 'No se pudo abrir la URL $url'; } } @override void initState() { super.initState(); if (user == null) { UserModel.getUser(uid.toString()).then( (UserModel s) => setState(() => user = s), ); } if (scoresModel == null) { ScoresModel.scoreTo(uid.toString(), true, false).then( (ScoresModel s) => setState(() => scoresModel = s), ); } } @override Widget build(BuildContext context) { final User? currentUser = FirebaseAuth.instance.currentUser; return Drawer( child: Container( color: const Color(0xFFE9F9FF), child: Column( children: [ Container( color: Colors.white, child: Column( children: [ ListTile( onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { return const ProfileScreen(); }, ), ); }, title: Text(user?.name ?? '', style: const TextStyle(fontWeight: FontWeight.bold)), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( currentUser?.phoneNumber ?? '', style: const TextStyle(fontSize: 12), ), Text( user?.city ?? '', style: const TextStyle(fontSize: 12), ), ], ), leading: ReferencePhoto( ref: user?.photo, size: 55, sizeCircle: 60, ), trailing: const Icon(Icons.keyboard_arrow_right, color: Colors.black), contentPadding: const EdgeInsets.symmetric( vertical: 20, horizontal: 16), ), ], ), ), Container( decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.3), spreadRadius: 1, blurRadius: 3, offset: const Offset(0, 0), // changes position of shadow ), ], ), child: Divider( height: 0, color: Colors.grey[300], ), ), Expanded( child: Column( children: [ ListTile( onTap: () { Navigator.of(context).push( CupertinoPageRoute( builder: (BuildContext context) { return MyServicesProScreen(); }, ), ); }, leading: const Icon( Icons.history, color: Colors.black, ), title: const Text( 'Mis servicios', style: TextStyle(fontSize: 15), ), ), ListTile( onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { if (kIsWeb) { return const ProfileProWebScreen(); } else { return const ProfileProScreen(); } }, ), ); }, leading: const Icon( Icons.person_outline, color: Colors.black, ), title: const Text( 'Perfil profesional', style: TextStyle(fontSize: 15), ), ), ListTile( onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { return const ConfiguracionScreen(); }, ), ); }, leading: const Icon( Icons.construction_outlined, color: Colors.black, ), title: const Text( 'Configuración', style: TextStyle(fontSize: 15), ), ), ListTile( onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { return const SupportScreen(); }, ), ); }, leading: const Icon( Icons.question_mark_rounded, color: Colors.black, ), title: const Text( 'Soporte', style: TextStyle(fontSize: 15), ), ), ListTile( onTap: () { if (kIsWeb) { _irSugerencias(); } else { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { return WebViewScreen( label: 'Sugerencias', link: 'https://admin.prosapp.co/sugerencias'); }, ), ); } }, leading: const Icon( Icons.campaign_outlined, color: Colors.black, ), title: const Text( 'Sugerencias', style: TextStyle(fontSize: 15), ), ), // ListTile( // onTap: () { // Navigator.of(context).push( // CupertinoPageRoute( // builder: (BuildContext context) { // return const MessagesScreen(); // }, // ), // ); // }, // leading: const Icon( // Icons.messenger_outline, // color: Colors.black, // ), // title: const Text( // 'Mensajes', // style: TextStyle(fontSize: 15), // ), // ), ListTile( onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { return const CalendarScreen(); }, ), ); }, leading: const Icon( Icons.calendar_month, color: Colors.black, ), title: const Text( 'Calendario', style: TextStyle(fontSize: 15), ), ), Builder(builder: (BuildContext context) { return Container( color: const Color(0xFF2BA4EC), child: ListTile( onTap: () { if (ModalRoute.of(context)?.settings.name != '/solicitud') { Navigator.pushNamed(context, '/solicitud'); } else { Scaffold.of(context).openEndDrawer(); } }, trailing: const Icon( Icons.keyboard_arrow_right, color: Colors.white, ), title: const Text( 'Solicitudes', style: TextStyle( color: Colors.white, fontSize: 17, fontWeight: FontWeight.bold), ), contentPadding: const EdgeInsets.symmetric( vertical: 5, horizontal: 16), ), ); }), Container( decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.5), spreadRadius: 2, blurRadius: 3, offset: const Offset(0, 2), // changes position of shadow ), ], ), child: Container( color: Colors.white, child: ListTile( onTap: () async { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { return const ReputationProScreen(); }, ), ); }, trailing: const Icon(Icons.keyboard_arrow_right, color: Colors.black), title: const Text( 'Reputación', style: TextStyle(color: Colors.black), ), subtitle: Row( children: [ RatingBar.builder( initialRating: scoresModel?.average ?? 0, minRating: 1, direction: Axis.horizontal, allowHalfRating: true, itemCount: 5, itemSize: 25, maxRating: 5, itemPadding: const EdgeInsets.symmetric(horizontal: 0), itemBuilder: (context, _) => const Icon( Icons.star, color: Color(0xFF2BA4EC), ), onRatingUpdate: (rating) {}, ignoreGestures: true, ), const SizedBox(width: 5), Text( '(${scoresModel?.total.toString()}) ${scoresModel?.average.toStringAsFixed(1)}'), ], ), ), ), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Prosapp', style: TextStyle(fontSize: 10, color: Colors.grey[700]), ), Padding( padding: const EdgeInsets.only(top: 7, left: 3, right: 3), child: Text( '®', style: TextStyle(fontSize: 25, color: Colors.grey[700]), ), ), Text( 'todos los derechos reservados', style: TextStyle(fontSize: 10, color: Colors.grey[700]), ), ], ), ], ), ), ElevatedButton( onPressed: () { Navigator.pushReplacementNamed(context, '/servicio'); }, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF2BA4EC), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(50), ), elevation: 0, minimumSize: const Size(230, 45), ), child: const Text( 'Modo usuario', style: TextStyle( color: Colors.white, fontSize: 15, ), ), ), const SizedBox(height: 5), ElevatedButton( onPressed: () { AuthenticationRepository.instance.logout(uid!); }, style: ElevatedButton.styleFrom( backgroundColor: Colors.red, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(20)), ), minimumSize: const Size(230, 40), ), child: const Text( 'Cerrar Sesión', style: TextStyle( color: Colors.white, fontSize: 15, ), ), ), const SizedBox(height: 5), ], ), ), ); } }