diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 434921a6..46af5dea 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -551,7 +551,7 @@ const Map> localizedValues = { "sendSuc": {"en": "A copy has been sent to the email", "ar": "تم إرسال نسخة إلى البريد الإلكتروني"}, "SpecialResult": {"en": "Special Result", "ar": "نتيجة خاصة"}, "noDataAvailable": {"en": "No data available", "ar": " لا يوجد بيانات متاحة "}, - "show-more-btn": {"en": "Flow Chart", "ar": "النتائج التراكمية"}, + "show-more-btn": {"en": "Flowchart", "ar": "النتائج التراكمية"}, "open-rad": {"en": "Open Radiology Image", "ar": "فتح صور الاشعة"}, "fileNumber": {"en": "File Number: ", "ar": "رقم الملف : "}, "searchPatient-name": {"en": "Search Name, Medical File, Phone Number", "ar": "اسم البحث ، الملف الطبي ، رقم الهاتف"}, diff --git a/lib/screens/patients/In_patient/list_of_all_in_patient.dart b/lib/screens/patients/In_patient/list_of_all_in_patient.dart index 169e9da6..06634819 100644 --- a/lib/screens/patients/In_patient/list_of_all_in_patient.dart +++ b/lib/screens/patients/In_patient/list_of_all_in_patient.dart @@ -32,6 +32,7 @@ class ListOfAllInPatient extends StatelessWidget { patientSearchViewModel.filteredInPatientItems.length, scrollDirection: Axis.vertical, shrinkWrap: true, + physics: const AlwaysScrollableScrollPhysics (), itemBuilder: (context, index) { return PatientCard( patientInfo: patientSearchViewModel diff --git a/lib/screens/patients/profile/lab_result/LabResultWidget.dart b/lib/screens/patients/profile/lab_result/LabResultWidget.dart index 153dfc6e..5b8a3ea9 100644 --- a/lib/screens/patients/profile/lab_result/LabResultWidget.dart +++ b/lib/screens/patients/profile/lab_result/LabResultWidget.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/model/labs/lab_result.dart'; import 'package:doctor_app_flutter/core/model/labs/patient_lab_orders.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; @@ -44,7 +45,11 @@ class LabResultWidget extends StatelessWidget { children: [ Row( children: [ - AppText(filterName), + AppText( + filterName, + fontSize: SizeConfig.textMultiplier * 2.0, + fontWeight: FontWeight.w700, + ), ], ), // InkWell( @@ -69,6 +74,9 @@ class LabResultWidget extends StatelessWidget { // ), ], ), + SizedBox( + height: 8, + ), Row( children: [ Expanded( @@ -77,7 +85,8 @@ class LabResultWidget extends StatelessWidget { child: AppText( TranslationBase.of(context).description, color: Colors.black, - bold: true, + fontSize: SizeConfig.textMultiplier * 2.0, + fontWeight: FontWeight.w700, ), ), ), @@ -88,7 +97,8 @@ class LabResultWidget extends StatelessWidget { child: AppText( TranslationBase.of(context).value, color: Colors.black, - bold: true, + fontSize: SizeConfig.textMultiplier * 2.0, + fontWeight: FontWeight.w700, ), ), ), @@ -98,16 +108,19 @@ class LabResultWidget extends StatelessWidget { child: Center( child: AppText( TranslationBase.of(context).range, - color: Colors.black, - bold: true, + fontSize: SizeConfig.textMultiplier * 2.0, + fontWeight: FontWeight.w700, ), ), ), + ), + Expanded( + child: Container(), ) ], ), SizedBox( - height: 7, + height: 4, ), Divider( color: Colors.black, @@ -117,107 +130,132 @@ class LabResultWidget extends StatelessWidget { height: 12, ), ...List.generate( - patientLabResultList.length, - (index) => Column( - crossAxisAlignment: CrossAxisAlignment.start, + patientLabResultList.length, + (index) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + decoration: BoxDecoration( + shape: BoxShape.rectangle, + color: Color(0XFFF2F2F2), + borderRadius: BorderRadius.all( + Radius.circular(8.0), + ), + ), + child: Row( children: [ - Row( - children: [ - Expanded( - child: Container( - padding: EdgeInsets.all(10), - color: Colors.white, - child: Center( - child: AppText( - '${patientLabResultList[index].testCode}\n' + - patientLabResultList[index].description, - textAlign: TextAlign.center, - isCopyable: true, - ), - ), + Expanded( + child: Container( + padding: EdgeInsets.all(10), + child: Center( + child: AppText( + /*'${patientLabResultList[index].testCode}\n' +*/ + patientLabResultList[index].description, + textAlign: TextAlign.center, + fontSize: SizeConfig.textMultiplier * 1.8, + isCopyable: true, ), ), - Expanded( - child: Container( - padding: EdgeInsets.all(10), - color: Colors.white, - child: Center( - child: AppText( - patientLabResultList[index].resultValue ?? - "" + - " " + - "${patientLabResultList[index].uOM ?? ""}", - textAlign: TextAlign.center, - isCopyable: true, + ), + ), + Expanded( + child: Row( + children: [ + Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.red.shade700, + // borderRadius: BorderRadius.all( + // Radius.circular(25.0), + // ), + ), + child: Icon( + Icons.arrow_circle_up_sharp, + ), + ), + Expanded( + child: Container( + padding: EdgeInsets.all(10), + child: Center( + child: AppText( + patientLabResultList[index].resultValue ?? + "" + + " " + + "${patientLabResultList[index].uOM ?? ""}", + textAlign: TextAlign.center, + isCopyable: true, + fontSize: SizeConfig.textMultiplier * 1.8, + ), ), ), ), + ], + ), + ), + Expanded( + child: Container( + padding: EdgeInsets.all(10), + // color: Colors.white, + child: Center( + child: AppText( + patientLabResultList[index].referanceRange, + textAlign: TextAlign.center, + fontSize: SizeConfig.textMultiplier * 1.8, + isCopyable: true, + ), ), - Expanded( - child: Column( - children: [ - Container( - padding: EdgeInsets.all(10), - color: Colors.white, - child: Center( - child: AppText( - patientLabResultList[index].referanceRange, - textAlign: TextAlign.center, - isCopyable: true, - ), + ), + ), + Expanded( + child: Container( + child: InkWell( + onTap: () { + Navigator.push( + context, + FadePage( + page: FlowChartPage( + filterName: + patientLabResultList[index].description, + patientLabOrder: patientLabOrder, + patient: patient, + isInpatient: isInpatient, ), + // page: LabResultHistoryPage( + // filterName: patientLabResultList[index].description, + // patientLabOrder: patientLabOrder, + // patient: patient, + // ), ), - SizedBox( - height: 12, + ); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + AppText( + TranslationBase.of(context).showMoreBtn, + textDecoration: TextDecoration.underline, + color: Colors.red.shade700, + fontSize: SizeConfig.textMultiplier * 1.8, + fontWeight: FontWeight.w700, ), - InkWell( - onTap: () { - Navigator.push( - context, - FadePage( - page: FlowChartPage( - filterName: - patientLabResultList[index].description, - patientLabOrder: patientLabOrder, - patient: patient, - isInpatient: isInpatient, - ), - // page: LabResultHistoryPage( - // filterName: patientLabResultList[index].description, - // patientLabOrder: patientLabOrder, - // patient: patient, - // ), - ), - ); - }, - // child: AppText( - // " (show details)", - // color: Colors.blue, - // fontSize: 12, - // ), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - AppText( - TranslationBase.of(context).showMoreBtn, - textDecoration: TextDecoration.underline, - color: Colors.blue, - fontSize: 12, - ), - ], - ), - ) ], ), ), - ], + ), ), - // SizedBox( - // height: 12, - // ), - Divider(), ], - )) + ), + ), + SizedBox( + height: 4, + ), + ], + ), + ), + SizedBox( + height: 6, + ), + Divider(), // Table( // border: TableBorder.symmetric( // inside: BorderSide(width: 2.0, color: Colors.grey[300],style: BorderStyle.solid), diff --git a/lib/screens/patients/profile/lab_result/laboratory_result_widget.dart b/lib/screens/patients/profile/lab_result/laboratory_result_widget.dart index ff6752ff..97ab6cc5 100644 --- a/lib/screens/patients/profile/lab_result/laboratory_result_widget.dart +++ b/lib/screens/patients/profile/lab_result/laboratory_result_widget.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/model/labs/patient_lab_orders.dart'; import 'package:doctor_app_flutter/core/viewModel/labs_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; @@ -84,17 +85,18 @@ class _LaboratoryResultWidgetState extends State { color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(5.0), - )), + ),), child: Row( children: [ Expanded( child: Container( margin: EdgeInsets.only( - left: 10, right: 10), + left: 0, right: 0), child: AppText( TranslationBase.of(context) .generalResult, - bold: true, + fontSize: SizeConfig.textMultiplier * 2.3, + bold: false, ))), Container( width: 25, @@ -141,7 +143,7 @@ class _LaboratoryResultWidgetState extends State { patient: widget.patient, isInpatient: widget.isInpatient, ), - ) + ), ], ), ), @@ -149,7 +151,7 @@ class _LaboratoryResultWidgetState extends State { ], ), ) - else + else if (widget.details == null) Container( child: ErrorMessage( error: TranslationBase.of(context).noDataAvailable, diff --git a/lib/util/extenstions.dart b/lib/util/extenstions.dart index 26e49670..da353ad0 100644 --- a/lib/util/extenstions.dart +++ b/lib/util/extenstions.dart @@ -6,3 +6,17 @@ extension Extension on Object { bool isNullEmptyZeroOrFalse() => this == null || this == '' || !this || this == 0; } + +/// truncate the [String] without cutting words. The length is calculated with the suffix. +extension Truncate on String { + String truncate(int max, {String suffix = ''}) { + try { + return length <= max + ? this + : '${substring(0, max - suffix.length)}$suffix'; + } catch (e){ + return this; + } + } +} + diff --git a/lib/widgets/patients/patient_card/PatientCard.dart b/lib/widgets/patients/patient_card/PatientCard.dart index ef69903b..ea3a0940 100644 --- a/lib/widgets/patients/patient_card/PatientCard.dart +++ b/lib/widgets/patients/patient_card/PatientCard.dart @@ -10,6 +10,7 @@ import 'package:doctor_app_flutter/widgets/shared/user-guid/CusomRow.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import '../../../util/extenstions.dart'; import 'ShowTimer.dart'; @@ -37,6 +38,15 @@ class PatientCard extends StatelessWidget { @override Widget build(BuildContext context) { + String nationalityName = patientInfo.nationalityName != null + ? patientInfo.nationalityName.trim() + : patientInfo.nationality != null + ? patientInfo.nationality.trim() + : patientInfo.nationalityId != + null + ? patientInfo.nationalityId + : ""; + return Container( width: SizeConfig.screenWidth * 0.9, margin: EdgeInsets.all(6), @@ -82,7 +92,8 @@ class PatientCard extends StatelessWidget { ? Row( children: [ AppText( - TranslationBase.of(context).arrivedP, + TranslationBase.of(context) + .arrivedP, color: Colors.green, fontWeight: FontWeight.bold, fontFamily: 'Poppins', @@ -102,8 +113,12 @@ class PatientCard extends StatelessWidget { width: 8, ), AppText( - patientInfo.status == 2 ? 'Confirmed' : 'Booked', - color: patientInfo.status == 2 ? Colors.green : Colors.grey, + patientInfo.status == 2 + ? 'Confirmed' + : 'Booked', + color: patientInfo.status == 2 + ? Colors.green + : Colors.grey, fontWeight: FontWeight.bold, fontFamily: 'Poppins', fontSize: 10, @@ -114,7 +129,8 @@ class PatientCard extends StatelessWidget { ? Row( children: [ AppText( - TranslationBase.of(context).notArrived, + TranslationBase.of(context) + .notArrived, color: Colors.red[800], fontWeight: FontWeight.bold, fontFamily: 'Poppins', @@ -134,19 +150,27 @@ class PatientCard extends StatelessWidget { width: 8, ), AppText( - patientInfo.status == 2 ? 'Confirmed' : 'Booked', - color: patientInfo.status == 2 ? Colors.green : Colors.grey, + patientInfo.status == 2 + ? 'Confirmed' + : 'Booked', + color: patientInfo.status == 2 + ? Colors.green + : Colors.grey, fontWeight: FontWeight.bold, fontFamily: 'Poppins', fontSize: 10, ), ], ) - : !isFromSearch && !isFromLiveCare && patientInfo.patientStatusType == null + : !isFromSearch && + !isFromLiveCare && + patientInfo.patientStatusType == + null ? Row( children: [ AppText( - TranslationBase.of(context).notArrived, + TranslationBase.of(context) + .notArrived, color: Colors.red[800], fontWeight: FontWeight.bold, fontFamily: 'Poppins', @@ -166,8 +190,13 @@ class PatientCard extends StatelessWidget { width: 8, ), AppText( - patientInfo.status == 2 ? 'Booked' : 'Confirmed', - color: patientInfo.status == 2 ? Colors.grey : Colors.green, + patientInfo.status == 2 + ? 'Booked' + : 'Confirmed', + color: + patientInfo.status == 2 + ? Colors.grey + : Colors.green, fontWeight: FontWeight.bold, fontFamily: 'Poppins', fontSize: 12, @@ -177,13 +206,17 @@ class PatientCard extends StatelessWidget { : SizedBox(), this.arrivalType == '1' ? AppText( - patientInfo.startTime != null ? patientInfo.startTime : patientInfo.startTimes, + patientInfo.startTime != null + ? patientInfo.startTime + : patientInfo.startTimes, fontFamily: 'Poppins', fontWeight: FontWeight.w400, ) : patientInfo.arrivedOn != null ? AppText( - AppDateUtils.getDayMonthYearDate(AppDateUtils.convertStringToDate( + AppDateUtils.getDayMonthYearDate( + AppDateUtils + .convertStringToDate( patientInfo.arrivedOn, )) + " " + @@ -192,8 +225,10 @@ class PatientCard extends StatelessWidget { fontWeight: FontWeight.w400, fontSize: 15, ) - : (patientInfo.appointmentDate != null && - patientInfo.appointmentDate.isNotEmpty) + : (patientInfo.appointmentDate != + null && + patientInfo + .appointmentDate.isNotEmpty) ? AppText( "${AppDateUtils.getDayMonthYearDate(AppDateUtils.convertStringToDate( patientInfo.appointmentDate, @@ -224,71 +259,89 @@ class PatientCard extends StatelessWidget { Padding( padding: EdgeInsets.only(left: 12.0), child: Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( - child: Row(children: [ - Expanded( - // width: MediaQuery.of(context).size.width*0.51, - child: AppText( - isFromLiveCare - ? Helpers.capitalize(patientInfo.fullName) - : (Helpers.capitalize(patientInfo.firstName) + - " " + - Helpers.capitalize(patientInfo.lastName)), - fontSize: 16, - color: Color(0xff2e303a), - fontWeight: FontWeight.w700, - fontFamily: 'Poppins', - textOverflow: TextOverflow.ellipsis, - ), - ), - if (patientInfo.gender == 1) - Icon( - DoctorApp.male_2, - color: Colors.blue, - ) - else - Icon( - DoctorApp.female_1, - color: Colors.pink, - ), - if (isFromLiveCare) - ShowTimer( - patientInfo: patientInfo, - ), - ]), + flex: 2, + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Expanded( + // width: MediaQuery.of(context).size.width*0.51, + child: AppText( + isFromLiveCare + ? Helpers.capitalize( + patientInfo.fullName) + : (Helpers.capitalize( + patientInfo.firstName) + + " " + + Helpers.capitalize( + patientInfo.lastName)), + fontSize: 16, + color: Color(0xff2e303a), + fontWeight: FontWeight.w700, + fontFamily: 'Poppins', + textOverflow: TextOverflow.ellipsis, + ), + ), + if (patientInfo.gender == 1) + Icon( + DoctorApp.male_2, + color: Colors.blue, + ) + else + Icon( + DoctorApp.female_1, + color: Colors.pink, + ), + if (isFromLiveCare) + ShowTimer( + patientInfo: patientInfo, + ), + ]), ), - Row( - children: [ - AppText( - patientInfo.nationalityName != null - ? patientInfo.nationalityName.trim() - : patientInfo.nationality != null - ? patientInfo.nationality.trim() - : patientInfo.nationalityId != null - ? patientInfo.nationalityId - : "", - fontWeight: FontWeight.bold, - fontSize: 14, - textOverflow: TextOverflow.ellipsis, - ), - patientInfo.nationality != null || patientInfo.nationalityId != null - ? ClipRRect( - borderRadius: BorderRadius.circular(20.0), - child: CachedNetworkImage( - imageUrl: patientInfo.nationalityFlagURL != null - ? patientInfo.nationalityFlagURL - : '', - height: 25, - width: 30, - errorWidget: (context, url, error) => AppText( - 'No Image', - fontSize: 10, - ), - )) - : SizedBox() - ], + Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Container( + alignment: Alignment.centerRight, + child: AppText( + nationalityName.truncate(14), + fontWeight: FontWeight.bold, + fontSize: 14, + textOverflow: TextOverflow.ellipsis, + ), + ), + ), + patientInfo.nationality != null || + patientInfo.nationalityId != null + ? ClipRRect( + borderRadius: + BorderRadius.circular(20.0), + child: CachedNetworkImage( + imageUrl: patientInfo + .nationalityFlagURL != + null + ? patientInfo.nationalityFlagURL + : '', + height: 25, + width: 30, + errorWidget: + (context, url, error) => + AppText( + 'No Image', + fontSize: 10, + ), + )) + : SizedBox() + ], + ), ) ], )), @@ -332,12 +385,13 @@ class PatientCard extends StatelessWidget { value: "${AppDateUtils.getAgeByBirthday(patientInfo.dateofBirth, context, isServerFormat: !isFromLiveCare)}", ), - if (isInpatient) - CustomRow( - label: patientInfo.admissionDate == null - ? "" - : TranslationBase.of(context).admissionDate + " : ", - + if (isInpatient) + CustomRow( + label: patientInfo.admissionDate == null + ? "" + : TranslationBase.of(context) + .admissionDate + + " : ", value: patientInfo.admissionDate == null ? "" : "${AppDateUtils.convertDateFromServerFormat(patientInfo.admissionDate.toString(), 'yyyy-MM-dd')}", @@ -352,9 +406,9 @@ class PatientCard extends StatelessWidget { ), if (patientInfo.admissionDate != null) CustomRow( - label: - TranslationBase.of(context).clinicName + - " : ", + label: TranslationBase.of(context) + .clinicName + + " : ", value: "${patientInfo.clinicDescription}", ), if (patientInfo.admissionDate != null) @@ -399,29 +453,36 @@ class PatientCard extends StatelessWidget { ], ) : !isInpatient && !isFromSearch - ? Row(mainAxisAlignment: MainAxisAlignment.end, children: [ - Container( - padding: EdgeInsets.all(4), - child: Image.asset( - patientInfo.appointmentType == 'Regular' && patientInfo.visitTypeId == 100 - ? 'assets/images/livecare.png' - : patientInfo.appointmentType == 'Walkin' - ? 'assets/images/walkin.png' - : 'assets/images/booked.png', - height: 25, - width: 35, - )), - ]) - : (isInpatient == true) - ? Row(mainAxisAlignment: MainAxisAlignment.end, children: [ + ? Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ Container( padding: EdgeInsets.all(4), child: Image.asset( - 'assets/images/inpatient.png', + patientInfo.appointmentType == + 'Regular' && + patientInfo.visitTypeId == 100 + ? 'assets/images/livecare.png' + : patientInfo.appointmentType == + 'Walkin' + ? 'assets/images/walkin.png' + : 'assets/images/booked.png', height: 25, width: 35, )), ]) + : (isInpatient == true) + ? Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Container( + padding: EdgeInsets.all(4), + child: Image.asset( + 'assets/images/inpatient.png', + height: 25, + width: 35, + )), + ]) : SizedBox() ], ), diff --git a/lib/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart b/lib/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart index 7940fd61..f0678e22 100644 --- a/lib/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart +++ b/lib/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart @@ -53,7 +53,7 @@ class PatientProfileHeaderNewDesignAppBar extends StatelessWidget ), height: height == 0 ? isInpatient - ? 215 + ? 220 : 200 : height, child: Container( @@ -245,37 +245,46 @@ class PatientProfileHeaderNewDesignAppBar extends StatelessWidget ), ), Row( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ HeaderRow( label: TranslationBase.of(context).fileNumber, value: patient.patientId.toString(), ), - Row( - children: [ - AppText( - patient.nationalityName ?? - patient.nationality ?? - patient.nationalityId ?? - '', - fontWeight: FontWeight.bold, - fontSize: 12, - ), - 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() - ], + Expanded( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Container( + alignment: Alignment.centerRight, + child: AppText( + patient.nationalityName ?? + patient.nationality ?? + patient.nationalityId ?? + '', + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ), + 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(''); + }, + )) + : SizedBox() + ], + ), ) ], ),