import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/header_model.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/avatar/large_avatar.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/doctor_card.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_send_email_dialog.dart'; import 'package:flutter/material.dart'; import 'package:diplomaticquarterapp/extensions/string_extensions.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:rating_bar/rating_bar.dart'; class DoctorHeader extends StatelessWidget { final HeaderModel headerModel; final VoidCallback onTap; final VoidCallback onRatingAndReviewTap; final bool showConfirmMessageDialog; final String buttonTitle; final String buttonIcon; final bool isNeedToShowButton; DoctorHeader( {Key key, @required this.headerModel, @required this.buttonTitle, @required this.onTap, this.isNeedToShowButton = true, this.buttonIcon, this.showConfirmMessageDialog = true, this.onRatingAndReviewTap}) : super(key: key); ProjectViewModel projectViewModel; @override Widget build(BuildContext context) { String _speciality = (headerModel?.speciality ?? []).length > 0 ? headerModel.speciality.first : ""; projectViewModel = Provider.of(context); return Container( color: Colors.white, child: Column( mainAxisSize: MainAxisSize.min, children: [ Padding( padding: EdgeInsets.only(left: 21, right: 21, bottom: 12), child: Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ LargeAvatar( name: headerModel.doctorName, url: headerModel.doctorImageURL, width: 51, height: 51, ), SizedBox(width: 10), Expanded( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ if (_speciality.isNotEmpty) Text( _speciality, style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.48, height: 18 / 12), ), headerModel.invoiceNo.isNotEmpty ? myRichText(TranslationBase.of(context).invoiceNo + ":", headerModel.invoiceNo, projectViewModel.isArabic) : Container(), myRichText(TranslationBase.of(context).branch, headerModel.projectName, projectViewModel.isArabic), ], ), ), Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.end, children: [ if (headerModel.date != null) Text( DateUtil.formatDateToDate(headerModel.date, projectViewModel.isArabic), style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48, height: 18 / 12), ), if (headerModel.time != null) Text( headerModel.time ?? DateUtil.formatDateToTime(headerModel.date), style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48, height: 18 / 12), ), if (headerModel?.nationalityFlagURL != null) Padding( padding: const EdgeInsets.only(top: 8.0), child: Image.network(headerModel.nationalityFlagURL ?? "", height: 20), ), ], ) ], ), ), if (headerModel.actualDoctorRate != null) SizedBox( height: 43, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ InkWell( onTap: onRatingAndReviewTap, child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox(width: 21), RatingBar.readOnly( initialRating: headerModel.actualDoctorRate + 0.0, size: 15.0, filledColor: Color(0XFFD02127), emptyColor: Color(0XFFD02127), isHalfAllowed: true, halfFilledIcon: Icons.star_half, filledIcon: Icons.star, emptyIcon: Icons.star_border, ), SizedBox(width: 6), Text( "${headerModel.totalReviews} ${TranslationBase.of(context).reviews}", style: TextStyle( fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48, height: 18 / 12, decoration: onRatingAndReviewTap != null ? TextDecoration.underline : null, ), ), ], ), ), isNeedToShowButton ? InkWell( onTap: () { if (showConfirmMessageDialog) showConfirmMessage(context, onTap, headerModel.email); else onTap(); }, child: Container( padding: EdgeInsets.only(top: 10, bottom: 10, right: 21, left: 15), decoration: BoxDecoration(color: Color(0XFFD02127), borderRadius: projectViewModel.isArabic ? BorderRadius.only(topRight: Radius.circular(10)) : BorderRadius.only(topLeft: Radius.circular(10))), child: Row( mainAxisSize: MainAxisSize.min, children: [ SvgPicture.asset(buttonIcon ?? 'assets/images/new/email.svg', width: 19.0), SizedBox(width: 6), Text( buttonTitle == null ? TranslationBase.of(context).sendEmail : buttonTitle, style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Colors.white, letterSpacing: -0.64, height: 1), ), ], ), ), ) : Container(), ], ), ) ], ), ); } void showConfirmMessage(BuildContext context, GestureTapCallback onTap, String email) { showDialog( context: context, child: ConfirmSendEmailDialog( email: email, onTapSendEmail: () { onTap(); }, ), ); } }