From 13c879654b353f377ee75dda50a495f9c149c0e6 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 10:35:23 +0200 Subject: [PATCH 01/23] DA-250: fix age --- lib/screens/patients/patients_screen.dart | 6 +++--- lib/util/date-utils.dart | 18 +++++++++++++++++ .../profile/patient_profile_widget.dart | 20 ++----------------- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/lib/screens/patients/patients_screen.dart b/lib/screens/patients/patients_screen.dart index 4fcabf07..1a55153e 100644 --- a/lib/screens/patients/patients_screen.dart +++ b/lib/screens/patients/patients_screen.dart @@ -17,6 +17,7 @@ import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/models/patient/topten_users_res_model.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; @@ -615,9 +616,8 @@ class _PatientsScreenState extends State { .white, ), AppText( - item - .age - .toString(), + " ${DateUtils.getAgeByBirthday(item.dateofBirth)}", + fontSize: 1.8 * SizeConfig .textMultiplier, diff --git a/lib/util/date-utils.dart b/lib/util/date-utils.dart index c414cd51..bfa406c6 100644 --- a/lib/util/date-utils.dart +++ b/lib/util/date-utils.dart @@ -216,5 +216,23 @@ class DateUtils { return 12; } } + + static String getAgeByBirthday(dynamic birthday){ + // https://leechy.dev/calculate-dates-diff-in-dart + DateTime birthDate = DateUtils.getDateTimeFromServerFormat(birthday); + final now = DateTime.now(); + int years = now.year - birthDate .year; + int months = now.month - birthDate.month; + int days = now.day - birthDate.day; + if (months < 0 || (months == 0 && days < 0)) { + years--; + months += (days < 0 ? 11 : 12); + } + if (days < 0) { + final monthAgo = new DateTime(now.year, now.month - 1, birthDate.day); + days = now.difference(monthAgo).inDays + 1; + } + return "$years Yr $months Mnth $days Day"; + } } diff --git a/lib/widgets/patients/profile/patient_profile_widget.dart b/lib/widgets/patients/profile/patient_profile_widget.dart index 225decf4..b8fcf89c 100644 --- a/lib/widgets/patients/profile/patient_profile_widget.dart +++ b/lib/widgets/patients/profile/patient_profile_widget.dart @@ -18,23 +18,7 @@ import './profile_medical_info_widget.dart'; class PatientProfileWidget extends StatelessWidget { PatiantInformtion patient; - String getPatientAge(dynamic birthday){ - // https://leechy.dev/calculate-dates-diff-in-dart - DateTime birthDate = DateUtils.getDateTimeFromServerFormat(birthday); - final now = DateTime.now(); - int years = now.year - birthDate .year; - int months = now.month - birthDate.month; - int days = now.day - birthDate.day; - if (months < 0 || (months == 0 && days < 0)) { - years--; - months += (days < 0 ? 11 : 12); - } - if (days < 0) { - final monthAgo = new DateTime(now.year, now.month - 1, birthDate.day); - days = now.difference(monthAgo).inDays + 1; - } - return "$years Yr $months Mnth $days Day"; - } + @override Widget build(BuildContext context) { @@ -133,7 +117,7 @@ class PatientProfileWidget extends StatelessWidget { height: 4, ), AppText( - "${DateUtils.convertDateFromServerFormat(patient.dateofBirth, 'dd-MM-yyyy')} / ${getPatientAge(patient.dateofBirth)/*patient.age*/}", + "${DateUtils.convertDateFromServerFormat(patient.dateofBirth, 'dd-MM-yyyy')} / ${DateUtils.getAgeByBirthday(patient.dateofBirth)/*patient.age*/}", fontWeight: FontWeight.normal, fontSize: 1.6 * SizeConfig.textMultiplier, ), From b9eaee188727fe31a69e15e8d429fa73d6080683 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 10:46:14 +0200 Subject: [PATCH 02/23] fix design --- .../profile/patient_orders_screen.dart | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/screens/patients/profile/patient_orders_screen.dart b/lib/screens/patients/profile/patient_orders_screen.dart index 09834d50..d193b6ef 100644 --- a/lib/screens/patients/profile/patient_orders_screen.dart +++ b/lib/screens/patients/profile/patient_orders_screen.dart @@ -128,18 +128,24 @@ class _PatientsOrdersState extends State { ), ), children: [ - Divider( - color: Colors.black, - height: 20, - thickness: 1, - indent: 0, - endIndent: 0, - ), - AppText( - notesList[index]["Notes"], - margin: 5, - ) - ], + Divider( + color: Colors.black, + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + AppText( + notesList[index]["Notes"], + margin: 5, + ), + ], + ) + ], ), ], )); From 905818b5322c51c0fd2af2dfc7f7bfa37479c199 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 12:44:06 +0200 Subject: [PATCH 03/23] add admission no to orders --- lib/screens/patients/profile/patient_orders_screen.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/screens/patients/profile/patient_orders_screen.dart b/lib/screens/patients/profile/patient_orders_screen.dart index d193b6ef..a7182546 100644 --- a/lib/screens/patients/profile/patient_orders_screen.dart +++ b/lib/screens/patients/profile/patient_orders_screen.dart @@ -117,6 +117,12 @@ class _PatientsOrdersState extends State { marginBottom: 5, fontWeight: FontWeight.bold, ), + AppText( + notesList[index] + ["AdmissionNo"], + marginLeft: 10, + color: Colors.grey[600], + ), AppText( convertDateFormat( notesList[index] From 913ffc30523db97ca18c3c87630113025b976231 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 15:44:22 +0200 Subject: [PATCH 04/23] Fix DA-260,DA-267 --- ios/Runner/GoogleService-Info.plist | 36 +++++++++++++++++++ lib/config/localized_values.dart | 2 +- .../soap_update/update_assessment_page.dart | 6 ++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 ios/Runner/GoogleService-Info.plist diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..0c093a2a --- /dev/null +++ b/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,36 @@ + + + + + CLIENT_ID + 864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r + API_KEY + AIzaSyA_6ayGCk4fly7o7eTVBrj9kuHBYHMAOfs + GCM_SENDER_ID + 864393916058 + PLIST_VERSION + 1 + BUNDLE_ID + com.cloud.diplomaticquarterapp + PROJECT_ID + diplomaticquarter-d2385 + STORAGE_BUCKET + diplomaticquarter-d2385.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:864393916058:ios:13f787bbfe6051f8b97923 + DATABASE_URL + https://diplomaticquarter-d2385.firebaseio.com + + \ No newline at end of file diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index ad82f0eb..1a62467c 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -215,7 +215,7 @@ const Map> localizedValues = { 'en': 'Please fill all fields..!', 'ar': 'الرجاء ملأ جميع الحقول..!' }, - 'replay2': {'en': 'Replay', 'ar': 'رد الطبيب'}, + 'replay2': {'en': 'Reply', 'ar': 'رد الطبيب'}, 'logout': {'en': 'Logout', 'ar': 'تسجيل خروج'}, 'pharmaciesList': {'en': 'Pharmacies List', 'ar': 'قائمة الصيدليات'}, 'price': {'en': 'Price', 'ar': 'السعر'}, diff --git a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart index e6e1a908..bafa5af4 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -309,6 +309,12 @@ class _UpdateAssessmentPageState extends State { SizedBox( height: 6, ), + AppText( + TranslationBase.of(context).remarks, + fontWeight: FontWeight + .bold, + fontSize: 16, + ), Container( width: MediaQuery .of(context) From d7c3024baf4a86ed80c9c140dc63356b3ccaa706 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 15:44:55 +0200 Subject: [PATCH 05/23] remove GoogleService-Info.plist --- ios/Runner/GoogleService-Info.plist | 36 ----------------------------- 1 file changed, 36 deletions(-) delete mode 100644 ios/Runner/GoogleService-Info.plist diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist deleted file mode 100644 index 0c093a2a..00000000 --- a/ios/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CLIENT_ID - 864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r - API_KEY - AIzaSyA_6ayGCk4fly7o7eTVBrj9kuHBYHMAOfs - GCM_SENDER_ID - 864393916058 - PLIST_VERSION - 1 - BUNDLE_ID - com.cloud.diplomaticquarterapp - PROJECT_ID - diplomaticquarter-d2385 - STORAGE_BUCKET - diplomaticquarter-d2385.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:864393916058:ios:13f787bbfe6051f8b97923 - DATABASE_URL - https://diplomaticquarter-d2385.firebaseio.com - - \ No newline at end of file From c065dbbdb3b115f7f46850dd3166c09e7762e226 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 16:07:16 +0200 Subject: [PATCH 06/23] Fixed DA:266 --- lib/config/localized_values.dart | 4 ++ lib/util/translations_delegate_base.dart | 2 + .../soap_update/update_assessment_page.dart | 56 +++++++++++++++---- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 1a62467c..a9498b2a 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -666,4 +666,8 @@ const Map> localizedValues = { 'en': "You have to add chief complaint fields correctly .", 'ar': "يجب عليك إضافة حقول شكوى الرئيس بشكل صحيح" }, + 'ICDName': { + 'en': "ICDName", + 'ar': "اسم ال ICD" + }, }; diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 2c3be5b1..c3c40e36 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1036,6 +1036,8 @@ class TranslationBase { String get chiefComplaintErrorMsg => localizedValues['chiefComplaintErrorMsg'][locale.languageCode]; +String get ICDName => + localizedValues['ICDName'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart index bafa5af4..61bf27f3 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -210,7 +210,7 @@ class _UpdateAssessmentPageState extends State { assessment.createdOn !=null?DateTime.parse(assessment.createdOn).day.toString():DateTime.now().day.toString(), fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), AppText( Helpers.getMonth(assessment.createdOn !=null?DateTime.parse(assessment.createdOn).month:DateTime.now().month).toUpperCase(), @@ -225,6 +225,32 @@ class _UpdateAssessmentPageState extends State { crossAxisAlignment: CrossAxisAlignment .start, children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + TranslationBase.of(context).ICDName +" : ", + fontWeight: FontWeight + .bold, + fontSize: 13, + ), + Container( + width: MediaQuery + .of(context) + .size + .width * 0.29, + child: AppText( + assessment + .selectedICD.description + .toString(), + fontSize: 10, + color: Colors.grey, + ), + ), + ], + ), Row( mainAxisAlignment: MainAxisAlignment.start, @@ -233,7 +259,7 @@ class _UpdateAssessmentPageState extends State { TranslationBase.of(context).appointmentNo, fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), AppText( assessment @@ -248,15 +274,21 @@ class _UpdateAssessmentPageState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ + AppText( + TranslationBase.of(context).condition + " : ", + fontWeight: FontWeight + .bold, + fontSize: 13, + ), AppText( projectViewModel.isArabic?assessment .selectedDiagnosisCondition .nameAr : assessment .selectedDiagnosisCondition .nameEn, - fontWeight: FontWeight - .bold, - fontSize: 16, + fontSize: 10, + color: Colors.grey, + ), ], ), @@ -268,7 +300,7 @@ class _UpdateAssessmentPageState extends State { TranslationBase.of(context).dType+' : ', fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), AppText( projectViewModel.isArabic?assessment @@ -290,7 +322,7 @@ class _UpdateAssessmentPageState extends State { TranslationBase.of(context).doc, fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), AppText( assessment.doctorName??'', @@ -310,16 +342,16 @@ class _UpdateAssessmentPageState extends State { height: 6, ), AppText( - TranslationBase.of(context).remarks, + TranslationBase.of(context).remarks + " : ", fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), Container( width: MediaQuery .of(context) .size - .width * 0.5, + .width * 0.38, child: AppText( assessment.remark ?? "", fontSize: 10, @@ -341,7 +373,7 @@ class _UpdateAssessmentPageState extends State { "ICD : ".toUpperCase(), fontWeight: FontWeight .bold, - fontSize: 16, + fontSize: 13, ), Container( child: AppText( @@ -526,7 +558,7 @@ class _AddAssessmentDetailsState extends State { AppText( TranslationBase.of(context).addAssessmentDetails.toUpperCase(), fontWeight: FontWeight.bold, - fontSize: 16, + fontSize: 13, ), SizedBox( height: 16, From fd17fc46082dbbd60d799ef81deb2bfe844931e7 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 26 Jan 2021 16:22:06 +0200 Subject: [PATCH 07/23] enforce user to add date in case referral --- lib/screens/patients/patient_search_screen.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index 726e5050..39f7fe65 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -76,7 +76,9 @@ class _PatientSearchScreenState extends State { if ((_patientSearchFormValues.From == "0" || _patientSearchFormValues.To == "0") && - _selectedType == "7") { + _selectedType == "7" || ((_patientSearchFormValues.From == "0" || + _patientSearchFormValues.To == "0") && + _selectedType == "6") ) { // helpers.showErrorToast("Please Choose The Dates"); } else { setState(() { From ac9fd8c936c1f12a3e9c8298579be0d85fb90eb5 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Tue, 26 Jan 2021 16:53:42 +0200 Subject: [PATCH 08/23] samll fixes for labels and msges --- lib/config/localized_values.dart | 10 ++- .../viewModel/patient-referral-viewmodel.dart | 2 +- .../patient-vital-sign-viewmodel.dart | 37 +++++---- .../referral/my-referral-detail-screen.dart | 16 +++- lib/util/translations_delegate_base.dart | 4 + .../patient-referral-item-widget.dart | 82 +++++++++++++------ 6 files changed, 108 insertions(+), 43 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 602ed1b9..91401655 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -49,7 +49,7 @@ const Map> localizedValues = { 'patientServices': {'en': 'Patient Services', 'ar': 'خدمات المرضى'}, 'searchMedicine': {'en': 'Search Medicine', 'ar': 'بحث عن الدواء'}, 'myReferralPatient': {'en': 'My Referral Patient', 'ar': 'مرضى الاحالة'}, - 'referPatient': {'en': 'Refer Patient', 'ar': 'إحالة مريض'}, + 'referPatient': {'en': 'Referral Patient', 'ar': 'إحالة مريض'}, 'myReferral': {'en': 'My Referral', 'ar': 'إحالة'}, 'myReferredPatient': {'en': 'My Referred Patient', 'ar': 'مرضاي المحالين'}, 'firstName': {'en': 'First Name', 'ar': 'الاسم الاول'}, @@ -666,4 +666,12 @@ const Map> localizedValues = { 'en': "You have to add chief complaint fields correctly .", 'ar': "يجب عليك إضافة حقول شكوى الرئيس بشكل صحيح" }, + 'referralStatus': { + 'en': "Referral Status : ", + 'ar': "حالة الإحالة :" + }, + 'referralRemark': { + 'en': "Referral Remark : ", + 'ar': "ملاحظة الإحالة :" + }, }; diff --git a/lib/core/viewModel/patient-referral-viewmodel.dart b/lib/core/viewModel/patient-referral-viewmodel.dart index a1fc73fb..abe39224 100644 --- a/lib/core/viewModel/patient-referral-viewmodel.dart +++ b/lib/core/viewModel/patient-referral-viewmodel.dart @@ -131,7 +131,7 @@ class PatientReferralViewModel extends BaseViewModel { await _referralPatientService.responseReferral(pendingReferral, isAccepted); if (_referralPatientService.hasError) { error = _referralPatientService.error; - setState(ViewState.Error); + setState(ViewState.ErrorLocal); } else setState(ViewState.Idle); } diff --git a/lib/core/viewModel/patient-vital-sign-viewmodel.dart b/lib/core/viewModel/patient-vital-sign-viewmodel.dart index 4e656d6d..2def78db 100644 --- a/lib/core/viewModel/patient-vital-sign-viewmodel.dart +++ b/lib/core/viewModel/patient-vital-sign-viewmodel.dart @@ -6,6 +6,7 @@ import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-data.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-history.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign/vital_sign_res_model.dart'; +import 'package:doctor_app_flutter/util/date-utils.dart'; import '../../locator.dart'; @@ -13,7 +14,9 @@ class VitalSignsViewModel extends BaseViewModel { VitalSignsService _vitalSignService = locator(); VitalSignData get patientVitalSigns => _vitalSignService.patientVitalSigns; - List get patientVitalSignsHistory => _vitalSignService.patientVitalSignsHistory; + + List get patientVitalSignsHistory => + _vitalSignService.patientVitalSignsHistory; String heightCm = "0"; String weightKg = "0"; @@ -34,8 +37,16 @@ class VitalSignsViewModel extends BaseViewModel { } } - Future getPatientVitalSignHistory(PatiantInformtion patient, String from, String to) async { + Future getPatientVitalSignHistory( + PatiantInformtion patient, String from, String to) async { setState(ViewState.Busy); + if (from == null || from == "0") { + from = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd'); + } + if (to == null || to == "0") { + to = DateUtils.convertDateToFormat(DateTime.now(), 'yyyy-MM-dd'); + } + await _vitalSignService.getPatientVitalSignsHistory(patient, from, to); if (_vitalSignService.hasError) { error = _vitalSignService.error; @@ -48,9 +59,7 @@ class VitalSignsViewModel extends BaseViewModel { if (weightKg == "0" || weightKg == null || weightKg == 'null') { weightKg = element.weightKg.toString(); } - if (bodyMax == "0" || - bodyMax == null || - bodyMax == 'null') { + if (bodyMax == "0" || bodyMax == null || bodyMax == 'null') { bodyMax = element.bodyMassIndex.toString(); } if (temperatureCelcius == "0" || @@ -84,24 +93,24 @@ class VitalSignsViewModel extends BaseViewModel { return "Normal"; } else if (bodyMassIndex <= 30) { return "Overweight"; - } else { // > 30.0 + } else { + // > 30.0 return "Obese"; } } - String getTempratureMethod(int temperatureCelciusMethod){ - // temperatureCelciusMethod ( vital sign response field )- master 2005 - if(temperatureCelciusMethod == 1){ + String getTempratureMethod(int temperatureCelciusMethod) { + // temperatureCelciusMethod ( vital sign response field )- master 2005 + if (temperatureCelciusMethod == 1) { return "Oral"; - } else if(temperatureCelciusMethod == 2){ + } else if (temperatureCelciusMethod == 2) { return "Axilla"; - } else if(temperatureCelciusMethod == 3){ + } else if (temperatureCelciusMethod == 3) { return "Rectal"; - } else if(temperatureCelciusMethod == 4){ + } else if (temperatureCelciusMethod == 4) { return "Tympanic"; - } else if(temperatureCelciusMethod == 5){ + } else if (temperatureCelciusMethod == 5) { return "Temporal"; } } - } diff --git a/lib/screens/patients/profile/referral/my-referral-detail-screen.dart b/lib/screens/patients/profile/referral/my-referral-detail-screen.dart index a0cb98b3..9d3c9f00 100644 --- a/lib/screens/patients/profile/referral/my-referral-detail-screen.dart +++ b/lib/screens/patients/profile/referral/my-referral-detail-screen.dart @@ -1,9 +1,11 @@ import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart'; import 'package:doctor_app_flutter/models/patient/my_referral/PendingReferral.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/date-utils.dart'; +import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/patient-referral-item-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/PatientProfileButton.dart'; @@ -144,8 +146,11 @@ class MyReferralDetailScreen extends StatelessWidget { fontSize: 16, hPadding: 8, vPadding: 12, - handler: () { - model.responseReferral(pendingReferral, true); + handler: () async { + await model.responseReferral(pendingReferral, true); + if(model.state == ViewState.ErrorLocal){ + DrAppToastMsg.showErrorToast(model.error); + } }, ), ), @@ -160,8 +165,11 @@ class MyReferralDetailScreen extends StatelessWidget { fontSize: 16, hPadding: 8, vPadding: 12, - handler: () { - model.responseReferral(pendingReferral, false); + handler: () async { + await model.responseReferral(pendingReferral, true); + if(model.state == ViewState.ErrorLocal){ + DrAppToastMsg.showErrorToast(model.error); + } }, ), ), diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 2c3be5b1..43a51237 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1036,6 +1036,10 @@ class TranslationBase { String get chiefComplaintErrorMsg => localizedValues['chiefComplaintErrorMsg'][locale.languageCode]; + String get referralStatus => + localizedValues['referralStatus'][locale.languageCode]; + String get referralRemark => + localizedValues['referralRemark'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/patients/patient-referral-item-widget.dart b/lib/widgets/patients/patient-referral-item-widget.dart index 17f33793..fb8276c8 100644 --- a/lib/widgets/patients/patient-referral-item-widget.dart +++ b/lib/widgets/patients/patient-referral-item-widget.dart @@ -37,25 +37,36 @@ class PatientReferralItemWidget extends StatelessWidget { children: [ Center( child: AppText( - "${patientName}", + patientName != null ? "${patientName}" : "", color: Colors.black, fontWeight: FontWeight.bold, fontSize: 16, ), ), if (referralStatus != null) - Container( - color: Color(0xFF4BA821), - padding: EdgeInsets.all(4), - child: AppText( - referralStatus - /*referralStatus == "46" - ? TranslationBase.of(context).approved - : TranslationBase.of(context).rejected*/, - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 12, - ), + Row( + children: [ + AppText( + TranslationBase.of(context).referralStatus, + color: Colors.grey, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + Container( + color: Color(0xFF4BA821), + padding: EdgeInsets.all(4), + child: AppText( + referralStatus + /*referralStatus == "46" + ? TranslationBase.of(context).approved + : TranslationBase.of(context).rejected*/ + , + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ], ), SizedBox( height: 8, @@ -83,11 +94,26 @@ class PatientReferralItemWidget extends StatelessWidget { SizedBox( height: 8, ), - AppText( - "${TranslationBase.of(context).dr} $referralDoctorName", - color: Colors.black, - fontWeight: FontWeight.bold, - fontSize: 12, + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + "${TranslationBase.of(context).referralDoctor} : ", + color: Colors.grey, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + Expanded( + child: AppText( + referralDoctorName != null + ? "${TranslationBase.of(context).dr} $referralDoctorName" + : "", + color: Colors.black, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ], ), SizedBox( height: 8, @@ -112,11 +138,21 @@ class PatientReferralItemWidget extends StatelessWidget { SizedBox( height: 8, ), - AppText( - remark, - color: Colors.grey, - fontWeight: FontWeight.normal, - fontSize: 12, + Row( + children: [ + AppText( + TranslationBase.of(context).referralRemark, + color: Colors.grey, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + AppText( + remark, + color: Colors.grey, + fontWeight: FontWeight.normal, + fontSize: 12, + ), + ], ), SizedBox( height: 16, From ebc5ba7743c2d59cd40c67190e158ddab5b8a3e0 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Wed, 27 Jan 2021 10:33:30 +0200 Subject: [PATCH 09/23] some fixes --- lib/config/localized_values.dart | 3 + .../patient-doctor-referral-service.dart | 5 +- .../viewModel/patient-referral-viewmodel.dart | 4 +- .../profile/UCAF/UCAF-detail-screen.dart | 19 +- .../profile/UCAF/UCAF-input-screen.dart | 43 ++-- .../referral/refer-patient-screen.dart | 55 +++-- .../vital_sign/vital_sign_details_screen.dart | 190 ++++++++++-------- lib/util/translations_delegate_base.dart | 13 ++ .../shared/dialogs/dailog-list-select.dart | 2 +- 9 files changed, 209 insertions(+), 125 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 2de1f3d1..f70e13c8 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -674,4 +674,7 @@ const Map> localizedValues = { 'en': "Referral Remark : ", 'ar': "ملاحظة الإحالة :" }, + 'icd': {'en': "ICD", 'ar': "التصنيف الدولي للأمراض" + // 'icd': {'en': "ICD", 'ar': " " + }, }; diff --git a/lib/core/service/patient-doctor-referral-service.dart b/lib/core/service/patient-doctor-referral-service.dart index 2f18540a..f452cfb6 100644 --- a/lib/core/service/patient-doctor-referral-service.dart +++ b/lib/core/service/patient-doctor-referral-service.dart @@ -32,13 +32,14 @@ class PatientReferralService extends LookupService { "Channel": 9, "TokenID": "", "SessionID": "i1UJwCTSqt", - "IsLoginForDoctorApp": true + "IsLoginForDoctorApp": true, + // "MemberID": memberID }; dynamic localRes; await baseAppClient.post(url, onSuccess: (response, statusCode) async { if (response['MessageStatus'] == 1) { - projectsList = response['ListProject']; + projectsList = response['ProjectInfo']; } else { // handel error projectsList = ListProject; diff --git a/lib/core/viewModel/patient-referral-viewmodel.dart b/lib/core/viewModel/patient-referral-viewmodel.dart index abe39224..b9987601 100644 --- a/lib/core/viewModel/patient-referral-viewmodel.dart +++ b/lib/core/viewModel/patient-referral-viewmodel.dart @@ -94,8 +94,8 @@ class PatientReferralViewModel extends BaseViewModel { DoctorProfileModel doctorProfile = await getDoctorProfile(); if (doctorProfile != null) { dynamic _selectedBranch = { - "ID": doctorProfile.projectID, - "Desciption": doctorProfile.projectName + "facilityId": doctorProfile.projectID, + "facilityName": doctorProfile.projectName }; return _selectedBranch; } diff --git a/lib/screens/patients/profile/UCAF/UCAF-detail-screen.dart b/lib/screens/patients/profile/UCAF/UCAF-detail-screen.dart index 489c462d..0831fffe 100644 --- a/lib/screens/patients/profile/UCAF/UCAF-detail-screen.dart +++ b/lib/screens/patients/profile/UCAF/UCAF-detail-screen.dart @@ -284,7 +284,24 @@ class DiagnosisWidget extends StatelessWidget { fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( - "${diagnosis.icdCode10ID} ${diagnosisCondition != null ? model.selectedLanguage == 'ar' ? diagnosisCondition.nameAr : diagnosisCondition.nameEn : "-"}", + "${diagnosisCondition != null ? model.selectedLanguage == 'ar' ? diagnosisCondition.nameAr : diagnosisCondition.nameEn : "-"}", + fontWeight: FontWeight.normal, + fontSize: SizeConfig.textMultiplier * 2.0, + ), + ], + ), + SizedBox( + height: 4, + ), + Row( + children: [ + AppText( + "${TranslationBase.of(context).icd}: ", + fontWeight: FontWeight.bold, + fontSize: SizeConfig.textMultiplier * 2.0, + ), + AppText( + "${diagnosis.icdCode10ID}}", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), diff --git a/lib/screens/patients/profile/UCAF/UCAF-input-screen.dart b/lib/screens/patients/profile/UCAF/UCAF-input-screen.dart index 0116ce46..1a9ac4fa 100644 --- a/lib/screens/patients/profile/UCAF/UCAF-input-screen.dart +++ b/lib/screens/patients/profile/UCAF/UCAF-input-screen.dart @@ -144,24 +144,31 @@ class _UCAFInputScreenState extends State { ), ], ), - Row( - children: [ - AppText( - "${TranslationBase.of(context).temperature}", - fontSize: SizeConfig.textMultiplier * 1.8, - color: Colors.black, - fontWeight: FontWeight.w700, - ), - SizedBox( - width: 8, - ), - AppText( - "${model.patientVitalSigns.temperatureCelcius}(C), ${model.patientVitalSigns.temperatureCelcius * (9 / 5) + 32}(F)", - fontSize: SizeConfig.textMultiplier * 2, - color: Colors.grey.shade800, - fontWeight: FontWeight.normal, - ), - ], + SizedBox( + width: 4, + ), + Expanded( + child: Row( + children: [ + AppText( + "${TranslationBase.of(context).temperature}", + fontSize: SizeConfig.textMultiplier * 1.8, + color: Colors.black, + fontWeight: FontWeight.w700, + ), + SizedBox( + width: 8, + ), + Expanded( + child: AppText( + "${model.patientVitalSigns.temperatureCelcius}(C), ${(model.patientVitalSigns.temperatureCelcius * (9 / 5) + 32).toStringAsFixed(2)}(F)", + fontSize: SizeConfig.textMultiplier * 2, + color: Colors.grey.shade800, + fontWeight: FontWeight.normal, + ), + ), + ], + ), ), ], ), diff --git a/lib/screens/patients/profile/referral/refer-patient-screen.dart b/lib/screens/patients/profile/referral/refer-patient-screen.dart index 2c5311cc..04eba96e 100644 --- a/lib/screens/patients/profile/referral/refer-patient-screen.dart +++ b/lib/screens/patients/profile/referral/refer-patient-screen.dart @@ -15,6 +15,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_loader_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; +import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:hexcolor/hexcolor.dart'; @@ -74,14 +75,14 @@ class _PatientMakeReferralScreenState extends State { child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - if (model.state == ViewState.BusyLocal) + /*if (model.state == ViewState.BusyLocal) Container( color: Colors.white, width: 50, height: 50, child: AppLoaderWidget( containerColor: Colors.white, - )), + )),*/ Column( children: [ PatientPageHeaderWidget(patient), @@ -95,17 +96,16 @@ class _PatientMakeReferralScreenState extends State { model.patientReferral.length == 0 ? ReferralForm(model, screenSize) : PatientReferralItemWidget( - patientName: model.patientReferral[0].patientName, - referralStatus: "${model.patientReferral[0].referralStatus}", - isReferredTo: true, - isSameBranch: model.patientReferral[0] - .isReferralDoctorSameBranch, - referralDoctorName: - model.patientReferral[0].referredByDoctorInfo, - clinicDescription: null, - remark: - model.patientReferral[0].remarksFromSource - ), + patientName: model.patientReferral[0].patientName, + referralStatus: + "${model.patientReferral[0].referralStatus}", + isReferredTo: true, + isSameBranch: model + .patientReferral[0].isReferralDoctorSameBranch, + referralDoctorName: + model.patientReferral[0].referredByDoctorInfo, + clinicDescription: null, + remark: model.patientReferral[0].remarksFromSource), ], ), if (model.patientReferral.length == 0) @@ -124,7 +124,7 @@ class _PatientMakeReferralScreenState extends State { .makeReferral( patient, appointmentDate.toIso8601String(), - _selectedBranch['ID'], + _selectedBranch['facilityId'], _selectedClinic['ClinicID'], _selectedDoctor['DoctorID'], _remarksController.text) @@ -180,7 +180,12 @@ class _PatientMakeReferralScreenState extends State { model.getDoctorBranch().then((value) { _selectedBranch = value; if (_referTo['id'] == 1) { - model.getClinics(_selectedBranch['ID']); + GifLoaderDialogUtils.showMyDialog(context); + model + .getClinics(_selectedBranch['facilityId']) + .then((_) => + GifLoaderDialogUtils.hideDialog( + context)); } }); }); @@ -217,15 +222,19 @@ class _PatientMakeReferralScreenState extends State { ? () { ListSelectDialog dialog = ListSelectDialog( list: model.branchesList, - attributeName: 'Desciption', - attributeValueId: 'ID', + attributeName: 'facilityName', + attributeValueId: 'facilityId', okText: TranslationBase.of(context).ok, okFunction: (selectedValue) { setState(() { _selectedBranch = selectedValue; _selectedClinic = null; _selectedDoctor = null; - model.getClinics(_selectedBranch['ID']); + GifLoaderDialogUtils.showMyDialog(context); + model + .getClinics(_selectedBranch['facilityId']) + .then((_) => + GifLoaderDialogUtils.hideDialog(context)); }); }, ); @@ -242,7 +251,7 @@ class _PatientMakeReferralScreenState extends State { decoration: textFieldSelectorDecoration( TranslationBase.of(context).branch, _selectedBranch != null - ? _selectedBranch['Desciption'] + ? _selectedBranch['facilityName'] : null, true), enabled: false, @@ -268,8 +277,12 @@ class _PatientMakeReferralScreenState extends State { setState(() { _selectedDoctor = null; _selectedClinic = selectedValue; - model.getClinicDoctors( - _selectedClinic['ClinicID'].toString()); + GifLoaderDialogUtils.showMyDialog(context); + model + .getClinicDoctors( + _selectedClinic['ClinicID'].toString()) + .then((_) => + GifLoaderDialogUtils.hideDialog(context)); }); }, ); diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart index ad312625..45cd8d14 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-vital-sign-viewmodel.dart'; import 'package:doctor_app_flutter/lookups/patient_lookup.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; @@ -9,13 +10,15 @@ import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; class VitalSignDetailsScreen extends StatelessWidget { - int appointmentNo; int projectID; bool isNotOneAppointment; - VitalSignDetailsScreen({this.appointmentNo, this.projectID,this.isNotOneAppointment=true}); + + VitalSignDetailsScreen( + {this.appointmentNo, this.projectID, this.isNotOneAppointment = true}); @override Widget build(BuildContext context) { @@ -23,10 +26,11 @@ class VitalSignDetailsScreen extends StatelessWidget { PatiantInformtion patient = routeArgs['patient']; String from = routeArgs['from']; String to = routeArgs['to']; - String imageBasePath = 'assets/images/'; + String imageBasePath = 'assets/images/'; return BaseView( - onModelReady: (model) => model.getPatientVitalSignHistory(patient, from, to), + onModelReady: (model) => + model.getPatientVitalSignHistory(patient, from, to), builder: (_, mode, widget) => AppScaffold( isShowAppBar: true, baseViewModel: mode, @@ -38,16 +42,19 @@ class VitalSignDetailsScreen extends StatelessWidget { Row( children: [ InkWell( - onTap: () =>isNotOneAppointment? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.Height, - pageTitle: TranslationBase.of(context).height, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ):null, + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.Height, + pageTitle: + TranslationBase.of(context).height, + vitalList: mode.patientVitalSignsHistory, + ), + ), + ) + : null, child: Container( child: VitalSignItem( des: TranslationBase.of(context).height, @@ -58,16 +65,19 @@ class VitalSignDetailsScreen extends StatelessWidget { ), ), InkWell( - onTap: () => isNotOneAppointment ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.Weight, - pageTitle: TranslationBase.of(context).weight, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ):null, + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.Weight, + pageTitle: + TranslationBase.of(context).weight, + vitalList: mode.patientVitalSignsHistory, + ), + ), + ) + : null, child: VitalSignItem( des: TranslationBase.of(context).weight, imagePath: "${imageBasePath}vital_weight.png", @@ -80,17 +90,20 @@ class VitalSignDetailsScreen extends StatelessWidget { Row( children: [ InkWell( - onTap: () => isNotOneAppointment ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.BodyMeasurements, - pageTitle: TranslationBase.of(context) - .bodyMeasurements, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ): null, + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: + vitalSignDetails.BodyMeasurements, + pageTitle: TranslationBase.of(context) + .bodyMeasurements, + vitalList: mode.patientVitalSignsHistory, + ), + ), + ) + : null, child: VitalSignItem( des: TranslationBase.of(context).body, imagePath: "${imageBasePath}vital_body_mass.png", @@ -99,21 +112,24 @@ class VitalSignDetailsScreen extends StatelessWidget { ), ), InkWell( - onTap: () => isNotOneAppointment ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.Temperature, - pageTitle: - TranslationBase.of(context).temperature, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ):null, + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.Temperature, + pageTitle: TranslationBase.of(context) + .temperature, + vitalList: mode.patientVitalSignsHistory, + ), + ), + ) + : null, child: Container( child: VitalSignItem( des: TranslationBase.of(context).temperature, - imagePath: "${imageBasePath}vital_temperature.png", + imagePath: + "${imageBasePath}vital_temperature.png", lastVal: mode.temperatureCelcius, unit: TranslationBase.of(context).tempC, ), @@ -124,16 +140,19 @@ class VitalSignDetailsScreen extends StatelessWidget { Row( children: [ InkWell( - onTap: () => isNotOneAppointment ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.heart, - pageTitle: TranslationBase.of(context).heart, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ):null, + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.heart, + pageTitle: + TranslationBase.of(context).heart, + vitalList: mode.patientVitalSignsHistory, + ), + ), + ) + : null, child: VitalSignItem( des: TranslationBase.of(context).heart, imagePath: "${imageBasePath}vital_heart_rate.png", @@ -142,17 +161,19 @@ class VitalSignDetailsScreen extends StatelessWidget { ), ), InkWell( - onTap: () => isNotOneAppointment ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.Respiration, - pageTitle: - TranslationBase.of(context).respirationRate, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ):null, + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.Respiration, + pageTitle: TranslationBase.of(context) + .respirationRate, + vitalList: mode.patientVitalSignsHistory, + ), + ), + ) + : null, child: VitalSignItem( des: TranslationBase.of(context).respirationRate, imagePath: "${imageBasePath}vital_respiration.png", @@ -166,19 +187,23 @@ class VitalSignDetailsScreen extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ InkWell( - onTap: () => isNotOneAppointment ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.BloodPressure, - pageTitle: TranslationBase.of(context).bloodPressure, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ):null, + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.BloodPressure, + pageTitle: TranslationBase.of(context) + .bloodPressure, + vitalList: mode.patientVitalSignsHistory, + ), + ), + ) + : null, child: VitalSignItem( des: TranslationBase.of(context).bloodPressure, - imagePath: "${imageBasePath}vital_blood-pressure.png", + imagePath: + "${imageBasePath}vital_blood-pressure.png", lastVal: mode.bloodPressure, unit: TranslationBase.of(context).sysDias, ), @@ -189,7 +214,12 @@ class VitalSignDetailsScreen extends StatelessWidget { ), ) : Center( - child: AppText('No Data'), + child: AppText( + TranslationBase.of(context).vitalSignEmptyMsg, + fontWeight: FontWeight.normal, + color: HexColor("#B8382B"), + fontSize: SizeConfig.textMultiplier * 2.5, + ), ), ), ); diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 43a51237..a49873a7 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1013,21 +1013,30 @@ class TranslationBase { String get createdBy => localizedValues['createdBy'][locale.languageCode]; String get editedBy => localizedValues['editedBy'][locale.languageCode]; + String get currentMedications => localizedValues['currentMedications'][locale.languageCode]; + String get noItem => localizedValues['noItem'][locale.languageCode]; + String get postUcafSuccessMsg => localizedValues['postUcafSuccessMsg'][locale.languageCode]; + String get vitalSignDetailEmpty => localizedValues['vitalSignDetailEmpty'][locale.languageCode]; + String get onlyOfftimeHoliday => localizedValues['onlyOfftimeHoliday'][locale.languageCode]; + String get active => localizedValues['active'][locale.languageCode]; + String get hold => localizedValues['hold'][locale.languageCode]; + String get loading => localizedValues['loading'][locale.languageCode]; String get assessmentErrorMsg => localizedValues['assessmentErrorMsg'][locale.languageCode]; + String get examinationErrorMsg => localizedValues['examinationErrorMsg'][locale.languageCode]; @@ -1036,10 +1045,14 @@ class TranslationBase { String get chiefComplaintErrorMsg => localizedValues['chiefComplaintErrorMsg'][locale.languageCode]; + String get referralStatus => localizedValues['referralStatus'][locale.languageCode]; + String get referralRemark => localizedValues['referralRemark'][locale.languageCode]; + + String get icd => localizedValues['icd'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/shared/dialogs/dailog-list-select.dart b/lib/widgets/shared/dialogs/dailog-list-select.dart index fa33a72d..b6df1f6f 100644 --- a/lib/widgets/shared/dialogs/dailog-list-select.dart +++ b/lib/widgets/shared/dialogs/dailog-list-select.dart @@ -47,8 +47,8 @@ class _ListSelectDialogState extends State { Widget continueButton = FlatButton( child: Text(this.widget.okText), onPressed: () { - this.widget.okFunction(widget.selectedValue); Navigator.of(context).pop(); + this.widget.okFunction(widget.selectedValue); }); // set up the AlertDialog AlertDialog alert = AlertDialog( From d34744e16859a04282d162a571594e3df8a81c3b Mon Sep 17 00:00:00 2001 From: Sultan Khan Date: Wed, 27 Jan 2021 11:39:48 +0300 Subject: [PATCH 10/23] bug fix --- assets/images/Doctor_app_logo.png | Bin 0 -> 9713 bytes lib/widgets/auth/login_form.dart | 11 ++++++----- 2 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 assets/images/Doctor_app_logo.png diff --git a/assets/images/Doctor_app_logo.png b/assets/images/Doctor_app_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2de2d46002571791ee2343f07957e2322ae1a599 GIT binary patch literal 9713 zcmcI~c|4Tw_xF%x>_e7GVn_^G#*i&bCS>12lw=xXU&e0iyX-;~*$c_8NXV9mY#~G> zWl0)qcAm@k`}usH-|Kn(e$Vs$=kdB{=AL`5`&{Qb=UngeKIax=pm&XdmXj6&fiP%l zs2YJ!>ysCh3cM4(Jun6zGz1NE4+wFUViT%EGK6ny1@0B5`>7UApcSB?L3HuN`ii=Eoc~*b zD&7OgxXA zhdMj|Gup#b%^S?}m%jh4U=L#=0WWTZ_i*)c$Klny@h+a{|DMbm_s_iqFL$SZt<)MP zj(5U4gJB*(F^PYsBG|clx_a2T{txT;=jVS`Ly*7fj>mesx*NN?I{ob^gTJL9&}cCf z0;!9|*}I&`6*|%BuUqh{SWmnnAMl%mC`v*UeaTotN?rmbFM+;@l9WfG{ykI|M1nQe z6Z@YHcD1&*A^s;rb#>)6T|7LoE;ziVsv;jyO3dEgT3!-wEhB}K#*0dzq;R5AGFS;w ztQ=lOR8AIuS5^`$AuENK{g+5?DLGMDv=mxYMgonyYa=5gX^oZmTbjPRJ=i-~r~fMTL@VnPtuEngByo3vR#I4? z70%jPR8|^?7DeN1q|s6`HaH1sX+DHCPTt1V-5Coa#oiffix(%j*zzI%w>DQ@om|~@ zU9Ex5B~RiRNC&IXu=fDYBmT8RuH)VQI&-o|{44C_vAC0HSLDN;xEXKF_t$0n|IT{< zk)Hn+>tlxpLjNz$|MxHtR~t_stUF%C7FhZ}2ru#fNqrBj_y0rr|H$?KUzPvMv^YDg zi!C0&r#Roqa>P%7=HHGH|37{9uiyR)DE&PgAl=F7KM)JP`~%W>7a-alK=63I783-* z^IlU`#n|`pN+8jbYqVj3^y%a1Xq?}5$J!B=nu5M8k+biuaN)dBR!~hdCvyI#WO{4f zq-0{phh&*#1$Tjn50Ch5Eiv3gqNb(BUBszJ*Q#*jzFi3GiFBv(x|e1SThl*XynIY< zjAko;{(>-1A5Dq>o;)MRl{jiLbLevX`uE}Qdba$uZ?0wvR_r%JTd;hu8ff#EvoB z|4&zMZ*Sv*V|*uhN^idNT3`!xqSDZRT5{csOvVzL`f&7}0{W(|ez5Q?(K074tj(&*YX8s5RWC0u`S3PK;m|z; zBt_*Ioth!x_;7pf=kv;U-Q7?|9;NuBqaZ11X(gXwT^Yspjer0#oH&KpYwMMnmgBYA z+1V~>*J&rqMsHClF9ed&OWAChM3AL#nPJjQ`MTvdG&~%x%15RGqmM0E^|)Y7AXLfU z*I3Og;=Qkd;7&Tv#aLKh&%qu?sW1?ZH-BXzmiFL*N;-aXb2DH`PwKjh@J`N91;sLH;rj3NrMppTdEXP;8A>Bs~ zWUbcdNT1(R=1+!~o-`mAy&HQ;ujUdhRbak33-@&dz(EGVMt0>0jPTH_|$j zv%m`__sxkeb;l+!x%6#nT(f;rKsckJSt-S?w@e=9+Z;i;=;H~F( zR@@pa9334Tk~R2Y3F<@B(}}aQ*nriXTHAqdJ8N^NBUuWZC+k+OB`K_T%h2$8)IBFP zlHQzGR8)K}m=MZvR=U+mTL0B2mwMbp4ZftT>@A4L*RNj>PEMX}0465+9&UY+A$@+i zJZ+7Bk#?0;c3{nYrUsZAQ*>yweqYyjYl|gyyk^w2qHIJbW*hd$5h`N_0-<*A%&U zae4O}N6SuN>ih5aRQa?If`Xk9uo9X`%!4!|Du`*NWy1QpyMflw=g+aH1@#8|`%|kX zoFcGh@d=U4ah(WFqd(N|Q1lckA(rCpPSPEAQth*Zys|QSs&KOA=4Lxr*K4v|VaV9~ zt^sprlbpWz^@=Yz=Cra#Y;JGgX#`r-*Evm)r{j4wS^oT*2=`Uc+wwac|NPSNm^k+? zVde)>N#c&y2aYKhpE+${gM9&4dLha8VGM*dv`YX_*4DS8XZ^H(|H`@X{hE?qi?kXO8!knMMb4m zRj>%yi@LhI1Ofm8lg2vd$v^gqb1Btz+tPhqUo*%vizKKU{kVPWNh7v#adGcodo5oP z>RhgDNz~xSOy0azK;KFHlu>G5mX<=Pskd}JwjfKZuFdMo_3M%>F%(j|9nY=@LaD+% z@wadH>gVk5`laI^H2hR<>*3_$nnEcly^*@Aj)1ie4#FH99q%+e#dcmlHM2KQYTuvP z8?m5n9w8XT#_o;6=ZP9A6xn*w-@e_APfALiq}$jq_2lWz`W^JZ0EvK8!wM+Mt=y8= z?{&?M*Sm`M^jIK;h1)+qHTk-$;@(tSyOfpts%?K~tmUX=BVGU4UF@|!AsgVsltZ6$L`~5p5;HaQI@^;2;9ZOK7k_W%cxJ3YL^fIXO8|zbh42KRIbWy3)O~2wRrdfF^3uw zf#HROATBICIlzROuqE%PCQ*}x5bu#yFKA%XSgEL}u0TWkY$%~^dQTFhNOS|offeq8 zuy(h{X%mBzziCV#acuat%ckWD{DNM3O1i z19xVd7-b*%!}i2?v%Yrn=RD=lf$fQW`jrj;sh6;e({J_u!cI{?ooJ@UW~`<{G(RKU z(~GVC&dZq)qG)U6m>HGb=*{~;D|GJFhorE#1w&a1g@u<1p#f1e!K@U#4`ayS3F?rL z5Bf`=8blCF6jcl9W$~jWsUG#5UX*HPZ{|$C2d{g_C(@t)RvJ-cUs6&6BI?@b&v_hb z^h``03mY~h$IG9ivV)H#<@ItRN|6)Iax5`ZEOF}f`jB8!@P!VWL@4cL?w-qFO&_WCo*cplHX9HG&bpM z6ct_F4X}G%L&K!B0|Qy{ijdl^TW3K6hex$NItq&Knk%U+*UgQD^5zT;@hqvWi6+iX z@o@Q&^HPPkDT8EHP*5Pkn=*|mq>=h15A`;xva84|jg{0_iWIDtS`ZDZqVdE@FtlpOR+qQvez7!G{*KsA_H#st zppb;`O~+bWQvim@)zvmj0NMOJdt9gyZS4eo;v5Q%4zotb_$n}}8KT%3gZgwuX zfBGhNEG{BbQX&ox0(_e-;q+AB7Zy%(B{&>jw*PQHi731|xDMzQfLZ=jO>pvdZjCLq zOO8bI9;pWnML?5@=d8W^cRfAAW^oOo60g5qfP?_XBFmLXL;WRw>)}P@Q-jeL4Hjl* z_sm47%+v2@WKgTXz7k}uUf#SPGiqy;{=r5P`E+o}GcSz~P78QpcM64hiW8W_l?h}+ z16E3|E|to$^Y7L)VyPDI-Z$5^R!Ux;RyAWUE#>241W*uSl&QFA6W~=FT7VqfP@rh$ zPBY?9eP5<|QIiF5fHtcTWb8yoNda=zuNfeBnh{7=nkmUftcy}BO;@KQ1XWo(A-t-I z>V=Sxk2un>D4UuOek^p6)zuQK3QRc*`SzU1r&W_HRu3nNB`=oJmf9N_vk9rGpdUr> zYXbd3uRwxYc&g3li9{knmJ2B+7S(12=|GtSkO<}PJ>%0)l-~KC>Zil1Rymnn_ZFRQ zIufwUjFy+DO?^*+(fDIvW?`YgJ1WQl!+^Nw=j`+qp;CbX7xm{T(m_Dd1k?)fpp*Bm zIYQ$Xkl_#!RsjKAX+~g^nWqB<;ZbXP+_vkQiZ0b=Q3~8lK;emx+7=^H&QL$YyLNWS z{qP>Ruy#g&cZ77g0ixHYEQo7;%n((t{uj=bF$;-&!lps8Nn0YT}|!63NUD8h?uYINpVJ&mV$f;ym#-cPHj#%21_8I z9I=$-WRNADt_CYmp8$)Cii!f30mcCk9Iw=i|%Ro5pP7RW;i%BM5bn#H%A1) z1!thLE7jV_?&lCpa+?mjX=JpXQ)F+>6F+1Z!M}LFDc%AJstVxryVbzy7p%o>VGx)a zbLTE2xOwx>pD-ACGZK@+-?aPgtetWY*WBDv$T%RtpC>2XzP5(yR7gr`wbh8g(rROX4JD(eFRC?!LSW<=sH!1FFUkt~{$bnaShkCA zx@&%IX33vWYnkN!iKl5rV_3{rH}(M{nup!b-~WDYZtkUPCMJ;`vky}vAE@MvM(w>x zMJ-Zx*F2ssyTkx^!R3sYfyd{=u<*rxViu)Jh@3c61kB6iYR6Uf=UdIszUOX7EN<;d zNI8eU^Ax;dr9%SjJ*3^-8t3Q|a(byH1V z%O(JDk8NLn|Fw|=!$5BXjvaUY{CVA30$ePE4wQ$X)+}z}%6#pYg2k!o8|qf!vi>Of;}dq3 z^2$N)Z{^^bR{#T=n%RHW@qV1d(*WD=P1a4V!RI3M_Gszp#j3vIW)ng)wms zcIj5~>sF$wdu|_bbvH_6F@H5c8kP2b`AZeHqbY%zw2~=fejTfYf%1N45&BL2F%|tt zhajJw7ty+md~7th=o;ikGx|0@%y{|$1J|(uNf$5_P}kQ^Jbw9V{?wZrmJfk|*{~?$ zQz@k$2Vqb@)%CDJMNaQXKB*1Q&>1=?&&~X^@kH;6PoI`l<*jI)Gt*!h zJ-xjP&d169jC`B#au?J-MG{mnI;APBr;q_4^6XjYgp;}yr&^Ww1wU(=(c*zS`ud0U*KDM!DoWs^%6^QPXO8M)wKkIJ zBwsc~reNk8AJ2B%zz1Hdtc_JqN|0xv>%I!8M>-RN{=yoz)XHh%avVC^8cQ0=QR&8C ze@)cdIXS7`zI|>waQpVi$k-g~fXXMD5|WbAMMn&`S0Qdv)NX2w3fmzTr!iaXYS^pZi!%gcR9&D(^-tuY*E7#W=X^zG}O zsP9JR*;z3Q@<^;is;xlNarqe`Eul_O)vg_qf_Vh>bKXWVoCT#4<2m^V4gRnP7jIw; zSvR+~Kn|Y*UA5t!)N35J$k~Ej#e%de@4FFudwW$bU*wHVO#$6HDS|$`(I5X@vvT&3 z{QYL%1(0M6t9hG|AbIKExcMq9cWeTFelN+aXP8XZF6zRX*u!dPY0)o znhTTJ`K6__Op2SZoZurOsJ(%KJbiq^=VVzq?kLTMG2K$c=?b(oqw)$4cm7lPt&H3AfN@T_$h>Z{)F9*WHK(fV{>sW$ zRvI!S)$Q7nt(z31UI>lEXz;TDBO{T>)>4z_Rwy`1S~?1J4f1PhSU__~9ME^LR0AU; za)@lufh?<9+c}>p3GwQr$kuphwQ85unZ>Kx+H_#T=)FBZPcJXtGW*pDI)lL1bU$nd ztaiGw2W=)alj|n03TjwD9}0AFJ`^opj14mri82#O*UcZ2Vkj-e6c4vqq4Gevs$R(a z=-Y69KJR0tK+YPG!u)(PpP4`zirK@O`K!^4`3((c@(rL}Nj%hDZY9s3H%iTXiViu$ z+zu&ORtyc?-!81HW0%fixOk)D?R2yMkV!3zwt_8hH;XW}pP}4fTywtdth8IvoLK#%N|J1uzAbA*&(CX63i)^%_*Rx3<8p zNJ(M&HQju+wDjAwKdIR%mk|-26Bp%6uN|dV_~VO@Ti?3`fC6pLt``%$?Vy4VH?YKo zp|U`HjGEQb3M6?tzJvX8KqBUGom?`jDw3YAiXI8kW5tSJ1S@M|!4nb^;AhUX zU70XS^NpH??iDo+u+y}$(~#NrXWRlcUH9?#6}gK?b3DfqXE`EnG zt1qhAfBUYdC#%e~FRpIWN&xw4u2wE-AB(WX(2{emQt|h{oM_R&oZI9sYSF1S+=CLkb>BPm11vvZ<=}{; z<;rNfeqLT41T+)@LYxxRHX|0W!RZPXNG%aR#G9mXGiFDEuF?2Ib$;r-;%2=Bb=2PE zox4qQN7F1Zf)iAlDVwTOnNsd_AvMMP6odo1*O>eeCe9`0?~xwyQ06S%)Ra$P^a zu<(4A)nhua4co%0*EWasJ6604cT1nQ)`)!m{CRM6loE5POvw+fb`(>wV-bjJKpdym zFIZS+TofA@sM~)YTrcSTVymG1fIqS8)>&n;$T>hA21iCH4ykExg8s4u8ciPF7BW9? zGcq>T0lKfg?#QQrsDrM2`(;wosY;pbr!DS3dYsxZNY?h*j%d*NGt=#S?Xz7ZTCX|C z#)j+U5xZ?H?)QXJkx3afw;b29I#{pGz0;E_*&NjW(jhFReLnE=?EcSSm0PwP-lXXS zP_d1Sjlbz^>CX@xsBqJv{~{CX|Ik56hp+`fVZ) zf|QX@VW;O_t#|W&PtdL5lx&wfte*Ld|Q&`tsesAmAk zT`@Fdc9K5(!N#L*)RGE-jb5>27W7x#Fn=sc3alkFuck=g!O+VQeF%8dbquQGYUI6H5Fe}BmgqRx9@$CyCv`!J&rxTN095K+TYRprj{FwDcWUD#xy-|DY3aTDU1zoZ~3&C3m-tn!@g&?myl(0pk z7stKnoW^Dzrs}0)zr5OQYPldTF|?tsQPG)9kI%Cs|F-4^Pgv@Abv+kEoptLE=CPo7 zj|H8SqWFPL5bJv~x_WDs@Oz$Tk?DA>6z6?wxUai^=hr*u*yCZ6WV9+|$sVK{U2)Ou z;g-JHN^ZJL0n3gODAg&@?ghyj5%Cq~tHG1)@s((1fJwj37Au0Yvx9;N2R##B+Q&~a zT;~- z97x`AH7}@R#`bkSQxl$HHu0r_A31a^d_iS@N}gf+rsW*Hn9XPi=Th52hX%~?^XE@2 z3eGG*aZIi_a)#}OxE|}Y*9?5{3rSqJwLgx&s(iD@0~TCTQ9;E^ z5pJ~>U(_P9eR}!Q*x^w1R^6R>zZuHZa!HL%?@OM+TXg;-YvUK3A;HGDRXX9;^xUL_ z070W?ta`b6KJPqKIx}J@Ht_B?QkTjmZf!O51jb%ki1cXQE{K4H{Nk>V-59A4l1p{k znZOjX4mkKd=3ffOnwy*N3CVH1sxe}afl;2-pq;w#D_52SXlT|}=O6q~yKdk5!@XpB zmgd_GN6Lq5M>|~897^Q@YWSAP;g&roBWV_lfoZx+xs;UD!-NOlH!RjO1A6Te-owRU zo;3IIwueTTP+nn4rtj|aO;uZ&eU)Z1mfJl}Ik8N9f*2+GS6_awR|fp(^;f@k?II-a zi8W2U`gtmE#^~iGchsUAV(A+ z3yO-UxRW@z2NqwjnbUW)&T7bf$Q7>6nv>nl@&CQsc9kh`cTHO+d;(|4LJp}Bp;O+U zsMSCGQ{Qqp@TlccpN+AxaR^?HBAg674!Jrk1s<=(b { projectIdController.text = projectsList[0]['facilityName']; }); } else { + print(res); // handel error - setState(() { - projectsList = ListProject; - }); + // setState(() { + // projectsList = ListProject; + // }); } }).catchError((err) { setState(() { - projectsList = ListProject; + print(err); }); print(err); }); @@ -386,6 +387,6 @@ class _LoginFormState extends State { getProjectsList(value); } } - _isInit = false; + //_isInit = false; } } From 2273808333ce236bb723e94a02a29af0e15b3fbe Mon Sep 17 00:00:00 2001 From: mosazaid Date: Wed, 27 Jan 2021 10:56:05 +0200 Subject: [PATCH 11/23] translation --- lib/screens/patients/patients_screen.dart | 2 +- lib/util/date-utils.dart | 4 ++-- lib/widgets/patients/profile/patient_profile_widget.dart | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/screens/patients/patients_screen.dart b/lib/screens/patients/patients_screen.dart index 1a55153e..50b89148 100644 --- a/lib/screens/patients/patients_screen.dart +++ b/lib/screens/patients/patients_screen.dart @@ -616,7 +616,7 @@ class _PatientsScreenState extends State { .white, ), AppText( - " ${DateUtils.getAgeByBirthday(item.dateofBirth)}", + " ${DateUtils.getAgeByBirthday(item.dateofBirth, context)}", fontSize: 1.8 * SizeConfig diff --git a/lib/util/date-utils.dart b/lib/util/date-utils.dart index 84b4167f..af90acf6 100644 --- a/lib/util/date-utils.dart +++ b/lib/util/date-utils.dart @@ -217,7 +217,7 @@ class DateUtils { } } - static String getAgeByBirthday(dynamic birthday){ + static String getAgeByBirthday(dynamic birthday, BuildContext context){ // https://leechy.dev/calculate-dates-diff-in-dart DateTime birthDate = DateUtils.getDateTimeFromServerFormat(birthday); final now = DateTime.now(); @@ -232,7 +232,7 @@ class DateUtils { final monthAgo = new DateTime(now.year, now.month - 1, birthDate.day); days = now.difference(monthAgo).inDays + 1; } - return "$years Yr $months Mnth $days Day"; + return "$years ${TranslationBase.of(context).years} $months ${TranslationBase.of(context).months} $days ${TranslationBase.of(context).days}"; } } diff --git a/lib/widgets/patients/profile/patient_profile_widget.dart b/lib/widgets/patients/profile/patient_profile_widget.dart index c289431b..4834e412 100644 --- a/lib/widgets/patients/profile/patient_profile_widget.dart +++ b/lib/widgets/patients/profile/patient_profile_widget.dart @@ -117,7 +117,7 @@ class PatientProfileWidget extends StatelessWidget { height: 4, ), AppText( - "${DateUtils.convertDateFromServerFormat(patient.dateofBirth, 'dd-MM-yyyy')} / ${DateUtils.getAgeByBirthday(patient.dateofBirth)/*patient.age*/}", + "${DateUtils.convertDateFromServerFormat(patient.dateofBirth, 'dd-MM-yyyy')} / ${DateUtils.getAgeByBirthday(patient.dateofBirth, context)/*patient.age*/}", fontWeight: FontWeight.normal, fontSize: 1.6 * SizeConfig.textMultiplier, ), From 75efcde0bca3f5c63674678e72338ef0bf93224c Mon Sep 17 00:00:00 2001 From: Mohammad Aljammal Date: Wed, 27 Jan 2021 12:30:17 +0200 Subject: [PATCH 12/23] fix ios --- android/app/google-services.json | 21 +- ios/GoogleService-Info .plist | 34 ++ ios/Podfile.lock | 378 +++++++++++++++++- ios/Runner.xcodeproj/project.pbxproj | 13 +- ios/Runner/AppDelegate.swift | 2 - ios/Runner/GoogleService-Info.plist | 34 ++ ios/Runner/Info.plist | 9 +- ios/Runner/RunnerRelease.entitlements | 8 + lib/config/localized_values.dart | 3 + lib/main.dart | 5 +- lib/screens/dashboard_screen.dart | 10 +- lib/util/translations_delegate_base.dart | 3 + .../patient-referral-item-widget.dart | 27 +- pubspec.lock | 92 ++++- pubspec.yaml | 10 +- 15 files changed, 614 insertions(+), 35 deletions(-) create mode 100644 ios/GoogleService-Info .plist create mode 100644 ios/Runner/GoogleService-Info.plist create mode 100644 ios/Runner/RunnerRelease.entitlements diff --git a/android/app/google-services.json b/android/app/google-services.json index 3c00f05c..27e5dfb1 100644 --- a/android/app/google-services.json +++ b/android/app/google-services.json @@ -1,34 +1,41 @@ { "project_info": { - "project_number": "1008895414777", - "project_id": "doctorapp-9f172", - "storage_bucket": "doctorapp-9f172.appspot.com" + "project_number": "1097451043303", + "project_id": "doctor-app-35ddc", + "storage_bucket": "doctor-app-35ddc.appspot.com" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:1008895414777:android:d00fe21d6955c21b1f6d28", + "mobilesdk_app_id": "1:1097451043303:android:f82ecce9562ecaad866542", "android_client_info": { "package_name": "com.example.doctor_app_flutter" } }, "oauth_client": [ { - "client_id": "1008895414777-3mg88j5ocs5r1au7rf4sh3f4pgsri2f2.apps.googleusercontent.com", + "client_id": "1097451043303-u7bl21167fq5b7u06cqpq621psv9s3qh.apps.googleusercontent.com", "client_type": 3 } ], "api_key": [ { - "current_key": "AIzaSyCNncEIj8ehVUSxV89rx0x1NaWp8t1YVkw" + "current_key": "AIzaSyChu44P8Dp8jtRqnoDR2mdjqKgSKQq-FPY" } ], "services": { "appinvite_service": { "other_platform_oauth_client": [ { - "client_id": "1008895414777-3mg88j5ocs5r1au7rf4sh3f4pgsri2f2.apps.googleusercontent.com", + "client_id": "1097451043303-u7bl21167fq5b7u06cqpq621psv9s3qh.apps.googleusercontent.com", "client_type": 3 + }, + { + "client_id": "1097451043303-ifgtu6ub88dlk5dmv5tm531a5s47gbre.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.hmg.doctorApp" + } } ] } diff --git a/ios/GoogleService-Info .plist b/ios/GoogleService-Info .plist new file mode 100644 index 00000000..81c3af44 --- /dev/null +++ b/ios/GoogleService-Info .plist @@ -0,0 +1,34 @@ + + + + + CLIENT_ID + 1097451043303-ifgtu6ub88dlk5dmv5tm531a5s47gbre.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.1097451043303-ifgtu6ub88dlk5dmv5tm531a5s47gbre + API_KEY + AIzaSyAKPayaNaI-2RN6S4PH5W9wYExmEgoBUvo + GCM_SENDER_ID + 1097451043303 + PLIST_VERSION + 1 + BUNDLE_ID + com.hmg.doctorApp + PROJECT_ID + doctor-app-35ddc + STORAGE_BUCKET + doctor-app-35ddc.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:1097451043303:ios:0e9b87e77dcf397d866542 + + \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 40d9a06a..aa3e21b8 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,9 +1,235 @@ PODS: + - abseil/algorithm (0.20200225.0): + - abseil/algorithm/algorithm (= 0.20200225.0) + - abseil/algorithm/container (= 0.20200225.0) + - abseil/algorithm/algorithm (0.20200225.0): + - abseil/base/config + - abseil/algorithm/container (0.20200225.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/base (0.20200225.0): + - abseil/base/atomic_hook (= 0.20200225.0) + - abseil/base/base (= 0.20200225.0) + - abseil/base/base_internal (= 0.20200225.0) + - abseil/base/bits (= 0.20200225.0) + - abseil/base/config (= 0.20200225.0) + - abseil/base/core_headers (= 0.20200225.0) + - abseil/base/dynamic_annotations (= 0.20200225.0) + - abseil/base/endian (= 0.20200225.0) + - abseil/base/errno_saver (= 0.20200225.0) + - abseil/base/exponential_biased (= 0.20200225.0) + - abseil/base/log_severity (= 0.20200225.0) + - abseil/base/malloc_internal (= 0.20200225.0) + - abseil/base/periodic_sampler (= 0.20200225.0) + - abseil/base/pretty_function (= 0.20200225.0) + - abseil/base/raw_logging_internal (= 0.20200225.0) + - abseil/base/spinlock_wait (= 0.20200225.0) + - abseil/base/throw_delegate (= 0.20200225.0) + - abseil/base/atomic_hook (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/base (0.20200225.0): + - abseil/base/atomic_hook + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/log_severity + - abseil/base/raw_logging_internal + - abseil/base/spinlock_wait + - abseil/meta/type_traits + - abseil/base/base_internal (0.20200225.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/base/bits (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/config (0.20200225.0) + - abseil/base/core_headers (0.20200225.0): + - abseil/base/config + - abseil/base/dynamic_annotations (0.20200225.0) + - abseil/base/endian (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver (0.20200225.0): + - abseil/base/config + - abseil/base/exponential_biased (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/malloc_internal (0.20200225.0): + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/base/periodic_sampler (0.20200225.0): + - abseil/base/core_headers + - abseil/base/exponential_biased + - abseil/base/pretty_function (0.20200225.0) + - abseil/base/raw_logging_internal (0.20200225.0): + - abseil/base/atomic_hook + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/base/spinlock_wait (0.20200225.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/base/throw_delegate (0.20200225.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/container/compressed_tuple (0.20200225.0): + - abseil/utility/utility + - abseil/container/inlined_vector (0.20200225.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/base/throw_delegate + - abseil/container/inlined_vector_internal + - abseil/memory/memory + - abseil/container/inlined_vector_internal (0.20200225.0): + - abseil/base/core_headers + - abseil/container/compressed_tuple + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/types/span + - abseil/memory (0.20200225.0): + - abseil/memory/memory (= 0.20200225.0) + - abseil/memory/memory (0.20200225.0): + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/meta (0.20200225.0): + - abseil/meta/type_traits (= 0.20200225.0) + - abseil/meta/type_traits (0.20200225.0): + - abseil/base/config + - abseil/numeric/int128 (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/strings/internal (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/meta/type_traits + - abseil/strings/str_format (0.20200225.0): + - abseil/strings/str_format_internal + - abseil/strings/str_format_internal (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/numeric/int128 + - abseil/strings/strings + - abseil/types/span + - abseil/strings/strings (0.20200225.0): + - abseil/base/base + - abseil/base/bits + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/base/throw_delegate + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/numeric/int128 + - abseil/strings/internal + - abseil/time (0.20200225.0): + - abseil/time/internal (= 0.20200225.0) + - abseil/time/time (= 0.20200225.0) + - abseil/time/internal (0.20200225.0): + - abseil/time/internal/cctz (= 0.20200225.0) + - abseil/time/internal/cctz (0.20200225.0): + - abseil/time/internal/cctz/civil_time (= 0.20200225.0) + - abseil/time/internal/cctz/time_zone (= 0.20200225.0) + - abseil/time/internal/cctz/civil_time (0.20200225.0): + - abseil/base/config + - abseil/time/internal/cctz/time_zone (0.20200225.0): + - abseil/base/config + - abseil/time/internal/cctz/civil_time + - abseil/time/time (0.20200225.0): + - abseil/base/base + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/numeric/int128 + - abseil/strings/strings + - abseil/time/internal/cctz/civil_time + - abseil/time/internal/cctz/time_zone + - abseil/types (0.20200225.0): + - abseil/types/any (= 0.20200225.0) + - abseil/types/bad_any_cast (= 0.20200225.0) + - abseil/types/bad_any_cast_impl (= 0.20200225.0) + - abseil/types/bad_optional_access (= 0.20200225.0) + - abseil/types/bad_variant_access (= 0.20200225.0) + - abseil/types/compare (= 0.20200225.0) + - abseil/types/optional (= 0.20200225.0) + - abseil/types/span (= 0.20200225.0) + - abseil/types/variant (= 0.20200225.0) + - abseil/types/any (0.20200225.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/types/bad_any_cast + - abseil/utility/utility + - abseil/types/bad_any_cast (0.20200225.0): + - abseil/base/config + - abseil/types/bad_any_cast_impl + - abseil/types/bad_any_cast_impl (0.20200225.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/types/bad_optional_access (0.20200225.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/types/bad_variant_access (0.20200225.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/types/compare (0.20200225.0): + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/types/optional (0.20200225.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/types/bad_optional_access + - abseil/utility/utility + - abseil/types/span (0.20200225.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/base/throw_delegate + - abseil/meta/type_traits + - abseil/types/variant (0.20200225.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/types/bad_variant_access + - abseil/utility/utility + - abseil/utility/utility (0.20200225.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/meta/type_traits - Alamofire (4.9.1) - barcode_scan (0.0.1): - Flutter - MTBBarcodeScanner - SwiftProtobuf + - BoringSSL-GRPC (0.0.7): + - BoringSSL-GRPC/Implementation (= 0.0.7) + - BoringSSL-GRPC/Interface (= 0.0.7) + - BoringSSL-GRPC/Implementation (0.0.7): + - BoringSSL-GRPC/Interface (= 0.0.7) + - BoringSSL-GRPC/Interface (0.0.7) + - cloud_firestore (0.14.3): + - Firebase/CoreOnly (~> 6.33.0) + - Firebase/Firestore (~> 6.33.0) + - firebase_core + - Flutter + - cloud_firestore_web (0.1.0): + - Flutter - connectivity (0.0.1): - Flutter - Reachability @@ -13,12 +239,40 @@ PODS: - Flutter - device_info (0.0.1): - Flutter + - Firebase/Analytics (6.33.0): + - Firebase/Core + - Firebase/Auth (6.33.0): + - Firebase/CoreOnly + - FirebaseAuth (~> 6.9.2) + - Firebase/Core (6.33.0): + - Firebase/CoreOnly + - FirebaseAnalytics (= 6.8.3) - Firebase/CoreOnly (6.33.0): - FirebaseCore (= 6.10.3) + - Firebase/Firestore (6.33.0): + - Firebase/CoreOnly + - FirebaseFirestore (~> 1.18.0) - Firebase/Messaging (6.33.0): - Firebase/CoreOnly - FirebaseMessaging (~> 4.7.0) - - firebase_core (0.5.3): + - Firebase/Storage (6.33.0): + - Firebase/CoreOnly + - FirebaseStorage (~> 3.9.0) + - firebase_analytics (6.2.0): + - Firebase/Analytics (~> 6.33.0) + - Firebase/CoreOnly (~> 6.33.0) + - firebase_core + - Flutter + - firebase_analytics_web (0.1.0): + - Flutter + - firebase_auth (0.18.3): + - Firebase/Auth (~> 6.33.0) + - Firebase/CoreOnly (~> 6.33.0) + - firebase_core + - Flutter + - firebase_auth_web (0.1.0): + - Flutter + - firebase_core (0.5.2): - Firebase/CoreOnly (~> 6.33.0) - Flutter - firebase_core_web (0.1.0): @@ -28,6 +282,25 @@ PODS: - Firebase/Messaging (~> 6.33.0) - firebase_core - Flutter + - firebase_storage (5.0.1): + - Firebase/CoreOnly (~> 6.33.0) + - Firebase/Storage (~> 6.33.0) + - firebase_core + - Flutter + - FirebaseAnalytics (6.8.3): + - FirebaseCore (~> 6.10) + - FirebaseInstallations (~> 1.6) + - GoogleAppMeasurement (= 6.8.3) + - GoogleUtilities/AppDelegateSwizzler (~> 6.7) + - GoogleUtilities/MethodSwizzler (~> 6.7) + - GoogleUtilities/Network (~> 6.7) + - "GoogleUtilities/NSData+zlib (~> 6.7)" + - nanopb (~> 1.30906.0) + - FirebaseAuth (6.9.2): + - FirebaseCore (~> 6.10) + - GoogleUtilities/AppDelegateSwizzler (~> 6.7) + - GoogleUtilities/Environment (~> 6.7) + - GTMSessionFetcher/Core (~> 1.1) - FirebaseCore (6.10.3): - FirebaseCoreDiagnostics (~> 1.6) - GoogleUtilities/Environment (~> 6.7) @@ -37,6 +310,18 @@ PODS: - GoogleUtilities/Environment (~> 6.7) - GoogleUtilities/Logger (~> 6.7) - nanopb (~> 1.30906.0) + - FirebaseFirestore (1.18.0): + - abseil/algorithm (= 0.20200225.0) + - abseil/base (= 0.20200225.0) + - abseil/memory (= 0.20200225.0) + - abseil/meta (= 0.20200225.0) + - abseil/strings/strings (= 0.20200225.0) + - abseil/time (= 0.20200225.0) + - abseil/types (= 0.20200225.0) + - FirebaseCore (~> 6.10) + - "gRPC-C++ (~> 1.28.0)" + - leveldb-library (~> 1.22) + - nanopb (~> 1.30906.0) - FirebaseInstallations (1.7.0): - FirebaseCore (~> 6.10) - GoogleUtilities/Environment (~> 6.7) @@ -55,11 +340,20 @@ PODS: - GoogleUtilities/Reachability (~> 6.7) - GoogleUtilities/UserDefaults (~> 6.7) - Protobuf (>= 3.9.2, ~> 3.9) + - FirebaseStorage (3.9.1): + - FirebaseCore (~> 6.10) + - GTMSessionFetcher/Core (~> 1.1) - Flutter (1.0.0) - flutter_flexible_toast (0.0.1): - Flutter - flutter_plugin_android_lifecycle (0.0.1): - Flutter + - GoogleAppMeasurement (6.8.3): + - GoogleUtilities/AppDelegateSwizzler (~> 6.7) + - GoogleUtilities/MethodSwizzler (~> 6.7) + - GoogleUtilities/Network (~> 6.7) + - "GoogleUtilities/NSData+zlib (~> 6.7)" + - nanopb (~> 1.30906.0) - GoogleDataTransport (7.5.1): - nanopb (~> 1.30906.0) - GoogleUtilities/AppDelegateSwizzler (6.7.2): @@ -70,6 +364,8 @@ PODS: - PromisesObjC (~> 1.2) - GoogleUtilities/Logger (6.7.2): - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (6.7.2): + - GoogleUtilities/Logger - GoogleUtilities/Network (6.7.2): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" @@ -79,10 +375,36 @@ PODS: - GoogleUtilities/Logger - GoogleUtilities/UserDefaults (6.7.2): - GoogleUtilities/Logger + - "gRPC-C++ (1.28.2)": + - "gRPC-C++/Implementation (= 1.28.2)" + - "gRPC-C++/Interface (= 1.28.2)" + - "gRPC-C++/Implementation (1.28.2)": + - abseil/container/inlined_vector (= 0.20200225.0) + - abseil/memory/memory (= 0.20200225.0) + - abseil/strings/str_format (= 0.20200225.0) + - abseil/strings/strings (= 0.20200225.0) + - abseil/types/optional (= 0.20200225.0) + - "gRPC-C++/Interface (= 1.28.2)" + - gRPC-Core (= 1.28.2) + - "gRPC-C++/Interface (1.28.2)" + - gRPC-Core (1.28.2): + - gRPC-Core/Implementation (= 1.28.2) + - gRPC-Core/Interface (= 1.28.2) + - gRPC-Core/Implementation (1.28.2): + - abseil/container/inlined_vector (= 0.20200225.0) + - abseil/memory/memory (= 0.20200225.0) + - abseil/strings/str_format (= 0.20200225.0) + - abseil/strings/strings (= 0.20200225.0) + - abseil/types/optional (= 0.20200225.0) + - BoringSSL-GRPC (= 0.0.7) + - gRPC-Core/Interface (= 1.28.2) + - gRPC-Core/Interface (1.28.2) + - GTMSessionFetcher/Core (1.5.0) - hexcolor (0.0.1): - Flutter - imei_plugin (0.0.1): - Flutter + - leveldb-library (1.22) - local_auth (0.0.1): - Flutter - maps_launcher (0.0.1): @@ -132,13 +454,20 @@ PODS: DEPENDENCIES: - Alamofire - barcode_scan (from `.symlinks/plugins/barcode_scan/ios`) + - cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) + - cloud_firestore_web (from `.symlinks/plugins/cloud_firestore_web/ios`) - connectivity (from `.symlinks/plugins/connectivity/ios`) - connectivity_for_web (from `.symlinks/plugins/connectivity_for_web/ios`) - connectivity_macos (from `.symlinks/plugins/connectivity_macos/ios`) - device_info (from `.symlinks/plugins/device_info/ios`) + - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) + - firebase_analytics_web (from `.symlinks/plugins/firebase_analytics_web/ios`) + - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) + - firebase_auth_web (from `.symlinks/plugins/firebase_auth_web/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - firebase_core_web (from `.symlinks/plugins/firebase_core_web/ios`) - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) + - firebase_storage (from `.symlinks/plugins/firebase_storage/ios`) - Flutter (from `Flutter`) - flutter_flexible_toast (from `.symlinks/plugins/flutter_flexible_toast/ios`) - flutter_plugin_android_lifecycle (from `.symlinks/plugins/flutter_plugin_android_lifecycle/ios`) @@ -164,15 +493,26 @@ DEPENDENCIES: SPEC REPOS: trunk: + - abseil - Alamofire + - BoringSSL-GRPC - Firebase + - FirebaseAnalytics + - FirebaseAuth - FirebaseCore - FirebaseCoreDiagnostics + - FirebaseFirestore - FirebaseInstallations - FirebaseInstanceID - FirebaseMessaging + - FirebaseStorage + - GoogleAppMeasurement - GoogleDataTransport - GoogleUtilities + - "gRPC-C++" + - gRPC-Core + - GTMSessionFetcher + - leveldb-library - MTBBarcodeScanner - nanopb - OpenTok @@ -185,6 +525,10 @@ SPEC REPOS: EXTERNAL SOURCES: barcode_scan: :path: ".symlinks/plugins/barcode_scan/ios" + cloud_firestore: + :path: ".symlinks/plugins/cloud_firestore/ios" + cloud_firestore_web: + :path: ".symlinks/plugins/cloud_firestore_web/ios" connectivity: :path: ".symlinks/plugins/connectivity/ios" connectivity_for_web: @@ -193,12 +537,22 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/connectivity_macos/ios" device_info: :path: ".symlinks/plugins/device_info/ios" + firebase_analytics: + :path: ".symlinks/plugins/firebase_analytics/ios" + firebase_analytics_web: + :path: ".symlinks/plugins/firebase_analytics_web/ios" + firebase_auth: + :path: ".symlinks/plugins/firebase_auth/ios" + firebase_auth_web: + :path: ".symlinks/plugins/firebase_auth_web/ios" firebase_core: :path: ".symlinks/plugins/firebase_core/ios" firebase_core_web: :path: ".symlinks/plugins/firebase_core_web/ios" firebase_messaging: :path: ".symlinks/plugins/firebase_messaging/ios" + firebase_storage: + :path: ".symlinks/plugins/firebase_storage/ios" Flutter: :path: Flutter flutter_flexible_toast: @@ -243,28 +597,46 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_windows/ios" SPEC CHECKSUMS: + abseil: 6c8eb7892aefa08d929b39f9bb108e5367e3228f Alamofire: 85e8a02c69d6020a0d734f6054870d7ecb75cf18 barcode_scan: a5c27959edfafaa0c771905bad0b29d6d39e4479 + BoringSSL-GRPC: 8edf627ee524575e2f8d19d56f068b448eea3879 + cloud_firestore: 19c6f947dd14be9d71695ea23eefde67cd8829c8 + cloud_firestore_web: 9ec3dc7f5f98de5129339802d491c1204462bfec connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 connectivity_for_web: 2b8584556930d4bd490d82b836bcf45067ce345b connectivity_macos: e2e9731b6b22dda39eb1b128f6969d574460e191 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 Firebase: 8db6f2d1b2c5e2984efba4949a145875a8f65fe5 - firebase_core: 5d6a02f3d85acd5f8321c2d6d62877626a670659 + firebase_analytics: 52ba26fcfb9cc90f76b36c4e5200cc0a7e9024eb + firebase_analytics_web: 7d539061ea4af07563a0e21044af89cab70efec0 + firebase_auth: 240419f6b00dea39c60a2a9c4379c16c4a4b02fb + firebase_auth_web: 0955c07bcc06e84af76b9d4e32e6f31518f2d7de + firebase_core: 350ba329d1641211bc6183a3236893cafdacfea7 firebase_core_web: d501d8b946b60c8af265428ce483b0fff5ad52d1 firebase_messaging: 0aea2cd5885b65e19ede58ee3507f485c992cc75 + firebase_storage: d5cf595245e1770ef7081b026f603771bf5dd547 + FirebaseAnalytics: 5dd088bd2e67bb9d13dbf792d1164ceaf3052193 + FirebaseAuth: c92d49ada7948d1a23466e3db17bc4c2039dddc3 FirebaseCore: d889d9e12535b7f36ac8bfbf1713a0836a3012cd FirebaseCoreDiagnostics: 770ac5958e1372ce67959ae4b4f31d8e127c3ac1 + FirebaseFirestore: adff4877869ca91a11250cc0989a6cd56bad163f FirebaseInstallations: 466c7b4d1f58fe16707693091da253726a731ed2 FirebaseInstanceID: bd3ffc24367f901a43c063b36c640b345a4a5dd1 FirebaseMessaging: 5eca4ef173de76253352511aafef774caa1cba2a + FirebaseStorage: 15e0f15ef3c7fec3d1899d68623e47d4447066b4 Flutter: 0e3d915762c693b495b44d77113d4970485de6ec flutter_flexible_toast: 0547e740cae0c33bb7c51bcd931233f4584e1143 flutter_plugin_android_lifecycle: dc0b544e129eebb77a6bfb1239d4d1c673a60a35 + GoogleAppMeasurement: 966e88df9d19c15715137bb2ddaf52373f111436 GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833 GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3 + "gRPC-C++": 13d8ccef97d5c3c441b7e3c529ef28ebee86fad2 + gRPC-Core: 4afa11bfbedf7cdecd04de535a9e046893404ed5 + GTMSessionFetcher: b3503b20a988c4e20cc189aa798fd18220133f52 hexcolor: fdfb9c4258ad96e949c2dbcdf790a62194b8aa89 imei_plugin: cb1af7c223ac2d82dcd1457a7137d93d65d2a3cd + leveldb-library: 55d93ee664b4007aac644a782d11da33fba316f7 local_auth: 25938960984c3a7f6e3253e3f8d962fdd16852bd maps_launcher: eae38ee13a9c3f210fa04e04bb4c073fa4c6ed92 MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb @@ -292,4 +664,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 649616dc336b3659ac6b2b25159d8e488e042b69 -COCOAPODS: 1.10.0.rc.1 +COCOAPODS: 1.10.0 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index dcd750d8..f35ae084 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 29211E4225C172B700DD740D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 29211E4125C172B700DD740D /* GoogleService-Info.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; @@ -34,6 +35,8 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 29211CD725C165D600DD740D /* RunnerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerRelease.entitlements; sourceTree = ""; }; + 29211E4125C172B700DD740D /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -108,6 +111,8 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( + 29211E4125C172B700DD740D /* GoogleService-Info.plist */, + 29211CD725C165D600DD740D /* RunnerRelease.entitlements */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, @@ -204,6 +209,7 @@ files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 29211E4225C172B700DD740D /* GoogleService-Info.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); @@ -354,7 +360,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -437,7 +443,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -486,7 +492,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -530,6 +536,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = 3A359E86ZF; ENABLE_BITCODE = NO; diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 4512a3b1..b97c7000 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,7 +1,6 @@ import UIKit import Flutter import OpenTok - // Created by Mohammad Aljammal & Elham Rababah on 24/06/20. // Copyright © 2020 Cloud. All rights reserved. @@ -23,7 +22,6 @@ import OpenTok _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - let controller : FlutterViewController = window?.rootViewController as! FlutterViewController let videoCallChannel = FlutterMethodChannel(name: "Dr.cloudSolution/videoCall", binaryMessenger: controller.binaryMessenger) diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..81c3af44 --- /dev/null +++ b/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,34 @@ + + + + + CLIENT_ID + 1097451043303-ifgtu6ub88dlk5dmv5tm531a5s47gbre.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.1097451043303-ifgtu6ub88dlk5dmv5tm531a5s47gbre + API_KEY + AIzaSyAKPayaNaI-2RN6S4PH5W9wYExmEgoBUvo + GCM_SENDER_ID + 1097451043303 + PLIST_VERSION + 1 + BUNDLE_ID + com.hmg.doctorApp + PROJECT_ID + doctor-app-35ddc + STORAGE_BUCKET + doctor-app-35ddc.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:1097451043303:ios:0e9b87e77dcf397d866542 + + \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index d0d77b5e..01dc72ef 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -47,10 +47,13 @@ NSCameraUsageDescription - ${PRODUCT_NAME} always camera use - + App requires access to camera incase you are interested to attach images to your Qr Code. + NSPhotoLibraryUsageDescription + Need to upload image + NSMicrophoneUsageDescription ${PRODUCT_NAME} always Microphone use - + FirebaseAppDelegateProxyEnabled + diff --git a/ios/Runner/RunnerRelease.entitlements b/ios/Runner/RunnerRelease.entitlements new file mode 100644 index 00000000..903def2a --- /dev/null +++ b/ios/Runner/RunnerRelease.entitlements @@ -0,0 +1,8 @@ + + + + + aps-environment + development + + diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 0ef7fe31..eea62b2a 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -677,5 +677,8 @@ const Map> localizedValues = { 'ICDName': { 'en': "ICDName", 'ar': "اسم ال ICD" + }, 'patient-name': { + 'en': "Patient Name", + 'ar': "اسم المريص" }, }; diff --git a/lib/main.dart b/lib/main.dart index 1283da1e..79994205 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ import 'package:doctor_app_flutter/core/viewModel/livecare_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:hexcolor/hexcolor.dart'; @@ -13,7 +14,9 @@ import './routes.dart'; import 'config/config.dart'; import 'locator.dart'; -void main() { +void main()async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(); setupLocator(); runApp(MyApp()); } diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index fc9a8bf8..717dbaa6 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -64,7 +64,15 @@ class _DashboardScreenState extends State { projectsProvider = Provider.of(context); projectsProvider.getDoctorClinicsList(); - _firebaseMessaging.setAutoInitEnabled(true); + // _firebaseMessaging.setAutoInitEnabled(true); + _firebaseMessaging.requestNotificationPermissions( + const IosNotificationSettings( + sound: true, badge: true, alert: true, provisional: true)); + _firebaseMessaging.onIosSettingsRegistered + .listen((IosNotificationSettings settings) { + print("Settings registered: $settings"); + }); + _firebaseMessaging.getToken().then((String token) async { if (token != '') { DEVICE_TOKEN = token; diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 01c8d90b..4d843141 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1042,6 +1042,9 @@ String get ICDName => localizedValues['referralStatus'][locale.languageCode]; String get referralRemark => localizedValues['referralRemark'][locale.languageCode]; + + String get patientName => + localizedValues['patient-name'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/patients/patient-referral-item-widget.dart b/lib/widgets/patients/patient-referral-item-widget.dart index fb8276c8..aaaa4e81 100644 --- a/lib/widgets/patients/patient-referral-item-widget.dart +++ b/lib/widgets/patients/patient-referral-item-widget.dart @@ -35,14 +35,7 @@ class PatientReferralItemWidget extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Center( - child: AppText( - patientName != null ? "${patientName}" : "", - color: Colors.black, - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ), + if (referralStatus != null) Row( children: [ @@ -107,7 +100,7 @@ class PatientReferralItemWidget extends StatelessWidget { child: AppText( referralDoctorName != null ? "${TranslationBase.of(context).dr} $referralDoctorName" - : "", + : "-", color: Colors.black, fontWeight: FontWeight.bold, fontSize: 12, @@ -135,6 +128,22 @@ class PatientReferralItemWidget extends StatelessWidget { ), ], ), + Row( + children: [ + AppText( + "${TranslationBase.of(context).patientName}: ", + color: Colors.black, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + AppText( + patientName??'-', + color: Colors.black, + fontWeight: FontWeight.bold, + fontSize: 16, + ), + ], + ), SizedBox( height: 8, ), diff --git a/pubspec.lock b/pubspec.lock index d49ad4a1..e6bd04c0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -183,6 +183,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0-nullsafety.1" + cloud_firestore: + dependency: "direct main" + description: + name: cloud_firestore + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.3" + cloud_firestore_platform_interface: + dependency: transitive + description: + name: cloud_firestore_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.1" code_builder: dependency: transitive description: @@ -323,27 +344,76 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "5.2.1" - firebase_core: + firebase: + dependency: transitive + description: + name: firebase + url: "https://pub.dartlang.org" + source: hosted + version: "7.3.3" + firebase_analytics: + dependency: "direct main" + description: + name: firebase_analytics + url: "https://pub.dartlang.org" + source: hosted + version: "6.2.0" + firebase_analytics_platform_interface: + dependency: transitive + description: + name: firebase_analytics_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + firebase_analytics_web: dependency: transitive + description: + name: firebase_analytics_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + url: "https://pub.dartlang.org" + source: hosted + version: "0.18.3" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + firebase_auth_web: + dependency: "direct main" + description: + name: firebase_auth_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.2" + firebase_core: + dependency: "direct main" description: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "0.5.3" + version: "0.5.2" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.0.0" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "0.2.1+1" + version: "0.2.1" firebase_messaging: dependency: "direct main" description: @@ -351,6 +421,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "7.0.3" + firebase_storage: + dependency: "direct main" + description: + name: firebase_storage + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.1" + firebase_storage_platform_interface: + dependency: transitive + description: + name: firebase_storage_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" fixnum: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 887ac913..3b7ab800 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -62,8 +62,14 @@ dependencies: #chart fl_chart: ^0.12.1 - #firebase - firebase_messaging: ^7.0.0 + # Firebase + firebase_core: ^0.5.2 + firebase_analytics: ^6.2.0 + firebase_auth: 0.18.3 + firebase_auth_web: ^0.3.2 + firebase_storage: ^5.0.1 + firebase_messaging: ^7.0.3 + cloud_firestore: ^0.14.3 #GIF image flutter_gifimage: ^1.0.1 From 6820e2d0974759dbee6ce29a4bfd7a3df826aa13 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Wed, 27 Jan 2021 12:56:03 +0200 Subject: [PATCH 13/23] remark fix in allergies --- .../subjective/update_allergies_widget.dart | 26 ++++++++++++++----- .../soap_update/update_assessment_page.dart | 12 +++++---- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart index df0cb683..14718f4c 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart @@ -120,13 +120,25 @@ class _UpdateAllergiesWidgetState extends State { ), Padding( padding: const EdgeInsets.symmetric(vertical: 8), - child: Container( - width: MediaQuery.of(context).size.width * 0.6, - child: AppText( - selectedAllergy.remark ?? '', - fontSize: 10, - color: Colors.grey, - ), + child: Row( + children: [ + AppText( + selectedAllergy.remark != null || + selectedAllergy.remark == '' + ? TranslationBase.of(context).remarks + " : " + : '', + fontWeight: FontWeight.bold, + fontSize: 13, + ), + Container( + width: MediaQuery.of(context).size.width * 0.55, + child: AppText( + selectedAllergy.remark ?? '', + fontSize: 10, + color: Colors.grey, + ), + ), + ], ), ), DividerWithSpacesAround() diff --git a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart index 61bf27f3..9c8eaf63 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -342,11 +342,13 @@ class _UpdateAssessmentPageState extends State { height: 6, ), AppText( - TranslationBase.of(context).remarks + " : ", - fontWeight: FontWeight - .bold, - fontSize: 13, - ), + assessment.remark != null || + assessment.remark == '' + ? TranslationBase.of(context).remarks + " : " + : '', + fontWeight: FontWeight.bold, + fontSize: 13, + ), Container( width: MediaQuery .of(context) From 7b914dab331dad0d8c9985c1bd4eae022159d28e Mon Sep 17 00:00:00 2001 From: Mohammad Aljammal Date: Wed, 27 Jan 2021 13:07:26 +0200 Subject: [PATCH 14/23] fix android --- android/app/build.gradle | 8 ++-- pubspec.lock | 86 +--------------------------------------- pubspec.yaml | 9 +---- 3 files changed, 7 insertions(+), 96 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index da345fc2..af0821ee 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -26,7 +26,7 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 29 + compileSdkVersion 30 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -40,7 +40,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.doctor_app_flutter" minSdkVersion 18 - targetSdkVersion 29 + targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -73,10 +73,10 @@ dependencies { implementation 'com.opentok.android:opentok-android-sdk:2.16.5' //permissions implementation 'pub.devrel:easypermissions:0.4.0' -implementation 'com.google.firebase:firebase-core:9.6.1' //retrofit implementation 'com.squareup.retrofit2:retrofit:2.6.2' implementation 'com.squareup.retrofit2:converter-gson:2.6.2' implementation 'com.squareup.okhttp3:logging-interceptor:3.14.1' - apply plugin: 'com.google.gms.google-services' + } +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index e6bd04c0..8a1531c1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -183,27 +183,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0-nullsafety.1" - cloud_firestore: - dependency: "direct main" - description: - name: cloud_firestore - url: "https://pub.dartlang.org" - source: hosted - version: "0.14.3" - cloud_firestore_platform_interface: - dependency: transitive - description: - name: cloud_firestore_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "2.2.0" - cloud_firestore_web: - dependency: transitive - description: - name: cloud_firestore_web - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.1" code_builder: dependency: transitive description: @@ -344,57 +323,8 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "5.2.1" - firebase: - dependency: transitive - description: - name: firebase - url: "https://pub.dartlang.org" - source: hosted - version: "7.3.3" - firebase_analytics: - dependency: "direct main" - description: - name: firebase_analytics - url: "https://pub.dartlang.org" - source: hosted - version: "6.2.0" - firebase_analytics_platform_interface: - dependency: transitive - description: - name: firebase_analytics_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.3" - firebase_analytics_web: - dependency: transitive - description: - name: firebase_analytics_web - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.1" - firebase_auth: - dependency: "direct main" - description: - name: firebase_auth - url: "https://pub.dartlang.org" - source: hosted - version: "0.18.3" - firebase_auth_platform_interface: - dependency: transitive - description: - name: firebase_auth_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.3" - firebase_auth_web: - dependency: "direct main" - description: - name: firebase_auth_web - url: "https://pub.dartlang.org" - source: hosted - version: "0.3.2" firebase_core: - dependency: "direct main" + dependency: transitive description: name: firebase_core url: "https://pub.dartlang.org" @@ -421,20 +351,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "7.0.3" - firebase_storage: - dependency: "direct main" - description: - name: firebase_storage - url: "https://pub.dartlang.org" - source: hosted - version: "5.0.1" - firebase_storage_platform_interface: - dependency: transitive - description: - name: firebase_storage_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" fixnum: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 3b7ab800..1e0b6734 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -62,14 +62,9 @@ dependencies: #chart fl_chart: ^0.12.1 - # Firebase - firebase_core: ^0.5.2 - firebase_analytics: ^6.2.0 - firebase_auth: 0.18.3 - firebase_auth_web: ^0.3.2 - firebase_storage: ^5.0.1 + # Firebase firebase_messaging: ^7.0.3 - cloud_firestore: ^0.14.3 + #GIF image flutter_gifimage: ^1.0.1 From c2df29102917555134b2db7d65769088465162d2 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Thu, 28 Jan 2021 09:18:49 +0200 Subject: [PATCH 15/23] DA - 286 Fix --- lib/config/localized_values.dart | 9 +++- .../viewModel/patient-referral-viewmodel.dart | 50 +++++++++++++------ .../referral/my-referral-detail-screen.dart | 2 +- .../referral/referred-patient-screen.dart | 2 +- lib/util/translations_delegate_base.dart | 5 ++ .../patient-referral-item-widget.dart | 23 +++++---- pubspec.lock | 16 +++--- 7 files changed, 71 insertions(+), 36 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 06aadac0..6b6b6939 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -686,6 +686,11 @@ const Map> localizedValues = { 'months': {'en': "Months", 'ar': "أشهر"}, 'years': {'en': "Years", 'ar': "سنين"}, 'hr': {'en': "HR", 'ar': "س"}, - 'min': {'en': "Min", 'ar': "د"} - // 'icd': {'en': "ICD", 'ar': " "} + 'min': {'en': "Min", 'ar': "د"}, + 'referralStatusHold': {'en': "Hold", 'ar': "معلق"}, + 'referralStatusActive': {'en': "Active", 'ar': "نشط"}, + 'referralStatusCancelled': {'en': "Cancelled", 'ar': "ملغاة"}, + 'referralStatusCompleted': {'en': "Completed", 'ar': "مكتمل"}, + 'referralStatusNotSeen': {'en': "NotSeen", 'ar': "لم يرى"}, + // 'icd': {'en': "ICD", 'ar': " "}, }; diff --git a/lib/core/viewModel/patient-referral-viewmodel.dart b/lib/core/viewModel/patient-referral-viewmodel.dart index b9987601..5771d1db 100644 --- a/lib/core/viewModel/patient-referral-viewmodel.dart +++ b/lib/core/viewModel/patient-referral-viewmodel.dart @@ -8,6 +8,8 @@ import 'package:doctor_app_flutter/models/patient/PatientArrivalEntity.dart'; import 'package:doctor_app_flutter/models/patient/my_referral/PendingReferral.dart'; import 'package:doctor_app_flutter/models/patient/my_referral/my_referred_patient_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:flutter/cupertino.dart'; import '../../locator.dart'; @@ -40,8 +42,8 @@ class PatientReferralViewModel extends BaseViewModel { error = _referralPatientService.error; setState(ViewState.Error); } else { - if(patientReferral.length == 0){ - await getMasterLookup(MasterKeysService.physiotherapyGoals); + if (patientReferral.length == 0) { + await getMasterLookup(MasterKeysService.physiotherapyGoals); } else { setState(ViewState.Idle); } @@ -126,7 +128,8 @@ class PatientReferralViewModel extends BaseViewModel { setState(ViewState.Idle); } - Future responseReferral(PendingReferral pendingReferral, bool isAccepted) async { + Future responseReferral( + PendingReferral pendingReferral, bool isAccepted) async { setState(ViewState.Busy); await _referralPatientService.responseReferral(pendingReferral, isAccepted); if (_referralPatientService.hasError) { @@ -136,14 +139,11 @@ class PatientReferralViewModel extends BaseViewModel { setState(ViewState.Idle); } - Future makeReferral(PatiantInformtion patient, - String isoStringDate, - int projectID, - int clinicID, - int doctorID, - String remarks) async { + Future makeReferral(PatiantInformtion patient, String isoStringDate, + int projectID, int clinicID, int doctorID, String remarks) async { setState(ViewState.Busy); - await _referralPatientService.makeReferral(patient, isoStringDate, projectID, clinicID, doctorID, remarks); + await _referralPatientService.makeReferral( + patient, isoStringDate, projectID, clinicID, doctorID, remarks); if (_referralPatientService.hasError) { error = _referralPatientService.error; setState(ViewState.Error); @@ -152,18 +152,40 @@ class PatientReferralViewModel extends BaseViewModel { } } - Future getPatientDetails(String fromDate, String toDate, int patientMrn, int appointmentNo) async { + Future getPatientDetails( + String fromDate, String toDate, int patientMrn, int appointmentNo) async { setState(ViewState.Busy); - await _referralPatientService.getPatientArrivalList(toDate, fromDate: fromDate, patientMrn: patientMrn, appointmentNo: appointmentNo); + await _referralPatientService.getPatientArrivalList(toDate, + fromDate: fromDate, + patientMrn: patientMrn, + appointmentNo: appointmentNo); if (_referralPatientService.hasError) { - error = _referralPatientService.error; - setState(ViewState.Error); + error = _referralPatientService.error; + setState(ViewState.Error); } else { setState(ViewState.Idle); } } + /* * model .getPatientArrivalList()*/ + + String getReferralStatusNameByCode(int statusCode, BuildContext context) { + switch (statusCode) { + case 1: + return TranslationBase.of(context).referralStatusHold; + case 2: + return TranslationBase.of(context).referralStatusActive; + case 4: + return TranslationBase.of(context).referralStatusCancelled; + case 46: + return TranslationBase.of(context).referralStatusCompleted; + case 63: + return TranslationBase.of(context).referralStatusNotSeen; + default: + return "-"; + } + } } diff --git a/lib/screens/patients/profile/referral/my-referral-detail-screen.dart b/lib/screens/patients/profile/referral/my-referral-detail-screen.dart index 9d3c9f00..b76df591 100644 --- a/lib/screens/patients/profile/referral/my-referral-detail-screen.dart +++ b/lib/screens/patients/profile/referral/my-referral-detail-screen.dart @@ -42,7 +42,7 @@ class MyReferralDetailScreen extends StatelessWidget { builder: (_, model, w) => AppScaffold( baseViewModel: model, appBarTitle: TranslationBase.of(context).referPatient, - body: model.patientArrivalList != null + body: model.patientArrivalList != null && model.patientArrivalList.length > 0 ? Column( children: [ Expanded( diff --git a/lib/screens/patients/profile/referral/referred-patient-screen.dart b/lib/screens/patients/profile/referral/referred-patient-screen.dart index c1880908..4dc0e647 100644 --- a/lib/screens/patients/profile/referral/referred-patient-screen.dart +++ b/lib/screens/patients/profile/referral/referred-patient-screen.dart @@ -48,7 +48,7 @@ class ReferredPatientScreen extends StatelessWidget { patientName: "${model.getReferredPatientItem(index).firstName} ${model.getReferredPatientItem(index).middleName} ${model.getReferredPatientItem(index).lastName}", referralStatus: - "${model.getReferredPatientItem(index).referralStatus}", + "${model.getReferralStatusNameByCode(model.getReferredPatientItem(index).referralStatus, context)}", isReferredTo: true, isSameBranch: model .getReferredPatientItem(index) diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index fe2526bc..71409538 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1060,6 +1060,11 @@ String get ICDName => String get min => localizedValues['min'][locale.languageCode]; String get months => localizedValues['months'][locale.languageCode]; String get years => localizedValues['years'][locale.languageCode]; + String get referralStatusHold => localizedValues['referralStatusHold'][locale.languageCode]; + String get referralStatusActive => localizedValues['referralStatusActive'][locale.languageCode]; + String get referralStatusCancelled => localizedValues['referralStatusCancelled'][locale.languageCode]; + String get referralStatusCompleted => localizedValues['referralStatusCompleted'][locale.languageCode]; + String get referralStatusNotSeen => localizedValues['referralStatusNotSeen'][locale.languageCode]; String get patientName => localizedValues['patient-name'][locale.languageCode]; diff --git a/lib/widgets/patients/patient-referral-item-widget.dart b/lib/widgets/patients/patient-referral-item-widget.dart index aaaa4e81..db45a015 100644 --- a/lib/widgets/patients/patient-referral-item-widget.dart +++ b/lib/widgets/patients/patient-referral-item-widget.dart @@ -70,7 +70,7 @@ class PatientReferralItemWidget extends StatelessWidget { isReferredTo ? "${TranslationBase.of(context).referTo}: " : "${TranslationBase.of(context).referredFrom}: ", - color: Colors.black, + color: Colors.grey, fontWeight: FontWeight.bold, fontSize: 12, ), @@ -78,8 +78,8 @@ class PatientReferralItemWidget extends StatelessWidget { isSameBranch ? TranslationBase.of(context).sameBranch : TranslationBase.of(context).otherBranch, - color: Colors.grey, - fontWeight: FontWeight.normal, + color: Colors.black, + fontWeight: FontWeight.bold, fontSize: 12, ), ], @@ -116,23 +116,26 @@ class PatientReferralItemWidget extends StatelessWidget { children: [ AppText( "${TranslationBase.of(context).clinic}: ", - color: Colors.black, + color: Colors.grey, fontWeight: FontWeight.bold, fontSize: 12, ), AppText( clinicDescription, - color: Colors.grey, - fontWeight: FontWeight.normal, + color: Colors.black, + fontWeight: FontWeight.bold, fontSize: 12, ), ], ), + SizedBox( + height: 8, + ), Row( children: [ AppText( "${TranslationBase.of(context).patientName}: ", - color: Colors.black, + color: Colors.grey, fontWeight: FontWeight.bold, fontSize: 12, ), @@ -140,7 +143,7 @@ class PatientReferralItemWidget extends StatelessWidget { patientName??'-', color: Colors.black, fontWeight: FontWeight.bold, - fontSize: 16, + fontSize: 12, ), ], ), @@ -157,8 +160,8 @@ class PatientReferralItemWidget extends StatelessWidget { ), AppText( remark, - color: Colors.grey, - fontWeight: FontWeight.normal, + color: Colors.black, + fontWeight: FontWeight.bold, fontSize: 12, ), ], diff --git a/pubspec.lock b/pubspec.lock index 8a1531c1..e51c9489 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -105,7 +105,7 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "1.10.13" + version: "1.11.0" build_runner_core: dependency: transitive description: @@ -329,21 +329,21 @@ packages: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "0.5.2" + version: "0.5.3" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "0.2.1" + version: "0.2.1+1" firebase_messaging: dependency: "direct main" description: @@ -510,7 +510,7 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.3-nullsafety.1" + version: "0.6.2" json_annotation: dependency: transitive description: @@ -706,7 +706,7 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "4.3.2+4" + version: "4.3.3" pub_semver: dependency: transitive description: @@ -776,7 +776,7 @@ packages: name: shared_preferences_windows url: "https://pub.dartlang.org" source: hosted - version: "0.0.1+3" + version: "0.0.2+2" shelf: dependency: transitive description: @@ -935,7 +935,7 @@ packages: name: web_socket_channel url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" win32: dependency: transitive description: From b9b5ec09e45f1667504438096afb7b06c6c95d45 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Thu, 28 Jan 2021 09:54:03 +0200 Subject: [PATCH 16/23] fix : DA-248 --- .../patients/profile/profile_medical_info_widget.dart | 9 --------- 1 file changed, 9 deletions(-) diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index e839a0b9..b5b60619 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -8,7 +8,6 @@ import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; -import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; @@ -140,14 +139,6 @@ class ProfileMedicalInfoWidget extends StatelessWidget { nameLine1: TranslationBase.of(context).myReferral, nameLine2: TranslationBase.of(context).patient, icon: 'note.png'), - if (selectedPatientType != 0 && selectedPatientType != 5) - PatientProfileButton( - key: key, - patient: patient, - route: PATIENT_ORDERS, - nameLine1: TranslationBase.of(context).orders, - nameLine2: TranslationBase.of(context).list, - icon: 'radiology-1.png'), if (int.parse(patientType) == 7 || int.parse(patientType) == 6) PatientProfileButton( key: key, From a64088320f26ac823947160ca82c1d28f6da2ea9 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Thu, 28 Jan 2021 10:33:12 +0200 Subject: [PATCH 17/23] DA-259 translation bug --- lib/config/localized_values.dart | 1 + .../patients/profile/referral/referred-patient-screen.dart | 2 +- lib/util/translations_delegate_base.dart | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 6b6b6939..47e7ab39 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -52,6 +52,7 @@ const Map> localizedValues = { 'referPatient': {'en': 'Referral Patient', 'ar': 'إحالة مريض'}, 'myReferral': {'en': 'My Referral', 'ar': 'إحالة'}, 'myReferredPatient': {'en': 'My Referred Patient', 'ar': 'مرضاي المحالين'}, + 'referredPatient': {'en': 'Referred Patient', 'ar': 'المرضى المحالين'}, 'firstName': {'en': 'First Name', 'ar': 'الاسم الاول'}, 'middleName': {'en': 'Middle Name', 'ar': 'اسم الاب'}, 'lastName': {'en': 'Last Name', 'ar': 'اسم العائلة'}, diff --git a/lib/screens/patients/profile/referral/referred-patient-screen.dart b/lib/screens/patients/profile/referral/referred-patient-screen.dart index 4dc0e647..a842e6ae 100644 --- a/lib/screens/patients/profile/referral/referred-patient-screen.dart +++ b/lib/screens/patients/profile/referral/referred-patient-screen.dart @@ -14,7 +14,7 @@ class ReferredPatientScreen extends StatelessWidget { onModelReady: (model) => model.getMyReferredPatient(), builder: (_, model, w) => AppScaffold( baseViewModel: model, - appBarTitle: TranslationBase.of(context).referPatient, + appBarTitle: TranslationBase.of(context).referredPatient, body: model.listMyReferredPatientModel == null || model.listMyReferredPatientModel.length == 0 ? Center( diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 71409538..77937a32 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -117,6 +117,8 @@ class TranslationBase { String get myReferredPatient => localizedValues['myReferredPatient'][locale.languageCode]; + String get referredPatient => + localizedValues['referredPatient'][locale.languageCode]; String get firstName => localizedValues['firstName'][locale.languageCode]; From de1d0283d234bd5a7c371ac7daad4bcda4624237 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Thu, 28 Jan 2021 15:47:08 +0200 Subject: [PATCH 18/23] some lables and translation changes and add search functionality for ListSelectDialog --- lib/config/localized_values.dart | 3 + .../referral/my-referral-detail-screen.dart | 15 ++-- .../referral/my-referral-patient-screen.dart | 14 ++-- .../referral/refer-patient-screen.dart | 73 ++++--------------- .../referral/referred-patient-screen.dart | 8 ++ lib/util/translations_delegate_base.dart | 4 + .../patient-referral-item-widget.dart | 47 +++++++++++- .../shared/dialogs/dailog-list-select.dart | 65 ++++++++++++++--- 8 files changed, 147 insertions(+), 82 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 47e7ab39..23132079 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -53,6 +53,7 @@ const Map> localizedValues = { 'myReferral': {'en': 'My Referral', 'ar': 'إحالة'}, 'myReferredPatient': {'en': 'My Referred Patient', 'ar': 'مرضاي المحالين'}, 'referredPatient': {'en': 'Referred Patient', 'ar': 'المرضى المحالين'}, + 'referredOn': {'en': 'referred On : ', 'ar': ' : تمت الإحالة في'}, 'firstName': {'en': 'First Name', 'ar': 'الاسم الاول'}, 'middleName': {'en': 'Middle Name', 'ar': 'اسم الاب'}, 'lastName': {'en': 'Last Name', 'ar': 'اسم العائلة'}, @@ -693,5 +694,7 @@ const Map> localizedValues = { 'referralStatusCancelled': {'en': "Cancelled", 'ar': "ملغاة"}, 'referralStatusCompleted': {'en': "Completed", 'ar': "مكتمل"}, 'referralStatusNotSeen': {'en': "NotSeen", 'ar': "لم يرى"}, + 'clinicSearch': {'en': "Search Clinic", 'ar': "بحث عن عيادة"}, + 'doctorSearch': {'en': "Search Doctor", 'ar': "بحث عن طبيب"}, // 'icd': {'en': "ICD", 'ar': " "}, }; diff --git a/lib/screens/patients/profile/referral/my-referral-detail-screen.dart b/lib/screens/patients/profile/referral/my-referral-detail-screen.dart index b76df591..433fe232 100644 --- a/lib/screens/patients/profile/referral/my-referral-detail-screen.dart +++ b/lib/screens/patients/profile/referral/my-referral-detail-screen.dart @@ -42,7 +42,8 @@ class MyReferralDetailScreen extends StatelessWidget { builder: (_, model, w) => AppScaffold( baseViewModel: model, appBarTitle: TranslationBase.of(context).referPatient, - body: model.patientArrivalList != null && model.patientArrivalList.length > 0 + body: model.patientArrivalList != null && + model.patientArrivalList.length > 0 ? Column( children: [ Expanded( @@ -77,6 +78,7 @@ class MyReferralDetailScreen extends StatelessWidget { ), ), PatientReferralItemWidget( + "${pendingReferral.patientID}", patientName: pendingReferral.patientName, referralStatus: null, isReferredTo: false, @@ -86,6 +88,7 @@ class MyReferralDetailScreen extends StatelessWidget { pendingReferral.referredByDoctorInfo, clinicDescription: null, remark: pendingReferral.remarksFromSource, + referredOn: pendingReferral.referredOn, ), SizedBox( child: GridView.count( @@ -147,8 +150,9 @@ class MyReferralDetailScreen extends StatelessWidget { hPadding: 8, vPadding: 12, handler: () async { - await model.responseReferral(pendingReferral, true); - if(model.state == ViewState.ErrorLocal){ + await model.responseReferral( + pendingReferral, true); + if (model.state == ViewState.ErrorLocal) { DrAppToastMsg.showErrorToast(model.error); } }, @@ -166,8 +170,9 @@ class MyReferralDetailScreen extends StatelessWidget { hPadding: 8, vPadding: 12, handler: () async { - await model.responseReferral(pendingReferral, true); - if(model.state == ViewState.ErrorLocal){ + await model.responseReferral( + pendingReferral, true); + if (model.state == ViewState.ErrorLocal) { DrAppToastMsg.showErrorToast(model.error); } }, diff --git a/lib/screens/patients/profile/referral/my-referral-patient-screen.dart b/lib/screens/patients/profile/referral/my-referral-patient-screen.dart index 311e2f12..ab2beaf8 100644 --- a/lib/screens/patients/profile/referral/my-referral-patient-screen.dart +++ b/lib/screens/patients/profile/referral/my-referral-patient-screen.dart @@ -23,8 +23,7 @@ class MyReferralPatientScreen extends StatelessWidget { builder: (_, model, w) => AppScaffold( baseViewModel: model, appBarTitle: TranslationBase.of(context).referPatient, - body: model.pendingReferral == null || - model.pendingReferral.length == 0 + body: model.pendingReferral == null || model.pendingReferral.length == 0 ? Center( child: AppText( TranslationBase.of(context).referralEmptyMsg, @@ -62,6 +61,7 @@ class MyReferralPatientScreen extends StatelessWidget { ...List.generate( model.pendingReferral.length, (index) => PatientReferralItemWidget( + "${model.pendingReferral[index].patientID}", patientName: model.pendingReferral[index].patientName, referralStatus: null, isReferredTo: false, @@ -72,13 +72,13 @@ class MyReferralPatientScreen extends StatelessWidget { clinicDescription: null, remark: model.pendingReferral[index].remarksFromSource, + referredOn: model.pendingReferral[index].referredOn, infoIcon: InkWell( onTap: () { - Navigator.of(context).pushNamed( - MY_REFERRAL_DETAIL, - arguments: { - 'referral': model.pendingReferral[index] - }); + Navigator.of(context) + .pushNamed(MY_REFERRAL_DETAIL, arguments: { + 'referral': model.pendingReferral[index] + }); }, child: Icon( Icons.info_outline, diff --git a/lib/screens/patients/profile/referral/refer-patient-screen.dart b/lib/screens/patients/profile/referral/refer-patient-screen.dart index 04eba96e..a3d74430 100644 --- a/lib/screens/patients/profile/referral/refer-patient-screen.dart +++ b/lib/screens/patients/profile/referral/refer-patient-screen.dart @@ -1,17 +1,14 @@ import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; -import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart'; -import 'package:doctor_app_flutter/models/patient/PatientArrivalEntity.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.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/patients/patient-referral-item-widget.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/app_loader_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; @@ -20,8 +17,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:hexcolor/hexcolor.dart'; -import '../../../QR_reader_screen.dart'; - class PatientMakeReferralScreen extends StatefulWidget { // previous design page is: ReferPatientScreen @override @@ -96,6 +91,7 @@ class _PatientMakeReferralScreenState extends State { model.patientReferral.length == 0 ? ReferralForm(model, screenSize) : PatientReferralItemWidget( + "${model.patientReferral[0].patientID}", patientName: model.patientReferral[0].patientName, referralStatus: "${model.patientReferral[0].referralStatus}", @@ -105,7 +101,9 @@ class _PatientMakeReferralScreenState extends State { referralDoctorName: model.patientReferral[0].referredByDoctorInfo, clinicDescription: null, - remark: model.patientReferral[0].remarksFromSource), + remark: model.patientReferral[0].remarksFromSource, + referredOn: model.patientReferral[0].referredOn, + ), ], ), if (model.patientReferral.length == 0) @@ -201,7 +199,7 @@ class _PatientMakeReferralScreenState extends State { } : null, child: TextField( - decoration: textFieldSelectorDecoration( + decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context).referTo, _referTo != null ? _referTo['name'] : null, true), @@ -248,7 +246,7 @@ class _PatientMakeReferralScreenState extends State { } : null, child: TextField( - decoration: textFieldSelectorDecoration( + decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context).branch, _selectedBranch != null ? _selectedBranch['facilityName'] @@ -272,6 +270,8 @@ class _PatientMakeReferralScreenState extends State { list: model.clinicsList, attributeName: 'ClinicDescription', attributeValueId: 'ClinicID', + usingSearch: true, + hintSearchText: TranslationBase.of(context).clinicSearch, okText: TranslationBase.of(context).ok, okFunction: (selectedValue) { setState(() { @@ -296,7 +296,7 @@ class _PatientMakeReferralScreenState extends State { } : null, child: TextField( - decoration: textFieldSelectorDecoration( + decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context).clinic, _selectedClinic != null ? _selectedClinic['ClinicDescription'] @@ -320,6 +320,8 @@ class _PatientMakeReferralScreenState extends State { list: model.doctorsList, attributeName: 'DoctorName', attributeValueId: 'DoctorID', + usingSearch: true, + hintSearchText: TranslationBase.of(context).doctorSearch, okText: TranslationBase.of(context).ok, okFunction: (selectedValue) { setState(() { @@ -337,7 +339,7 @@ class _PatientMakeReferralScreenState extends State { } : null, child: TextField( - decoration: textFieldSelectorDecoration( + decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context).doctor, _selectedDoctor != null ? _selectedDoctor['DoctorName'] @@ -355,7 +357,7 @@ class _PatientMakeReferralScreenState extends State { child: InkWell( onTap: () => _selectDate(context, model), child: TextField( - decoration: textFieldSelectorDecoration( + decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context).chooseAppointment, appointmentDate != null ? "${DateUtils.convertDateToFormat(appointmentDate, "yyyy-MM-dd")}" @@ -374,7 +376,7 @@ class _PatientMakeReferralScreenState extends State { ), Container( child: TextField( - decoration: textFieldSelectorDecoration( + decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context).remarks, null, false), enabled: true, controller: _remarksController, @@ -453,49 +455,4 @@ class _PatientMakeReferralScreenState extends State { });*/ } } - - InputDecoration textFieldSelectorDecoration( - String hintText, String selectedText, bool isDropDown, - {Icon suffixIcon}) { - return InputDecoration( - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), - borderRadius: BorderRadius.circular(8), - ), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), - borderRadius: BorderRadius.circular(8), - ), - disabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), - borderRadius: BorderRadius.circular(8), - ), - hintText: selectedText != null ? selectedText : hintText, - suffixIcon: isDropDown - ? suffixIcon != null - ? suffixIcon - : Icon( - Icons.arrow_drop_down, - color: Colors.black, - ) - : null, - hintStyle: TextStyle( - fontSize: 14, - color: Colors.grey.shade600, - ), - ); - } - - BoxDecoration containerBorderDecoration( - Color containerColor, Color borderColor) { - return BoxDecoration( - color: containerColor, - shape: BoxShape.rectangle, - borderRadius: BorderRadius.all(Radius.circular(6)), - border: Border.fromBorderSide(BorderSide( - color: borderColor, - width: 2.0, - )), - ); - } } diff --git a/lib/screens/patients/profile/referral/referred-patient-screen.dart b/lib/screens/patients/profile/referral/referred-patient-screen.dart index a842e6ae..323a9a9b 100644 --- a/lib/screens/patients/profile/referral/referred-patient-screen.dart +++ b/lib/screens/patients/profile/referral/referred-patient-screen.dart @@ -1,5 +1,6 @@ import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/patient-referral-item-widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; @@ -45,6 +46,7 @@ class ReferredPatientScreen extends StatelessWidget { ...List.generate( model.listMyReferredPatientModel.length, (index) => PatientReferralItemWidget( + "${model.getReferredPatientItem(index).patientId}", patientName: "${model.getReferredPatientItem(index).firstName} ${model.getReferredPatientItem(index).middleName} ${model.getReferredPatientItem(index).lastName}", referralStatus: @@ -62,6 +64,12 @@ class ReferredPatientScreen extends StatelessWidget { remark: model .getReferredPatientItem(index) .referringDoctorRemarks, + referredOn: model + .getReferredPatientItem(index) + .referralDate != + null + ? DateUtils.convertDateFromServerFormat(model.getReferredPatientItem(index).referralDate, "dd/MM/yyyy") + : null, ), ), ], diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 77937a32..4963484d 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -119,6 +119,8 @@ class TranslationBase { localizedValues['myReferredPatient'][locale.languageCode]; String get referredPatient => localizedValues['referredPatient'][locale.languageCode]; + String get referredOn => + localizedValues['referredOn'][locale.languageCode]; String get firstName => localizedValues['firstName'][locale.languageCode]; @@ -1067,6 +1069,8 @@ String get ICDName => String get referralStatusCancelled => localizedValues['referralStatusCancelled'][locale.languageCode]; String get referralStatusCompleted => localizedValues['referralStatusCompleted'][locale.languageCode]; String get referralStatusNotSeen => localizedValues['referralStatusNotSeen'][locale.languageCode]; + String get clinicSearch => localizedValues['clinicSearch'][locale.languageCode]; + String get doctorSearch => localizedValues['doctorSearch'][locale.languageCode]; String get patientName => localizedValues['patient-name'][locale.languageCode]; diff --git a/lib/widgets/patients/patient-referral-item-widget.dart b/lib/widgets/patients/patient-referral-item-widget.dart index db45a015..ab89ab33 100644 --- a/lib/widgets/patients/patient-referral-item-widget.dart +++ b/lib/widgets/patients/patient-referral-item-widget.dart @@ -4,15 +4,18 @@ import 'package:flutter/material.dart'; class PatientReferralItemWidget extends StatelessWidget { final String patientName; + final String patientID; final String referralStatus; final isReferredTo; final isSameBranch; final String referralDoctorName; final String clinicDescription; final String remark; + final String referredOn; final Widget infoIcon; - PatientReferralItemWidget({ + PatientReferralItemWidget( + this.patientID, { this.patientName, this.referralStatus, this.isReferredTo = false, @@ -20,6 +23,7 @@ class PatientReferralItemWidget extends StatelessWidget { this.referralDoctorName, this.clinicDescription, this.remark, + this.referredOn, this.infoIcon, }); @@ -35,7 +39,6 @@ class PatientReferralItemWidget extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (referralStatus != null) Row( children: [ @@ -131,6 +134,25 @@ class PatientReferralItemWidget extends StatelessWidget { SizedBox( height: 8, ), + Row( + children: [ + AppText( + "${TranslationBase.of(context).patientID}: ", + color: Colors.grey, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + AppText( + patientID ?? '-', + color: Colors.black, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ], + ), + SizedBox( + height: 8, + ), Row( children: [ AppText( @@ -140,7 +162,7 @@ class PatientReferralItemWidget extends StatelessWidget { fontSize: 12, ), AppText( - patientName??'-', + patientName ?? '-', color: Colors.black, fontWeight: FontWeight.bold, fontSize: 12, @@ -166,6 +188,25 @@ class PatientReferralItemWidget extends StatelessWidget { ), ], ), + SizedBox( + height: 8, + ), + Row( + children: [ + AppText( + TranslationBase.of(context).referredOn, + color: Colors.grey, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + AppText( + referredOn ?? '-', + color: Colors.black, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ], + ), SizedBox( height: 16, ), diff --git a/lib/widgets/shared/dialogs/dailog-list-select.dart b/lib/widgets/shared/dialogs/dailog-list-select.dart index b6df1f6f..f972e790 100644 --- a/lib/widgets/shared/dialogs/dailog-list-select.dart +++ b/lib/widgets/shared/dialogs/dailog-list-select.dart @@ -2,6 +2,8 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.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/TextFields.dart'; +import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; class ListSelectDialog extends StatefulWidget { @@ -12,24 +14,32 @@ class ListSelectDialog extends StatefulWidget { final Function(dynamic) okFunction; dynamic selectedValue; final Widget searchWidget; + final bool usingSearch; + final String hintSearchText; - ListSelectDialog( - {@required this.list, - @required this.attributeName, - @required this.attributeValueId, - @required this.okText, - @required this.okFunction, - this.searchWidget}); + ListSelectDialog({ + @required this.list, + @required this.attributeName, + @required this.attributeValueId, + @required this.okText, + @required this.okFunction, + this.searchWidget, + this.usingSearch = false, + this.hintSearchText, + }); @override _ListSelectDialogState createState() => _ListSelectDialogState(); } class _ListSelectDialogState extends State { + List items = List(); + @override void initState() { - super.initState(); widget.selectedValue = widget.selectedValue ?? widget.list[0]; + items.addAll(widget.list); + super.initState(); } @override @@ -69,7 +79,21 @@ class _ListSelectDialogState extends State { child: Column( children: [ if (widget.searchWidget != null) widget.searchWidget, - ...widget.list + if(widget.usingSearch) + Container( + height: MediaQuery.of(context).size.height * 0.070, + child: TextField( + decoration: Helpers.textFieldSelectorDecoration( + widget.hintSearchText ?? TranslationBase + .of(context) + .search, null, false, suffixIcon: Icon(Icons.search,)), + enabled: true, + keyboardType: TextInputType.text, + onChanged: (value) { + filterSearchResults(value); + }, + )), + ...items .map((item) => RadioListTile( title: Text("${item[widget.attributeName].toString()}"), groupValue: widget.selectedValue[widget.attributeValueId] @@ -95,4 +119,27 @@ class _ListSelectDialogState extends State { static closeAlertDialog(BuildContext context) { Navigator.of(context).pop(); } + + void filterSearchResults(String query) { + List dummySearchList = List(); + dummySearchList.addAll(widget.list); + if (query.isNotEmpty) { + List dummyListData = List(); + dummySearchList.forEach((item) { + if ("${item[widget.attributeName].toString()}".toLowerCase().contains(query.toLowerCase())) { + dummyListData.add(item); + } + }); + setState(() { + items.clear(); + items.addAll(dummyListData); + }); + return; + } else { + setState(() { + items.clear(); + items.addAll(widget.list); + }); + } + } } From 34692b94c27a7557432724099ab96e340004ef8b Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Thu, 28 Jan 2021 17:22:21 +0200 Subject: [PATCH 19/23] fix : DA-264 --- lib/config/localized_values.dart | 3 +- lib/util/translations_delegate_base.dart | 3 + .../subjective/update_allergies_widget.dart | 2 + .../subjective/update_subjective_page.dart | 26 +- .../soap_update/update_assessment_page.dart | 6 +- .../soap_update/update_objective_page.dart | 2 + .../profile/soap_update/update_plan_page.dart | 3 + lib/widgets/shared/TextFields.dart | 220 ++++++++++------ lib/widgets/shared/new_text_Field.dart | 239 ++++++++++++++++++ 9 files changed, 411 insertions(+), 93 deletions(-) create mode 100644 lib/widgets/shared/new_text_Field.dart diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 06aadac0..c045f330 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -686,6 +686,7 @@ const Map> localizedValues = { 'months': {'en': "Months", 'ar': "أشهر"}, 'years': {'en': "Years", 'ar': "سنين"}, 'hr': {'en': "HR", 'ar': "س"}, - 'min': {'en': "Min", 'ar': "د"} + 'min': {'en': "Min", 'ar': "د"}, + 'appointmentNumber': {'en': "Appointment Number", 'ar': "رقم الموعد"} // 'icd': {'en': "ICD", 'ar': " "} }; diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index fe2526bc..a622a1b5 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -1063,6 +1063,9 @@ String get ICDName => String get patientName => localizedValues['patient-name'][locale.languageCode]; + + String get appointmentNumber => + localizedValues['appointmentNumber'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart index 14718f4c..9e0e4e0e 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart @@ -410,6 +410,8 @@ class _AddAllergiesState extends State { margin: EdgeInsets.only( left: 0, right: 0, top: 15), child: TextFields( + hasLabelText: remarkController.text != ''?true:false, + showLabelText: true, hintText: TranslationBase.of(context).remarks, fontSize: 13.5, // hintColor: Colors.black, diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart b/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart index f4ad30ab..95c4063e 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_subjective_page.dart @@ -267,19 +267,21 @@ class _UpdateSubjectivePageState extends State { Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), child: TextFields( - hintText: TranslationBase - .of(context) + hasLabelText: complaintsController.text != '' + ? true + : false, + hintText: TranslationBase.of(context) .addChiefComplaints, fontSize: 13.5, // hintColor: Colors.black, + showLabelText: true, fontWeight: FontWeight.w600, maxLines: 25, minLines: 13, controller: complaintsController, validator: (value) { if (value == null || value == "") - return TranslationBase - .of(context) + return TranslationBase.of(context) .emptyMessage; else if (value.length < 25) return TranslationBase @@ -296,6 +298,10 @@ class _UpdateSubjectivePageState extends State { Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), child: TextFields( + hasLabelText: illnessController.text != '' + ? true + : false, + showLabelText: true, hintText: TranslationBase .of(context) .historyOfPresentIllness, @@ -322,17 +328,23 @@ class _UpdateSubjectivePageState extends State { Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), child: TextFields( - hintText: TranslationBase.of(context) + hasLabelText: medicationController.text != '' + ? true + : false, + showLabelText: true, + hintText: TranslationBase + .of(context) .currentMedications, fontSize: 13.5, // hintColor: Colors.black, fontWeight: FontWeight.w600, - maxLines: 2, + maxLines: 23, minLines: 1, controller: medicationController, validator: (value) { if (value == null || value == "") - return TranslationBase.of(context) + return TranslationBase + .of(context) .emptyMessage; else return null; diff --git a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart index 9c8eaf63..542d4196 100644 --- a/lib/widgets/patients/profile/soap_update/update_assessment_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_assessment_page.dart @@ -569,9 +569,11 @@ class _AddAssessmentDetailsState extends State { margin: EdgeInsets.only( left: 0, right: 0, top: 15), child: TextFields( - hintText: "Appointment Number", + hintText: TranslationBase.of(context).appointmentNumber, fontSize: 13.5, // hintColor: Colors.black, + hasLabelText: appointmentIdController.text != ''?true:false, + showLabelText: true, fontWeight: FontWeight.w600, readOnly: true, controller: appointmentIdController, @@ -735,6 +737,8 @@ class _AddAssessmentDetailsState extends State { fontWeight: FontWeight.w600, maxLines: 18, minLines: 5, + hasLabelText: remarkController.text != ''?true:false, + showLabelText: true, controller: remarkController, onChanged:(value) { widget.mySelectedAssessment.remark = remarkController.text; diff --git a/lib/widgets/patients/profile/soap_update/update_objective_page.dart b/lib/widgets/patients/profile/soap_update/update_objective_page.dart index adf1e3d2..93182207 100644 --- a/lib/widgets/patients/profile/soap_update/update_objective_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_objective_page.dart @@ -319,6 +319,8 @@ class _UpdateObjectivePageState extends State { margin: EdgeInsets.only( left: 0, right: 0, top: 15), child: TextFields( + hasLabelText: remarksController.text != ''?true:false, + showLabelText: true, hintText: TranslationBase.of(context).remarks, fontSize: 13.5, // hintColor: Colors.black, diff --git a/lib/widgets/patients/profile/soap_update/update_plan_page.dart b/lib/widgets/patients/profile/soap_update/update_plan_page.dart index 04b2b73d..e1388ef1 100644 --- a/lib/widgets/patients/profile/soap_update/update_plan_page.dart +++ b/lib/widgets/patients/profile/soap_update/update_plan_page.dart @@ -137,6 +137,7 @@ class _UpdatePlanPageState extends State { margin: EdgeInsets.only(left: 10, right: 10, top: 15), child: TextFields( + hintText: TranslationBase .of(context) .addProgressNote, @@ -361,6 +362,8 @@ class _UpdatePlanPageState extends State { margin: EdgeInsets.only(left: 0, right: 0, top: 15), child: TextFields( + hasLabelText: progressNoteController.text != ''?true:false, + showLabelText: true, hintText: TranslationBase.of(context).addProgressNote, fontSize: 13.5, // hintColor: Colors.black, diff --git a/lib/widgets/shared/TextFields.dart b/lib/widgets/shared/TextFields.dart index 20885eb3..8563bb41 100644 --- a/lib/widgets/shared/TextFields.dart +++ b/lib/widgets/shared/TextFields.dart @@ -74,7 +74,9 @@ class TextFields extends StatefulWidget { this.autoValidate = false, this.fillColor, this.hintColor, - this.onTapTextFields}) + this.hasBorder = true, + this.onTapTextFields, + this.hasLabelText = false, this.showLabelText= false}) : super(key: key); final String hintText; @@ -111,6 +113,9 @@ class TextFields extends StatefulWidget { final bool borderOnlyError; final Color hintColor; final Color fillColor; + final bool hasBorder; + final bool showLabelText; + bool hasLabelText; @override _TextFieldsState createState() => _TextFieldsState(); @@ -208,93 +213,140 @@ class _TextFieldsState extends State { offset: Offset(0.0, 13.0), blurRadius: focus ? 34.0 : 12.0) ]), - child: TextFormField( - onTap: widget.onTapTextFields, - keyboardAppearance: Theme.of(context).brightness, - scrollPhysics: BouncingScrollPhysics(), - autovalidate: widget.autoValidate, - textCapitalization: widget.textCapitalization, - onFieldSubmitted: widget.inputAction == TextInputAction.next - ? (widget.onSubmit != null - ? widget.onSubmit - : (val) { - _focusNode.nextFocus(); - }) - : widget.onSubmit, - textInputAction: widget.inputAction, - minLines: widget.minLines ?? 1, - maxLines: widget.maxLines ?? 1, - maxLengthEnforced: widget.maxLengthEnforced, - initialValue: widget.initialValue, - onChanged: widget.onChanged, - focusNode: _focusNode, - maxLength: widget.maxLength ?? null, - controller: widget.controller, - keyboardType: widget.keyboardType, - readOnly: _determineReadOnly(), - obscureText: widget.type == "password" && !view ? true : false, - autofocus: widget.autoFocus ?? false, - validator: widget.validator, - onSaved: widget.onSaved, - style: Theme.of(context) - .textTheme - .bodyText1 - .copyWith(fontSize: widget.fontSize, fontWeight: widget.fontWeight), - inputFormatters: widget.keyboardType == TextInputType.phone - ? [ - WhitelistingTextInputFormatter.digitsOnly, - _mobileFormatter, - ] - : widget.inputFormatters, - decoration: InputDecoration( - counterText: "", - hintText: widget.hintText, - hintStyle: TextStyle( - fontSize: widget.fontSize, - fontWeight: widget.fontWeight, - color: widget.hintColor ?? Theme.of(context).hintColor, - ), - contentPadding: widget.padding != null - ? widget.padding - : EdgeInsets.symmetric( + child: Column( + children: [ + TextFormField( + onTap: widget.onTapTextFields, + keyboardAppearance: Theme.of(context).brightness, + scrollPhysics: BouncingScrollPhysics(), + autovalidate: widget.autoValidate, + textCapitalization: widget.textCapitalization, + onFieldSubmitted: widget.inputAction == TextInputAction.next + ? (widget.onSubmit != null + ? widget.onSubmit + : (val) { + _focusNode.nextFocus(); + }) + : widget.onSubmit, + textInputAction: widget.inputAction, + minLines: widget.minLines ?? 1, + maxLines: widget.maxLines ?? 1, + maxLengthEnforced: widget.maxLengthEnforced, + initialValue: widget.initialValue, + onChanged: (value){ + if(widget.showLabelText) { + if((value== null || value =='' )) { + setState(() { + widget.hasLabelText = false; + }); + }else{ + setState(() { + widget.hasLabelText = true; + }); + } + } + + + widget.onChanged(value); + } , + focusNode: _focusNode, + maxLength: widget.maxLength ?? null, + controller: widget.controller, + keyboardType: widget.keyboardType, + readOnly: _determineReadOnly(), + obscureText: widget.type == "password" && !view ? true : false, + autofocus: widget.autoFocus ?? false, + validator: widget.validator, + onSaved: widget.onSaved, + style: Theme.of(context) + .textTheme + .bodyText1 + .copyWith(fontSize: widget.fontSize, fontWeight: widget.fontWeight), + inputFormatters: widget.keyboardType == TextInputType.phone + ? [ + WhitelistingTextInputFormatter.digitsOnly, + _mobileFormatter, + ] + : widget.inputFormatters, + decoration: InputDecoration( + labelText: widget.hasLabelText ? widget.hintText : null, + labelStyle: TextStyle( + + fontSize: widget.fontSize, + fontWeight: widget.fontWeight, + color: widget.hintColor ?? Theme + .of(context) + .hintColor, + ), + counterText: "", + hintText: widget.hintText, + hintStyle: TextStyle( + fontSize: widget.fontSize, + fontWeight: widget.fontWeight, + color: widget.hintColor ?? Theme + .of(context) + .hintColor, + ), + contentPadding: widget.padding != null + ? widget.padding + : EdgeInsets.symmetric( vertical: (widget.bare && !widget.keepPadding) ? 0.0 : 10.0, horizontal: 16.0), - filled: true, - fillColor: widget.bare - ? Colors.transparent - : Theme.of(context).backgroundColor, - suffixIcon: _buildSuffixIcon(), - prefixIcon: widget.prefixIcon, - errorStyle: TextStyle( - fontSize: 12.0, - fontWeight: widget.fontWeight, - height: widget.borderOnlyError ? 0.0 : null), - errorBorder: OutlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context) - .errorColor - .withOpacity(widget.bare ? 0.0 : 0.5), - width: 1.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), - focusedErrorBorder: OutlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context) - .errorColor - .withOpacity(widget.bare ? 0.0 : 0.5), - width: 1.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 1.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), - disabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 1.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 1.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0), + filled: true, + fillColor: widget.bare + ? Colors.transparent + : Theme + .of(context) + .backgroundColor, + suffixIcon: _buildSuffixIcon(), + prefixIcon: widget.prefixIcon, + errorStyle: TextStyle( + fontSize: 12.0, + fontWeight: widget.fontWeight, + height: widget.borderOnlyError ? 0.0 : null), + errorBorder: OutlineInputBorder( + borderSide: widget.hasBorder ? BorderSide( + color: Theme + .of(context) + .errorColor + .withOpacity(widget.bare ? 0.0 : 0.5), + width: 1.0) : BorderSide( + color: Colors.transparent, width: 0), + borderRadius: widget.hasBorder ? BorderRadius.circular( + widget.bare ? 0.0 : 8.0) : BorderRadius.circular(0.0),), + focusedErrorBorder: OutlineInputBorder( + borderSide: widget.hasBorder ? BorderSide( + color: Theme + .of(context) + .errorColor + .withOpacity(widget.bare ? 0.0 : 0.5), + width: 1.0) : BorderSide( + color: Colors.transparent, width: 0), + borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), + focusedBorder: OutlineInputBorder( + borderSide: widget.hasBorder ? BorderSide( + color: Colors.grey, width: 1.0) : BorderSide( + color: Colors.transparent, width: 0), + borderRadius: widget.hasBorder ? BorderRadius.circular( + widget.bare ? 0.0 : 8.0) : BorderRadius.circular(0.0),), + disabledBorder: OutlineInputBorder( + borderSide: widget.hasBorder ? BorderSide( + color: Colors.grey, width: 1.0) : BorderSide( + color: Colors.transparent, width: 0), + borderRadius: widget.hasBorder ? BorderRadius.circular( + widget.bare ? 0.0 : 8.0) : BorderRadius.circular(0.0)), + enabledBorder: OutlineInputBorder( + borderSide: widget.hasBorder ? BorderSide( + color: Colors.grey, width: 1.0) : BorderSide( + color: Colors.transparent, width: 0), + borderRadius: widget.hasBorder ? BorderRadius.circular( + widget.bare ? 0.0 : 8.0) : BorderRadius.circular(0.0), + ), + ), ), - ), + ], ), + )); } } diff --git a/lib/widgets/shared/new_text_Field.dart b/lib/widgets/shared/new_text_Field.dart new file mode 100644 index 00000000..ad9eb580 --- /dev/null +++ b/lib/widgets/shared/new_text_Field.dart @@ -0,0 +1,239 @@ +import 'package:eva_icons_flutter/eva_icons_flutter.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class NumberTextInputFormatter extends TextInputFormatter { + @override + TextEditingValue formatEditUpdate( + TextEditingValue oldValue, TextEditingValue newValue) { + final int newTextLength = newValue.text.length; + int selectionIndex = newValue.selection.end; + int usedSubstringIndex = 0; + final StringBuffer newText = StringBuffer(); + if (newTextLength >= 1) { + newText.write('('); + if (newValue.selection.end >= 1) selectionIndex++; + } + if (newTextLength >= 4) { + newText.write(newValue.text.substring(0, usedSubstringIndex = 3) + ') '); + if (newValue.selection.end >= 3) selectionIndex += 2; + } + if (newTextLength >= 7) { + newText.write(newValue.text.substring(3, usedSubstringIndex = 6) + '-'); + if (newValue.selection.end >= 6) selectionIndex++; + } + if (newTextLength >= 11) { + newText.write(newValue.text.substring(6, usedSubstringIndex = 10) + ' '); + if (newValue.selection.end >= 10) selectionIndex++; + } + // Dump the rest. + if (newTextLength >= usedSubstringIndex) + newText.write(newValue.text.substring(usedSubstringIndex)); + return TextEditingValue( + text: newText.toString(), + selection: TextSelection.collapsed(offset: selectionIndex), + ); + } +} + +final _mobileFormatter = NumberTextInputFormatter(); + +class NewTextFields extends StatefulWidget { + NewTextFields( + {Key key, + this.type, + this.hintText, + this.suffixIcon, + this.autoFocus, + this.onChanged, + this.initialValue, + this.minLines, + this.maxLines, + this.inputFormatters, + this.padding, + this.focus = false, + this.maxLengthEnforced = true, + this.suffixIconColor, + this.inputAction, + this.onSubmit, + this.keepPadding = true, + this.textCapitalization = TextCapitalization.none, + this.controller, + this.keyboardType, + this.validator, + this.borderOnlyError = false, + this.onSaved, + this.onSuffixTap, + this.readOnly: false, + this.maxLength, + this.prefixIcon, + this.bare = false, + this.onTap, + this.fontSize = 16.0, + this.fontWeight = FontWeight.w700, + this.autoValidate = false, + this.hintColor,this.isEnabled=true}) + : super(key: key); + + final String hintText; + + // final String initialValue; + final String type; + final bool autoFocus; + final IconData suffixIcon; + final Color suffixIconColor; + final Icon prefixIcon; + final VoidCallback onTap; + final TextEditingController controller; + final TextInputType keyboardType; + final FormFieldValidator validator; + final Function onSaved; + final Function onSuffixTap; + final Function onChanged; + final Function onSubmit; + final bool readOnly; + final int maxLength; + final int minLines; + final int maxLines; + final bool maxLengthEnforced; + final bool bare; + final bool isEnabled; + final TextInputAction inputAction; + final double fontSize; + final FontWeight fontWeight; + final bool keepPadding; + final TextCapitalization textCapitalization; + final List inputFormatters; + final bool autoValidate; + final EdgeInsets padding; + final bool focus; + final bool borderOnlyError; + final Color hintColor; + final String initialValue; + @override + _NewTextFieldsState createState() => _NewTextFieldsState(); +} + +class _NewTextFieldsState extends State { + final FocusNode _focusNode = FocusNode(); + bool focus = false; + bool view = false; + + @override + void initState() { + super.initState(); + _focusNode.addListener(() { + setState(() { + focus = _focusNode.hasFocus; + }); + }); + } + + @override + void didUpdateWidget(NewTextFields oldWidget) { + if (widget.focus) _focusNode.requestFocus(); + super.didUpdateWidget(oldWidget); + } + + @override + void dispose() { + _focusNode.dispose(); + super.dispose(); + } + + + bool _determineReadOnly() { + if (widget.readOnly != null && widget.readOnly) { + _focusNode.unfocus(); + return true; + } else { + return false; + } + } + + @override + Widget build(BuildContext context) { + return AnimatedContainer( + duration: Duration(milliseconds: 300), + decoration:BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Container( + margin: EdgeInsets.only(top: 8), + + child: TextFormField( + enabled: widget.isEnabled, + initialValue: widget.initialValue, + keyboardAppearance: Theme.of(context).brightness, + scrollPhysics: BouncingScrollPhysics(), + autovalidate: widget.autoValidate, + textCapitalization: widget.textCapitalization, + onFieldSubmitted: widget.inputAction == TextInputAction.next + ? (widget.onSubmit != null + ? widget.onSubmit + : (val) { + _focusNode.nextFocus(); + }) + : widget.onSubmit, + textInputAction: widget.inputAction, + minLines: widget.minLines ?? 1, + maxLines: widget.maxLines ?? 1, + maxLengthEnforced: widget.maxLengthEnforced, + onChanged: widget.onChanged, + focusNode: _focusNode, + maxLength: widget.maxLength ?? null, + controller: widget.controller, + keyboardType: widget.keyboardType, + readOnly: _determineReadOnly(), + obscureText: widget.type == "password" && !view ? true : false, + autofocus: widget.autoFocus ?? false, + validator: widget.validator, + onSaved: widget.onSaved, + + style: Theme.of(context) + .textTheme + .body2 + .copyWith(fontSize: widget.fontSize, fontWeight: widget.fontWeight), + inputFormatters: widget.keyboardType == TextInputType.phone + ? [ + WhitelistingTextInputFormatter.digitsOnly, + _mobileFormatter, + ] + : widget.inputFormatters, + decoration: InputDecoration( + labelText: widget.hintText, + labelStyle: TextStyle(color: Colors.black), + errorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Theme.of(context) + .errorColor + .withOpacity(0.5), + width: 1.0), + borderRadius: BorderRadius.circular(12.0)), + focusedErrorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Theme.of(context) + .errorColor + .withOpacity(0.5), + width: 1.0), + borderRadius: BorderRadius.circular(8.0)), + focusedBorder: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.white, width: 1.0), + borderRadius: BorderRadius.circular(12)), + disabledBorder: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.white, width: 1.0), + borderRadius: BorderRadius.circular(12)), + enabledBorder: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.white, width: 1.0), + borderRadius: BorderRadius.circular(12), + ), + ), + ), + ), + ); + } +} From febdadc92499f85151914f855f9ecd5ffc176c8b Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Thu, 28 Jan 2021 17:28:12 +0200 Subject: [PATCH 20/23] fix : DA-264 --- lib/widgets/shared/new_text_Field.dart | 239 ------------------------- 1 file changed, 239 deletions(-) delete mode 100644 lib/widgets/shared/new_text_Field.dart diff --git a/lib/widgets/shared/new_text_Field.dart b/lib/widgets/shared/new_text_Field.dart deleted file mode 100644 index ad9eb580..00000000 --- a/lib/widgets/shared/new_text_Field.dart +++ /dev/null @@ -1,239 +0,0 @@ -import 'package:eva_icons_flutter/eva_icons_flutter.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class NumberTextInputFormatter extends TextInputFormatter { - @override - TextEditingValue formatEditUpdate( - TextEditingValue oldValue, TextEditingValue newValue) { - final int newTextLength = newValue.text.length; - int selectionIndex = newValue.selection.end; - int usedSubstringIndex = 0; - final StringBuffer newText = StringBuffer(); - if (newTextLength >= 1) { - newText.write('('); - if (newValue.selection.end >= 1) selectionIndex++; - } - if (newTextLength >= 4) { - newText.write(newValue.text.substring(0, usedSubstringIndex = 3) + ') '); - if (newValue.selection.end >= 3) selectionIndex += 2; - } - if (newTextLength >= 7) { - newText.write(newValue.text.substring(3, usedSubstringIndex = 6) + '-'); - if (newValue.selection.end >= 6) selectionIndex++; - } - if (newTextLength >= 11) { - newText.write(newValue.text.substring(6, usedSubstringIndex = 10) + ' '); - if (newValue.selection.end >= 10) selectionIndex++; - } - // Dump the rest. - if (newTextLength >= usedSubstringIndex) - newText.write(newValue.text.substring(usedSubstringIndex)); - return TextEditingValue( - text: newText.toString(), - selection: TextSelection.collapsed(offset: selectionIndex), - ); - } -} - -final _mobileFormatter = NumberTextInputFormatter(); - -class NewTextFields extends StatefulWidget { - NewTextFields( - {Key key, - this.type, - this.hintText, - this.suffixIcon, - this.autoFocus, - this.onChanged, - this.initialValue, - this.minLines, - this.maxLines, - this.inputFormatters, - this.padding, - this.focus = false, - this.maxLengthEnforced = true, - this.suffixIconColor, - this.inputAction, - this.onSubmit, - this.keepPadding = true, - this.textCapitalization = TextCapitalization.none, - this.controller, - this.keyboardType, - this.validator, - this.borderOnlyError = false, - this.onSaved, - this.onSuffixTap, - this.readOnly: false, - this.maxLength, - this.prefixIcon, - this.bare = false, - this.onTap, - this.fontSize = 16.0, - this.fontWeight = FontWeight.w700, - this.autoValidate = false, - this.hintColor,this.isEnabled=true}) - : super(key: key); - - final String hintText; - - // final String initialValue; - final String type; - final bool autoFocus; - final IconData suffixIcon; - final Color suffixIconColor; - final Icon prefixIcon; - final VoidCallback onTap; - final TextEditingController controller; - final TextInputType keyboardType; - final FormFieldValidator validator; - final Function onSaved; - final Function onSuffixTap; - final Function onChanged; - final Function onSubmit; - final bool readOnly; - final int maxLength; - final int minLines; - final int maxLines; - final bool maxLengthEnforced; - final bool bare; - final bool isEnabled; - final TextInputAction inputAction; - final double fontSize; - final FontWeight fontWeight; - final bool keepPadding; - final TextCapitalization textCapitalization; - final List inputFormatters; - final bool autoValidate; - final EdgeInsets padding; - final bool focus; - final bool borderOnlyError; - final Color hintColor; - final String initialValue; - @override - _NewTextFieldsState createState() => _NewTextFieldsState(); -} - -class _NewTextFieldsState extends State { - final FocusNode _focusNode = FocusNode(); - bool focus = false; - bool view = false; - - @override - void initState() { - super.initState(); - _focusNode.addListener(() { - setState(() { - focus = _focusNode.hasFocus; - }); - }); - } - - @override - void didUpdateWidget(NewTextFields oldWidget) { - if (widget.focus) _focusNode.requestFocus(); - super.didUpdateWidget(oldWidget); - } - - @override - void dispose() { - _focusNode.dispose(); - super.dispose(); - } - - - bool _determineReadOnly() { - if (widget.readOnly != null && widget.readOnly) { - _focusNode.unfocus(); - return true; - } else { - return false; - } - } - - @override - Widget build(BuildContext context) { - return AnimatedContainer( - duration: Duration(milliseconds: 300), - decoration:BoxDecoration( - borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Container( - margin: EdgeInsets.only(top: 8), - - child: TextFormField( - enabled: widget.isEnabled, - initialValue: widget.initialValue, - keyboardAppearance: Theme.of(context).brightness, - scrollPhysics: BouncingScrollPhysics(), - autovalidate: widget.autoValidate, - textCapitalization: widget.textCapitalization, - onFieldSubmitted: widget.inputAction == TextInputAction.next - ? (widget.onSubmit != null - ? widget.onSubmit - : (val) { - _focusNode.nextFocus(); - }) - : widget.onSubmit, - textInputAction: widget.inputAction, - minLines: widget.minLines ?? 1, - maxLines: widget.maxLines ?? 1, - maxLengthEnforced: widget.maxLengthEnforced, - onChanged: widget.onChanged, - focusNode: _focusNode, - maxLength: widget.maxLength ?? null, - controller: widget.controller, - keyboardType: widget.keyboardType, - readOnly: _determineReadOnly(), - obscureText: widget.type == "password" && !view ? true : false, - autofocus: widget.autoFocus ?? false, - validator: widget.validator, - onSaved: widget.onSaved, - - style: Theme.of(context) - .textTheme - .body2 - .copyWith(fontSize: widget.fontSize, fontWeight: widget.fontWeight), - inputFormatters: widget.keyboardType == TextInputType.phone - ? [ - WhitelistingTextInputFormatter.digitsOnly, - _mobileFormatter, - ] - : widget.inputFormatters, - decoration: InputDecoration( - labelText: widget.hintText, - labelStyle: TextStyle(color: Colors.black), - errorBorder: OutlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context) - .errorColor - .withOpacity(0.5), - width: 1.0), - borderRadius: BorderRadius.circular(12.0)), - focusedErrorBorder: OutlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context) - .errorColor - .withOpacity(0.5), - width: 1.0), - borderRadius: BorderRadius.circular(8.0)), - focusedBorder: OutlineInputBorder( - borderSide: - BorderSide(color: Colors.white, width: 1.0), - borderRadius: BorderRadius.circular(12)), - disabledBorder: OutlineInputBorder( - borderSide: - BorderSide(color: Colors.white, width: 1.0), - borderRadius: BorderRadius.circular(12)), - enabledBorder: OutlineInputBorder( - borderSide: - BorderSide(color: Colors.white, width: 1.0), - borderRadius: BorderRadius.circular(12), - ), - ), - ), - ), - ); - } -} From 494479f1d91862563a78cd1f7ed126b463a20f09 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Thu, 28 Jan 2021 17:32:11 +0200 Subject: [PATCH 21/23] fix : DA-264 fix merge error --- lib/config/localized_values.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 32c01444..8096b5b6 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -687,13 +687,10 @@ const Map> localizedValues = { 'years': {'en': "Years", 'ar': "سنين"}, 'hr': {'en': "HR", 'ar': "س"}, 'min': {'en': "Min", 'ar': "د"}, - 'appointmentNumber': {'en': "Appointment Number", 'ar': "رقم الموعد"} - // 'icd': {'en': "ICD", 'ar': " "} - 'min': {'en': "Min", 'ar': "د"}, + 'appointmentNumber': {'en': "Appointment Number", 'ar': "رقم الموعد"}, 'referralStatusHold': {'en': "Hold", 'ar': "معلق"}, 'referralStatusActive': {'en': "Active", 'ar': "نشط"}, 'referralStatusCancelled': {'en': "Cancelled", 'ar': "ملغاة"}, 'referralStatusCompleted': {'en': "Completed", 'ar': "مكتمل"}, 'referralStatusNotSeen': {'en': "NotSeen", 'ar': "لم يرى"}, - // 'icd': {'en': "ICD", 'ar': " "}, }; From b63c7aff257be90b7f9f6adcf7eb727117cb6904 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Sun, 31 Jan 2021 10:18:52 +0200 Subject: [PATCH 22/23] Fix DA-331 vital signs uncorrect temperature value --- lib/core/service/patient-ucaf-service.dart | 2 +- .../patient/vital_sign/patient-vital-sign-data.dart | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/core/service/patient-ucaf-service.dart b/lib/core/service/patient-ucaf-service.dart index 38f2407b..e7ecc9f2 100644 --- a/lib/core/service/patient-ucaf-service.dart +++ b/lib/core/service/patient-ucaf-service.dart @@ -41,7 +41,7 @@ class UcafService extends LookupService { hasError = false; Map body = Map(); body['PatientMRN'] = patient.patientMRN; - // body['AppointmentNo'] = patient.appointmentNo; + body['AppointmentNo'] = patient.appointmentNo; // body['EpisodeID'] = patient.episodeNo; await baseAppClient.post( diff --git a/lib/models/patient/vital_sign/patient-vital-sign-data.dart b/lib/models/patient/vital_sign/patient-vital-sign-data.dart index b7fe77cb..57133a08 100644 --- a/lib/models/patient/vital_sign/patient-vital-sign-data.dart +++ b/lib/models/patient/vital_sign/patient-vital-sign-data.dart @@ -8,7 +8,7 @@ class VitalSignData { var bodyMassIndex; int fio2; int headCircumCm; - int heightCm; + var heightCm; int idealBodyWeightLbs; bool isPainManagementDone; bool isVitalsRequired; @@ -26,10 +26,10 @@ class VitalSignData { int respirationPattern; int sao2; int status; - int temperatureCelcius; + var temperatureCelcius; int temperatureCelciusMethod; - int waistSizeInch; - int weightKg; + var waistSizeInch; + var weightKg; VitalSignData( {this.appointmentNo, From 5b5954c6f32689187548a34b4633bb04e4b23c36 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Sun, 31 Jan 2021 17:09:23 +0200 Subject: [PATCH 23/23] working on Admission request feature adding lookup --- lib/config/config.dart | 2 + lib/core/enum/master_lookup_key.dart | 5 +- .../model/admissionRequest/ward-model.dart | 26 ++ lib/core/service/base/lookup-service.dart | 8 + .../patient-admission-request-service.dart | 58 ++++ .../patient-admission-request-viewmodel.dart | 57 ++- .../profile/UCAF/UCAF-detail-screen.dart | 2 +- .../profile/UCAF/UCAF-input-screen.dart | 30 +- .../admission-request-detail-screen.dart | 7 +- .../admission-request_second-screen.dart | 328 +++++++++++------- 10 files changed, 381 insertions(+), 142 deletions(-) create mode 100644 lib/core/model/admissionRequest/ward-model.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index 1205d14c..abd07c03 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -191,6 +191,8 @@ const SEARCH_DRUG = 'Services/DoctorApplication.svc/REST/GetMedicationList'; const DRUG_TO_DRUG = 'Services/DoctorApplication.svc/REST/DrugToDrugInteraction'; const GET_MEDICAL_FILE = 'Services/DoctorApplication.svc/REST/GetMedicalFile'; +const GET_WARDS = 'Services/DoctorApplication.svc/REST/GetWards'; +const GET_DIAGNOSIS_TYPES = 'Services/DoctorApplication.svc/REST/DiagnosisTypes'; var selectedPatientType = 1; diff --git a/lib/core/enum/master_lookup_key.dart b/lib/core/enum/master_lookup_key.dart index f1ba1d46..e0c8ccc3 100644 --- a/lib/core/enum/master_lookup_key.dart +++ b/lib/core/enum/master_lookup_key.dart @@ -12,7 +12,8 @@ enum MasterKeysService { DiagnosisType, ICD10, TemperatureMethods, - Speciality + Speciality, + AdmissionRequestType, } extension SelectedMasterKeysService on MasterKeysService { @@ -57,6 +58,8 @@ extension SelectedMasterKeysService on MasterKeysService { return 2005; case MasterKeysService.Speciality: return 10; + case MasterKeysService.AdmissionRequestType: + return 2019; break; } } diff --git a/lib/core/model/admissionRequest/ward-model.dart b/lib/core/model/admissionRequest/ward-model.dart new file mode 100644 index 00000000..606758d3 --- /dev/null +++ b/lib/core/model/admissionRequest/ward-model.dart @@ -0,0 +1,26 @@ +class WardModel{ + + String description; + String descriptionN; + int floorID; + bool isActive; + + WardModel( + {this.description, this.descriptionN, this.floorID, this.isActive}); + + WardModel.fromJson(Map json) { + description = json['description']; + descriptionN = json['descriptionN']; + floorID = json['floorID']; + isActive = json['isActive']; + } + + Map toJson() { + final Map data = new Map(); + data['description'] = this.description; + data['descriptionN'] = this.descriptionN; + data['floorID'] = this.floorID; + data['isActive'] = this.isActive; + return data; + } +} \ No newline at end of file diff --git a/lib/core/service/base/lookup-service.dart b/lib/core/service/base/lookup-service.dart index 3bc6e61e..48a78ae7 100644 --- a/lib/core/service/base/lookup-service.dart +++ b/lib/core/service/base/lookup-service.dart @@ -37,6 +37,7 @@ class LookupService extends BaseService { List listOfICD10 = []; List listOfTemperatureMethods = []; List listOfSpeciality = []; + List listOfAdmissionType = []; Future getMasterLookup(MasterKeysService masterKeys) async { hasError = false; @@ -145,6 +146,13 @@ class LookupService extends BaseService { .add(MasterKeyModel.fromJson(v)); }); break; + case MasterKeysService.AdmissionRequestType: + listOfAdmissionType.clear(); + entryList.forEach((v) { + // listOfAdmissionType.add(MasterKeyModel.fromJson(v)); + listOfAdmissionType.add(v); + }); + break; } } diff --git a/lib/core/service/patient-admission-request-service.dart b/lib/core/service/patient-admission-request-service.dart index 62932908..dca7b60d 100644 --- a/lib/core/service/patient-admission-request-service.dart +++ b/lib/core/service/patient-admission-request-service.dart @@ -1,9 +1,14 @@ import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/model/admissionRequest/ward-model.dart'; import 'package:doctor_app_flutter/core/service/base/lookup-service.dart'; +import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; class AdmissionRequestService extends LookupService { List doctorsList = []; List specialityList = []; + List wardList = []; + List diagnosisTypesList = []; + List allergiesLookupList = []; setSpecialityList() { specialityList.clear(); @@ -12,6 +17,13 @@ class AdmissionRequestService extends LookupService { }); } + setAllergies() { + allergiesLookupList.clear(); + allergiesList.forEach((element) { + allergiesLookupList.add(element.toJson()); + }); + } + Future getDoctorsList() async { hasError = false; @@ -28,4 +40,50 @@ class AdmissionRequestService extends LookupService { body: Map(), ); } + + Future getWardList() async { + hasError = false; + + await baseAppClient.post( + GET_WARDS, + onSuccess: (dynamic response, int statusCode) { + wardList.clear(); + if (response['AdmissionMasterList'] != null && + response['AdmissionMasterList']['entityList'] != null) { + response['AdmissionMasterList']['entityList'].forEach((v) { + // wardList.add(WardModel.fromJson(v)); + wardList.add(v); + }); + } + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: Map(), + ); + } + + Future getDiagnosisTypesList() async { + hasError = false; + + await baseAppClient.post( + GET_DIAGNOSIS_TYPES, + onSuccess: (dynamic response, int statusCode) { + diagnosisTypesList.clear(); + if (response['AdmissionDiagnosisList'] != null && + response['AdmissionDiagnosisList']['entityList'] != null) { + response['AdmissionDiagnosisList']['entityList'].forEach((v) { + // diagnosisTypesList.add(MasterKeyModel.fromJson(v)); + diagnosisTypesList.add(v); + }); + } + }, + onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, + body: Map(), + ); + } } diff --git a/lib/core/viewModel/patient-admission-request-viewmodel.dart b/lib/core/viewModel/patient-admission-request-viewmodel.dart index 15f54e5d..d427eb67 100644 --- a/lib/core/viewModel/patient-admission-request-viewmodel.dart +++ b/lib/core/viewModel/patient-admission-request-viewmodel.dart @@ -1,6 +1,7 @@ import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/admissionRequest/ward-model.dart'; import 'package:doctor_app_flutter/core/service/patient-admission-request-service.dart'; import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; @@ -15,20 +16,24 @@ class AdmissionRequestViewModel extends BaseViewModel{ List get speciality => _admissionRequestService.specialityList; + List get wardList => _admissionRequestService.wardList; + + List get admissionTypeList => _admissionRequestService.listOfAdmissionType; + + List get diagnosisTypesList => _admissionRequestService.diagnosisTypesList; + + List get allergiesList => _admissionRequestService.allergiesLookupList; + String selectedLanguage; Future getLanguage() async { selectedLanguage = await sharedPref.getString(APP_Language); } - Future getMasterLookup() async { - setState(ViewState.Busy); + Future getSpecialityList() async { await getLanguage(); - await _admissionRequestService.getMasterLookup(MasterKeysService.Speciality); - if (_admissionRequestService.hasError) { - error = _admissionRequestService.error; - setState(ViewState.Error); - } else { + await getMasterLookup(MasterKeysService.Speciality); + if (!_admissionRequestService.hasError) { _admissionRequestService.setSpecialityList(); await getClinicDoctors(); } @@ -43,4 +48,42 @@ class AdmissionRequestViewModel extends BaseViewModel{ } else setState(ViewState.Idle); } + + Future getWards() async { + setState(ViewState.Busy); + await _admissionRequestService.getWardList(); + if (_admissionRequestService.hasError) { + error = _admissionRequestService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } + + Future getDiagnosis() async { + setState(ViewState.Busy); + await _admissionRequestService.getDiagnosisTypesList(); + if (_admissionRequestService.hasError) { + error = _admissionRequestService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } + + Future getAllergies() async { + await getMasterLookup(MasterKeysService.Allergies); + if (!_admissionRequestService.hasError) { + _admissionRequestService.setAllergies(); + } + } + + Future getMasterLookup(MasterKeysService keysService) async { + setState(ViewState.Busy); + await _admissionRequestService.getMasterLookup(keysService); + if (_admissionRequestService.hasError) { + error = _admissionRequestService.error; + setState(ViewState.ErrorLocal); + } else { + setState(ViewState.Idle); + } + } } \ No newline at end of file diff --git a/lib/screens/patients/profile/UCAF/UCAF-detail-screen.dart b/lib/screens/patients/profile/UCAF/UCAF-detail-screen.dart index 0831fffe..71955b0c 100644 --- a/lib/screens/patients/profile/UCAF/UCAF-detail-screen.dart +++ b/lib/screens/patients/profile/UCAF/UCAF-detail-screen.dart @@ -301,7 +301,7 @@ class DiagnosisWidget extends StatelessWidget { fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( - "${diagnosis.icdCode10ID}}", + "${diagnosis.icdCode10ID}", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), diff --git a/lib/screens/patients/profile/UCAF/UCAF-input-screen.dart b/lib/screens/patients/profile/UCAF/UCAF-input-screen.dart index 1a9ac4fa..9b9ae5a5 100644 --- a/lib/screens/patients/profile/UCAF/UCAF-input-screen.dart +++ b/lib/screens/patients/profile/UCAF/UCAF-input-screen.dart @@ -222,19 +222,19 @@ class _UCAFInputScreenState extends State { ), Container( child: TextField( - decoration: Helpers.textFieldSelectorDecoration( - TranslationBase.of(context) - .additionalTextComplaints, - helpers.parseHtmlString(model - .patientChiefComplaintList[0] - .chiefComplaint), - false), - enabled: false, - controller: _additionalComplaintsController, - keyboardType: TextInputType.text, - /*minLines: 4, - maxLines: 6,*/ - )), + decoration: Helpers.textFieldSelectorDecoration( + TranslationBase.of(context) + .additionalTextComplaints, + helpers.parseHtmlString(model + .patientChiefComplaintList[0] + .chiefComplaint), + false), + enabled: false, + controller: _additionalComplaintsController, + keyboardType: TextInputType.multiline, + minLines: 1, + maxLines: 15, + )), SizedBox( height: 16, ), @@ -363,7 +363,9 @@ class _UCAFInputScreenState extends State { false), enabled: true, controller: _signsController, - keyboardType: TextInputType.text, + keyboardType: TextInputType.multiline, + minLines: null, + maxLines: null, )), SizedBox( height: 16, diff --git a/lib/screens/patients/profile/admission-request/admission-request-detail-screen.dart b/lib/screens/patients/profile/admission-request/admission-request-detail-screen.dart index 7ccc3ade..76ce6e2b 100644 --- a/lib/screens/patients/profile/admission-request/admission-request-detail-screen.dart +++ b/lib/screens/patients/profile/admission-request/admission-request-detail-screen.dart @@ -14,7 +14,6 @@ import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import '../../../../routes.dart'; -import 'admission-request_second-screen.dart'; class AdmissionRequestDetailScreen extends StatefulWidget { @override @@ -35,7 +34,7 @@ class _AdmissionRequestDetailScreenState final screenSize = MediaQuery.of(context).size; return BaseView( - onModelReady: (model) => model.getMasterLookup(), + onModelReady: (model) => model.getSpecialityList(), builder: (_, model, w) => AppScaffold( baseViewModel: model, appBarTitle: TranslationBase.of(context).admissionRequest, @@ -178,6 +177,10 @@ class _AdmissionRequestDetailScreenState list: model.doctorsList, attributeName: 'DoctorName', attributeValueId: 'DoctorID', + usingSearch: true, + hintSearchText: + TranslationBase.of(context) + .doctorSearch, okText: TranslationBase.of(context) .ok, diff --git a/lib/screens/patients/profile/admission-request/admission-request_second-screen.dart b/lib/screens/patients/profile/admission-request/admission-request_second-screen.dart index 3c1e06dc..b65b7f43 100644 --- a/lib/screens/patients/profile/admission-request/admission-request_second-screen.dart +++ b/lib/screens/patients/profile/admission-request/admission-request_second-screen.dart @@ -1,18 +1,24 @@ import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-viewmodel.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/date-utils.dart'; +import 'package:doctor_app_flutter/util/dr_app_toast_msg.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/patients/profile/patient-page-header-widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; import '../../../../routes.dart'; @@ -33,15 +39,17 @@ class _AdmissionRequestSecondScreenState bool _preAnesthesiaReferred = false; dynamic _selectedWard; dynamic _selectedAdmissionType; + dynamic _selectedDiagnosis; + dynamic _selectedAllergies; @override Widget build(BuildContext context) { final routeArgs = ModalRoute.of(context).settings.arguments as Map; PatiantInformtion patient = routeArgs['patient']; final screenSize = MediaQuery.of(context).size; + ProjectViewModel projectViewModel = Provider.of(context); return BaseView( - // onModelReady: (model) => model.getMasterLookup(), builder: (_, model, w) => AppScaffold( baseViewModel: model, appBarTitle: TranslationBase.of(context).admissionRequest, @@ -179,40 +187,44 @@ class _AdmissionRequestSecondScreenState Container( height: screenSize.height * 0.070, child: InkWell( - onTap: - /*model.doctorsList != null && - model.doctorsList.length > 0 + onTap: model.wardList != null && + model.wardList.length > 0 ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: model.doctorsList, - attributeName: 'DoctorName', - attributeValueId: 'DoctorID', - okText: TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - _selectedDoctor = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - :*/ - null, + openListDialogField('description', + 'description', model.wardList, + (selectedValue) { + setState(() { + _selectedWard = selectedValue; + }); + }); + } + : () async { + await model.getWards(); + if (model.state == ViewState.Idle && + model.wardList.length > 0) { + openListDialogField('description', + 'description', model.wardList, + (selectedValue) { + setState(() { + _selectedWard = selectedValue; + }); + }); + } else if (model.state == + ViewState.ErrorLocal) { + DrAppToastMsg.showErrorToast( + model.error); + } else { + DrAppToastMsg.showErrorToast( + "Empty List"); + } + }, child: TextField( decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context).ward, - /* _selectedWard != null - ? _selectedWard['DoctorName'] - :*/ - null, + _selectedWard != null + ? _selectedWard['description'] + : null, true), enabled: false, ), @@ -238,41 +250,51 @@ class _AdmissionRequestSecondScreenState Container( height: screenSize.height * 0.070, child: InkWell( - onTap: - /*model.doctorsList != null && - model.doctorsList.length > 0 + onTap: model.admissionTypeList != null && + model.admissionTypeList.length > 0 ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: model.doctorsList, - attributeName: 'DoctorName', - attributeValueId: 'DoctorID', - okText: TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - _selectedDoctor = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - :*/ - null, + openListDialogField('nameEn', 'id', + model.admissionTypeList, + (selectedValue) { + setState(() { + _selectedAdmissionType = + selectedValue; + }); + }); + } + : () async { + await model.getMasterLookup( + MasterKeysService + .AdmissionRequestType); + if (model.state == ViewState.Idle && + model.admissionTypeList.length > + 0) { + openListDialogField('nameEn', + 'id', model.admissionTypeList, + (selectedValue) { + setState(() { + _selectedAdmissionType = + selectedValue; + }); + }); + } else if (model.state == + ViewState.ErrorLocal) { + DrAppToastMsg.showErrorToast( + model.error); + } else { + DrAppToastMsg.showErrorToast( + "Empty List"); + } + }, child: TextField( decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context) .admissionType, - /* _admissionType != null - ? _admissionType['DoctorName'] - :*/ - null, + _selectedAdmissionType != null + ? _selectedAdmissionType[ + 'nameEn'] + : null, true), enabled: false, ), @@ -284,41 +306,51 @@ class _AdmissionRequestSecondScreenState Container( height: screenSize.height * 0.070, child: InkWell( - onTap: - /*model.doctorsList != null && - model.doctorsList.length > 0 + onTap: model.diagnosisTypesList != null && + model.diagnosisTypesList.length > 0 ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: model.doctorsList, - attributeName: 'DoctorName', - attributeValueId: 'DoctorID', - okText: TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - _selectedDoctor = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - :*/ - null, + openListDialogField('nameEn', 'id', + model.diagnosisTypesList, + (selectedValue) { + setState(() { + _selectedDiagnosis = + selectedValue; + }); + }); + } + : () async { + await model.getDiagnosis(); + if (model.state == ViewState.Idle && + model.diagnosisTypesList + .length > + 0) { + openListDialogField( + 'nameEn', + 'id', + model.diagnosisTypesList, + (selectedValue) { + setState(() { + _selectedDiagnosis = + selectedValue; + }); + }); + } else if (model.state == + ViewState.ErrorLocal) { + DrAppToastMsg.showErrorToast( + model.error); + } else { + DrAppToastMsg.showErrorToast( + "Empty List"); + } + }, child: TextField( decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context) .diagnosis, - /* _admissionType != null - ? _admissionType['DoctorName'] - :*/ - null, + _selectedDiagnosis != null + ? _selectedDiagnosis['nameEn'] + : null, true), enabled: false, ), @@ -347,41 +379,48 @@ class _AdmissionRequestSecondScreenState Container( height: screenSize.height * 0.070, child: InkWell( - onTap: - /*model.doctorsList != null && - model.doctorsList.length > 0 + onTap: model.allergiesList != null && + model.allergiesList.length > 0 ? () { - ListSelectDialog dialog = - ListSelectDialog( - list: model.doctorsList, - attributeName: 'DoctorName', - attributeValueId: 'DoctorID', - okText: TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - _selectedDoctor = selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - :*/ - null, + openListDialogField('nameEn', 'id', + model.allergiesList, + (selectedValue) { + setState(() { + _selectedAllergies = + selectedValue; + }); + }); + } + : () async { + await model.getAllergies(); + if (model.state == ViewState.Idle && + model.allergiesList.length > + 0) { + openListDialogField('nameEn', + 'id', model.allergiesList, + (selectedValue) { + setState(() { + _selectedAllergies = + selectedValue; + }); + }); + } else if (model.state == + ViewState.ErrorLocal) { + DrAppToastMsg.showErrorToast( + model.error); + } else { + DrAppToastMsg.showErrorToast( + "Empty List"); + } + }, child: TextField( decoration: Helpers.textFieldSelectorDecoration( TranslationBase.of(context) .allergies, - /* _admissionType != null - ? _admissionType['DoctorName'] - :*/ - null, + _selectedAllergies != null + ? _selectedAllergies['nameEn'] + : null, true), enabled: false, ), @@ -426,4 +465,59 @@ class _AdmissionRequestSecondScreenState updateDate(picked); } } + + void openListDialogField(String attributeName, String attributeValueId, + List list, Function(dynamic selectedValue) okFunction) { + ListSelectDialog dialog = ListSelectDialog( + list: list, + attributeName: attributeName, + attributeValueId: attributeValueId, + usingSearch: true, + okText: TranslationBase.of(context).ok, + okFunction: (selectedValue) { + okFunction(selectedValue); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + +/* + onTap: model.wardList != null && + model.wardList.length > 0 + ? () { + openListDialogField('description', + 'description', model.wardList, + (selectedValue) { + setState(() { + _selectedWard = selectedValue; + }); + }); + } + : () async { + await model.getWards(); + if (model.state == ViewState.Idle && + model.wardList.length > 0) { + openListDialogField('description', + 'description', model.wardList, + (selectedValue) { + setState(() { + _selectedWard = selectedValue; + }); + }); + } else if (model.state == + ViewState.ErrorLocal) { + DrAppToastMsg.showErrorToast( + model.error); + } else { + DrAppToastMsg.showErrorToast( + "Empty List"); + } + }, + */ }