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/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 PatientProfileAppBarModel patientProfileAppBarModel; final bool isFromLabResult; final VoidCallback? onPressed; PatientProfileAppBar({required this.patientProfileAppBarModel, this.isFromLabResult = false, this.onPressed}); @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); int gender = 1; if (patientProfileAppBarModel.patient!.patientDetails != null) { gender = patientProfileAppBarModel.patient!.patientDetails!.gender!; } else { gender = patientProfileAppBarModel.patient!.gender!; } return Container( padding: EdgeInsets.only( left: 0, right: 5, bottom: 5, ), decoration: BoxDecoration( color: Colors.white, ), child: Container( padding: EdgeInsets.only(left: 10, right: 10, bottom: 10), margin: EdgeInsets.only(top: 50), child: Column( children: [ Container( padding: EdgeInsets.only(left: 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( patientProfileAppBarModel.patient!.firstName != null ? (Helpers.capitalize(patientProfileAppBarModel.patient!.firstName) + " " + Helpers.capitalize(patientProfileAppBarModel.patient!.lastName)) : Helpers.capitalize(patientProfileAppBarModel.patient!.fullName ?? patientProfileAppBarModel.patient!.patientDetails!.fullName!), fontSize: SizeConfig.textMultiplier * 1.8, fontWeight: FontWeight.bold, fontFamily: 'Poppins', color: Color(0xFF2B353E), ), ), 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://" + patientProfileAppBarModel.patient!.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: 12.0), child: Container( width: 60, height: 60, 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: [ patientProfileAppBarModel.patient!.patientStatusType != null ? Container( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ patientProfileAppBarModel.patient!.patientStatusType == 43 ? AppText( TranslationBase.of(context).arrivedP, color: Colors.green, fontWeight: FontWeight.bold, fontFamily: 'Poppins', fontSize: 12, ) : AppText( TranslationBase.of(context).notArrived, color: Colors.red[800], fontWeight: FontWeight.bold, fontFamily: 'Poppins', fontSize: 12, ), patientProfileAppBarModel.patient!.startTime != null ? AppText( patientProfileAppBarModel.patient!.startTime != null ? patientProfileAppBarModel.patient!.startTime : '', fontWeight: FontWeight.w700, fontSize: 12, color: Color(0xFF2E303A)) : SizedBox() ], )) : SizedBox(), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ RichText( text: TextSpan( style: TextStyle(fontSize: 1.6 * SizeConfig.textMultiplier, color: Colors.black), children: [ new TextSpan( text: TranslationBase.of(context).fileNumber, style: TextStyle( fontSize: 10, fontFamily: 'Poppins', color: Color(0xFF575757), fontWeight: FontWeight.w600, ), ), new TextSpan( text: patientProfileAppBarModel.patient!.patientId.toString(), style: TextStyle( fontWeight: FontWeight.w700, fontFamily: 'Poppins', fontSize: 12, color: Color(0xFF2E303A), )), ], ), ), Row( children: [ AppText( patientProfileAppBarModel.patient!.nationalityName ?? patientProfileAppBarModel.patient!.nationality ?? patientProfileAppBarModel.patient!.nationalityId ?? '', fontWeight: FontWeight.bold, fontSize: 12, ), patientProfileAppBarModel.patient!.nationalityFlagURL != null ? ClipRRect( borderRadius: BorderRadius.circular(20.0), child: Image.network( patientProfileAppBarModel.patient!.nationalityFlagURL!, height: 25, width: 30, errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) { return Text('No Image'); }, )) : SizedBox() ], ) ], ), Container( child: RichText( text: new TextSpan( style: new TextStyle( fontSize: 1.6 * SizeConfig.textMultiplier, color: Colors.black, fontFamily: 'Poppins', ), children: [ new TextSpan( text: TranslationBase.of(context).age! + " : ", style: TextStyle( fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), )), new TextSpan( text: "${AppDateUtils.getAgeByBirthday(patientProfileAppBarModel.patient!.patientDetails != null ? patientProfileAppBarModel.patient!.patientDetails!.dateofBirth ?? "" : patientProfileAppBarModel.patient!.dateofBirth ?? "", context, isServerFormat: !patientProfileAppBarModel.isFromLiveCare!)}", style: TextStyle( fontWeight: FontWeight.w700, fontSize: 12, color: Color(0xFF2E303A), )), ], ), ), ), if (patientProfileAppBarModel.patient!.appointmentDate != null && patientProfileAppBarModel.patient!.appointmentDate!.isNotEmpty && !isFromLabResult) Row( mainAxisAlignment: MainAxisAlignment.start, children: [ AppText( TranslationBase.of(context).appointmentDate! + " : ", fontSize: 10, color: Color(0xFF575757), fontWeight: FontWeight.w600, fontFamily: 'Poppins', ), SizedBox( width: 3.5, ), AppText( AppDateUtils.getDayMonthYearDateFormatted( AppDateUtils.convertStringToDate(patientProfileAppBarModel.patient!.appointmentDate!)), fontWeight: FontWeight.w700, fontSize: 12, color: Color(0xFF2E303A), ), SizedBox( height: 0.5, ) ], ), if (patientProfileAppBarModel.isFromLabResult!) Container( child: RichText( text: new TextSpan( style: new TextStyle( fontSize: 1.6 * SizeConfig.textMultiplier, color: Colors.black, fontFamily: 'Poppins', ), children: [ new TextSpan( text: "Result Date: ", style: TextStyle( fontSize: 10, color: Color(0xFF575757), fontWeight: FontWeight.w600, fontFamily: 'Poppins', )), new TextSpan( text: '${AppDateUtils.getDayMonthYearDateFormatted(patientProfileAppBarModel.appointmentDate!, isArabic: projectViewModel.isArabic)}', style: TextStyle(fontWeight: FontWeight.w700, fontSize: 12)), ], ), ), ), // if(isInpatient) Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (patientProfileAppBarModel.patient!.admissionDate != null && patientProfileAppBarModel.patient!.admissionDate!.isNotEmpty) Container( child: RichText( text: new TextSpan( style: new TextStyle( fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), fontFamily: 'Poppins', ), children: [ new TextSpan( text: patientProfileAppBarModel.patient!.admissionDate == null ? "" : TranslationBase.of(context).admissionDate! + " : ", style: TextStyle(fontSize: 10)), new TextSpan( text: patientProfileAppBarModel.patient!.admissionDate == null ? "" : "${AppDateUtils.getDayMonthYearDateFormatted((AppDateUtils.getDateTimeFromServerFormat(patientProfileAppBarModel.patient!.admissionDate.toString())))}", style: TextStyle( fontWeight: FontWeight.w700, fontSize: 12, color: Color(0xFF2E303A), )), ]))), if (patientProfileAppBarModel.patient!.admissionDate != null) Row( children: [ AppText("${TranslationBase.of(context).numOfDays}: ", fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757)), if (patientProfileAppBarModel.isDischargedPatient! && patientProfileAppBarModel.patient!.dischargeDate != null) AppText( "${AppDateUtils.getDateTimeFromServerFormat(patientProfileAppBarModel.patient!.dischargeDate!).difference(AppDateUtils.getDateTimeFromServerFormat(patientProfileAppBarModel.patient!.admissionDate!)).inDays + 1}", fontWeight: FontWeight.w700, fontSize: 12, color: Color(0xFF2E303A), ) else AppText( "${DateTime.now().difference(AppDateUtils.getDateTimeFromServerFormat(patientProfileAppBarModel.patient!.admissionDate!)).inDays + 1}", fontWeight: FontWeight.w700, fontSize: 12, color: Color(0xFF2E303A), ), ], ), ], ), ], ), ), ]), 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}${patientProfileAppBarModel.doctorName}', color: Color(0xFF2E303A), fontWeight: FontWeight.w700, fontSize: 12, ), if (patientProfileAppBarModel.orderNo != null && !patientProfileAppBarModel.isPrescriptions!) Row( children: [ AppText( 'Order No: ', fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), ), AppText(patientProfileAppBarModel.orderNo ?? '', fontSize: 12) ], ), if (patientProfileAppBarModel.invoiceNO != null && !patientProfileAppBarModel.isPrescriptions!) Row( children: [ AppText( 'Invoice: ', fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), ), AppText(patientProfileAppBarModel.invoiceNO ?? "", fontSize: 12) ], ), if (patientProfileAppBarModel.branch != null) Row( children: [ AppText( 'Branch: ', fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), ), AppText(patientProfileAppBarModel.branch ?? '', fontSize: 12) ], ), if (patientProfileAppBarModel.clinic != null) Row( children: [ AppText( 'Clinic: ', fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), ), AppText(patientProfileAppBarModel.clinic ?? '', fontSize: 12) ], ), if (patientProfileAppBarModel.isMedicalFile! && patientProfileAppBarModel.episode != null) Row( children: [ AppText( 'Episode: ', fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), ), AppText(patientProfileAppBarModel.episode ?? '', fontSize: 12) ], ), if (patientProfileAppBarModel.isMedicalFile! && patientProfileAppBarModel.visitDate != null) Row( children: [ AppText( 'Visit Date: ', fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), ), AppText(patientProfileAppBarModel.visitDate ?? '', fontSize: 12) ], ), if (!patientProfileAppBarModel.isMedicalFile!) Row( children: [ AppText( !patientProfileAppBarModel.isPrescriptions! ? 'Result Date:' : 'Prescriptions Date ', fontSize: 10, fontWeight: FontWeight.w600, color: Color(0xFF575757), ), AppText( '${AppDateUtils.getDayMonthYearDateFormatted(patientProfileAppBarModel.appointmentDate!, isArabic: projectViewModel.isArabic)}', fontSize: 12, ) ], ) ]), ), ), ], ), ), ), ], ) ], ), ), ); } @override Size get preferredSize => Size( double.maxFinite, patientProfileAppBarModel.height == 0 ? patientProfileAppBarModel.isAppointmentHeader! ? 270 : ((patientProfileAppBarModel.patient!.appointmentDate!.isNotEmpty) ? patientProfileAppBarModel.isFromLabResult! ? 170 : 150 : patientProfileAppBarModel.patient!.admissionDate != null ? patientProfileAppBarModel.isFromLabResult! ? 170 : 170 : patientProfileAppBarModel.isDischargedPatient! ? 240 : 130) : patientProfileAppBarModel.height!); }