You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			446 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			446 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Dart
		
	
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/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 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.height = 0.0,
 | 
						|
      this.isInpatient = false,
 | 
						|
      this.isDischargedPatient = false,
 | 
						|
      this.isFromLiveCare = false,
 | 
						|
      this.doctorName,
 | 
						|
      this.branch,
 | 
						|
      this.appointmentDate,
 | 
						|
      this.profileUrl,
 | 
						|
      this.invoiceNO,
 | 
						|
      this.orderNo,
 | 
						|
      this.isPrescriptions = false,
 | 
						|
      this.clinic,
 | 
						|
      this.isMedicalFile = false,
 | 
						|
      this.episode,
 | 
						|
      this.visitDate,
 | 
						|
      this.isAppointmentHeader = false,
 | 
						|
      this.isFromLabResult = false,
 | 
						|
      this.onPressed});
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    ProjectViewModel projectViewModel = Provider.of(context);
 | 
						|
 | 
						|
    int gender = 1;
 | 
						|
    if (patient.patientDetails != null) {
 | 
						|
      gender = patient.patientDetails.gender;
 | 
						|
    } else {
 | 
						|
      gender = patient.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(
 | 
						|
                    patient.firstName != null
 | 
						|
                        ? (Helpers.capitalize(patient.firstName) +
 | 
						|
                            " " +
 | 
						|
                            Helpers.capitalize(patient.lastName))
 | 
						|
                        : Helpers.capitalize(patient.fullName ??
 | 
						|
                            patient.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://" + patient.mobileNumber);
 | 
						|
                    },
 | 
						|
                    child: Icon(
 | 
						|
                      Icons.phone,
 | 
						|
                      color: Colors.black87,
 | 
						|
                    ),
 | 
						|
                  ),
 | 
						|
                ),
 | 
						|
              ]),
 | 
						|
            ),
 | 
						|
            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: [
 | 
						|
                    patient.patientStatusType != null
 | 
						|
                        ? Container(
 | 
						|
                            child: Row(
 | 
						|
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | 
						|
                            children: [
 | 
						|
                              patient.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,
 | 
						|
                                    ),
 | 
						|
                              patient.startTime != null
 | 
						|
                                  ? AppText(patient.startTime != null ? patient.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(
 | 
						|
                              patient.patientId.toString(),
 | 
						|
                              fontSize:
 | 
						|
                                  SizeConfig.getTextMultiplierBasedOnWidth() *
 | 
						|
                                      3.5,
 | 
						|
                              color: Color(0xFF2E303A),
 | 
						|
                              fontWeight: FontWeight.w700,
 | 
						|
                              isCopyable: true,
 | 
						|
                            ),
 | 
						|
                          ],
 | 
						|
                        ),
 | 
						|
                        Row(
 | 
						|
                          children: [
 | 
						|
                            AppText(
 | 
						|
                              patient.nationalityName ??
 | 
						|
                                  patient.nationality ??
 | 
						|
                                  patient.nationalityId ??
 | 
						|
                                  '',
 | 
						|
                              fontWeight: FontWeight.bold,
 | 
						|
                              fontSize:
 | 
						|
                                  SizeConfig.getTextMultiplierBasedOnWidth() *
 | 
						|
                                      3.5,
 | 
						|
                            ),
 | 
						|
                            patient.nationalityFlagURL != null
 | 
						|
                                ? ClipRRect(
 | 
						|
                                    borderRadius: BorderRadius.circular(20.0),
 | 
						|
                                    child: Image.network(
 | 
						|
                                      patient.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(patient.patientDetails != null ? patient.patientDetails.dateofBirth ?? "" : patient.dateofBirth ?? "", context, isServerFormat: !isFromLiveCare)}",
 | 
						|
                    ),
 | 
						|
 | 
						|
                    if (patient.appointmentDate != null &&
 | 
						|
                        patient.appointmentDate.isNotEmpty &&
 | 
						|
                        !isFromLabResult)
 | 
						|
                      HeaderRow(
 | 
						|
                        label:
 | 
						|
                            TranslationBase.of(context).appointmentDate + " : ",
 | 
						|
                        value: AppDateUtils.getDayMonthYearDateFormatted(
 | 
						|
                            AppDateUtils.convertStringToDate(
 | 
						|
                                patient.appointmentDate)),
 | 
						|
                      ),
 | 
						|
                    if (isFromLabResult)
 | 
						|
                      HeaderRow(
 | 
						|
                        label: "Result Date: ",
 | 
						|
                        value:
 | 
						|
                            '${AppDateUtils.getDayMonthYearDateFormatted(appointmentDate, isArabic: projectViewModel.isArabic)}',
 | 
						|
                      ),
 | 
						|
                    // if(isInpatient)
 | 
						|
                    Column(
 | 
						|
                      crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                      children: [
 | 
						|
                        if (patient.admissionDate != null &&
 | 
						|
                            patient.admissionDate.isNotEmpty)
 | 
						|
                          HeaderRow(
 | 
						|
                            label: patient.admissionDate == null
 | 
						|
                                ? ""
 | 
						|
                                : TranslationBase.of(context).admissionDate +
 | 
						|
                                    " : ",
 | 
						|
                            value: patient.admissionDate == null
 | 
						|
                                ? ""
 | 
						|
                                : "${AppDateUtils.getDayMonthYearDateFormatted((AppDateUtils.getDateTimeFromServerFormat(patient.admissionDate.toString())))}",
 | 
						|
                          ),
 | 
						|
                        if (patient.admissionDate != null)
 | 
						|
                          HeaderRow(
 | 
						|
                            label: "${TranslationBase.of(context).numOfDays}: ",
 | 
						|
                            value: isDischargedPatient &&
 | 
						|
                                    patient.dischargeDate != null
 | 
						|
                                ? "${AppDateUtils.getDateTimeFromServerFormat(patient.dischargeDate).difference(AppDateUtils.getDateTimeFromServerFormat(patient.admissionDate)).inDays + 1}"
 | 
						|
                                : "${DateTime.now().difference(AppDateUtils.getDateTimeFromServerFormat(patient.admissionDate)).inDays + 1}",
 | 
						|
                          )
 | 
						|
                      ],
 | 
						|
                    ),
 | 
						|
                  ],
 | 
						|
                ),
 | 
						|
              ),
 | 
						|
            ]),
 | 
						|
            if (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: <Widget>[
 | 
						|
                          Container(
 | 
						|
                            child: LargeAvatar(
 | 
						|
                              name: doctorName ?? "",
 | 
						|
                              url: 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: <Widget>[
 | 
						|
                                    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);
 | 
						|
}
 | 
						|
 | 
						|
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,
 | 
						|
        ),
 | 
						|
      ],
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |