import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/profile/patient_profile_app_bar_model.dart'; import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; import 'large_avatar.dart'; class PatientProfileAppBar extends StatelessWidget with PreferredSizeWidget { final PatiantInformtion? patient; final PatientProfileAppBarModel? patientProfileAppBarModel; final double? height; final bool isInpatient; final bool isDischargedPatient; final bool isFromLiveCare; final String? doctorName; final String? branch; final DateTime? appointmentDate; final String? profileUrl; final String? invoiceNO; final String? orderNo; final bool? isPrescriptions; final bool? isMedicalFile; final String? episode; final String? visitDate; final String? clinic; final bool? isAppointmentHeader; final bool? isFromLabResult; final VoidCallback? onPressed; PatientProfileAppBar(this.patient, { this.patientProfileAppBarModel, this.isFromLabResult = false, this.onPressed, this.height=0, this.isInpatient = false, this.isDischargedPatient = false, this.isFromLiveCare = false, this.doctorName, this.branch, this.appointmentDate, this.profileUrl, this.invoiceNO, this.orderNo, this.isPrescriptions, this.isMedicalFile, this.episode, this.visitDate, this.clinic, this.isAppointmentHeader= false}); PatiantInformtion? localPatient; @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); if (patient == null) { localPatient = patientProfileAppBarModel!.patient!; } else { localPatient = patient!; } int gender = 1; if (localPatient!.patientDetails != null) { gender = localPatient!.patientDetails!.gender!; } else { gender = localPatient!.gender!; } return Container( padding: EdgeInsets.only( left: 0, right: 5, bottom: 5, ), decoration: BoxDecoration( color: Colors.white, border: Border(bottom: BorderSide(color: Color(0xFFEFEFEF)))), child: Container( padding: EdgeInsets.only(left: 10, right: 10, bottom: 10), margin: EdgeInsets.only(top: SizeConfig.isHeightVeryShort ? 30 : 50), child: Column( children: [ Container( padding: EdgeInsets.only( left: SizeConfig.isHeightVeryShort ? 0 : 12.0), child: Row(children: [ IconButton( icon: Icon(Icons.arrow_back_ios), color: Color(0xFF2B353E), //Colors.black, onPressed: () { if (onPressed != null) onPressed!(); Navigator.pop(context); }, ), Expanded( child: AppText( localPatient!.firstName != null ? (Helpers.capitalize(localPatient!.firstName) + " " + Helpers.capitalize(localPatient!.lastName)) : Helpers.capitalize(localPatient!.fullName ?? localPatient!.patientDetails!.fullName!), fontSize: SizeConfig.textMultiplier * 1.8, fontWeight: FontWeight.bold, fontFamily: 'Poppins', color: Color(0xFF2B353E), isCopyable: true, ), ), gender == 1 ? Icon( DoctorApp.male_2, color: Colors.blue, ) : Icon( DoctorApp.female_1, color: Colors.pink, ), Container( margin: EdgeInsets.symmetric(horizontal: 4), child: InkWell( onTap: () { launch("tel://" + localPatient!.mobileNumber!); }, child: Icon( Icons.phone, color: Colors.black87, ), ), ), if (patientProfileAppBarModel!.videoCallDurationStream != null) StreamBuilder( stream: patientProfileAppBarModel!.videoCallDurationStream, builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasData && snapshot.data != null) return InkWell( onTap: () {}, child: Container( decoration: BoxDecoration( color: Colors.red, borderRadius: BorderRadius.circular(20)), padding: EdgeInsets.symmetric( vertical: 2, horizontal: 10), child: Text( snapshot.data!, style: TextStyle(color: Colors.white), ), ), ); else return Container(); }, ), ]), ), Row(children: [ Padding( padding: EdgeInsets.only( left: SizeConfig.isHeightVeryShort ? 0 : 12.0), child: Container( width: SizeConfig.getTextMultiplierBasedOnWidth() * 20, height: SizeConfig.getTextMultiplierBasedOnWidth() * 20, child: Image.asset( gender == 1 ? 'assets/images/male_avatar.png' : 'assets/images/female_avatar.png', fit: BoxFit.cover, ), ), ), SizedBox( width: 10, ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ localPatient!.patientStatusType != null ? Container( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ localPatient!.patientStatusType == 43 ? AppText( TranslationBase.of(context).arrivedP, color: Colors.green, fontWeight: FontWeight.bold, fontFamily: 'Poppins', fontSize: SizeConfig .getTextMultiplierBasedOnWidth() * 3.5, ) : AppText( TranslationBase.of(context).notArrived, color: Colors.red[800], fontWeight: FontWeight.bold, fontFamily: 'Poppins', fontSize: SizeConfig .getTextMultiplierBasedOnWidth() * 3.5, ), localPatient!.startTime != null ? AppText( localPatient!.startTime != null ? localPatient!.startTime : '', fontWeight: FontWeight.w700, fontSize: SizeConfig .getTextMultiplierBasedOnWidth() * 3.5, color: Color(0xFF2E303A)) : SizedBox() ], )) : SizedBox(), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ AppText( TranslationBase.of(context).fileNumber, fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3, color: Color(0xFF575757), fontWeight: FontWeight.w600, ), SizedBox( width: 1, ), AppText( localPatient!.patientId.toString(), fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.5, color: Color(0xFF2E303A), fontWeight: FontWeight.w700, isCopyable: true, ), ], ), Row( children: [ AppText( localPatient!.nationalityName ?? localPatient!.nationality ?? localPatient!.nationalityId ?? '', fontWeight: FontWeight.bold, fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.5, ), localPatient!.nationalityFlagURL != null ? ClipRRect( borderRadius: BorderRadius.circular(20.0), child: Image.network( localPatient!.nationalityFlagURL!, height: 25, width: 30, errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) { return Text('No Image'); }, )) : SizedBox() ], ) ], ), HeaderRow( label: TranslationBase.of(context).age! + " : ", value: "${AppDateUtils.getAgeByBirthday(localPatient!.patientDetails != null ? localPatient!.patientDetails!.dateofBirth ?? "" : localPatient!.dateofBirth ?? "", context, isServerFormat: !isFromLiveCare)}", ), if (localPatient!.appointmentDate != null && localPatient!.appointmentDate!.isNotEmpty && !isFromLabResult!) HeaderRow( label: TranslationBase.of(context).appointmentDate! + " : ", value: AppDateUtils.getDayMonthYearDateFormatted( AppDateUtils.convertStringToDate( localPatient!.appointmentDate!)), ), if (patientProfileAppBarModel!.isFromLabResult!) HeaderRow( label: "Result Date: ", value: '${AppDateUtils.getDayMonthYearDateFormatted(patientProfileAppBarModel!.appointmentDate!, isArabic: projectViewModel.isArabic)}', ), // if(isInpatient) Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (localPatient!.admissionDate != null && localPatient!.admissionDate!.isNotEmpty) HeaderRow( label: localPatient!.admissionDate == null ? "" : TranslationBase.of(context).admissionDate! + " : ", value: localPatient!.admissionDate == null ? "" : "${AppDateUtils.getDayMonthYearDateFormatted((AppDateUtils.getDateTimeFromServerFormat(localPatient!.admissionDate.toString())))}", ), if (localPatient!.admissionDate != null) HeaderRow( label: "${TranslationBase.of(context).numOfDays}: ", value: isDischargedPatient && localPatient!.dischargeDate != null ? "${AppDateUtils.getDateTimeFromServerFormat(localPatient!.dischargeDate!).difference(AppDateUtils.getDateTimeFromServerFormat(localPatient!.admissionDate!)).inDays + 1}" : "${DateTime.now().difference(AppDateUtils.getDateTimeFromServerFormat(localPatient!.admissionDate!)).inDays + 1}", ) ], ), ], ), ), ]), if (patientProfileAppBarModel!.isAppointmentHeader!) Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: 30, height: 30, margin: EdgeInsets.only( left: projectViewModel.isArabic ? 10 : 85, right: projectViewModel.isArabic ? 85 : 10, top: 5), decoration: BoxDecoration( shape: BoxShape.rectangle, border: Border( bottom: BorderSide(color: Colors.grey[400]!, width: 2.5), left: BorderSide(color: Colors.grey[400]!, width: 2.5), )), ), Expanded( child: Container( margin: EdgeInsets.only(top: 10), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( child: LargeAvatar( name: patientProfileAppBarModel!.doctorName ?? "", url: patientProfileAppBarModel!.profileUrl, ), width: 25, height: 25, margin: EdgeInsets.only(top: 10), ), Expanded( flex: 5, child: Container( margin: EdgeInsets.all(10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ AppText( '${TranslationBase.of(context).dr}$doctorName', color: Color(0xFF2E303A), fontWeight: FontWeight.w700, fontSize: SizeConfig .getTextMultiplierBasedOnWidth() * 3.5, isCopyable: true, ), if (orderNo != null && !isPrescriptions!) HeaderRow( label: 'Order No: ', value: orderNo ?? '', ), if (invoiceNO != null && !isPrescriptions!) HeaderRow( label: 'Invoice: ', value: invoiceNO ?? "", ), if (branch != null) HeaderRow( label: 'Branch: ', value: branch ?? '', ), if (clinic != null) HeaderRow( label: 'Clinic: ', value: clinic ?? '', ), if (isMedicalFile! && episode != null) HeaderRow( label: 'Episode: ', value: episode ?? '', ), if (isMedicalFile! && visitDate != null) HeaderRow( label: 'Visit Date: ', value: visitDate ?? '', ), if (!isMedicalFile!) HeaderRow( label: !isPrescriptions! ? 'Result Date:' : 'Prescriptions Date ', value: '${AppDateUtils.getDayMonthYearDateFormatted(appointmentDate!, isArabic: projectViewModel.isArabic)}', ), ]), ), ), ], ), ), ), ], ) ], ), ), ); } @override Size get preferredSize => Size( double.maxFinite, height! == 0 ? isInpatient ? (isFromLabResult! ? 210 : 200) : isAppointmentHeader! ? 290 : SizeConfig.isHeightVeryShort ? 137 : SizeConfig.isHeightShort ? 190 : SizeConfig.heightMultiplier * (SizeConfig.isWidthLarge ? 25 : 20) : height! // TODO Elham*2 // patientProfileAppBarModel!.height == 0 // ? patientProfileAppBarModel!.isAppointmentHeader! // ? 270 // : ((localPatient!.appointmentDate!.isNotEmpty) // ? patientProfileAppBarModel!.isFromLabResult! // ? 190 // : 170 // : localPatient!.admissionDate != null // ? patientProfileAppBarModel!.isFromLabResult! // ? 190 // : 170 // : patientProfileAppBarModel!.isDischargedPatient! // ? 240 // : 130) // : patientProfileAppBarModel!.height! ); } class HeaderRow extends StatelessWidget { final String? label; final String? value; const HeaderRow({Key? key, this.label, this.value}) : super(key: key); @override Widget build(BuildContext context) { return Row( children: [ AppText( label, isCopyable: true, fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3, color: Color(0xFF575757), fontWeight: FontWeight.w600, ), SizedBox( width: 1, ), AppText( value, fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.5, color: Color(0xFF2E303A), fontWeight: FontWeight.w700, isCopyable: true, ), ], ); } }