diff --git a/lib/screens/service/professional_service_screen.dart b/lib/screens/service/professional_service_screen.dart index 90d5a3d..4067653 100644 --- a/lib/screens/service/professional_service_screen.dart +++ b/lib/screens/service/professional_service_screen.dart @@ -319,74 +319,58 @@ class _ProfessionalServiceScreenState extends State { } Widget customActionButtons(ServiceEntity service, MyUser user) { - if (service.status == ServiceStatus.acepted || - service.status == ServiceStatus.active) { - return Wrap( - alignment: WrapAlignment.center, - spacing: 15, - children: [ - Visibility( - visible: user.phone == null ? false : true, - child: ElevatedButton( - onPressed: () => launch("tel:${user.phone}"), - style: ElevatedButton.styleFrom( - foregroundColor: const Color(0xFF2BA4EC), - backgroundColor: Colors.white, - shape: const CircleBorder( - side: BorderSide( + DateTime serviceDate = DateTime.parse(service.day); + DateTime now = DateTime.now(); + DateTime serviceDateTime = DateTime( + serviceDate.year, + serviceDate.month, + serviceDate.day, + service.range1Hour2.hour, + service.range1Hour2.minute, + ); + + if (now.isAfter(serviceDateTime)) { + return const SizedBox(); + } else { + if (service.status == ServiceStatus.acepted || + service.status == ServiceStatus.active) { + return Wrap( + alignment: WrapAlignment.center, + spacing: 15, + children: [ + Visibility( + visible: user.phone == null ? false : true, + child: ElevatedButton( + onPressed: () => launch("tel:${user.phone}"), + style: ElevatedButton.styleFrom( + foregroundColor: const Color(0xFF2BA4EC), + backgroundColor: Colors.white, + shape: const CircleBorder( + side: BorderSide( + color: Color(0xFF2BA4EC), + width: 2, + ), + ), + ), + child: const Padding( + padding: EdgeInsets.symmetric(vertical: 20, horizontal: 0), + child: Icon( + Icons.phone_android, + size: 30, color: Color(0xFF2BA4EC), - width: 2, ), ), ), - child: const Padding( - padding: EdgeInsets.symmetric(vertical: 20, horizontal: 0), - child: Icon( - Icons.phone_android, - size: 30, - color: Color(0xFF2BA4EC), - ), - ), ), - ), - ElevatedButton( - onPressed: () { - if (service.id != null) { - Navigator.push( - context, - CupertinoPageRoute( - builder: (context) => ChatScreen(service: service), - ), - ); - } - }, - style: ElevatedButton.styleFrom( - foregroundColor: const Color(0xFF2BA4EC), - backgroundColor: Colors.white, - shape: const CircleBorder( - side: BorderSide( - color: Color(0xFF2BA4EC), - width: 2, - ), - ), - ), - child: const Padding( - padding: EdgeInsets.symmetric(vertical: 20, horizontal: 0), - child: Icon( - Icons.message, - size: 30, - color: Color(0xFF2BA4EC), - ), - ), - ), - Visibility( - visible: user.phone == null ? false : true, - child: ElevatedButton( - onPressed: () async { - final whatsappUrl = - 'https://wa.me/${user.phone}?text=${Uri.parse('Hola! me contactaste por Prossapp')}'; - if (!await launch(whatsappUrl)) { - throw Exception('Could not launch $whatsappUrl'); + ElevatedButton( + onPressed: () { + if (service.id != null) { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => ChatScreen(service: service), + ), + ); } }, style: ElevatedButton.styleFrom( @@ -402,15 +386,45 @@ class _ProfessionalServiceScreenState extends State { child: const Padding( padding: EdgeInsets.symmetric(vertical: 20, horizontal: 0), child: Icon( - CommunityMaterialIcons.whatsapp, + Icons.message, size: 30, color: Color(0xFF2BA4EC), ), ), ), - ), - ], - ); + Visibility( + visible: user.phone == null ? false : true, + child: ElevatedButton( + onPressed: () async { + final whatsappUrl = + 'https://wa.me/${user.phone}?text=${Uri.parse('Hola! me contactaste por Prossapp')}'; + if (!await launch(whatsappUrl)) { + throw Exception('Could not launch $whatsappUrl'); + } + }, + style: ElevatedButton.styleFrom( + foregroundColor: const Color(0xFF2BA4EC), + backgroundColor: Colors.white, + shape: const CircleBorder( + side: BorderSide( + color: Color(0xFF2BA4EC), + width: 2, + ), + ), + ), + child: const Padding( + padding: EdgeInsets.symmetric(vertical: 20, horizontal: 0), + child: Icon( + CommunityMaterialIcons.whatsapp, + size: 30, + color: Color(0xFF2BA4EC), + ), + ), + ), + ), + ], + ); + } } return const SizedBox(); @@ -433,7 +447,6 @@ class _ProfessionalServiceScreenState extends State { onPressed: () async { final Uri url = Uri.parse( 'https://www.google.com/maps/search/?api=1&query=${service.latitude},${service.longitude}'); - if (!await launchUrl(url)) { throw Exception('Could not launch $url'); } @@ -498,159 +511,36 @@ class _ProfessionalServiceScreenState extends State { } Widget customMessageStatus(ServiceEntity service) { - if (service.status == ServiceStatus.cancelled) { + DateTime serviceDate = DateTime.parse(service.day); + DateTime now = DateTime.now(); + DateTime serviceDateTime = DateTime( + serviceDate.year, + serviceDate.month, + serviceDate.day, + service.range1Hour2.hour, + service.range1Hour2.minute, + ); + + if (now.isAfter(serviceDateTime)) { return Stack( alignment: AlignmentDirectional.topCenter, clipBehavior: Clip.none, children: [ Card( color: Colors.red.shade100, - child: const Padding( - padding: EdgeInsets.fromLTRB(32, 56, 32, 32), - child: Text( - 'Cancelado', - style: TextStyle(fontSize: 32, color: Colors.red), - ), - ), - ), - Positioned( - top: -40, - child: Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.red.shade100, width: 4), - shape: BoxShape.circle, - ), - child: - const Icon(Icons.close_rounded, color: Colors.red, size: 48), - ), - ) - ], - ); - } - if (service.status == ServiceStatus.denied) { - return Stack( - alignment: AlignmentDirectional.topCenter, - clipBehavior: Clip.none, - children: [ - Card( - color: Colors.red.shade100, - child: const Padding( - padding: EdgeInsets.fromLTRB(32, 56, 32, 32), - child: Text( - 'Rechazado', - style: TextStyle(fontSize: 32, color: Colors.red), - ), - ), - ), - Positioned( - top: -40, - child: Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.red.shade100, width: 4), - shape: BoxShape.circle, - ), - child: - const Icon(Icons.close_rounded, color: Colors.red, size: 48), - ), - ) - ], - ); - } - - if (service.status == ServiceStatus.completed && - service.userScored == false) { - return Stack( - alignment: AlignmentDirectional.topCenter, - clipBehavior: Clip.none, - children: [ - Card( - color: Colors.green.shade50, - child: Padding( - padding: const EdgeInsets.fromLTRB(32, 56, 32, 32), - child: Column( - children: [ - const Text( - 'Completado', - style: TextStyle(fontSize: 32, color: Colors.green), - ), - const Text( - 'Califica el servicio', - style: TextStyle(fontSize: 20, color: Colors.green), - ), - const SizedBox(height: 15), - FilledButton( - onPressed: () { - Navigator.push( - context, - CupertinoPageRoute( - builder: (context) => ScoreScreen( - service: service, - ), - ), - ); - }, - style: FilledButton.styleFrom( - backgroundColor: Colors.green, - padding: const EdgeInsets.symmetric(vertical: 15), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), - ), - ), - child: Container( - alignment: Alignment.center, - width: MediaQuery.of(context).size.width * 0.4, - child: const Text( - 'Calificar', - style: TextStyle( - color: Colors.white, - fontSize: 18, - ), - ), - ), - ), - ], - ), - ), - ), - Positioned( - top: -40, - child: Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.green.shade50, width: 4), - shape: BoxShape.circle, - ), - child: const Icon( - Icons.star, - color: Colors.green, - size: 48, - ), - ), - ) - ], - ); - } - - if (service.status == ServiceStatus.completed && - service.userScored == true) { - return Stack( - alignment: AlignmentDirectional.topCenter, - clipBehavior: Clip.none, - children: [ - Card( - color: Colors.green.shade50, child: const Padding( padding: EdgeInsets.fromLTRB(32, 56, 32, 32), child: Column( + mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - 'Completado', - style: TextStyle(fontSize: 32, color: Colors.green), + 'Caducado', + style: TextStyle(fontSize: 32, color: Colors.red), + ), + Text( + 'Tu servicio ha excedido \n el tiempo de espera', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 18, color: Colors.red), ), ], ), @@ -662,18 +552,193 @@ class _ProfessionalServiceScreenState extends State { padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, - border: Border.all(color: Colors.green.shade50, width: 4), + border: Border.all(color: Colors.red.shade100, width: 4), shape: BoxShape.circle, ), - child: const Icon( - Icons.star, - color: Colors.green, - size: 48, - ), + child: + const Icon(Icons.close_rounded, color: Colors.red, size: 48), ), ) ], ); + } else { + if (service.status == ServiceStatus.cancelled) { + return Stack( + alignment: AlignmentDirectional.topCenter, + clipBehavior: Clip.none, + children: [ + Card( + color: Colors.red.shade100, + child: const Padding( + padding: EdgeInsets.fromLTRB(32, 56, 32, 32), + child: Text( + 'Cancelado', + style: TextStyle(fontSize: 32, color: Colors.red), + ), + ), + ), + Positioned( + top: -40, + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.red.shade100, width: 4), + shape: BoxShape.circle, + ), + child: const Icon(Icons.close_rounded, + color: Colors.red, size: 48), + ), + ) + ], + ); + } + if (service.status == ServiceStatus.denied) { + return Stack( + alignment: AlignmentDirectional.topCenter, + clipBehavior: Clip.none, + children: [ + Card( + color: Colors.red.shade100, + child: const Padding( + padding: EdgeInsets.fromLTRB(32, 56, 32, 32), + child: Text( + 'Rechazado', + style: TextStyle(fontSize: 32, color: Colors.red), + ), + ), + ), + Positioned( + top: -40, + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.red.shade100, width: 4), + shape: BoxShape.circle, + ), + child: const Icon(Icons.close_rounded, + color: Colors.red, size: 48), + ), + ) + ], + ); + } + + if (service.status == ServiceStatus.completed && + service.userScored == false) { + return Stack( + alignment: AlignmentDirectional.topCenter, + clipBehavior: Clip.none, + children: [ + Card( + color: Colors.green.shade50, + child: Padding( + padding: const EdgeInsets.fromLTRB(32, 56, 32, 32), + child: Column( + children: [ + const Text( + 'Completado', + style: TextStyle(fontSize: 32, color: Colors.green), + ), + const Text( + 'Califica el servicio', + style: TextStyle(fontSize: 20, color: Colors.green), + ), + const SizedBox(height: 15), + FilledButton( + onPressed: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) => ScoreScreen( + service: service, + ), + ), + ); + }, + style: FilledButton.styleFrom( + backgroundColor: Colors.green, + padding: const EdgeInsets.symmetric(vertical: 15), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + ), + child: Container( + alignment: Alignment.center, + width: MediaQuery.of(context).size.width * 0.4, + child: const Text( + 'Calificar', + style: TextStyle( + color: Colors.white, + fontSize: 18, + ), + ), + ), + ), + ], + ), + ), + ), + Positioned( + top: -40, + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.green.shade50, width: 4), + shape: BoxShape.circle, + ), + child: const Icon( + Icons.star, + color: Colors.green, + size: 48, + ), + ), + ) + ], + ); + } + + if (service.status == ServiceStatus.completed && + service.userScored == true) { + return Stack( + alignment: AlignmentDirectional.topCenter, + clipBehavior: Clip.none, + children: [ + Card( + color: Colors.green.shade50, + child: const Padding( + padding: EdgeInsets.fromLTRB(32, 56, 32, 32), + child: Column( + children: [ + Text( + 'Completado', + style: TextStyle(fontSize: 32, color: Colors.green), + ), + ], + ), + ), + ), + Positioned( + top: -40, + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.green.shade50, width: 4), + shape: BoxShape.circle, + ), + child: const Icon( + Icons.star, + color: Colors.green, + size: 48, + ), + ), + ) + ], + ); + } } return const SizedBox(); @@ -754,16 +819,11 @@ class _ProfessionalServiceScreenState extends State { } return GeneralSecondaryButton( - label: 'Volver', - onPressed: () { - Navigator.pop(context); - }); - // customStatusButton( - // label: 'Volver', - // onPressed: () { - // Navigator.pop(context); - // }, - // ); + label: 'Volver', + onPressed: () { + Navigator.pop(context); + }, + ); } String formatCurrency(int number) {