diff --git a/lib/core/model/insurance_approval.dart b/lib/core/model/insurance_approval.dart index b8a9d2fe..a3717c42 100644 --- a/lib/core/model/insurance_approval.dart +++ b/lib/core/model/insurance_approval.dart @@ -58,6 +58,7 @@ class InsuranceApprovalModel { String approvalStatusDescption; int unUsedCount; String doctorImage; + String projectName; //String companyName; String expiryDate; @@ -91,7 +92,8 @@ class InsuranceApprovalModel { this.rceiptOn, this.apporvalDetails, this.appointmentNo, - this.doctorImage}); + this.doctorImage, + this.projectName}); //InsuranceApprovalDetails x = InsuranceApprovalDetails(); @@ -115,6 +117,7 @@ class InsuranceApprovalModel { deviceTypeID = json['DeviceTypeID']; patientID = json['PatientID']; tokenID = json['TokenID']; + projectName = json['ProjectName']; patientTypeID = json['PatientTypeID']; patientType = json['PatientType']; eXuldAPPNO = json['EXuldAPPNO']; @@ -148,6 +151,7 @@ class InsuranceApprovalModel { data['PatientID'] = this.patientID; data['TokenID'] = this.tokenID; data['DoctorImageURL'] = this.doctorImage; + data['ProjectName'] = this.projectName; data['PatientTypeID'] = this.patientTypeID; data['PatientType'] = this.patientType; diff --git a/lib/core/viewModel/InsuranceViewModel.dart b/lib/core/viewModel/InsuranceViewModel.dart index a0b51d20..941abcfb 100644 --- a/lib/core/viewModel/InsuranceViewModel.dart +++ b/lib/core/viewModel/InsuranceViewModel.dart @@ -23,8 +23,8 @@ class InsuranceViewModel extends BaseViewModel{ else await _insuranceCardService.getInsuranceApproval(patient); if (_insuranceCardService.hasError) { - error = _insuranceCardService.error; - setState(ViewState.ErrorLocal); + error = "No Insurance Approval Found"; + setState(ViewState.Error); } else setState(ViewState.Idle); } diff --git a/lib/core/viewModel/prescription_view_model.dart b/lib/core/viewModel/prescription_view_model.dart index 548c0a68..82b2f70c 100644 --- a/lib/core/viewModel/prescription_view_model.dart +++ b/lib/core/viewModel/prescription_view_model.dart @@ -244,12 +244,15 @@ class PrescriptionViewModel extends BaseViewModel { } } - getPrescriptions(PatiantInformtion patient) async { + getPrescriptions(PatiantInformtion patient, {String patientType}) async { setState(ViewState.Busy); await _prescriptionsService.getPrescriptions(patient); if (_prescriptionsService.hasError) { error = _prescriptionsService.error; - setState(ViewState.Error); + if(patientType=="7") + setState(ViewState.ErrorLocal); + else + setState(ViewState.Error); } else { _filterList(); await _getPrescriptionsOrders(); diff --git a/lib/core/viewModel/procedure_View_model.dart b/lib/core/viewModel/procedure_View_model.dart index 6632df4d..0d0b41ef 100644 --- a/lib/core/viewModel/procedure_View_model.dart +++ b/lib/core/viewModel/procedure_View_model.dart @@ -55,14 +55,17 @@ class ProcedureViewModel extends BaseViewModel { ? _patientLabOrdersListClinic : _patientLabOrdersListHospital; - Future getProcedure({int mrn}) async { + Future getProcedure({int mrn,String patientType}) async { hasError = false; //_insuranceCardService.clearInsuranceCard(); setState(ViewState.Busy); await _procedureService.getProcedure(mrn: mrn); if (_procedureService.hasError) { error = _procedureService.error; - setState(ViewState.Error); + if(patientType=="7") + setState(ViewState.ErrorLocal); + else + setState(ViewState.Error); } else setState(ViewState.Idle); } @@ -136,12 +139,15 @@ class ProcedureViewModel extends BaseViewModel { //await getProcedure(mrn: mrn); } - void getPatientRadOrders(PatiantInformtion patient) async { + void getPatientRadOrders(PatiantInformtion patient,{String patientType}) async { setState(ViewState.Busy); await _radiologyService.getPatientRadOrders(patient); if (_radiologyService.hasError) { error = _radiologyService.error; - setState(ViewState.Error); + if(patientType=="7") + setState(ViewState.ErrorLocal); + else + setState(ViewState.Error); } else { _radiologyService.finalRadiologyList.forEach((element) { List finalRadiologyListClinic = @@ -220,12 +226,15 @@ class ProcedureViewModel extends BaseViewModel { return labResultLists; } - void getLabs(PatiantInformtion patient) async { + void getLabs(PatiantInformtion patient,{bool isArrived}) async { setState(ViewState.Busy); await _labsService.getPatientLabOrdersList(patient); if (_labsService.hasError) { error = _labsService.error; + if(isArrived) setState(ViewState.ErrorLocal); + else + setState(ViewState.Error); } else { _labsService.patientLabOrdersList.forEach((element) { List patientLabOrdersClinic = diff --git a/lib/icons_app/config.json b/lib/icons_app/config.json index 7c33c9e0..683e03f3 100644 --- a/lib/icons_app/config.json +++ b/lib/icons_app/config.json @@ -2355,6 +2355,34 @@ "search": [ "verify-sms" ] + }, + { + "uid": "efc8c6ed2dab146bc55ca80fdd9bc511", + "css": "124", + "code": 59555, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M315.2 3.2L315.2 3.2A45.2 45.2 0 0 1 322.4 3.2S326 3.2 328.4 3.2H328.4A42.4 42.4 0 0 1 336 3.2H336A26.4 26.4 0 0 1 342 3.2H342A37.6 37.6 0 0 1 346.8 6.8 40 40 0 0 1 353.6 11.6L353.6 11.6 600.8 278.8A40 40 0 0 1 604.4 335.2 40 40 0 0 1 547.6 335.2L370 142.8V920H1250A40 40 0 0 1 1250 1000H330A40 40 0 0 1 290 960V129.2L66.4 329.2A40 40 0 0 1 10 325.6 40 40 0 0 1 0 299.2 40 40 0 0 1 13.2 269.2L304.8 10.4A36.4 36.4 0 0 1 310 7.2 40 40 0 0 1 315.2 3.2Z", + "width": 1290 + }, + "search": [ + "124" + ] + }, + { + "uid": "2251120e332d8914aca7fb2d3fbe00f2", + "css": "123", + "code": 59556, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M773 755.3S773 755.3 773 755.3A38.8 38.8 0 0 0 773 749.5 21.7 21.7 0 0 0 773 745.1V745.1A55.8 55.8 0 0 0 773 739.2H773A25.7 25.7 0 0 0 773 734.6V734.6S770.9 732.1 769.9 730.5A31 31 0 0 0 766.2 725.3H766.2L558.1 529.6A31 31 0 0 0 514.1 531.5 31 31 0 0 0 516 575.2L665.1 713.2H62V31A31 31 0 0 0 0 31V744.2A31 31 0 0 0 31 775.2H675.3L520.3 948.5A31 31 0 1 0 566.8 989.5L766.2 764.7S766.2 762.2 768.4 760.9A33.5 33.5 0 0 0 773 755.3Z", + "width": 775 + }, + "search": [ + "123" + ] } - ] + ] } \ No newline at end of file diff --git a/lib/screens/medical-file/medical_file_details.dart b/lib/screens/medical-file/medical_file_details.dart index bc3323ad..765275b0 100644 --- a/lib/screens/medical-file/medical_file_details.dart +++ b/lib/screens/medical-file/medical_file_details.dart @@ -9,6 +9,7 @@ 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-profile-header-new-design-app-bar.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_header_with_appointment_card_app_bar.dart'; import 'package:doctor_app_flutter/widgets/shared/Text.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; @@ -26,6 +27,11 @@ class MedicalFileDetails extends StatefulWidget { int encounterNumber; int pp; PatiantInformtion patient; + String clinicName; + String episode; + String doctorName; + String vistDate; + String doctorImage; MedicalFileDetails( {this.age, @@ -34,7 +40,12 @@ class MedicalFileDetails extends StatefulWidget { this.gender, this.encounterNumber, this.pp, - this.patient}); + this.patient, + this.doctorName, + this.vistDate, + this.clinicName, + this.episode, + this.doctorImage}); @override _MedicalFileDetailsState createState() => _MedicalFileDetailsState( @@ -45,6 +56,11 @@ class MedicalFileDetails extends StatefulWidget { encounterNumber: encounterNumber, pp: pp, patient: patient, + clinicName: clinicName, + doctorName: doctorName, + episode: episode, + vistDate: vistDate, + doctorImage: doctorImage, ); } @@ -56,6 +72,11 @@ class _MedicalFileDetailsState extends State { String gender; int pp; PatiantInformtion patient; + String clinicName; + String episode; + String doctorName; + String vistDate; + String doctorImage; _MedicalFileDetailsState( {this.age, @@ -64,7 +85,12 @@ class _MedicalFileDetailsState extends State { this.gender, this.encounterNumber, this.pp, - this.patient}); + this.patient, + this.doctorName, + this.vistDate, + this.clinicName, + this.episode, + this.doctorImage}); bool isPhysicalExam = true; bool isProcedureExpand = true; bool isHistoryExpand = true; @@ -78,8 +104,21 @@ class _MedicalFileDetailsState extends State { builder: (BuildContext context, MedicalFileViewModel model, Widget child) => AppScaffold( - appBar: PatientProfileHeaderNewDesignAppBar( - patient, patient.patientType.toString(), patient.arrivedOn), + appBar: PatientProfileHeaderWhitAppointmentAppBar( + patient: patient, + patientType: patient.patientType.toString() ?? "0", + arrivalType: patient.arrivedOn.toString() ?? 0, + doctorName: doctorName, + profileUrl: doctorImage, + clinic: clinicName, + isPrescriptions: true, + isMedicalFile: true, + episode: episode, + vistDate: + '${DateUtils.getDayMonthYearDateFormatted(DateUtils.getDateTimeFromServerFormat( + vistDate, + ), isArabic: projectViewModel.isArabic)}', + ), isShowAppBar: true, appBarTitle: TranslationBase.of(context).medicalReport.toUpperCase(), body: NetworkBaseView( @@ -105,160 +144,160 @@ class _MedicalFileDetailsState extends State { child: Container( child: Column( children: [ - Container( - width: double.infinity, - margin: EdgeInsets.only( - top: 10, left: 10, right: 10), - padding: EdgeInsets.all(8.0), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.all( - Radius.circular(10.0), - ), - border: Border.all( - color: Colors.grey[200], width: 0.5), - ), - child: Column( - children: [ - Row( - children: [ - if (model.medicalFileList.length != - 0 && - model - .medicalFileList[0] - .entityList[0] - .timelines[ - encounterNumber] - .timeLineEvents[0] - .consulations - .length != - 0) - Expanded( - child: AppText( - model - .medicalFileList[0] - .entityList[0] - .timelines[ - encounterNumber] - .timeLineEvents[0] - .consulations[0] - .doctorName - .toUpperCase(), - fontWeight: FontWeight.w700, - ), - ), - ], - ), - if (model.medicalFileList.length != 0) - Row( - children: [ - AppText( - TranslationBase.of(context) - .clinic + - ": ", - ), - if (model.medicalFileList - .length != - 0 && - model - .medicalFileList[0] - .entityList[0] - .timelines[ - encounterNumber] - .timeLineEvents[0] - .consulations - .length != - 0) - AppText( - model - .medicalFileList[0] - .entityList[0] - .timelines[ - encounterNumber] - .timeLineEvents[0] - .consulations[0] - .clinicName, - fontWeight: FontWeight.w700, - ), - ], - ), - Row( - children: [ - AppText( - TranslationBase.of(context) - .episode + - ": ", - //fontWeight: FontWeight.w700, - ), - if (model.medicalFileList.length != - 0 && - model - .medicalFileList[0] - .entityList[0] - .timelines[ - encounterNumber] - .timeLineEvents[0] - .consulations - .length != - 0) - AppText( - model - .medicalFileList[0] - .entityList[0] - .timelines[encounterNumber] - .timeLineEvents[0] - .consulations[0] - .episodeID - .toString(), - fontWeight: FontWeight.w700, - ), - ], - ), - Row( - children: [ - AppText( - TranslationBase.of(context) - .visitDate + - ": ", - //fontWeight: FontWeight.w700, - ), - if (model.medicalFileList.length != - 0 && - model - .medicalFileList[0] - .entityList[0] - .timelines[ - encounterNumber] - .timeLineEvents[0] - .consulations - .length != - 0) - AppText( - '${DateUtils.getDayMonthYearDateFormatted(DateUtils.getDateTimeFromServerFormat( - model - .medicalFileList[0] - .entityList[0] - .timelines[ - encounterNumber] - .date, - ), isArabic: projectViewModel.isArabic)}', - color: Colors.black, - fontWeight: FontWeight.w700, - fontSize: 14, - ), - SizedBox(width: 35.0), - // AppText( - // 'Appt Date : ', - // fontWeight: FontWeight.w700, - // ), - // AppText( - // '23/12/2020', - // ), - ], - ), - ], - ), - ), + // Container( + // width: double.infinity, + // margin: EdgeInsets.only( + // top: 10, left: 10, right: 10), + // padding: EdgeInsets.all(8.0), + // decoration: BoxDecoration( + // color: Colors.white, + // borderRadius: BorderRadius.all( + // Radius.circular(10.0), + // ), + // border: Border.all( + // color: Colors.grey[200], width: 0.5), + // ), + // child: Column( + // children: [ + // Row( + // children: [ + // if (model.medicalFileList.length != + // 0 && + // model + // .medicalFileList[0] + // .entityList[0] + // .timelines[ + // encounterNumber] + // .timeLineEvents[0] + // .consulations + // .length != + // 0) + // Expanded( + // child: AppText( + // model + // .medicalFileList[0] + // .entityList[0] + // .timelines[ + // encounterNumber] + // .timeLineEvents[0] + // .consulations[0] + // .doctorName + // .toUpperCase(), + // fontWeight: FontWeight.w700, + // ), + // ), + // ], + // ), + // if (model.medicalFileList.length != 0) + // Row( + // children: [ + // AppText( + // TranslationBase.of(context) + // .clinic + + // ": ", + // ), + // if (model.medicalFileList + // .length != + // 0 && + // model + // .medicalFileList[0] + // .entityList[0] + // .timelines[ + // encounterNumber] + // .timeLineEvents[0] + // .consulations + // .length != + // 0) + // AppText( + // model + // .medicalFileList[0] + // .entityList[0] + // .timelines[ + // encounterNumber] + // .timeLineEvents[0] + // .consulations[0] + // .clinicName, + // fontWeight: FontWeight.w700, + // ), + // ], + // ), + // Row( + // children: [ + // AppText( + // TranslationBase.of(context) + // .episode + + // ": ", + // //fontWeight: FontWeight.w700, + // ), + // if (model.medicalFileList.length != + // 0 && + // model + // .medicalFileList[0] + // .entityList[0] + // .timelines[ + // encounterNumber] + // .timeLineEvents[0] + // .consulations + // .length != + // 0) + // AppText( + // model + // .medicalFileList[0] + // .entityList[0] + // .timelines[encounterNumber] + // .timeLineEvents[0] + // .consulations[0] + // .episodeID + // .toString(), + // fontWeight: FontWeight.w700, + // ), + // ], + // ), + // Row( + // children: [ + // AppText( + // TranslationBase.of(context) + // .visitDate + + // ": ", + // //fontWeight: FontWeight.w700, + // ), + // if (model.medicalFileList.length != + // 0 && + // model + // .medicalFileList[0] + // .entityList[0] + // .timelines[ + // encounterNumber] + // .timeLineEvents[0] + // .consulations + // .length != + // 0) + // AppText( + // '${DateUtils.getDayMonthYearDateFormatted(DateUtils.getDateTimeFromServerFormat( + // model + // .medicalFileList[0] + // .entityList[0] + // .timelines[ + // encounterNumber] + // .date, + // ), isArabic: projectViewModel.isArabic)}', + // color: Colors.black, + // fontWeight: FontWeight.w700, + // fontSize: 14, + // ), + // SizedBox(width: 35.0), + // // AppText( + // // 'Appt Date : ', + // // fontWeight: FontWeight.w700, + // // ), + // // AppText( + // // '23/12/2020', + // // ), + // ], + // ), + // ], + // ), + // ), SizedBox(height: 25.0), if (model.medicalFileList.length != 0 && diff --git a/lib/screens/medical-file/medical_file_page.dart b/lib/screens/medical-file/medical_file_page.dart index e9203b9c..00648473 100644 --- a/lib/screens/medical-file/medical_file_page.dart +++ b/lib/screens/medical-file/medical_file_page.dart @@ -110,6 +110,36 @@ class _MedicalFilePageState extends State { encounterNumber: index, pp: patient.patientId, patient: patient, + doctorName: model + .medicalFileList[0] + .entityList[0] + .timelines[index] + .doctorName, + clinicName: model + .medicalFileList[0] + .entityList[0] + .timelines[index] + .clinicName, + doctorImage: model + .medicalFileList[0] + .entityList[0] + .timelines[index] + .doctorImage, + episode: model + .medicalFileList[0] + .entityList[0] + .timelines[index] + .timeLineEvents[0] + .consulations[0] + .episodeID + .toString(), + vistDate: model + .medicalFileList[0] + .entityList[0] + .timelines[index] + .date + .toString() + .toString(), )), ); }, diff --git a/lib/screens/patients/insurance_approval_screen_patient.dart b/lib/screens/patients/insurance_approval_screen_patient.dart index b342de9c..6ef7ca9c 100644 --- a/lib/screens/patients/insurance_approval_screen_patient.dart +++ b/lib/screens/patients/insurance_approval_screen_patient.dart @@ -54,628 +54,89 @@ class _InsuranceApprovalScreenNewState appBarTitle: TranslationBase.of(context).approvals, body: SingleChildScrollView( child: Container( - margin: EdgeInsets.only( - left: SizeConfig.screenWidth * 0.004, - right: SizeConfig.screenWidth * 0.004, - top: SizeConfig.screenWidth * 0.04, - ), - child: model.insuranceApproval.length != 0 - ? Column( - children: [ - // Container( - // width: double.infinity, - // height: SizeConfig.screenHeight * 0.09, - // color: Color(0xffEEEEEE), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceAround, - // children: [ - // Texts( - // TranslationBase.of(context).totalApproval, - // color: Color(0xff60688B), - // fontSize: 19.0, - // fontWeight: FontWeight.w600, - // ), - // if (model.insuranceApproval.length > 0) - // Container( - // width: 60, - // height: 40, - // decoration: BoxDecoration( - // color: Theme.of(context).primaryColor, - // borderRadius: BorderRadius.circular(19.0)), - // child: Center( - // child: Texts( - // model.insuranceApproval[0].unUsedCount - // .toString(), - // color: Colors.white, - // fontSize: 17.0, - // ), - // )) - // ], - // )), - Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - Row( - children: [ - AppText( - 'Insurance', - fontSize: 15.0, - fontWeight: FontWeight.w600, - fontFamily: 'Poppins', - ), - ], - ), - Row( - children: [ - AppText( - 'Approvals', - fontSize: 30.0, - fontWeight: FontWeight.w700, - ), - ], - ), - ], - ), + margin: EdgeInsets.only( + left: SizeConfig.screenWidth * 0.004, + right: SizeConfig.screenWidth * 0.004, + top: SizeConfig.screenWidth * 0.04, + ), + child: model.insuranceApproval.length != 0 + ? Column( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + Row( + children: [ + AppText( + 'Insurance', + fontSize: 15.0, + fontWeight: FontWeight.w600, + fontFamily: 'Poppins', + ), + ], + ), + Row( + children: [ + AppText( + 'Approvals', + fontSize: 30.0, + fontWeight: FontWeight.w700, + ), + ], + ), + ], ), - - ...List.generate( - model.insuranceApproval.length, - (index) => Container( - child: InkWell( - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - InsuranceApprovalsDetails( - patient: patient, - indexInsurance: index, - )), - ); - }, - child: DoctorCardInsurance( - patientOut: model.insuranceApproval[index] - .patientDescription, - profileUrl: - model.insuranceApproval[index].doctorImage, - clinic: - model.insuranceApproval[index].clinicName, - doctorName: - model.insuranceApproval[index].doctorName, - branch: model - .insuranceApproval[index].approvalNo - .toString(), - isPrescriptions: true, - approvalStatus: model.insuranceApproval[index] - .approvalStatusDescption ?? - '', - ), + ), + ...List.generate( + model.insuranceApproval.length, + (index) => Container( + child: InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + InsuranceApprovalsDetails( + patient: patient, + indexInsurance: index, + )), + ); + }, + child: DoctorCardInsurance( + patientOut: model + .insuranceApproval[index].patientDescription, + profileUrl: + model.insuranceApproval[index].doctorImage, + clinic: model.insuranceApproval[index].clinicName, + doctorName: + model.insuranceApproval[index].doctorName, + branch: model.insuranceApproval[index].approvalNo + .toString(), + isPrescriptions: true, + approvalStatus: model.insuranceApproval[index] + .approvalStatusDescption ?? + '', + branch2: + model.insuranceApproval[index].projectName, ), ), - // (index) => Container( - // width: double.maxFinite, - // height: MediaQuery.of(context).size.height * .20, - // margin: EdgeInsets.all(10), - // padding: - // EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5), - // decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(15), - // color: Colors.white, - // ), - // child: Padding( - // padding: const EdgeInsets.all(8.0), - // child: Container( - // child: Row( - // mainAxisAlignment: MainAxisAlignment.start, - // children: [ - // Container( - // height: MediaQuery.of(context).size.height * .20, - // width: 5, - // decoration: BoxDecoration( - // borderRadius: BorderRadius.only( - // topLeft: Radius.circular(10), - // bottomLeft: Radius.circular(10), - // ), - // color: model.insuranceApproval[index] - // .approvalStatusDescption != - // "Approved" - // ? Colors.red[500] - // : Colors.green, - // ), - // ), - // Expanded( - // child: Container( - // padding: EdgeInsets.only( - // left: projectViewModel.isArabic ? 0 : 15, - // right: projectViewModel.isArabic ? 15 : 0), - // child: InkWell( - // child: Column( - // crossAxisAlignment: - // CrossAxisAlignment.start, - // children: [ - // Row( - // // mainAxisAlignment: - // // MainAxisAlignment.spaceBetween, - // children: [ - // Column( - // crossAxisAlignment: - // CrossAxisAlignment.start, - // children: [ - // Texts( - // model.insuranceApproval[index] - // .approvalDetails.status, - // color: model - // .insuranceApproval[ - // index] - // .approvalStatusDescption == - // "Approved" - // ? Colors.green - // : Colors.red[800], - // fontWeight: FontWeight.w600, - // ), - // SizedBox( - // height: 5, - // ), - // AppText(model - // .insuranceApproval[index] - // .doctorName), - // Container( - // child: LargeAvatar( - // url: model - // .insuranceApproval[index] - // .doctorImage, - // ), - // width: 55, - // height: 55, - // ), - // ], - // ), - // Column( - // crossAxisAlignment: - // CrossAxisAlignment.start, - // children: [ - // Row( - // children: [ - // Texts( - // 'Clinic: ', - // color: Colors.grey[500], - // ), - // Texts( - // model - // .insuranceApproval[ - // index] - // .clinicName, - // ), - // ], - // ), - // Row( - // children: [ - // Texts( - // 'Approval No', - // color: Colors.grey[500], - // ), - // Texts( - // model - // .insuranceApproval[ - // index] - // .approvalNo - // .toString(), - // ), - // ], - // ), - // ], - // ), - // SizedBox( - // width: 5, - // ), - // ], - // ), - // Column( - // crossAxisAlignment: - // CrossAxisAlignment.start, - // children: [ - // Row( - // children: [ - // Texts( - // 'Clinic: ', - // color: Colors.grey[500], - // ), - // Texts( - // model - // .insuranceApproval[ - // index] - // .clinicName, - // ), - // ], - // ), - // Row( - // children: [ - // Texts( - // 'Approval No', - // color: Colors.grey[500], - // ), - // Texts( - // model - // .insuranceApproval[ - // index] - // .approvalNo - // .toString(), - // ), - // ], - // ), - // ], - // ), - // Row( - // mainAxisAlignment: - // MainAxisAlignment.end, - // children: [ - // Icon(Icons.remove_red_eye_outlined) - // ], - // ) - // ], - // ), - // ), - // ), - // ), - // ], - // ), - // ), - // ), - // ), -// RoundedContainer( -// backgroundColor: Colors.white, -// child: Column( -// crossAxisAlignment: CrossAxisAlignment.start, -// children: [ -// ExpansionTile( -// title: Container( -// //height: 120.0, -// child: Column( -// crossAxisAlignment: CrossAxisAlignment.start, -// children: [ -// model.insuranceApproval[index] -// .patientDescription == -// "In Patient" -// ? Container( -// decoration: BoxDecoration( -// color: -// Theme.of(context).primaryColor, -// borderRadius: -// BorderRadius.circular(16.0)), -// width: 115.0, -// padding: EdgeInsets.only(left: 11.5), -// child: Center( -// child: Texts( -// TranslationBase.of(context) -// .inPatient, -// color: Colors.white, -// ), -// ), -// ) -// : Container( -// decoration: BoxDecoration( -// color: Color(0xff505A5D), -// borderRadius: -// BorderRadius.circular(16.0)), -// width: 115.0, -// padding: EdgeInsets.only(left: 11.5), -// child: Center( -// child: Texts( -// TranslationBase.of(context) -// .outpatient, -// color: Colors.white, -// ), -// ), -// ), -// Padding( -// padding: EdgeInsets.symmetric(vertical: 10.0), -// child: Texts( -// model.insuranceApproval[index].clinicName, -// fontSize: 20.0, -// color: Color(0xff60686B), -// fontWeight: FontWeight.w600, -// ), -// ), -// Texts( -// model.insuranceApproval[index].doctorName, -// fontSize: 17.0, -// ), -// ], -// ), -// ), -// children: [ -// Padding( -// padding: EdgeInsets.symmetric( -// vertical: 12.0, horizontal: 12.0), -// child: Column( -// crossAxisAlignment: CrossAxisAlignment.start, -// children: [ -// Row( -// children: [ -// Texts( -// TranslationBase.of(context).approvalNo, -// fontSize: 18.0, -// ), -// Texts( -// model -// .insuranceApproval[index].approvalNo -// .toString(), -// fontSize: 18.0, -// fontWeight: FontWeight.w600, -// ), -// ], -// ), -// Divider( -// color: Colors.black, -// height: 25.0, -// thickness: 1.0, -// ), -// Row( -// children: [ -// Texts( -// TranslationBase.of(context) -// .procedureStatus, -// fontSize: 17.5, -// ), -// SizedBox( -// width: 12, -// ), -// Expanded( -// child: Texts( -// model.insuranceApproval[index] -// .approvalStatusDescption, -// fontWeight: FontWeight.w600, -// fontSize: 17.5, -// ), -// ), -// ], -// ), -// Divider( -// color: Colors.black, -// height: 25.0, -// thickness: 1.0, -// ), -// Row( -// children: [ -// Texts( -// TranslationBase.of(context).unusedCount, -// fontSize: 17.5, -// ), -// Texts( -// model.insuranceApproval[index] -// .unUsedCount -// .toString(), -// fontSize: 17.5, -// fontWeight: FontWeight.w600, -// ), -// ], -// ), -// Divider( -// color: Colors.black, -// height: 25.0, -// thickness: 1.0, -// ), -// // Text( -// // 'Company Name: ' + -// // model.insuranceApproval[index] -// // .companyName == -// // null -// // ? '000' -// // : model -// // .insuranceApproval[index].companyName, -// // style: TextStyle( -// // fontSize: 17.5, -// // fontWeight: FontWeight.w600), -// // ), -// Texts( -// TranslationBase.of(context).companyName, -// fontWeight: FontWeight.w600, -// fontSize: 17.5, -// ), -// -// Divider( -// color: Colors.black, -// height: 25.0, -// thickness: 1.0, -// ), -// Row( -// children: [ -// Texts( -// TranslationBase.of(context).receiptOn, -// fontSize: 17.5, -// fontWeight: FontWeight.w600, -// ), -// Texts( -// DateUtils.getDateTimeFromServerFormat( -// model.insuranceApproval[index] -// .rceiptOn) -// .toString(), -// fontSize: 17.5, -// fontWeight: FontWeight.w600, -// ), -// ], -// ), -// Divider( -// color: Colors.black, -// height: 25.0, -// thickness: 1.0, -// ), -// Row( -// children: [ -// Texts( -// TranslationBase.of(context).expiryDate, -// fontSize: 17.5, -// fontWeight: FontWeight.w600, -// ), -// Texts( -// DateUtils.getDateTimeFromServerFormat( -// model.insuranceApproval[index] -// .expiryDate) -// .toString(), -// fontSize: 17.5, -// fontWeight: FontWeight.w600, -// ), -// ], -// ), -// Divider( -// color: Colors.black, -// height: 55.0, -// thickness: 1.2, -// ), -// IntrinsicHeight( -// child: Row( -// crossAxisAlignment: -// CrossAxisAlignment.center, -// children: [ -// Expanded( -// flex: 1, -// child: Column( -// children: [ -// Text(TranslationBase.of(context) -// .procedureName), -// Padding( -// padding: EdgeInsets.only( -// top: SizeConfig -// .heightMultiplier * -// 3.0), -// child: Text( -// model.insuranceApproval[index] -// .approvalDetails == -// null -// ? '' -// : model -// .insuranceApproval[ -// index] -// .approvalDetails -// .procedureName, -// style: TextStyle( -// fontWeight: -// FontWeight.w600, -// fontSize: 15.5), -// ), -// ), -// ], -// ), -// ), -// VerticalDivider( -// width: 10.0, -// thickness: 1.2, -// color: Colors.black, -// ), -// Expanded( -// flex: 1, -// child: Column( -// children: [ -// Text(TranslationBase.of(context) -// .procedureStatus), -// Padding( -// padding: EdgeInsets.only( -// top: SizeConfig -// .heightMultiplier * -// 3.0), -// child: Text( -// model.insuranceApproval[index] -// .approvalDetails == -// null -// ? '' -// : model -// .insuranceApproval[ -// index] -// .approvalDetails -// .status, -// style: TextStyle( -// fontSize: 17.5, -// fontWeight: -// FontWeight.w600), -// ), -// ), -// ], -// ), -// ), -// VerticalDivider( -// width: 2.3, -// thickness: 1.2, -// color: Colors.black, -// ), -// Expanded( -// flex: 1, -// child: Column( -// children: [ -// Text(TranslationBase.of(context) -// .usageStatus), -// Padding( -// padding: EdgeInsets.only( -// top: SizeConfig -// .heightMultiplier * -// 3.0), -// child: Text( -// model.insuranceApproval[index] -// .approvalDetails == -// null -// ? '' -// : model -// .insuranceApproval[ -// index] -// .approvalDetails -// .isInvoicedDesc, -// style: TextStyle( -// fontWeight: -// FontWeight.w600, -// fontSize: 17.5), -// ), -// ), -// ], -// ), -// ), -// ], -// ), -// ), -// Divider( -// color: Colors.black, -// height: 25.0, -// thickness: 1.0, -// ), -// ], -// ), -// ), -// ], -// ), -// ], -// ), -// ), ), - ], - ) - : Column( - children: [ - Container( - height: 200, - width: double.infinity, - child: Center( - child: Text("No Insurance Approvals Found"))) - ], - )), + ), + ], + ) + : Column( + children: [ + Container( + height: 200, + width: double.infinity, + child: Center( + child: Text("No Insurance Approvals Found"))) + ], + ), + ), ), ), ); } - - convertDateFormat(String Date) { - const start = "/Date("; - const end = "+0300)"; - - final startIndex = Date.indexOf(start); - final endIndex = Date.indexOf(end, startIndex + start.length); - - var date = new DateTime.fromMillisecondsSinceEpoch( - int.parse(Date.substring(startIndex + start.length, endIndex))); - String newDate = date.year.toString() + - "-" + - date.month.toString().padLeft(2, '0') + - "-" + - date.day.toString().padLeft(2, '0'); - - return newDate.toString(); - } } diff --git a/lib/screens/patients/profile/admission-request/admission-request-first-screen.dart b/lib/screens/patients/profile/admission-request/admission-request-first-screen.dart index 69886efb..876066ce 100644 --- a/lib/screens/patients/profile/admission-request/admission-request-first-screen.dart +++ b/lib/screens/patients/profile/admission-request/admission-request-first-screen.dart @@ -44,6 +44,12 @@ class _AdmissionRequestThirdScreenState bool _isSickLeaveRequired = false; bool _patientPregnant = false; + String clinicError; + String doctorError; + String sickLeaveCommentError; + String medicalHistoryError; + String surgicalHistoryError; + @override Widget build(BuildContext context) { final routeArgs = ModalRoute.of(context).settings.arguments as Map; @@ -117,6 +123,7 @@ class _AdmissionRequestThirdScreenState height: screenSize.height * 0.075, hintText: TranslationBase.of(context).clinic, isDropDown: true, + validationError: clinicError, dropDownText: _selectedClinic != null ? projectViewModel.isArabic? _selectedClinic['clinicNameArabic'] : _selectedClinic['clinicNameEnglish'] : null, @@ -170,6 +177,7 @@ class _AdmissionRequestThirdScreenState ? _selectedDoctor['DoctorName'] : null, enabled: false, + validationError: doctorError, onClick: _selectedClinic != null ? model.doctorsList != null && model.doctorsList.length > 0 @@ -263,6 +271,7 @@ class _AdmissionRequestThirdScreenState controller: _sickLeaveCommentsController, minLines: 2, maxLines: 4, + validationError: sickLeaveCommentError, inputType: TextInputType.multiline, ), SizedBox( @@ -331,6 +340,7 @@ class _AdmissionRequestThirdScreenState controller: _postMedicalHistoryController, minLines: 4, maxLines: 6, + validationError: medicalHistoryError, inputType: TextInputType.multiline, ), SizedBox( @@ -341,6 +351,7 @@ class _AdmissionRequestThirdScreenState controller: _postSurgicalHistoryController, minLines: 2, maxLines: 4, + validationError: surgicalHistoryError, inputType: TextInputType.multiline, ), ], @@ -401,6 +412,34 @@ class _AdmissionRequestThirdScreenState } else { DrAppToastMsg.showErrorToast( TranslationBase.of(context).pleaseFill); + + setState(() { + if(_selectedClinic == null){ + clinicError = TranslationBase.of(context).fieldRequired; + }else { + clinicError = null; + } + if(_selectedDoctor == null){ + doctorError = TranslationBase.of(context).fieldRequired; + }else { + doctorError = null; + } + if(_sickLeaveCommentsController.text == ""){ + sickLeaveCommentError = TranslationBase.of(context).fieldRequired; + }else { + sickLeaveCommentError = null; + } + if(_postMedicalHistoryController.text == ""){ + medicalHistoryError = TranslationBase.of(context).fieldRequired; + }else { + medicalHistoryError = null; + } + if(_postSurgicalHistoryController.text == ""){ + surgicalHistoryError = TranslationBase.of(context).fieldRequired; + }else { + surgicalHistoryError = null; + } + }); } }, ), diff --git a/lib/screens/patients/profile/admission-request/admission-request-third-screen.dart b/lib/screens/patients/profile/admission-request/admission-request-third-screen.dart index a48a7c45..bf896145 100644 --- a/lib/screens/patients/profile/admission-request/admission-request-third-screen.dart +++ b/lib/screens/patients/profile/admission-request/admission-request-third-screen.dart @@ -38,6 +38,10 @@ class _AdmissionRequestThirdScreenState dynamic _selectedIcd; dynamic _selectedDiagnosisType; + String diagnosisError; + String icdError; + String diagnosisTypeError; + @override Widget build(BuildContext context) { final routeArgs = ModalRoute.of(context).settings.arguments as Map; @@ -112,6 +116,7 @@ class _AdmissionRequestThirdScreenState : null, enabled: false, isDropDown: true, + validationError: diagnosisError, onClick: model.diagnosisTypesList != null && model.diagnosisTypesList.length > 0 ? () { @@ -157,6 +162,7 @@ class _AdmissionRequestThirdScreenState : null, enabled: false, isDropDown: true, + validationError: icdError, onClick: model.icdCodes != null && model.icdCodes.length > 0 ? () { @@ -204,6 +210,7 @@ class _AdmissionRequestThirdScreenState : null, enabled: false, isDropDown: true, + validationError: diagnosisTypeError, onClick: model.listOfDiagnosisSelectionTypes != null && model.listOfDiagnosisSelectionTypes.length > @@ -312,6 +319,26 @@ class _AdmissionRequestThirdScreenState } else { DrAppToastMsg.showErrorToast( TranslationBase.of(context).pleaseFill); + + setState(() { + if(_selectedDiagnosis == null){ + diagnosisError = TranslationBase.of(context).fieldRequired; + }else { + diagnosisError = null; + } + + if(_selectedIcd == null){ + icdError = TranslationBase.of(context).fieldRequired; + }else { + icdError = null; + } + + if(_selectedDiagnosisType == null){ + diagnosisTypeError = TranslationBase.of(context).fieldRequired; + }else { + diagnosisTypeError = null; + } + }); } }, ), 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 2dcfbbf9..a4aebc9f 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 @@ -50,6 +50,18 @@ class _AdmissionRequestSecondScreenState dynamic _selectedRoomCategory; dynamic _selectedAdmissionType; + String costError; + String plansError; + String otherInterventionsError; + String expectedDaysError; + String expectedDatesError; + String floorError; + String roomError; + String treatmentsError; + String complicationsError; + String proceduresError; + String admissionTypeError; + @override Widget build(BuildContext context) { final routeArgs = ModalRoute.of(context).settings.arguments as Map; @@ -125,6 +137,7 @@ class _AdmissionRequestSecondScreenState hintText: TranslationBase.of(context).estimatedCost, controller: _estimatedCostController, + validationError: costError, inputType: TextInputType.number, inputFormatters: [ FilteringTextInputFormatter.allow( @@ -138,6 +151,7 @@ class _AdmissionRequestSecondScreenState hintText: TranslationBase.of(context).postPlans, controller: _postPlansEstimatedCostController, inputType: TextInputType.multiline, + validationError: plansError, minLines: 4, maxLines: 6, ), @@ -150,6 +164,7 @@ class _AdmissionRequestSecondScreenState controller: _otherDepartmentsInterventionsController, inputType: TextInputType.multiline, + validationError: otherInterventionsError, minLines: 2, maxLines: 4, ), @@ -170,6 +185,7 @@ class _AdmissionRequestSecondScreenState hintText: TranslationBase.of(context).expectedDays, controller: _expectedDaysController, + validationError: expectedDaysError, inputType: TextInputType.number, inputFormatters: [ FilteringTextInputFormatter.allow( @@ -188,6 +204,7 @@ class _AdmissionRequestSecondScreenState : null, enabled: false, isDropDown: true, + validationError: expectedDatesError, suffixIcon: Icon( Icons.calendar_today, color: Colors.black, @@ -215,6 +232,7 @@ class _AdmissionRequestSecondScreenState : null, enabled: false, isDropDown: true, + validationError: floorError, onClick: model.floorList != null && model.floorList.length > 0 ? () { @@ -314,6 +332,7 @@ class _AdmissionRequestSecondScreenState : null, enabled: false, isDropDown: true, + validationError: roomError, onClick: model.roomCategoryList != null && model.roomCategoryList.length > 0 ? () { @@ -365,6 +384,7 @@ class _AdmissionRequestSecondScreenState TranslationBase.of(context).treatmentLine, controller: _treatmentLineController, inputType: TextInputType.multiline, + validationError: treatmentsError, minLines: 3, maxLines: 5, ), @@ -376,6 +396,7 @@ class _AdmissionRequestSecondScreenState TranslationBase.of(context).complications, controller: _complicationsController, inputType: TextInputType.multiline, + validationError: complicationsError, minLines: 3, maxLines: 5, ), @@ -387,6 +408,7 @@ class _AdmissionRequestSecondScreenState TranslationBase.of(context).otherProcedure, controller: _otherProceduresController, inputType: TextInputType.multiline, + validationError: proceduresError, minLines: 3, maxLines: 5, ), @@ -402,6 +424,7 @@ class _AdmissionRequestSecondScreenState : null, enabled: false, isDropDown: true, + validationError: admissionTypeError, onClick: model.admissionTypeList != null && model.admissionTypeList.length > 0 ? () { @@ -533,6 +556,75 @@ class _AdmissionRequestSecondScreenState } else { DrAppToastMsg.showErrorToast( TranslationBase.of(context).pleaseFill); + + setState(() { + if (_estimatedCostController.text == "") { + costError = TranslationBase.of(context).fieldRequired; + } else { + costError = null; + } + + if (_postPlansEstimatedCostController.text == "") { + plansError = TranslationBase.of(context).fieldRequired; + } else { + plansError = null; + } + + if (_expectedDaysController.text == "") { + expectedDaysError = TranslationBase.of(context).fieldRequired; + } else { + expectedDaysError = null; + } + + if (_expectedAdmissionDate == null) { + expectedDatesError = TranslationBase.of(context).fieldRequired; + } else { + expectedDatesError = null; + } + + if (_otherDepartmentsInterventionsController.text == "") { + otherInterventionsError = TranslationBase.of(context).fieldRequired; + } else { + otherInterventionsError = null; + } + + if (_selectedFloor == null) { + floorError = TranslationBase.of(context).fieldRequired; + } else { + floorError = null; + } + + if (_selectedRoomCategory == null) { + roomError = TranslationBase.of(context).fieldRequired; + } else { + roomError = null; + } + + if (_treatmentLineController.text == "") { + treatmentsError = TranslationBase.of(context).fieldRequired; + } else { + treatmentsError = null; + } + + if (_complicationsController.text == "") { + complicationsError = TranslationBase.of(context).fieldRequired; + } else { + complicationsError = null; + } + + if (_otherProceduresController.text == "") { + proceduresError = TranslationBase.of(context).fieldRequired; + } else { + proceduresError = null; + } + + if (_selectedAdmissionType == null) { + admissionTypeError = TranslationBase.of(context).fieldRequired; + } else { + admissionTypeError = null; + } + }); + } }, ), diff --git a/lib/screens/patients/profile/lab_result/labs_home_page.dart b/lib/screens/patients/profile/lab_result/labs_home_page.dart index d167ca43..8ae3f3ac 100644 --- a/lib/screens/patients/profile/lab_result/labs_home_page.dart +++ b/lib/screens/patients/profile/lab_result/labs_home_page.dart @@ -32,9 +32,10 @@ class LabsHomePage extends StatelessWidget { arrivalType = routeArgs['arrivalType']; print(arrivalType); return BaseView( - onModelReady: (model) => model.getLabs(patient), + onModelReady: (model) => model.getLabs(patient,isArrived: (patientType != null && patientType == '7' && patient.patientStatusType == 43)), builder: (context, ProcedureViewModel model, widget) => AppScaffold( baseViewModel: model, + backgroundColor: Colors.grey[100], isShowAppBar: true, appBar: PatientProfileHeaderNewDesignAppBar( patient, patient.patientType.toString() ?? '0', patientType), @@ -48,6 +49,7 @@ class LabsHomePage extends StatelessWidget { SizedBox( height: 12, ), + if(model.patientLabOrdersList.isNotEmpty && patient.patientStatusType != 43) Padding( padding: const EdgeInsets.all(8.0), child: Column( @@ -67,9 +69,27 @@ class LabsHomePage extends StatelessWidget { ], ), ), - if (patientType != null && - patientType == '7' && - patient.patientStatusType == 43) + if(patient.patientStatusType == 43) + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + 'Lab', + style: "caption2", + color: Colors.black, + fontSize: 13, + ), + Texts( + 'Result', + bold: true, + fontSize: 22, + ), + ], + ), + ), + if (patientType != null && patientType == '7' && patient.patientStatusType == 43) InkWell( onTap: () { Navigator.push( @@ -156,7 +176,22 @@ class LabsHomePage extends StatelessWidget { ); }).toList(), ), - ) + ), + if(model.patientLabOrdersList.isEmpty && patient.patientStatusType != 43) + Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: 100,), + Image.asset('assets/images/no-data.png'), + Padding( + padding: const EdgeInsets.all(8.0), + child: Texts('No Lab Result Found'), + ) + + ], + ), + ) ], ), ), diff --git a/lib/screens/patients/profile/radiology/radiology_home_page.dart b/lib/screens/patients/profile/radiology/radiology_home_page.dart index 6c44cde4..dfbbdff3 100644 --- a/lib/screens/patients/profile/radiology/radiology_home_page.dart +++ b/lib/screens/patients/profile/radiology/radiology_home_page.dart @@ -29,9 +29,10 @@ class RadiologyHomePage extends StatelessWidget { String arrivalType = routeArgs['arrivalType']; return BaseView( - onModelReady: (model) => model.getPatientRadOrders(patient), + onModelReady: (model) => model.getPatientRadOrders(patient,patientType: patientType), builder: (_, model, widget) => AppScaffold( isShowAppBar: true, + backgroundColor: Colors.grey[100], // appBarTitle: TranslationBase.of(context).radiology, appBar: PatientProfileHeaderNewDesignAppBar( patient, patient.patientType.toString() ?? '0', arrivalType), @@ -44,7 +45,8 @@ class RadiologyHomePage extends StatelessWidget { SizedBox( height: 12, ), - Padding( + if(model.radiologyList.isNotEmpty && patient.patientStatusType != 43) + Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -63,6 +65,26 @@ class RadiologyHomePage extends StatelessWidget { ], ), ), + if(patient.patientStatusType == 43) + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + 'Radiology', + style: "caption2", + color: Colors.black, + fontSize: 13, + ), + Texts( + 'Result', + bold: true, + fontSize: 22, + ), + ], + ), + ), if (patientType != null && patientType == '7' && patient.patientStatusType == 43) @@ -142,6 +164,21 @@ class RadiologyHomePage extends StatelessWidget { appointmentDate: model.radiologyList[index].orderDate, ), )), + if(model.radiologyList.isEmpty && patient.patientStatusType != 43) + Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: 100,), + Image.asset('assets/images/no-data.png'), + Padding( + padding: const EdgeInsets.all(8.0), + child: Texts('No Radiology Found'), + ) + + ], + ), + ) ], ), ), diff --git a/lib/screens/prescription/add_prescription_form.dart b/lib/screens/prescription/add_prescription_form.dart index f6207b52..819cc2f1 100644 --- a/lib/screens/prescription/add_prescription_form.dart +++ b/lib/screens/prescription/add_prescription_form.dart @@ -49,7 +49,7 @@ postProcedure( DateTime doseTime, String doseUnit, String icdCode, - PatiantInformtion patient}) async { + PatiantInformtion patient,String patientType}) async { PostPrescriptionReqModel postProcedureReqModel = new PostPrescriptionReqModel(); List sss = List(); @@ -236,8 +236,15 @@ class _PrescriptionFormWidgetState extends State { children: [ Column( children: [ + SizedBox(height: 15,), Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + AppText( + 'New Prescription Order', + fontWeight: FontWeight.w700, + fontSize: 20, + ), InkWell( child: Icon( Icons.close, @@ -246,16 +253,7 @@ class _PrescriptionFormWidgetState extends State { onTap: () { Navigator.pop(context); }, - ), - ], - ), - Row( - children: [ - AppText( - 'New Prescription Order', - fontWeight: FontWeight.w700, - fontSize: 20, - ), + ) ], ), ], diff --git a/lib/screens/prescription/prescriptions_page.dart b/lib/screens/prescription/prescriptions_page.dart index ba707769..fafd753d 100644 --- a/lib/screens/prescription/prescriptions_page.dart +++ b/lib/screens/prescription/prescriptions_page.dart @@ -28,10 +28,11 @@ class PrescriptionsPage extends StatelessWidget { String arrivalType = routeArgs['arrivalType']; ProjectViewModel projectViewModel = Provider.of(context); return BaseView( - onModelReady: (model) => model.getPrescriptions(patient), + onModelReady: (model) => model.getPrescriptions(patient,patientType:patientType), builder: (_, model, w) => AppScaffold( baseViewModel: model, isShowAppBar: true, + backgroundColor: Colors.grey[100], appBar: PatientProfileHeaderNewDesignAppBar( patient, patientType ?? '0', arrivalType), body: FractionallySizedBox( @@ -42,7 +43,8 @@ class PrescriptionsPage extends StatelessWidget { SizedBox( height: 12, ), - Padding( + if(model.prescriptionsList.isNotEmpty && patient.patientStatusType != 43) + Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -61,6 +63,26 @@ class PrescriptionsPage extends StatelessWidget { ], ), ), + if(patient.patientStatusType == 43) + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + 'Order', + style: "caption2", + color: Colors.black, + fontSize: 13, + ), + Texts( + 'Prescriptions', + bold: true, + fontSize: 22, + ), + ], + ), + ), if (patientType != null && patientType == '7' && patient.patientStatusType == 43) @@ -138,7 +160,22 @@ class PrescriptionsPage extends StatelessWidget { DateUtils.getDateTimeFromServerFormat( model.prescriptionsList[index].appointmentDate, ), - ))) + ))), + if(model.prescriptionsList.isEmpty && patient.patientStatusType != 43) + Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: 100,), + Image.asset('assets/images/no-data.png'), + Padding( + padding: const EdgeInsets.all(8.0), + child: Texts('No Lab Result Found'), + ) + + ], + ), + ) ], ), ), diff --git a/lib/screens/procedures/ProcedureCard.dart b/lib/screens/procedures/ProcedureCard.dart index 43be9b71..2f3718a3 100644 --- a/lib/screens/procedures/ProcedureCard.dart +++ b/lib/screens/procedures/ProcedureCard.dart @@ -148,27 +148,27 @@ class ProcedureCard extends StatelessWidget { color: Colors.grey, ), Texts( - entityList.clinicDescription??"", + entityList.clinicDescription ?? "", bold: true, fontSize: 12, ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Texts( - entityList.remarks.toString() ?? '', - fontSize: 12, - ), - if (entityList.categoryID == 2 || - entityList.categoryID == 4) - InkWell( - child: Icon(DoctorApp.edit), - onTap: onTap, - ) - ], - ) + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Texts( + // entityList.remarks.toString() ?? '', + // fontSize: 12, + // ), + // if (entityList.categoryID == 2 || + // entityList.categoryID == 4) + // InkWell( + // child: Icon(DoctorApp.edit), + // onTap: onTap, + // ) + // ], + // ) ], ), //onTap: onTap, diff --git a/lib/screens/procedures/add_lab_orders.dart b/lib/screens/procedures/add_lab_orders.dart index 252dce0b..678a345d 100644 --- a/lib/screens/procedures/add_lab_orders.dart +++ b/lib/screens/procedures/add_lab_orders.dart @@ -155,7 +155,7 @@ class _AddSelectedLabOrderState extends State { (BuildContext context, ScrollController scrollController) { return SingleChildScrollView( child: Container( - height: MediaQuery.of(context).size.height * 1.0, + height: MediaQuery.of(context).size.height * .90, child: Padding( padding: EdgeInsets.all(12.0), child: Column( @@ -209,85 +209,39 @@ class _AddSelectedLabOrderState extends State { isEntityListSelected: (master) => isEntityListSelected(master), )), - SizedBox( - height: 15.0, - ), - Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - // Container( - // child: Row( - // children: [ - // AppText( - // TranslationBase.of(context).orderType), - // Radio( - // activeColor: Color(0xFFB9382C), - // value: 1, - // groupValue: selectedType, - // onChanged: (value) { - // setSelectedType(value); - // }, - // ), - // Text('routine'), - // Radio( - // activeColor: Color(0xFFB9382C), - // groupValue: selectedType, - // value: 0, - // onChanged: (value) { - // setSelectedType(value); - // }, - // ), - // Text(TranslationBase.of(context).urgent), - // ], - // ), - // ), - // SizedBox( - // height: 15.0, - // ), - // TextFields( - // hintText: TranslationBase.of(context).remarks, - // controller: remarksController, - // minLines: 3, - // maxLines: 5, - // ), - SizedBox( - height: 100.0, - ), - Container( - margin: EdgeInsets.all( - SizeConfig.widthMultiplier * 5), - child: Wrap( - alignment: WrapAlignment.center, - children: [ - AppButton( - title: - "Add Lab Order", //TranslationBase.of(context) - fontWeight: FontWeight.w700, - //.addSelectedProcedures, - color: Color(0xff359846), - onPressed: () { - //print(entityList.toString()); - onPressed: - if (entityList.isEmpty == true) { - DrAppToastMsg.showErrorToast( - "Fill the mandatory procedure details"); - return; - } + Container( + margin: EdgeInsets.all( + SizeConfig.widthMultiplier * 5), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: + "Add Lab Order", //TranslationBase.of(context) + fontWeight: FontWeight.w700, + //.addSelectedProcedures, + color: Color(0xff359846), + onPressed: () { + //print(entityList.toString()); + onPressed: + if (entityList.isEmpty == true) { + DrAppToastMsg.showErrorToast( + "Fill the mandatory procedure details"); + return; + } - Navigator.pop(context); - postProcedure( - orderType: selectedType.toString(), - entityList: entityList, - patient: patient, - model: widget.model, - remarks: remarksController.text); - }, - ), - ], + Navigator.pop(context); + postProcedure( + orderType: selectedType.toString(), + entityList: entityList, + patient: patient, + model: widget.model, + remarks: remarksController.text); + }, ), - ), - ], - ) + ], + ), + ), ], ), ), diff --git a/lib/screens/procedures/add_radiology_order.dart b/lib/screens/procedures/add_radiology_order.dart index aa897569..56776e86 100644 --- a/lib/screens/procedures/add_radiology_order.dart +++ b/lib/screens/procedures/add_radiology_order.dart @@ -162,15 +162,14 @@ class _AddSelectedRadiologyOrderState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ AppText( 'New Radiology Order', fontWeight: FontWeight.w700, fontSize: 20, ), - SizedBox( - width: MediaQuery.of(context).size.width * 0.48, - ), + InkWell( child: Icon( Icons.close, @@ -209,82 +208,36 @@ class _AddSelectedRadiologyOrderState extends State { isEntityListSelected: (master) => isEntityListSelected(master), )), - SizedBox( - height: 15.0, - ), - Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - // Container( - // child: Row( - // children: [ - // AppText( - // TranslationBase.of(context).orderType), - // Radio( - // activeColor: Color(0xFFB9382C), - // value: 1, - // groupValue: selectedType, - // onChanged: (value) { - // setSelectedType(value); - // }, - // ), - // Text('routine'), - // Radio( - // activeColor: Color(0xFFB9382C), - // groupValue: selectedType, - // value: 0, - // onChanged: (value) { - // setSelectedType(value); - // }, - // ), - // Text(TranslationBase.of(context).urgent), - // ], - // ), - // ), - // SizedBox( - // height: 15.0, - // ), - // TextFields( - // hintText: TranslationBase.of(context).remarks, - // controller: remarksController, - // minLines: 3, - // maxLines: 5, - // ), - SizedBox( - height: 100.0, - ), - Container( - margin: EdgeInsets.all( - SizeConfig.widthMultiplier * 5), - child: Wrap( - alignment: WrapAlignment.center, - children: [ - AppButton( - title: 'Add Radiology Order', - color: Color(0xff359846), - fontWeight: FontWeight.w700, - onPressed: () { - //print(entityList.toString()); - onPressed: - if (entityList.isEmpty == true) { - DrAppToastMsg.showErrorToast( - "Fill the mandatory procedure details"); - return; - } + Container( + margin: EdgeInsets.all( + SizeConfig.widthMultiplier * 5), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: 'Add Radiology Order', + color: Color(0xff359846), + fontWeight: FontWeight.w700, + onPressed: () { + //print(entityList.toString()); + onPressed: + if (entityList.isEmpty == true) { + DrAppToastMsg.showErrorToast( + "Fill the mandatory procedure details"); + return; + } - Navigator.pop(context); - postProcedure( - orderType: selectedType.toString(), - entityList: entityList, - patient: patient, - model: widget.model, - remarks: remarksController.text); - }, - ), - ], + Navigator.pop(context); + postProcedure( + orderType: selectedType.toString(), + entityList: entityList, + patient: patient, + model: widget.model, + remarks: remarksController.text); + }, ), - ), - ], + ], + ), ) ], ), diff --git a/lib/screens/procedures/entity_list_checkbox_search_widget.dart b/lib/screens/procedures/entity_list_checkbox_search_widget.dart index 679739e2..32f02057 100644 --- a/lib/screens/procedures/entity_list_checkbox_search_widget.dart +++ b/lib/screens/procedures/entity_list_checkbox_search_widget.dart @@ -69,7 +69,7 @@ class _EntityListCheckboxSearchWidgetState NetworkBaseView( baseViewModel: widget.model, child: Container( - height: MediaQuery.of(context).size.height * 0.55, + height: MediaQuery.of(context).size.height * 0.65, child: Center( child: Container( margin: EdgeInsets.only(top: 15), diff --git a/lib/screens/procedures/procedure_screen.dart b/lib/screens/procedures/procedure_screen.dart index 646665b7..9608524e 100644 --- a/lib/screens/procedures/procedure_screen.dart +++ b/lib/screens/procedures/procedure_screen.dart @@ -25,10 +25,11 @@ class ProcedureScreen extends StatelessWidget { String patientType = routeArgs['patientType']; String arrivalType = routeArgs['arrivalType']; return BaseView( - onModelReady: (model) => model.getProcedure(mrn: patient.patientId), + onModelReady: (model) => model.getProcedure(mrn: patient.patientId,patientType: patientType), builder: (BuildContext context, ProcedureViewModel model, Widget child) => AppScaffold( isShowAppBar: true, + backgroundColor: Colors.grey[100], baseViewModel: model, appBar: PatientProfileHeaderNewDesignAppBar( patient, arrivalType ?? '0', patientType), @@ -40,7 +41,8 @@ class ProcedureScreen extends StatelessWidget { SizedBox( height: 12, ), - Padding( + if(model.procedureList.length==0 && patient.patientStatusType != 43) + Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -59,6 +61,26 @@ class ProcedureScreen extends StatelessWidget { ], ), ), + if( patient.patientStatusType == 43) + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + 'Order Test or', + style: "caption2", + color: Colors.black, + fontSize: 13, + ), + Texts( + 'Procedure', + bold: true, + fontSize: 22, + ), + ], + ), + ), if (patientType != null && patientType == '7' && patient.patientStatusType == 43) InkWell( onTap: () { @@ -141,6 +163,21 @@ class ProcedureScreen extends StatelessWidget { }, ), ), + if (model.procedureList.length!=0 && patient.patientStatusType != 43) + Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: 100,), + Image.asset('assets/images/no-data.png'), + Padding( + padding: const EdgeInsets.all(8.0), + child: Texts('No Procedure Found'), + ) + + ], + ), + ) ], ), ), diff --git a/lib/screens/sick-leave/add-sickleave.dart b/lib/screens/sick-leave/add-sickleave.dart index eb59cdc3..87071e6e 100644 --- a/lib/screens/sick-leave/add-sickleave.dart +++ b/lib/screens/sick-leave/add-sickleave.dart @@ -13,6 +13,7 @@ import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header- import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design-app-bar.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_header_with_appointment_card_app_bar.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.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/card_with_bgNew_widget.dart'; @@ -32,6 +33,7 @@ class AddSickLeavScreen extends StatelessWidget { builder: (_, model, w) => AppScaffold( baseViewModel: model, isShowAppBar: true, + backgroundColor: Colors.grey[100], appBar: PatientProfileHeaderNewDesignAppBar( patient, routeArgs['patientType'] ?? "0", @@ -197,33 +199,33 @@ class AddSickLeavScreen extends StatelessWidget { AppText( item.remarks ?? "", ), - (item.status == 1 || - item.status == 2) - ? IconButton( - icon: Image.asset( - 'assets/images/edit.png'), - - // color: Colors.green, //Colors.black, - onPressed: () => { - if (item.status == - 1) - { - DrAppToastMsg.showErrorToast( - TranslationBase.of( - context) - .sickleaveonhold) - } - else - { - openSickLeave( - context, - true, - extendedData: - item) - } - }, - ) - : SizedBox() + // (item.status == 1 || + // item.status == 2) + // ? IconButton( + // icon: Image.asset( + // 'assets/images/edit.png'), + // + // // color: Colors.green, //Colors.black, + // onPressed: () => { + // if (item.status == + // 1) + // { + // DrAppToastMsg.showErrorToast( + // TranslationBase.of( + // context) + // .sickleaveonhold) + // } + // else + // { + // openSickLeave( + // context, + // true, + // extendedData: + // item) + // } + // }, + // ) + // : SizedBox() ]), ], ), @@ -240,90 +242,22 @@ class AddSickLeavScreen extends StatelessWidget { }).toList(), ) : patient.patientStatusType != 43 - ? Container( - height: 200, - width: SizeConfig.screenWidth, - color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - AppText( - TranslationBase.of(context).noSickLeave, - color: Colors.red, - ) - ]), - ) + ? Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: 100,), + Image.asset('assets/images/no-data.png'), + Padding( + padding: const EdgeInsets.all(8.0), + child: Texts('No Sick Leave Found'), + ) + + ], + ), + ) : SizedBox() - // : new Builder(builder: (context) { - // return Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // Padding( - // padding: EdgeInsets.all(10), - // child: Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // AppText( - // TranslationBase.of(context).patient, - // fontWeight: FontWeight.bold, - // ), - // AppText( - // TranslationBase.of(context).sickLeave, - // fontSize: 24, - // fontWeight: FontWeight.bold, - // ), - // ], - // )), - // Container( - // width: SizeConfig.screenWidth, - // margin: EdgeInsets.only( - // left: 20, right: 20, top: 20, bottom: 20), - // padding: EdgeInsets.all(20), - // decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(10), - // color: HexColor('#EAEAEA')), - // child: Column( - // mainAxisAlignment: MainAxisAlignment.start, - // children: [ - // Container( - // child: Container( - // decoration: BoxDecoration( - // color: Colors.grey, - // borderRadius: - // BorderRadius.circular(10)), - // padding: EdgeInsets.all(3), - // child: IconButton( - // icon: Icon( - // Icons.add, - // size: 35, - // color: Colors.white, - // ), - // onPressed: () { - // openSickLeave( - // context, - // false, - // ); - // }), - // )), - // Padding( - // child: AppText( - // TranslationBase.of(context) - // .noSickLeaveApplied, - // fontWeight: FontWeight.bold, - // fontFamily: 'Poppins', - // fontSize: 16, - // textAlign: TextAlign.center, - // color: HexColor('#7E7E7E')), - // padding: EdgeInsets.all(10), - // ), - // ], - // )), - // SizedBox( - // height: SizeConfig.screenHeight * .6, - // ) - // ], - // ); - // }), + ])))); } diff --git a/lib/screens/sick-leave/sick_leave.dart b/lib/screens/sick-leave/sick_leave.dart index 12f157c2..0e1a8491 100644 --- a/lib/screens/sick-leave/sick_leave.dart +++ b/lib/screens/sick-leave/sick_leave.dart @@ -150,6 +150,7 @@ class _SickLeaveScreenState extends State { // validator: (value) { // return TextValidator().validateName(value); // }, + textInputType:TextInputType.number, inputFormatter: ONLY_NUMBERS) ]), ), diff --git a/lib/widgets/patients/profile/patient_profile_header_with_appointment_card_app_bar.dart b/lib/widgets/patients/profile/patient_profile_header_with_appointment_card_app_bar.dart index 3031b0d1..02f859fa 100644 --- a/lib/widgets/patients/profile/patient_profile_header_with_appointment_card_app_bar.dart +++ b/lib/widgets/patients/profile/patient_profile_header_with_appointment_card_app_bar.dart @@ -15,8 +15,8 @@ import 'package:provider/provider.dart'; import 'large_avatar.dart'; -class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with PreferredSizeWidget { - +class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget + with PreferredSizeWidget { final PatiantInformtion patient; final String patientType; final String arrivalType; @@ -27,6 +27,9 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre final String invoiceNO; final String orderNo; final bool isPrescriptions; + final bool isMedicalFile; + final String episode; + final String vistDate; final String clinic; PatientProfileHeaderWhitAppointmentAppBar( @@ -38,7 +41,12 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre this.appointmentDate, this.profileUrl, this.invoiceNO, - this.orderNo, this.isPrescriptions = false, this.clinic}); + this.orderNo, + this.isPrescriptions = false, + this.clinic, + this.isMedicalFile = false, + this.episode, + this.vistDate}); @override Widget build(BuildContext context) { @@ -51,8 +59,7 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre } return Container( - padding: EdgeInsets.only( - left: 0, right: 5, bottom: 5, top: 5), + padding: EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5), decoration: BoxDecoration( color: Colors.white, ), @@ -73,12 +80,12 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre ), Expanded( child: AppText( - patient.firstName != null ? - (Helpers.capitalize(patient.firstName) + - " " + - Helpers.capitalize( - patient.lastName)) : Helpers.capitalize(patient.patientDetails.fullName), - fontSize: SizeConfig.textMultiplier *2.2, + patient.firstName != null + ? (Helpers.capitalize(patient.firstName) + + " " + + Helpers.capitalize(patient.lastName)) + : Helpers.capitalize(patient.patientDetails.fullName), + fontSize: SizeConfig.textMultiplier * 2.2, fontWeight: FontWeight.bold, backGroundcolor: Colors.white, fontFamily: 'Poppins', @@ -86,13 +93,13 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre ), gender == 1 ? Icon( - DoctorApp.male_2, - color: Colors.blue, - ) + DoctorApp.male_2, + color: Colors.blue, + ) : Icon( - DoctorApp.female_1, - color: Colors.pink, - ), + DoctorApp.female_1, + color: Colors.pink, + ), ]), ), Row(children: [ @@ -114,119 +121,84 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre ), Expanded( child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - SERVICES_PATIANT2[ - int.parse(patientType)] == - "patientArrivalList" + SERVICES_PATIANT2[int.parse(patientType)] == + "patientArrivalList" ? Container( - child: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - patient.patientStatusType == - 43 - ? AppText( - TranslationBase.of( - context) - .arrivedP, - color: Colors.green, - fontWeight: - FontWeight.bold, - fontFamily: - 'Poppins', - fontSize: 12, - ) - : AppText( - TranslationBase.of( - context) - .notArrived, - color: - Colors.red[800], - fontWeight: - FontWeight.bold, - fontFamily: - 'Poppins', - fontSize: 12, - ), - arrivalType == '1' || patient.arrivedOn == null - ? AppText( - patient.startTime != - null - ? patient - .startTime - : '', - fontFamily: - 'Poppins', - fontWeight: - FontWeight.w600, - ) - : AppText( - DateUtils.convertStringToDateFormat( - patient - .arrivedOn, - 'MM-dd-yyyy HH:mm'), - fontFamily: - 'Poppins', - fontWeight: - FontWeight.w600, - ) - ], - )) + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + patient.patientStatusType == 43 + ? AppText( + TranslationBase.of(context).arrivedP, + color: Colors.green, + fontWeight: FontWeight.bold, + fontFamily: 'Poppins', + fontSize: 12, + ) + : AppText( + TranslationBase.of(context).notArrived, + color: Colors.red[800], + fontWeight: FontWeight.bold, + fontFamily: 'Poppins', + fontSize: 12, + ), + arrivalType == '1' || patient.arrivedOn == null + ? AppText( + patient.startTime != null + ? patient.startTime + : '', + fontFamily: 'Poppins', + fontWeight: FontWeight.w600, + ) + : AppText( + DateUtils.convertStringToDateFormat( + patient.arrivedOn, + 'MM-dd-yyyy HH:mm'), + fontFamily: 'Poppins', + fontWeight: FontWeight.w600, + ) + ], + )) : SizedBox(), - if (SERVICES_PATIANT2[ - int.parse(patientType)] == + if (SERVICES_PATIANT2[int.parse(patientType)] == "List_MyOutPatient") Container( child: Row( - mainAxisAlignment: - MainAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, children: [ AppText( - TranslationBase.of(context) - .appointmentDate + + TranslationBase.of(context).appointmentDate + " : ", fontSize: 14, ), patient.startTime != null ? Container( - height: 15, - width: 60, - decoration: - BoxDecoration( - borderRadius: - BorderRadius - .circular( - 25), - color: HexColor( - "#20A169"), - ), - child: AppText( - patient.startTime, - color: Colors.white, - fontSize: 1.5 * - SizeConfig - .textMultiplier, - textAlign: TextAlign - .center, - fontWeight: - FontWeight.bold, - ), - ) + height: 15, + width: 60, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25), + color: HexColor("#20A169"), + ), + child: AppText( + patient.startTime, + color: Colors.white, + fontSize: 1.5 * SizeConfig.textMultiplier, + textAlign: TextAlign.center, + fontWeight: FontWeight.bold, + ), + ) : SizedBox(), SizedBox( width: 3.5, ), Container( child: AppText( - convertDateFormat2(patient.appointmentDate.toString()?? ''), - fontSize: 1.5 * - SizeConfig - .textMultiplier, - fontWeight: - FontWeight.bold, + convertDateFormat2( + patient.appointmentDate.toString() ?? ''), + fontSize: 1.5 * SizeConfig.textMultiplier, + fontWeight: FontWeight.bold, ), ), SizedBox( @@ -239,34 +211,23 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre ), ), Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ RichText( text: TextSpan( style: TextStyle( - fontSize: 1.6 * - SizeConfig - .textMultiplier, + fontSize: 1.6 * SizeConfig.textMultiplier, color: Colors.black), children: [ new TextSpan( - text: - TranslationBase.of( - context) - .fileNumber, + text: TranslationBase.of(context).fileNumber, style: TextStyle( - fontSize: 12, - fontFamily: - 'Poppins')), + fontSize: 12, fontFamily: 'Poppins')), new TextSpan( - text: patient.patientId - .toString(), + text: patient.patientId.toString(), style: TextStyle( - fontWeight: - FontWeight.w700, - fontFamily: - 'Poppins', + fontWeight: FontWeight.w700, + fontFamily: 'Poppins', fontSize: 14)), ], ), @@ -274,32 +235,23 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre Row( children: [ AppText( - patient.nationalityName ?? - patient.nationality, + patient.nationalityName ?? patient.nationality, fontWeight: FontWeight.bold, fontSize: 12, ), patient.nationality != null ? ClipRRect( - borderRadius: - BorderRadius - .circular( - 20.0), - child: Image.network( - patient.nationalityFlagURL, - height: 25, - width: 30, - errorBuilder: - (BuildContext - context, - Object - exception, - StackTrace - stackTrace) { - return Text( - 'No Image'); - }, - )) + borderRadius: BorderRadius.circular(20.0), + child: Image.network( + patient.nationalityFlagURL, + height: 25, + width: 30, + errorBuilder: (BuildContext context, + Object exception, + StackTrace stackTrace) { + return Text('No Image'); + }, + )) : SizedBox() ], ) @@ -309,26 +261,19 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre child: RichText( text: new TextSpan( style: new TextStyle( - fontSize: 1.6 * - SizeConfig.textMultiplier, + fontSize: 1.6 * SizeConfig.textMultiplier, color: Colors.black, fontFamily: 'Poppins', ), children: [ new TextSpan( - text: TranslationBase.of( - context) - .age + - " : ", - style: TextStyle( - fontSize: 14)), + text: TranslationBase.of(context).age + " : ", + style: TextStyle(fontSize: 14)), new TextSpan( text: - "${DateUtils.getAgeByBirthday(patient.patientDetails != null ? patient.patientDetails.dateofBirth : patient.dateofBirth, context)}", + "${DateUtils.getAgeByBirthday(patient.patientDetails != null ? patient.patientDetails.dateofBirth : patient.dateofBirth, context)}", style: TextStyle( - fontWeight: - FontWeight.w700, - fontSize: 14)), + fontWeight: FontWeight.w700, fontSize: 14)), ], ), ), @@ -343,14 +288,16 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre Container( width: 30, height: 30, - margin: EdgeInsets.only(left: projectViewModel.isArabic?10:85, right: projectViewModel.isArabic?85:10,top: 5), + margin: EdgeInsets.only( + left: projectViewModel.isArabic ? 10 : 85, + right: projectViewModel.isArabic ? 85 : 10, + top: 5), decoration: BoxDecoration( - shape: BoxShape.rectangle, - border: Border( - bottom:BorderSide(color: Colors.grey[400],width: 2.5), - left: BorderSide(color: Colors.grey[400],width: 2.5), - ) - ), + shape: BoxShape.rectangle, + border: Border( + bottom: BorderSide(color: Colors.grey[400], width: 2.5), + left: BorderSide(color: Colors.grey[400], width: 2.5), + )), ), Expanded( child: Container( @@ -380,79 +327,81 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre fontWeight: FontWeight.w600, fontSize: 12, ), - if (orderNo != null ) + if (orderNo != null && !isPrescriptions) Row( children: [ - Texts( - 'Order No: ', - color: Colors.grey[800], - fontSize: 12 - ), - Texts( - orderNo ?? '',fontSize: 12 - ) + Texts('Order No: ', + color: Colors.grey[800], + fontSize: 12), + Texts(orderNo ?? '', fontSize: 12) ], ), - if (invoiceNO != null ) + if (invoiceNO != null && !isPrescriptions) Row( children: [ - Texts( - 'Invoice: ', - color: Colors.grey[800], - fontSize: 12 - ), - Texts( - invoiceNO, - fontSize: 12 - ) + Texts('Invoice: ', + color: Colors.grey[800], + fontSize: 12), + Texts(invoiceNO, fontSize: 12) ], ), - if( branch!=null) + if (branch != null) Row( children: [ - Texts( - 'Branch: ', - color: Colors.grey[800], - fontSize: 12 - ), - Texts( - branch?? '', - fontSize: 12 - ) + Texts('Branch: ', + color: Colors.grey[800], + fontSize: 12), + Texts(branch ?? '', fontSize: 12) ], ), - if(clinic!=null) + if (isPrescriptions) + if (clinic != null) + Row( + children: [ + Texts('Clinic: ', + color: Colors.grey[800], + fontSize: 12), + Texts(clinic ?? '', fontSize: 12) + ], + ), + if (isMedicalFile && episode != null) Row( children: [ - Texts( - 'Clinic: ', - color: Colors.grey[800], - fontSize: 12 - ), - Texts( - clinic?? '', - fontSize: 12 - ) + Texts('Episode: ', + color: Colors.grey[800], + fontSize: 12), + Texts(episode ?? '', fontSize: 12) + ], + ), + if (isMedicalFile && vistDate != null) + Row( + children: [ + Texts('Visit Date: ', + color: Colors.grey[800], + fontSize: 12), + Texts(vistDate ?? '', fontSize: 12) ], ), Row( children: [ Expanded( child: Texts( - !isPrescriptions? 'Result Date: ': 'Prescriptions Date ', + !isPrescriptions + ? 'Result Date: ' + : 'Prescriptions Date ', color: Colors.grey[800], fontSize: 12, ), ), Texts( - '${DateUtils.getDayMonthYearDateFormatted(appointmentDate, isArabic: projectViewModel.isArabic)}',fontSize: 14, + '${DateUtils.getDayMonthYearDateFormatted(appointmentDate, isArabic: projectViewModel.isArabic)}', + fontSize: 14, ) ], ) ]), ), ), - ], ), ), @@ -466,7 +415,7 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre } convertDateFormat2(String str) { - String newDate =""; + String newDate = ""; const start = "/Date("; const end = "+0300)"; @@ -477,10 +426,10 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre var date = new DateTime.fromMillisecondsSinceEpoch( int.parse(str.substring(startIndex + start.length, endIndex))); newDate = date.year.toString() + - "/" + - date.month.toString().padLeft(2, '0') + - "/" + - date.day.toString().padLeft(2, '0'); + "/" + + date.month.toString().padLeft(2, '0') + + "/" + + date.day.toString().padLeft(2, '0'); } return newDate.toString(); @@ -504,5 +453,5 @@ class PatientProfileHeaderWhitAppointmentAppBar extends StatelessWidget with Pre } @override - Size get preferredSize => Size(double.maxFinite,290); + Size get preferredSize => Size(double.maxFinite, 290); } diff --git a/lib/widgets/patients/profile/soap_update/subjective/PriorityBar.dart b/lib/widgets/patients/profile/soap_update/subjective/PriorityBar.dart index 5858c08d..0bc1080a 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/PriorityBar.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/PriorityBar.dart @@ -66,7 +66,7 @@ class _PriorityBarState extends State { ? _prioritiesAr[index] : item, style: TextStyle( - fontSize: 15, + fontSize: 14, color: Colors.black, //Colors.black, fontWeight: FontWeight.bold, ), diff --git a/lib/widgets/patients/profile/soap_update/subjective/allergies/add_allergies.dart b/lib/widgets/patients/profile/soap_update/subjective/allergies/add_allergies.dart new file mode 100644 index 00000000..3ee67799 --- /dev/null +++ b/lib/widgets/patients/profile/soap_update/subjective/allergies/add_allergies.dart @@ -0,0 +1,203 @@ +import 'package:autocomplete_textfield/autocomplete_textfield.dart'; +import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; +import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/my_selected_allergy.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_allergies_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import '../bottom_sheet_title.dart'; + +class AddAllergies extends StatefulWidget { + final Function addAllergiesFun; + final List myAllergiesList; + + const AddAllergies({Key key, this.addAllergiesFun, this.myAllergiesList}) + : super(key: key); + + @override + _AddAllergiesState createState() => _AddAllergiesState(); +} + +class _AddAllergiesState extends State { + List allergiesList; + List allergySeverityList; + MasterKeyModel _selectedAllergySeverity; + MasterKeyModel _selectedAllergy; + TextEditingController remarkController = TextEditingController(); + TextEditingController severityController = TextEditingController(); + TextEditingController allergyController = TextEditingController(); + List myAllergiesListLocal; + + @override + initState() { + super.initState(); + myAllergiesListLocal = [...widget.myAllergiesList]; + } + + GlobalKey key = new GlobalKey>(); + bool isFormSubmitted = false; + + InputDecoration textFieldSelectorDecoration( + String hintText, String selectedText, bool isDropDown, + {IconData icon}) { + return InputDecoration( + contentPadding: EdgeInsets.symmetric(vertical: 10, horizontal: 10), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 1.0), + borderRadius: BorderRadius.circular(8), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 1.0), + borderRadius: BorderRadius.circular(8), + ), + disabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 1.0), + borderRadius: BorderRadius.circular(8), + ), + hintText: selectedText != null ? selectedText : hintText, + suffixIcon: isDropDown ? Icon(icon ?? Icons.arrow_drop_down) : null, + hintStyle: TextStyle( + fontSize: 10, + color: Theme.of(context).hintColor, + fontWeight: FontWeight.w700), + ); + } + + @override + Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); + final screenSize = MediaQuery.of(context).size; + return FractionallySizedBox( + heightFactor: 1, + child: BaseView( + onModelReady: (model) async { + if (model.allergiesList.length == 0) { + await model.getMasterLookup(MasterKeysService.Allergies); + } + if (model.allergySeverityList.length == 0) { + await model.getMasterLookup(MasterKeysService.AllergySeverity); + } + }, + builder: (_, model, w) => AppScaffold( + baseViewModel: model, + isShowAppBar: false, + body: Center( + child: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + BottomSheetTitle( + title: TranslationBase.of(context).addAllergies, + ), + SizedBox( + height: 10, + ), + SizedBox( + height: 16, + ), + Expanded( + child: Center( + child: FractionallySizedBox( + widthFactor: 0.9, + child: Center( + child: NetworkBaseView( + baseViewModel: model, + child: MasterKeyCheckboxSearchAllergiesWidget( + model: model, + masterList: model.allergiesList, + removeAllergy: (master) { + setState(() { + removeAllergyFromLocalList(master); + }); + }, + addAllergy: + (MySelectedAllergy mySelectedAllergy) { + AddAllergyLocally(mySelectedAllergy); + }, + addSelectedAllergy: () => widget + .addAllergiesFun(myAllergiesListLocal), + isServiceSelected: (master) => + isServiceSelected(master), + getServiceSelectedAllergy: (master) => + getSelectedAllergy(master), + ), + ), + ), + ), + ), + ), + ]), + ), + )), + ), + ); + } + + isServiceSelected(MasterKeyModel masterKey) { + Iterable allergy = myAllergiesListLocal.where( + (element) => + masterKey.id == element.selectedAllergy.id && + masterKey.typeId == element.selectedAllergy.typeId && + element.isChecked); + if (allergy.length > 0) { + return true; + } + return false; + } + + removeAllergyFromLocalList(MasterKeyModel masterKey) { + myAllergiesListLocal + .removeWhere((element) => element.selectedAllergy.id == masterKey.id); + } + + MySelectedAllergy getSelectedAllergy(MasterKeyModel masterKey) { + Iterable allergy = myAllergiesListLocal.where( + (element) => + masterKey.id == element.selectedAllergy.id && + masterKey.typeId == element.selectedAllergy.typeId && + element.isChecked); + if (allergy.length > 0) { + return allergy.first; + } + return null; + } + + AddAllergyLocally(MySelectedAllergy mySelectedAllergy) { + if (mySelectedAllergy.selectedAllergy == null) { + helpers.showErrorToast(TranslationBase.of(context).requiredMsg); + } else { + setState(() { + List allergy = + // ignore: missing_return + myAllergiesListLocal + .where((element) => + mySelectedAllergy.selectedAllergy.id == + element.selectedAllergy.id) + .toList(); + + if (allergy.isEmpty) { + myAllergiesListLocal.add(mySelectedAllergy); + // Navigator.of(context).pop(); + } else { + allergy.first.selectedAllergy = mySelectedAllergy.selectedAllergy; + allergy.first.selectedAllergySeverity = + mySelectedAllergy.selectedAllergySeverity; + allergy.first.remark = mySelectedAllergy.remark; + allergy.first.isChecked = mySelectedAllergy.isChecked; + // Navigator.of(context).pop(); + + // helpers.showErrorToast(TranslationBase + // .of(context) + // .itemExist); + } + }); + } + } +} diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/allergies/update_allergies_widget.dart similarity index 51% rename from lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart rename to lib/widgets/patients/profile/soap_update/subjective/allergies/update_allergies_widget.dart index 2a25861a..5fa3535b 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/allergies/update_allergies_widget.dart @@ -20,6 +20,8 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:provider/provider.dart'; +import 'add_allergies.dart'; + class UpdateAllergiesWidget extends StatefulWidget { List myAllergiesList; @@ -244,7 +246,7 @@ class _UpdateAllergiesWidgetState extends State { widget.myAllergiesList.add(element); } }); - changeParentState(); + // changeParentState(); Navigator.of(context).pop(); } else { helpers.showErrorToast(TranslationBase @@ -257,250 +259,6 @@ class _UpdateAllergiesWidgetState extends State { } -class AddAllergies extends StatefulWidget { - final Function addAllergiesFun; - final List myAllergiesList; - - const AddAllergies({Key key, this.addAllergiesFun, this.myAllergiesList}) : super(key: key); - - @override - _AddAllergiesState createState() => _AddAllergiesState(); -} - -class _AddAllergiesState extends State { - List allergiesList; - List allergySeverityList; - MasterKeyModel _selectedAllergySeverity; - MasterKeyModel _selectedAllergy; - TextEditingController remarkController = TextEditingController(); - TextEditingController severityController = TextEditingController(); - TextEditingController allergyController = TextEditingController(); - List myAllergiesListLocal; - - @override - initState(){ - super.initState(); - myAllergiesListLocal = [...widget.myAllergiesList]; - } - GlobalKey key = new GlobalKey>(); - bool isFormSubmitted = false; - - InputDecoration textFieldSelectorDecoration( - String hintText, String selectedText, bool isDropDown, - {IconData icon}) { - return InputDecoration( - contentPadding: EdgeInsets.symmetric(vertical: 10, horizontal: 10), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 1.0), - borderRadius: BorderRadius.circular(8), - ), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 1.0), - borderRadius: BorderRadius.circular(8), - ), - disabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 1.0), - borderRadius: BorderRadius.circular(8), - ), - hintText: selectedText != null ? selectedText : hintText, - suffixIcon: isDropDown ? Icon(icon ?? Icons.arrow_drop_down) : null, - hintStyle: TextStyle( - fontSize: 10, - color: Theme - .of(context) - .hintColor, - fontWeight: FontWeight.w700 - ), - ); - } - - @override - Widget build(BuildContext context) { - ProjectViewModel projectViewModel = Provider.of(context); - final screenSize = MediaQuery - .of(context) - .size; - return FractionallySizedBox( - heightFactor: 1, - child: BaseView( - onModelReady: (model) async { - if (model.allergiesList.length == 0) { - await model.getMasterLookup(MasterKeysService.Allergies); - } - if (model.allergySeverityList.length == 0) { - await model.getMasterLookup(MasterKeysService.AllergySeverity); - } - }, - builder: (_, model, w) => - AppScaffold( - baseViewModel: model, - isShowAppBar: false, - body: Center( - child: Container( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - - Container( - padding: EdgeInsets.only( - left: 0, right: 5, bottom: 5, top: 5), - decoration: BoxDecoration( - color: Colors.white, - ), - height: 115, - child: Container( - padding: EdgeInsets.only( - left: 10, right: 10), - margin: EdgeInsets.only(top: 40), - child: Column( - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - RichText( - text: TextSpan( - style: TextStyle( - fontSize:20, - color: Colors.black), - children: [ - new TextSpan( - text: TranslationBase.of(context). - addAllergies, - style: TextStyle( - color: Color(0xFF2B353E), - fontWeight: FontWeight.bold, - fontFamily: 'Poppins', - fontSize: 20)), - ], - ), - ), - InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Icon(FontAwesomeIcons.times, - size: 30, - color: Color(0xFF2B353E))) - ], - ), - ], - ), - ), - ), - SizedBox( - height: 10, - ), - SizedBox( - height: 16, - ), - Expanded( - child: Center( - child: FractionallySizedBox( - widthFactor: 0.9, - child: Center( - child: NetworkBaseView( - baseViewModel: model, - child: MasterKeyCheckboxSearchAllergiesWidget( - model: model, - masterList: model.allergiesList, - removeAllergy: (master) { - setState(() { - removeAllergyFromLocalList(master); - }); - }, - addAllergy: (MySelectedAllergy mySelectedAllergy){ - AddAllergyLocally(mySelectedAllergy); - }, - addSelectedAllergy: ()=> - widget.addAllergiesFun(myAllergiesListLocal) - , - isServiceSelected: (master) =>isServiceSelected(master), - getServiceSelectedAllergy: (master)=>getSelectedAllergy(master), - ), - ), - ), - ), - ), - ), - ] - - ), - ), - ) - - ), - ), - ); - } - - isServiceSelected(MasterKeyModel masterKey) { - Iterable allergy = - myAllergiesListLocal.where((element) => - masterKey.id == element.selectedAllergy.id && - masterKey.typeId == element.selectedAllergy.typeId && - element.isChecked); - if (allergy.length > 0) { - return true; - } - return false; - } - - removeAllergyFromLocalList(MasterKeyModel masterKey) { - myAllergiesListLocal.removeWhere((element) => - element.selectedAllergy.id == masterKey.id); - } - - MySelectedAllergy getSelectedAllergy(MasterKeyModel masterKey) { - Iterable allergy = - myAllergiesListLocal.where((element) => - masterKey.id == element.selectedAllergy.id && - masterKey.typeId == element.selectedAllergy.typeId && - element.isChecked); - if (allergy.length > 0) { - return allergy.first; - } - return null; - } - - AddAllergyLocally(MySelectedAllergy mySelectedAllergy) { - if ( - mySelectedAllergy.selectedAllergy == null) { - helpers.showErrorToast(TranslationBase - .of(context) - .requiredMsg); - - } else { - setState(() { - List allergy = - // ignore: missing_return - myAllergiesListLocal - .where((element) => - mySelectedAllergy.selectedAllergy.id == - element.selectedAllergy.id) - .toList(); - - if (allergy.isEmpty) { - myAllergiesListLocal.add(mySelectedAllergy); - // Navigator.of(context).pop(); - } else { - allergy.first.selectedAllergy = - mySelectedAllergy.selectedAllergy; - allergy.first.selectedAllergySeverity = - mySelectedAllergy.selectedAllergySeverity; - allergy.first.remark = mySelectedAllergy.remark; - allergy.first.isChecked = mySelectedAllergy.isChecked; - // Navigator.of(context).pop(); - - // helpers.showErrorToast(TranslationBase - // .of(context) - // .itemExist); - } - }); - }} - -} - diff --git a/lib/widgets/patients/profile/soap_update/subjective/bottom_sheet_title.dart b/lib/widgets/patients/profile/soap_update/subjective/bottom_sheet_title.dart new file mode 100644 index 00000000..a6c59c86 --- /dev/null +++ b/lib/widgets/patients/profile/soap_update/subjective/bottom_sheet_title.dart @@ -0,0 +1,61 @@ +import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; + +class BottomSheetTitle extends StatelessWidget { + const BottomSheetTitle({ + Key key, this.title, + }) : super(key: key); + + final String title; + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.only( + left: 0, right: 5, bottom: 5, top: 5), + decoration: BoxDecoration( + color: Colors.white, + ), + height: 115, + child: Container( + padding: EdgeInsets.only( + left: 10, right: 10), + margin: EdgeInsets.only(top: 60), + child: Column( + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + RichText( + text: TextSpan( + style: TextStyle( + fontSize:20, + color: Colors.black), + children: [ + new TextSpan( + + text: title, + style: TextStyle( + color: Color(0xFF2B353E), + fontWeight: FontWeight.bold, + fontFamily: 'Poppins', + fontSize: 20)), + ], + ), + ), + InkWell( + onTap: () { + Navigator.pop(context); + }, + child: Icon(DoctorApp.close_1, + size:20, + color: Color(0xFF2B353E))) + ], + ), + ], + ), + ), + ); + } +} diff --git a/lib/widgets/patients/profile/soap_update/subjective/history/add_history_dialog.dart b/lib/widgets/patients/profile/soap_update/subjective/history/add_history_dialog.dart new file mode 100644 index 00000000..d66f35fb --- /dev/null +++ b/lib/widgets/patients/profile/soap_update/subjective/history/add_history_dialog.dart @@ -0,0 +1,193 @@ +import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; +import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/my_selected_history.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; +import 'package:flutter/material.dart'; + +import '../PriorityBar.dart'; +import '../bottom_sheet_title.dart'; + +class AddHistoryDialog extends StatefulWidget { + final Function changePageViewIndex; + final PageController controller; + final List myHistoryList; + final Function addSelectedHistories; + final Function (MasterKeyModel) removeHistory; + + const AddHistoryDialog( + {Key key, this.changePageViewIndex, this.controller, this.myHistoryList, this.addSelectedHistories, this.removeHistory}) + : super(key: key); + + @override + _AddHistoryDialogState createState() => _AddHistoryDialogState(); +} + +class _AddHistoryDialogState extends State { + @override + Widget build(BuildContext context) { + return FractionallySizedBox( + heightFactor: 1, + child: BaseView( + onModelReady: (model) async { + if (model.historyFamilyList.length == 0) { + await model.getMasterLookup(MasterKeysService.HistoryFamily); + } + + if (model.historySurgicalList.length == 0) { + await model.getMasterLookup(MasterKeysService.HistorySurgical); + await model.getMasterLookup(MasterKeysService.HistorySports); + } + + if (model.historyMedicalList.length == 0) { + await model.getMasterLookup(MasterKeysService.HistoryMedical); + } + }, + builder: (_, model, w) => AppScaffold( + baseViewModel: model, + isShowAppBar: false, + body: Center( + child: Container( + child: Column( + children: [ + BottomSheetTitle(title:TranslationBase.of(context).addHistory), + SizedBox( + height: 10, + ), + PriorityBar(onTap: (activePriority) async { + widget.changePageViewIndex(activePriority); + }), + SizedBox( + height: 20, + ), + Expanded( + child: FractionallySizedBox( + widthFactor: 0.9, + child: PageView( + physics: NeverScrollableScrollPhysics(), + controller: widget.controller, + onPageChanged: (index) { + setState(() { + // currentIndex = index; + }); + }, + scrollDirection: Axis.horizontal, + children: [ + NetworkBaseView( + baseViewModel: model, + child: MasterKeyCheckboxSearchWidget( + model: model, + masterList: model.historyFamilyList, + removeHistory: (history){ + setState(() { + widget.removeHistory(history); + }); + }, + addHistory: (history){ + setState(() { + createAndAddHistory( + history); + }); + }, + addSelectedHistories: (){ + widget.addSelectedHistories(); + }, + isServiceSelected: (master) =>isServiceSelected(master), + ), + ), + NetworkBaseView( + baseViewModel: model, + child: MasterKeyCheckboxSearchWidget( + model: model, + masterList: model.mergeHistorySurgicalWithHistorySportList, + removeHistory: (history){ + setState(() { + widget.removeHistory(history); + }); + }, + addHistory: (history){ + setState(() { + createAndAddHistory( + history); + }); + }, + addSelectedHistories: (){ + widget.addSelectedHistories(); + }, + isServiceSelected: (master) =>isServiceSelected(master), + ), + ), + NetworkBaseView( + baseViewModel: model, + child: MasterKeyCheckboxSearchWidget( + model: model, + masterList: model.historyMedicalList, + removeHistory: (history){ + setState(() { + widget.removeHistory(history); + }); + }, + addHistory: (history){ + setState(() { + createAndAddHistory( + history); + }); + }, + addSelectedHistories: (){ + widget.addSelectedHistories(); + }, + isServiceSelected: (master) =>isServiceSelected(master), + ), + ), + ], + ), + ), + ), + ], + )), + ), + ), + )); + } + + createAndAddHistory(MasterKeyModel history) { + List myhistory = widget.myHistoryList.where((element) => + history.id == + element.selectedHistory.id && + history.typeId == + element.selectedHistory.typeId + ).toList(); + + if (myhistory.isEmpty) { + setState(() { + MySelectedHistory mySelectedHistory = MySelectedHistory( + remark: history.remarks ?? "", + selectedHistory: history, + isChecked: true); + widget.myHistoryList.add(mySelectedHistory); + }); + } else { + myhistory.first.isChecked = true; + } + } + + isServiceSelected(MasterKeyModel masterKey) { + Iterable history = + widget + .myHistoryList + .where((element) => + masterKey.id == element.selectedHistory.id && + masterKey.typeId == element.selectedHistory.typeId && + element.isChecked); + if (history.length > 0) { + return true; + } + return false; + } + +} + diff --git a/lib/widgets/patients/profile/soap_update/subjective/history/update_history_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/history/update_history_widget.dart new file mode 100644 index 00000000..873c01d2 --- /dev/null +++ b/lib/widgets/patients/profile/soap_update/subjective/history/update_history_widget.dart @@ -0,0 +1,223 @@ +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/viewModel/SOAP_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/my_selected_history.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.dart'; +import 'package:doctor_app_flutter/widgets/shared/TextFields.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/master_key_checkbox_search_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; +import 'package:eva_icons_flutter/eva_icons_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; + +import '../PriorityBar.dart'; +import '../bottom_sheet_title.dart'; +import 'add_history_dialog.dart'; + +class UpdateHistoryWidget extends StatefulWidget { + final List myHistoryList; + + const UpdateHistoryWidget({Key key, this.myHistoryList}) : super(key: key); + + @override + _UpdateHistoryWidgetState createState() => _UpdateHistoryWidgetState(); +} + +class _UpdateHistoryWidgetState extends State + with TickerProviderStateMixin { + PageController _controller; + int _currentIndex = 0; + + changePageViewIndex(pageIndex) { + _controller.jumpToPage(pageIndex); + } + + @override + void initState() { + _controller = new PageController(); + + super.initState(); + } + + @override + Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); + return Column( + children: [ + InkWell( + onTap: () { + openHistoryList(context); + }, + child: Container( + padding: EdgeInsets.symmetric( + vertical: 8, horizontal: 8.0), + margin: + EdgeInsets.symmetric(vertical: 8), + decoration: BoxDecoration( + border: Border.all( + color: Colors.grey.shade400, + width: 0.5), + borderRadius: BorderRadius.all( + Radius.circular(8), + ), + color: Colors.white, + ), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + AppText( + "${TranslationBase.of(context).addHistory}", + fontSize: SizeConfig + .textMultiplier * + 1.8, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + AppText( + "${TranslationBase.of(context).searchHere}", + fontSize: SizeConfig + .textMultiplier * + 1.8, + color: Colors.grey.shade700, + fontWeight: FontWeight.bold, + ), + ], + )), + Icon( + Icons.add_box_rounded, + size: 25, + ) + ], + ), + ), + ), + SizedBox( + height: 20, + ), + Container( + margin: + EdgeInsets.only(left: 15, right: 15, top: 15), + child: Column( + children: widget.myHistoryList.map((myHistory) { + return Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + child: Texts( + projectViewModel.isArabic + ? myHistory.selectedHistory.nameAr + : myHistory.selectedHistory.nameEn, + fontSize: 15, + textDecoration: myHistory.isChecked + ? null + : TextDecoration.lineThrough, + // bold: true, + color: Colors.black), + width: MediaQuery + .of(context) + .size + .width * 0.5, + ), + if (myHistory.isChecked) + InkWell( + child: Row( + children: [ + Container( + child: Texts( + TranslationBase + .of(context) + .remove, + fontSize: 15, + variant: "bodyText", + textDecoration: myHistory.isChecked + ? null + : TextDecoration.lineThrough, + // bold: true, + color: HexColor("#B8382C"),), + // width: MediaQuery.of(context).size.width * 0.3, + ), + Icon( + FontAwesomeIcons.times, + color: HexColor("#B8382C"), + size: 17, + ), + ], + ), + onTap: () => removeHistory(myHistory.selectedHistory), + ) + ], + ), + SizedBox( + height: 20, + ), + ], + ); + }).toList(), + ), + ) + ], + ); + } + + removeHistory(MasterKeyModel historyKey) { + List history = + // ignore: missing_return + widget.myHistoryList.where((element) => + historyKey.id == + element.selectedHistory.id && + historyKey.typeId == + element.selectedHistory.typeId + ).toList(); + + + if (history.length > 0) + setState(() { + history[0].isChecked = false; + }); + } + + openHistoryList(BuildContext context) { + showModalBottomSheet( + backgroundColor: Colors.white, + isDismissible: false, + isScrollControlled: true, + context: context, + builder: (context) { + return FractionallySizedBox( + heightFactor: 1, + child: AddHistoryDialog( + changePageViewIndex: changePageViewIndex, + controller: _controller, + myHistoryList: widget.myHistoryList, + addSelectedHistories: () { + setState(() { + Navigator.of(context).pop(); + }); + }, + removeHistory: (masterKey) => removeHistory(masterKey), + ), + ); + }); + } +} + + + diff --git a/lib/widgets/patients/profile/soap_update/subjective/medication/add_medication.dart b/lib/widgets/patients/profile/soap_update/subjective/medication/add_medication.dart new file mode 100644 index 00000000..2c93040f --- /dev/null +++ b/lib/widgets/patients/profile/soap_update/subjective/medication/add_medication.dart @@ -0,0 +1,472 @@ +// ignore: must_be_immutable +import 'package:autocomplete_textfield/autocomplete_textfield.dart'; +import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; +import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.dart'; +import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.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/dialogs/master_key_dailog.dart'; +import 'package:eva_icons_flutter/eva_icons_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; + +import '../../custom_validation_error.dart'; +import '../bottom_sheet_title.dart'; + +class AddMedication extends StatefulWidget { + final Function addMedicationFun; + TextEditingController medicationController; + + AddMedication({Key key, this.addMedicationFun, this.medicationController}) + : super(key: key); + + @override + _AddMedicationState createState() => _AddMedicationState(); +} + +class _AddMedicationState extends State { + MasterKeyModel _selectedMedicationDose; + MasterKeyModel _selectedMedicationStrength; + MasterKeyModel _selectedMedicationRoute; + MasterKeyModel _selectedMedicationFrequency; + + MasterKeyModel _selectedAllergy; + TextEditingController doseController = TextEditingController(); + TextEditingController strengthController = TextEditingController(); + TextEditingController routeController = TextEditingController(); + TextEditingController frequencyController = TextEditingController(); + GetMedicationResponseModel _selectedMedication; + + GlobalKey key = + new GlobalKey>(); + bool isFormSubmitted = false; + + InputDecoration textFieldSelectorDecoration( + String hintText, String selectedText, bool isDropDown, + {IconData icon}) { + return InputDecoration( + filled: true, + fillColor: Colors.white, + + contentPadding: EdgeInsets.symmetric(vertical: 10, horizontal: 10), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 0.00), + borderRadius: BorderRadius.circular(8), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 0.00), + borderRadius: BorderRadius.circular(8), + ), + disabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 0.00), + borderRadius: BorderRadius.circular(8), + ), + hintText: selectedText != null ? selectedText : hintText, + suffixIcon: isDropDown ? Icon(icon ?? Icons.arrow_drop_down) : null, + hintStyle: TextStyle( + fontSize: 10, + color: Theme + .of(context) + .hintColor, + fontWeight: FontWeight.w700 + ), + ); + } + + @override + Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); + final screenSize = MediaQuery + .of(context) + .size; + return FractionallySizedBox( + child: BaseView( + onModelReady: (model) async { + if (model.medicationStrengthList.length == 0) { + await model.getMasterLookup(MasterKeysService.MedicationStrength,); + } + if (model.medicationFrequencyList.length == 0) { + await model.getMasterLookup(MasterKeysService.MedicationFrequency); + } + if (model.medicationDoseTimeList.length == 0) { + await model.getMasterLookup(MasterKeysService.MedicationDoseTime); + } + if (model.medicationRouteList.length == 0) { + await model.getMasterLookup(MasterKeysService.MedicationRoute); + } + if (model.allMedicationList.length == 0) + await model.getMedicationList(); + }, + builder: (_, model, w) => + AppScaffold( + baseViewModel: model, + isShowAppBar: false, + body: Center( + child: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + BottomSheetTitle( + title: TranslationBase.of(context).addMedication, + ), + SizedBox( + height: 10, + ), + SizedBox( + height: 16, + ), + Expanded( + child: Center( + child: FractionallySizedBox( + widthFactor: 0.9, + child: Column( + children: [ + SizedBox( + height: 16, + ), + SizedBox( + height: 16, + ), + Container( + height: screenSize.height * 0.070, + child: InkWell( + onTap: model.allMedicationList != null + ? () { + setState(() { + _selectedMedication = null; + }); + } + : null, + child: _selectedMedication == null + ? AutoCompleteTextField< + GetMedicationResponseModel>( + decoration: + textFieldSelectorDecoration( + + TranslationBase.of(context) + .searchMedicineNameHere, + _selectedMedication != null + ? _selectedMedication + .genericName + : null, + true, + icon: EvaIcons.search), + itemSubmitted: (item) => setState( + () => + _selectedMedication = item), + key: key, + suggestions: + model.allMedicationList, + itemBuilder: (context, + suggestion) => + new Padding( + child: Texts(suggestion + .description + + '/' + + suggestion.genericName), + padding: + EdgeInsets.all(8.0)), + itemSorter: (a, b) => 1, + itemFilter: (suggestion, input) => + suggestion.genericName + .toLowerCase() + .startsWith( + input.toLowerCase()) || + suggestion.description + .toLowerCase() + .startsWith( + input.toLowerCase()) || + suggestion.keywords + .toLowerCase() + .startsWith( + input.toLowerCase()), + ) + : AppTextFieldCustom( + hintText: _selectedMedication != null + ? _selectedMedication + .description + + (' (${_selectedMedication.genericName} )') + : TranslationBase.of(context) + .searchMedicineNameHere, + minLines: 2, + maxLines: 2, + enabled: false, + ), + ), + ), + if (isFormSubmitted && + _selectedMedication == null) + CustomValidationError(), + SizedBox( + height: 5, + ), + AppTextFieldCustom( + enabled: false, + onClick: model.medicationDoseTimeList != null + ? () { + MasterKeyDailog dialog = + MasterKeyDailog( + list: model.medicationDoseTimeList, + okText: + TranslationBase.of(context).ok, + okFunction: (selectedValue) { + setState(() { + _selectedMedicationDose = + selectedValue; + + doseController + .text = projectViewModel + .isArabic + ? _selectedMedicationDose + .nameAr + : _selectedMedicationDose + .nameEn; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + hintText: + TranslationBase.of(context).doseTime, + //TODO add translation + maxLines: 2, + minLines: 2, + isDropDown: true, + controller: doseController, + ), + SizedBox( + height: 5, + ), + if (isFormSubmitted && + _selectedMedicationDose == null) + CustomValidationError(), + SizedBox( + height: 5, + ), + AppTextFieldCustom( + enabled: false, + isDropDown: true, + onClick: model.medicationStrengthList != null + ? () { + MasterKeyDailog dialog = + MasterKeyDailog( + list: model.medicationStrengthList, + okText: + TranslationBase.of(context).ok, + okFunction: (selectedValue) { + setState(() { + _selectedMedicationStrength = + selectedValue; + + strengthController + .text = projectViewModel + .isArabic + ? _selectedMedicationStrength + .nameAr + : _selectedMedicationStrength + .nameEn; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + hintText: + TranslationBase.of(context).strength, + // hintColor: Colors.black, + // fontWeight: FontWeight.w600, + maxLines: 2, + minLines: 2, + controller: strengthController, + ), + SizedBox( + height: 5, + ), + if (isFormSubmitted && + _selectedMedicationStrength == null) + CustomValidationError(), + SizedBox( + height: 5, + ), + AppTextFieldCustom( + enabled: false, + isDropDown: true, + onClick: model.medicationRouteList != null + ? () { + MasterKeyDailog dialog = + MasterKeyDailog( + list: model.medicationRouteList, + okText: + TranslationBase.of(context).ok, + okFunction: (selectedValue) { + setState(() { + _selectedMedicationRoute = + selectedValue; + + routeController + .text = projectViewModel + .isArabic + ? _selectedMedicationRoute + .nameAr + : _selectedMedicationRoute + .nameEn; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + hintText: TranslationBase.of(context).route, + maxLines: 2, + minLines: 2, + controller: routeController, + ), + SizedBox( + height: 5, + ), + if (isFormSubmitted && + _selectedMedicationRoute == null) + CustomValidationError(), + SizedBox( + height: 5, + ), + AppTextFieldCustom( + onClick: model.medicationFrequencyList != null + ? () { + MasterKeyDailog dialog = + MasterKeyDailog( + list: model.medicationFrequencyList, + okText: + TranslationBase.of(context).ok, + okFunction: (selectedValue) { + setState(() { + _selectedMedicationFrequency = + selectedValue; + + frequencyController + .text = projectViewModel + .isArabic + ? _selectedMedicationFrequency + .nameAr + : _selectedMedicationFrequency + .nameEn; + }); + }, + ); + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return dialog; + }, + ); + } + : null, + hintText: + TranslationBase.of(context).frequency, + //TODO add translation + enabled: false, + // hintColor: Colors.black, + maxLines: 2, + minLines: 2, + isDropDown: true, + controller: frequencyController, + ), + SizedBox( + height: 5, + ), + if (isFormSubmitted && + _selectedMedicationFrequency == null) + CustomValidationError(), + SizedBox( + height: 30, + ), + ], + )), + ), + ), + ]), + ), + ), + bottomSheet: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + border: Border.all(color: HexColor('#707070'), width: 0.30), + ), + height: MediaQuery.of(context).size.height * 0.1, + width: double.infinity, + child: Column( + children: [ + SizedBox( + height: 10, + ), + Container( + child: FractionallySizedBox( + widthFactor: .80, + child: Center( + child: AppButton( + title: TranslationBase.of(context).addMedication.toUpperCase(), + color: Color(0xFF359846), + onPressed: () { + setState(() { + isFormSubmitted = true; + }); + if (_selectedMedication != null && + _selectedMedicationDose != null && + _selectedMedicationStrength != null && + _selectedMedicationRoute != null && + _selectedMedicationFrequency != null) { + widget.medicationController.text = widget + .medicationController.text + + '${_selectedMedication.description} (${TranslationBase.of(context).doseTime} ) ${doseController.text} (${TranslationBase.of(context).strength}) ${strengthController.text} (${TranslationBase.of(context).route}) ${routeController.text} (${TranslationBase.of(context).frequency}) ${frequencyController.text} \n \n'; + Navigator.of(context).pop(); + } + }, + ), + ), + ), + ), + SizedBox( + height: 5, + ), + ], + ), + ), + ), + ), + ); + } +} + + + diff --git a/lib/widgets/patients/profile/soap_update/subjective/medication/update_medication_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/medication/update_medication_widget.dart new file mode 100644 index 00000000..e2cb28c4 --- /dev/null +++ b/lib/widgets/patients/profile/soap_update/subjective/medication/update_medication_widget.dart @@ -0,0 +1,118 @@ +import 'package:autocomplete_textfield/autocomplete_textfield.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/model/get_medication_response_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; +import 'package:doctor_app_flutter/models/SOAP/my_selected_allergy.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.dart'; +import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; +import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.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/master_key_dailog.dart'; +import 'package:eva_icons_flutter/eva_icons_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; + +import '../../custom_validation_error.dart'; +import '../bottom_sheet_title.dart'; +import 'add_medication.dart'; + +class UpdateMedicationWidget extends StatefulWidget { + final TextEditingController medicationController; + + UpdateMedicationWidget({ + Key key, + this.medicationController, + }); + + @override + _UpdateMedicationWidgetState createState() => _UpdateMedicationWidgetState(); +} + +class _UpdateMedicationWidgetState extends State { + @override + Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); + + return Column( + children: [ + InkWell( + onTap: () { + openMedicationList(context); + }, + child: Container( + padding: EdgeInsets.symmetric( + vertical: 8, horizontal: 8.0), + margin: + EdgeInsets.symmetric(vertical: 8), + decoration: BoxDecoration( + border: Border.all( + color: Colors.grey.shade400, + width: 0.5), + borderRadius: BorderRadius.all( + Radius.circular(8), + ), + color: Colors.white, + ), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + AppText( + "${TranslationBase.of(context).addMedication}", + fontSize: SizeConfig + .textMultiplier * + 1.8, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + ], + )), + Icon( + Icons.add_box_rounded, + size: 25, + ) + ], + ), + ), + ), + SizedBox( + height: 20, + ) + ], + ); + } + + + openMedicationList(BuildContext context) { + showModalBottomSheet( + backgroundColor: Colors.white, + isScrollControlled: true, + isDismissible: false, + context: context, + builder: (context) { + return AddMedication( + addMedicationFun: (MySelectedAllergy mySelectedAllergy) {}, + medicationController: widget.medicationController, + ); + }); + } +} + + + diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_Chief_complaints.dart b/lib/widgets/patients/profile/soap_update/subjective/update_Chief_complaints.dart index 1b159ec0..bb66fd90 100644 --- a/lib/widgets/patients/profile/soap_update/subjective/update_Chief_complaints.dart +++ b/lib/widgets/patients/profile/soap_update/subjective/update_Chief_complaints.dart @@ -1,5 +1,5 @@ import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; -import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/subjective/update_medication_widget.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/subjective/medication/update_medication_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/new_text_Field.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart deleted file mode 100644 index aba4af07..00000000 --- a/lib/widgets/patients/profile/soap_update/subjective/update_history_widget.dart +++ /dev/null @@ -1,444 +0,0 @@ -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/viewModel/SOAP_view_model.dart'; -import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; -import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; -import 'package:doctor_app_flutter/models/SOAP/my_selected_history.dart'; -import 'package:doctor_app_flutter/screens/base/base_view.dart'; -import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; -import 'package:doctor_app_flutter/widgets/shared/Text.dart'; -import 'package:doctor_app_flutter/widgets/shared/TextFields.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/master_key_checkbox_search_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; -import 'package:eva_icons_flutter/eva_icons_flutter.dart'; -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:hexcolor/hexcolor.dart'; -import 'package:provider/provider.dart'; - -import 'PriorityBar.dart'; - -class UpdateHistoryWidget extends StatefulWidget { - final List myHistoryList; - - const UpdateHistoryWidget({Key key, this.myHistoryList}) : super(key: key); - - @override - _UpdateHistoryWidgetState createState() => _UpdateHistoryWidgetState(); -} - -class _UpdateHistoryWidgetState extends State - with TickerProviderStateMixin { - PageController _controller; - int _currentIndex = 0; - - changePageViewIndex(pageIndex) { - _controller.jumpToPage(pageIndex); - } - - @override - void initState() { - _controller = new PageController(); - - super.initState(); - } - - @override - Widget build(BuildContext context) { - ProjectViewModel projectViewModel = Provider.of(context); - return Column( - children: [ - InkWell( - onTap: () { - openHistoryList(context); - }, - child: Container( - padding: EdgeInsets.symmetric( - vertical: 8, horizontal: 8.0), - margin: - EdgeInsets.symmetric(vertical: 8), - decoration: BoxDecoration( - border: Border.all( - color: Colors.grey.shade400, - width: 0.5), - borderRadius: BorderRadius.all( - Radius.circular(8), - ), - color: Colors.white, - ), - child: Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - AppText( - "${TranslationBase.of(context).addHistory}", - fontSize: SizeConfig - .textMultiplier * - 1.8, - color: Colors.black, - fontWeight: FontWeight.bold, - ), - AppText( - "${TranslationBase.of(context).searchHere}", - fontSize: SizeConfig - .textMultiplier * - 1.8, - color: Colors.grey.shade700, - fontWeight: FontWeight.bold, - ), - ], - )), - Icon( - Icons.add_box_rounded, - size: 25, - ) - ], - ), - ), - ), - SizedBox( - height: 20, - ), - Container( - margin: - EdgeInsets.only(left: 15, right: 15, top: 15), - child: Column( - children: widget.myHistoryList.map((myHistory) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - child: Texts( - projectViewModel.isArabic - ? myHistory.selectedHistory.nameAr - : myHistory.selectedHistory.nameEn, - fontSize: 15, - textDecoration: myHistory.isChecked - ? null - : TextDecoration.lineThrough, - // bold: true, - color: Colors.black), - width: MediaQuery - .of(context) - .size - .width * 0.5, - ), - if (myHistory.isChecked) - InkWell( - child: Row( - children: [ - Container( - child: Texts( - TranslationBase - .of(context) - .remove, - fontSize: 15, - variant: "bodyText", - textDecoration: myHistory.isChecked - ? null - : TextDecoration.lineThrough, - // bold: true, - color: HexColor("#B8382C"),), - // width: MediaQuery.of(context).size.width * 0.3, - ), - Icon( - FontAwesomeIcons.times, - color: HexColor("#B8382C"), - size: 17, - ), - ], - ), - onTap: () => removeHistory(myHistory.selectedHistory), - ) - ], - ), - SizedBox( - height: 20, - ), - ], - ); - }).toList(), - ), - ) - ], - ); - } - - removeHistory(MasterKeyModel historyKey) { - List history = - // ignore: missing_return - widget.myHistoryList.where((element) => - historyKey.id == - element.selectedHistory.id && - historyKey.typeId == - element.selectedHistory.typeId - ).toList(); - - - if (history.length > 0) - setState(() { - history[0].isChecked = false; - }); - } - - openHistoryList(BuildContext context) { - showModalBottomSheet( - backgroundColor: Colors.white, - isDismissible: false, - isScrollControlled: true, - context: context, - builder: (context) { - return FractionallySizedBox( - heightFactor: 1, - child: AddHistoryDialog( - changePageViewIndex: changePageViewIndex, - controller: _controller, - myHistoryList: widget.myHistoryList, - addSelectedHistories: () { - setState(() { - Navigator.of(context).pop(); - }); - }, - removeHistory: (masterKey) => removeHistory(masterKey), - ), - ); - }); - } -} - - - -class AddHistoryDialog extends StatefulWidget { - final Function changePageViewIndex; - final PageController controller; - final List myHistoryList; - final Function addSelectedHistories; - final Function (MasterKeyModel) removeHistory; - - const AddHistoryDialog( - {Key key, this.changePageViewIndex, this.controller, this.myHistoryList, this.addSelectedHistories, this.removeHistory}) - : super(key: key); - - @override - _AddHistoryDialogState createState() => _AddHistoryDialogState(); -} - -class _AddHistoryDialogState extends State { - @override - Widget build(BuildContext context) { - return FractionallySizedBox( - heightFactor: 1, - child: BaseView( - onModelReady: (model) async { - if (model.historyFamilyList.length == 0) { - await model.getMasterLookup(MasterKeysService.HistoryFamily); - } - - if (model.historySurgicalList.length == 0) { - await model.getMasterLookup(MasterKeysService.HistorySurgical); - await model.getMasterLookup(MasterKeysService.HistorySports); - } - - if (model.historyMedicalList.length == 0) { - await model.getMasterLookup(MasterKeysService.HistoryMedical); - } - }, - builder: (_, model, w) => AppScaffold( - baseViewModel: model, - isShowAppBar: false, - body: Center( - child: Container( - child: Column( - children: [ - Container( - padding: EdgeInsets.only( - left: 0, right: 5, bottom: 5, top: 5), - decoration: BoxDecoration( - color: Colors.white, - ), - height: 115, - child: Container( - padding: EdgeInsets.only( - left: 10, right: 10), - margin: EdgeInsets.only(top: 40), - child: Column( - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - RichText( - text: TextSpan( - style: TextStyle( - fontSize:20, - color: Colors.black), - children: [ - new TextSpan( - text: TranslationBase.of(context).addHistory, - style: TextStyle( - color: Color(0xFF2B353E), - fontWeight: FontWeight.bold, - fontFamily: 'Poppins', - fontSize: 20)), - ], - ), - ), - InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Icon(FontAwesomeIcons.times, - size: 30, - color: Color(0xFF2B353E))) - ], - ), - ], - ), - ), - ), - SizedBox( - height: 10, - ), - PriorityBar(onTap: (activePriority) async { - widget.changePageViewIndex(activePriority); - }), - SizedBox( - height: 20, - ), - Expanded( - child: FractionallySizedBox( - widthFactor: 0.9, - child: PageView( - physics: NeverScrollableScrollPhysics(), - controller: widget.controller, - onPageChanged: (index) { - setState(() { - // currentIndex = index; - }); - }, - scrollDirection: Axis.horizontal, - children: [ - NetworkBaseView( - baseViewModel: model, - child: MasterKeyCheckboxSearchWidget( - model: model, - masterList: model.historyFamilyList, - removeHistory: (history){ - setState(() { - widget.removeHistory(history); - }); - }, - addHistory: (history){ - setState(() { - createAndAddHistory( - history); - }); - }, - addSelectedHistories: (){ - widget.addSelectedHistories(); - }, - isServiceSelected: (master) =>isServiceSelected(master), - ), - ), - NetworkBaseView( - baseViewModel: model, - child: MasterKeyCheckboxSearchWidget( - model: model, - masterList: model.mergeHistorySurgicalWithHistorySportList, - removeHistory: (history){ - setState(() { - widget.removeHistory(history); - }); - }, - addHistory: (history){ - setState(() { - createAndAddHistory( - history); - }); - }, - addSelectedHistories: (){ - widget.addSelectedHistories(); - }, - isServiceSelected: (master) =>isServiceSelected(master), - ), - ), - NetworkBaseView( - baseViewModel: model, - child: MasterKeyCheckboxSearchWidget( - model: model, - masterList: model.historyMedicalList, - removeHistory: (history){ - setState(() { - widget.removeHistory(history); - }); - }, - addHistory: (history){ - setState(() { - createAndAddHistory( - history); - }); - }, - addSelectedHistories: (){ - widget.addSelectedHistories(); - }, - isServiceSelected: (master) =>isServiceSelected(master), - ), - ), - ], - ), - ), - ), - ], - )), - ), - ), - )); - } - - createAndAddHistory(MasterKeyModel history) { - List myhistory = widget.myHistoryList.where((element) => - history.id == - element.selectedHistory.id && - history.typeId == - element.selectedHistory.typeId - ).toList(); - - if (myhistory.isEmpty) { - setState(() { - MySelectedHistory mySelectedHistory = MySelectedHistory( - remark: history.remarks ?? "", - selectedHistory: history, - isChecked: true); - widget.myHistoryList.add(mySelectedHistory); - }); - } else { - myhistory.first.isChecked = true; - } - } - - isServiceSelected(MasterKeyModel masterKey) { - Iterable history = - widget - .myHistoryList - .where((element) => - masterKey.id == element.selectedHistory.id && - masterKey.typeId == element.selectedHistory.typeId && - element.isChecked); - if (history.length > 0) { - return true; - } - return false; - } - -} diff --git a/lib/widgets/patients/profile/soap_update/subjective/update_medication_widget.dart b/lib/widgets/patients/profile/soap_update/subjective/update_medication_widget.dart deleted file mode 100644 index 440252fa..00000000 --- a/lib/widgets/patients/profile/soap_update/subjective/update_medication_widget.dart +++ /dev/null @@ -1,607 +0,0 @@ -import 'package:autocomplete_textfield/autocomplete_textfield.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/model/get_medication_response_model.dart'; -import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart'; -import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; -import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; -import 'package:doctor_app_flutter/models/SOAP/my_selected_allergy.dart'; -import 'package:doctor_app_flutter/screens/base/base_view.dart'; -import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; -import 'package:doctor_app_flutter/widgets/shared/Text.dart'; -import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; -import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.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/master_key_dailog.dart'; -import 'package:eva_icons_flutter/eva_icons_flutter.dart'; -import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:hexcolor/hexcolor.dart'; -import 'package:provider/provider.dart'; - -import '../custom_validation_error.dart'; - -class UpdateMedicationWidget extends StatefulWidget { - final TextEditingController medicationController; - - UpdateMedicationWidget({ - Key key, - this.medicationController, - }); - - @override - _UpdateMedicationWidgetState createState() => _UpdateMedicationWidgetState(); -} - -class _UpdateMedicationWidgetState extends State { - @override - Widget build(BuildContext context) { - ProjectViewModel projectViewModel = Provider.of(context); - - return Column( - children: [ - InkWell( - onTap: () { - openMedicationList(context); - }, - child: Container( - padding: EdgeInsets.symmetric( - vertical: 8, horizontal: 8.0), - margin: - EdgeInsets.symmetric(vertical: 8), - decoration: BoxDecoration( - border: Border.all( - color: Colors.grey.shade400, - width: 0.5), - borderRadius: BorderRadius.all( - Radius.circular(8), - ), - color: Colors.white, - ), - child: Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - AppText( - "${TranslationBase.of(context).addMedication}", - fontSize: SizeConfig - .textMultiplier * - 1.8, - color: Colors.black, - fontWeight: FontWeight.bold, - ), - ], - )), - Icon( - Icons.add_box_rounded, - size: 25, - ) - ], - ), - ), - ), - SizedBox( - height: 20, - ) - ], - ); - } - - - openMedicationList(BuildContext context) { - showModalBottomSheet( - backgroundColor: Colors.white, - isScrollControlled: true, - isDismissible: false, - context: context, - builder: (context) { - return AddMedication( - addMedicationFun: (MySelectedAllergy mySelectedAllergy) {}, - medicationController: widget.medicationController, - ); - }); - } -} - -// ignore: must_be_immutable -class AddMedication extends StatefulWidget { - final Function addMedicationFun; - TextEditingController medicationController; - - AddMedication({Key key, this.addMedicationFun, this.medicationController}) - : super(key: key); - - @override - _AddMedicationState createState() => _AddMedicationState(); -} - -class _AddMedicationState extends State { - MasterKeyModel _selectedMedicationDose; - MasterKeyModel _selectedMedicationStrength; - MasterKeyModel _selectedMedicationRoute; - MasterKeyModel _selectedMedicationFrequency; - - MasterKeyModel _selectedAllergy; - TextEditingController doseController = TextEditingController(); - TextEditingController strengthController = TextEditingController(); - TextEditingController routeController = TextEditingController(); - TextEditingController frequencyController = TextEditingController(); - GetMedicationResponseModel _selectedMedication; - - GlobalKey key = - new GlobalKey>(); - bool isFormSubmitted = false; - - InputDecoration textFieldSelectorDecoration( - String hintText, String selectedText, bool isDropDown, - {IconData icon}) { - return InputDecoration( - filled: true, - fillColor: Colors.white, - - contentPadding: EdgeInsets.symmetric(vertical: 10, horizontal: 10), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 0.00), - borderRadius: BorderRadius.circular(8), - ), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 0.00), - borderRadius: BorderRadius.circular(8), - ), - disabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey, width: 0.00), - borderRadius: BorderRadius.circular(8), - ), - hintText: selectedText != null ? selectedText : hintText, - suffixIcon: isDropDown ? Icon(icon ?? Icons.arrow_drop_down) : null, - hintStyle: TextStyle( - fontSize: 10, - color: Theme - .of(context) - .hintColor, - fontWeight: FontWeight.w700 - ), - ); - } - - @override - Widget build(BuildContext context) { - ProjectViewModel projectViewModel = Provider.of(context); - final screenSize = MediaQuery - .of(context) - .size; - return FractionallySizedBox( - child: BaseView( - onModelReady: (model) async { - if (model.medicationStrengthList.length == 0) { - await model.getMasterLookup(MasterKeysService.MedicationStrength,); - } - if (model.medicationFrequencyList.length == 0) { - await model.getMasterLookup(MasterKeysService.MedicationFrequency); - } - if (model.medicationDoseTimeList.length == 0) { - await model.getMasterLookup(MasterKeysService.MedicationDoseTime); - } - if (model.medicationRouteList.length == 0) { - await model.getMasterLookup(MasterKeysService.MedicationRoute); - } - if (model.allMedicationList.length == 0) - await model.getMedicationList(); - }, - builder: (_, model, w) => - AppScaffold( - baseViewModel: model, - isShowAppBar: false, - body: Center( - child: Container( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - padding: - EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5), - decoration: BoxDecoration( - color: Colors.white, - ), - height: 115, - child: Container( - padding: EdgeInsets.only(left: 10, right: 10), - margin: EdgeInsets.only(top: 40), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - RichText( - text: TextSpan( - style: TextStyle( - fontSize: 20, color: Colors.black), - children: [ - new TextSpan( - text: TranslationBase.of(context) - .addMedication, - style: TextStyle( - color: Color(0xFF2B353E), - fontWeight: FontWeight.bold, - fontFamily: 'Poppins', - fontSize: 20)), - ], - ), - ), - InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Icon(FontAwesomeIcons.times, - size: 30, color: Color(0xFF2B353E))) - ], - ), - ], - ), - ), - ), - SizedBox( - height: 10, - ), - SizedBox( - height: 16, - ), - Expanded( - child: Center( - child: FractionallySizedBox( - widthFactor: 0.9, - child: Column( - children: [ - SizedBox( - height: 16, - ), - SizedBox( - height: 16, - ), - Container( - height: screenSize.height * 0.070, - child: InkWell( - onTap: model.allMedicationList != null - ? () { - setState(() { - _selectedMedication = null; - }); - } - : null, - child: _selectedMedication == null - ? AutoCompleteTextField< - GetMedicationResponseModel>( - decoration: - textFieldSelectorDecoration( - - TranslationBase.of(context) - .searchMedicineNameHere, - _selectedMedication != null - ? _selectedMedication - .genericName - : null, - true, - icon: EvaIcons.search), - itemSubmitted: (item) => setState( - () => - _selectedMedication = item), - key: key, - suggestions: - model.allMedicationList, - itemBuilder: (context, - suggestion) => - new Padding( - child: Texts(suggestion - .description + - '/' + - suggestion.genericName), - padding: - EdgeInsets.all(8.0)), - itemSorter: (a, b) => 1, - itemFilter: (suggestion, input) => - suggestion.genericName - .toLowerCase() - .startsWith( - input.toLowerCase()) || - suggestion.description - .toLowerCase() - .startsWith( - input.toLowerCase()) || - suggestion.keywords - .toLowerCase() - .startsWith( - input.toLowerCase()), - ) - : AppTextFieldCustom( - hintText: _selectedMedication != null - ? _selectedMedication - .description + - (' (${_selectedMedication.genericName} )') - : TranslationBase.of(context) - .searchMedicineNameHere, - minLines: 2, - maxLines: 2, - enabled: false, - ), - ), - ), - if (isFormSubmitted && - _selectedMedication == null) - CustomValidationError(), - SizedBox( - height: 5, - ), - AppTextFieldCustom( - enabled: false, - onClick: model.medicationDoseTimeList != null - ? () { - MasterKeyDailog dialog = - MasterKeyDailog( - list: model.medicationDoseTimeList, - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - _selectedMedicationDose = - selectedValue; - - doseController - .text = projectViewModel - .isArabic - ? _selectedMedicationDose - .nameAr - : _selectedMedicationDose - .nameEn; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - hintText: - TranslationBase.of(context).doseTime, - //TODO add translation - maxLines: 2, - minLines: 2, - isDropDown: true, - controller: doseController, - ), - SizedBox( - height: 5, - ), - if (isFormSubmitted && - _selectedMedicationDose == null) - CustomValidationError(), - SizedBox( - height: 5, - ), - AppTextFieldCustom( - enabled: false, - isDropDown: true, - onClick: model.medicationStrengthList != null - ? () { - MasterKeyDailog dialog = - MasterKeyDailog( - list: model.medicationStrengthList, - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - _selectedMedicationStrength = - selectedValue; - - strengthController - .text = projectViewModel - .isArabic - ? _selectedMedicationStrength - .nameAr - : _selectedMedicationStrength - .nameEn; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - hintText: - TranslationBase.of(context).strength, - // hintColor: Colors.black, - // fontWeight: FontWeight.w600, - maxLines: 2, - minLines: 2, - controller: strengthController, - ), - SizedBox( - height: 5, - ), - if (isFormSubmitted && - _selectedMedicationStrength == null) - CustomValidationError(), - SizedBox( - height: 5, - ), - AppTextFieldCustom( - enabled: false, - isDropDown: true, - onClick: model.medicationRouteList != null - ? () { - MasterKeyDailog dialog = - MasterKeyDailog( - list: model.medicationRouteList, - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - _selectedMedicationRoute = - selectedValue; - - routeController - .text = projectViewModel - .isArabic - ? _selectedMedicationRoute - .nameAr - : _selectedMedicationRoute - .nameEn; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - hintText: TranslationBase.of(context).route, - maxLines: 2, - minLines: 2, - controller: routeController, - ), - SizedBox( - height: 5, - ), - if (isFormSubmitted && - _selectedMedicationRoute == null) - CustomValidationError(), - SizedBox( - height: 5, - ), - AppTextFieldCustom( - onClick: model.medicationFrequencyList != null - ? () { - MasterKeyDailog dialog = - MasterKeyDailog( - list: model.medicationFrequencyList, - okText: - TranslationBase.of(context).ok, - okFunction: (selectedValue) { - setState(() { - _selectedMedicationFrequency = - selectedValue; - - frequencyController - .text = projectViewModel - .isArabic - ? _selectedMedicationFrequency - .nameAr - : _selectedMedicationFrequency - .nameEn; - }); - }, - ); - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) { - return dialog; - }, - ); - } - : null, - hintText: - TranslationBase.of(context).frequency, - //TODO add translation - enabled: false, - // hintColor: Colors.black, - maxLines: 2, - minLines: 2, - isDropDown: true, - controller: frequencyController, - ), - SizedBox( - height: 5, - ), - if (isFormSubmitted && - _selectedMedicationFrequency == null) - CustomValidationError(), - SizedBox( - height: 30, - ), - ], - )), - ), - ), - ]), - ), - ), - bottomSheet: Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.all( - Radius.circular(10.0), - ), - border: Border.all(color: HexColor('#707070'), width: 0.30), - ), - height: MediaQuery.of(context).size.height * 0.1, - width: double.infinity, - child: Column( - children: [ - SizedBox( - height: 10, - ), - Container( - child: FractionallySizedBox( - widthFactor: .80, - child: Center( - child: AppButton( - title: TranslationBase.of(context).addMedication.toUpperCase(), - color: Color(0xFF359846), - onPressed: () { - setState(() { - isFormSubmitted = true; - }); - if (_selectedMedication != null && - _selectedMedicationDose != null && - _selectedMedicationStrength != null && - _selectedMedicationRoute != null && - _selectedMedicationFrequency != null) { - widget.medicationController.text = widget - .medicationController.text + - '${_selectedMedication.description} (${TranslationBase.of(context).doseTime} ) ${doseController.text} (${TranslationBase.of(context).strength}) ${strengthController.text} (${TranslationBase.of(context).route}) ${routeController.text} (${TranslationBase.of(context).frequency}) ${frequencyController.text} \n \n'; - Navigator.of(context).pop(); - } - }, - ), - ), - ), - ), - SizedBox( - height: 5, - ), - ], - ), - ), - ), - ), - ); - } -} - - - - - - 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 6306e069..2b17709d 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 @@ -18,8 +18,8 @@ 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/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/subjective/update_Chief_complaints.dart'; -import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/subjective/update_allergies_widget.dart'; -import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/subjective/update_history_widget.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/subjective/allergies/update_allergies_widget.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/subjective/history/update_history_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'; diff --git a/lib/widgets/shared/doctor_card_insurance.dart b/lib/widgets/shared/doctor_card_insurance.dart index 6b144f53..fce3e316 100644 --- a/lib/widgets/shared/doctor_card_insurance.dart +++ b/lib/widgets/shared/doctor_card_insurance.dart @@ -19,6 +19,7 @@ class DoctorCardInsurance extends StatelessWidget { final String clinic; final String approvalStatus; final String patientOut; + final String branch2; DoctorCardInsurance( {this.doctorName, @@ -31,7 +32,8 @@ class DoctorCardInsurance extends StatelessWidget { this.isPrescriptions = false, this.clinic, this.approvalStatus, - this.patientOut}); + this.patientOut, + this.branch2}); @override Widget build(BuildContext context) { @@ -108,7 +110,7 @@ class DoctorCardInsurance extends StatelessWidget { ], ), Row( - crossAxisAlignment: CrossAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( child: LargeAvatar( @@ -161,23 +163,38 @@ class DoctorCardInsurance extends StatelessWidget { child: Texts( clinic, fontWeight: FontWeight.w700, + fontSize: 15.0, ), ) ], ), - if (branch != null) + if (branch2 != null) Row( children: [ Texts( - 'Approval No: ', + 'Branch:', //color: Colors.grey[500], ), Texts( - branch, + branch2, fontWeight: FontWeight.w700, + fontSize: 15.0, ) ], - ) + ), + Row( + children: [ + Texts( + 'Approval No: ', + //color: Colors.grey[500], + ), + Texts( + branch, + fontWeight: FontWeight.w700, + fontSize: 15.0, + ) + ], + ), ]), ), ), diff --git a/lib/widgets/shared/master_key_checkbox_search_allergies_widget.dart b/lib/widgets/shared/master_key_checkbox_search_allergies_widget.dart index f85d2fe6..52aa5e99 100644 --- a/lib/widgets/shared/master_key_checkbox_search_allergies_widget.dart +++ b/lib/widgets/shared/master_key_checkbox_search_allergies_widget.dart @@ -7,11 +7,13 @@ import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/custom_validation_error.dart'; import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/new_text_Field.dart'; import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'app-textfield-custom.dart'; import 'app_texts_widget.dart'; import 'dialogs/master_key_dailog.dart'; import 'expandable-widget-header-body.dart'; @@ -62,132 +64,130 @@ class _MasterKeyCheckboxSearchAllergiesWidgetState Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return Container( - child: Column( - children: [ - Expanded( - child: Container( - height: MediaQuery.of(context).size.height * 0.62, - child: Center( - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - color: Colors.white), - child: Column( - children: [ - TextFields( - hintText: widget.hintSearchText ?? - TranslationBase.of(context).selectAllergy, - borderWidth: 0.0, - padding: EdgeInsets.all(20), - borderRadius: 0, - suffixIcon: EvaIcons.search, - onChanged: (value) { - filterSearchResults(value); - }, - ), - SizedBox( - height: 10, - ), - Expanded( - child: FractionallySizedBox( - widthFactor: 0.9, - child: Container( - height: MediaQuery.of(context).size.height * 0.60, - child: ListView.builder( - itemCount: items.length, - itemBuilder: (context, index) { - bool isSelected = - widget.isServiceSelected(items[index]); - MySelectedAllergy mySelectedAllergy; - if (isSelected) { - mySelectedAllergy = - widget.getServiceSelectedAllergy( - items[index]); - } - TextEditingController remarkController = - TextEditingController( - text: isSelected - ? mySelectedAllergy.remark - : null); - TextEditingController severityController = - TextEditingController( - text: isSelected - ? mySelectedAllergy - .selectedAllergySeverity != - null - ? projectViewModel.isArabic - ? mySelectedAllergy - .selectedAllergySeverity - .nameAr - : mySelectedAllergy - .selectedAllergySeverity - .nameEn - : null - : null); - return HeaderBodyExpandableNotifier( - headerWidget: Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Row( - children: [ - Checkbox( - value: - widget.isServiceSelected( - items[index]), - activeColor: Colors.red[800], - onChanged: (bool newValue) { + child: Expanded( + child: Column( + children: [ + Expanded( + child: Container( + height: MediaQuery.of(context).size.height * 0.70, + child: Center( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: Colors.white), + child: Column( + children: [ + TextFields( + hintText: widget.hintSearchText ?? + TranslationBase.of(context).selectAllergy, + borderWidth: 0.0, + padding: EdgeInsets.all(20), + borderRadius: 0, + suffixIcon: EvaIcons.search, + onChanged: (value) { + filterSearchResults(value); + }, + ), + SizedBox( + height: 10, + ), + Expanded( + child: FractionallySizedBox( + widthFactor: 0.9, + child: Container( + height: MediaQuery.of(context).size.height * 0.60, + child: ListView.builder( + itemCount: items.length, + itemBuilder: (context, index) { + bool isSelected = + widget.isServiceSelected(items[index]); + MySelectedAllergy mySelectedAllergy; + if (isSelected) { + mySelectedAllergy = + widget.getServiceSelectedAllergy( + items[index]); + } + TextEditingController remarkController = + TextEditingController( + text: isSelected + ? mySelectedAllergy.remark + : null); + TextEditingController severityController = + TextEditingController( + text: isSelected + ? mySelectedAllergy + .selectedAllergySeverity != + null + ? projectViewModel.isArabic + ? mySelectedAllergy + .selectedAllergySeverity + .nameAr + : mySelectedAllergy + .selectedAllergySeverity + .nameEn + : null + : null); + return HeaderBodyExpandableNotifier( + headerWidget: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Checkbox( + value: + widget.isServiceSelected( + items[index]), + activeColor: Colors.red[800], + onChanged: (bool newValue) { + setState(() { + if (widget + .isServiceSelected( + items[index])) { + widget.removeAllergy( + items[index]); + } else { + MySelectedAllergy + mySelectedAllergy = + new MySelectedAllergy( + selectedAllergy: + items[index], + selectedAllergySeverity: + _selectedAllergySeverity, + remark: null, + isChecked: true, + isExpanded: true); + widget.addAllergy( + mySelectedAllergy); + } + }); + }), + InkWell( + onTap: () { setState(() { if (widget .isServiceSelected( - items[index])) { + items[index])) { widget.removeAllergy( items[index]); } else { // TODO add Allergy MySelectedAllergy - mySelectedAllergy = - new MySelectedAllergy( - selectedAllergy: - items[index], - selectedAllergySeverity: - _selectedAllergySeverity, - remark: null, - isChecked: true, - isExpanded: true); + mySelectedAllergy = + new MySelectedAllergy( + selectedAllergy: + items[index], + selectedAllergySeverity: + _selectedAllergySeverity, + remark: null, + isChecked: true, + isExpanded: true); widget.addAllergy( mySelectedAllergy); } }); - }), - InkWell( - onTap: () { - setState(() { - if (widget - .isServiceSelected( - items[index])) { - widget.removeAllergy( - items[index]); - } else { - // TODO add Allergy - - MySelectedAllergy - mySelectedAllergy = - new MySelectedAllergy( - selectedAllergy: - items[index], - selectedAllergySeverity: - _selectedAllergySeverity, - remark: null, - isChecked: true, - isExpanded: true); - widget.addAllergy( - mySelectedAllergy); - } - }); - }, - child: Expanded( + }, child: Padding( padding: const EdgeInsets .symmetric( @@ -214,396 +214,163 @@ class _MasterKeyCheckboxSearchAllergiesWidgetState ), ), ), - ), - ], - ), - InkWell( - onTap: () { - if (mySelectedAllergy != null) { - setState(() { - mySelectedAllergy - .isExpanded = - mySelectedAllergy - .isExpanded - ? false - : true; - }); - } - }, - child: Icon((mySelectedAllergy != - null - ? mySelectedAllergy - .isExpanded - : false) - ? EvaIcons - .arrowIosUpwardOutline - : EvaIcons - .arrowIosDownwardOutline)) - ], - ), - bodyWidget: Column( - children: [ - TextFields( - onTapTextFields: widget.model - .allergySeverityList != - null - ? () { - MasterKeyDailog dialog = - MasterKeyDailog( - list: widget.model - .allergySeverityList, - okText: - TranslationBase.of( - context) - .ok, - okFunction: - (selectedValue) { - setState(() { - mySelectedAllergy - .selectedAllergySeverity = - selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: - false, - context: context, - builder: (BuildContext - context) { - return dialog; + ], + ), + InkWell( + onTap: () { + if (mySelectedAllergy != null) { + setState(() { + mySelectedAllergy + .isExpanded = + mySelectedAllergy + .isExpanded + ? false + : true; + }); + } }, - ); - } - : null, - hasLabelText: - mySelectedAllergy != null && - mySelectedAllergy - .selectedAllergySeverity != - null - ? true - : false, - showLabelText: true, - hintText: - TranslationBase - .of(context) - .selectSeverity, - fontSize: 13.5, - readOnly: true, - // hintColor: Colors.black, - fontWeight: FontWeight.w600, - maxLines: 2, - minLines: 1, - controller: severityController, - validator: (value) { - if (value == null) - return TranslationBase - .of( - context) - .emptyMessage; - else - return null; - }), - SizedBox( - height: 5, - ), - if(isSubmitted && - mySelectedAllergy - .selectedAllergySeverity == null) - Row( - - children: [ - CustomValidationError(), - ], - mainAxisAlignment: MainAxisAlignment.start, - ), - - SizedBox( - height: 10, + child: Icon((mySelectedAllergy != + null + ? mySelectedAllergy + .isExpanded + : false) + ? EvaIcons + .arrowIosUpwardOutline + : EvaIcons + .arrowIosDownwardOutline)) + ], ), - Container( - 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, - fontWeight: FontWeight.w600, - maxLines: 25, - minLines: 10, - initialValue: isSelected - ? mySelectedAllergy - .remark : '', - // controller: remarkControlle - - onChanged: (value) { - if (isSelected) { - mySelectedAllergy - .remark = value; - }; - }, - - validator: (value) { - if (value == null) - return TranslationBase - .of( + bodyWidget: Column( + children: [ + AppTextFieldCustom( + onClick: widget.model + .allergySeverityList != + null + ? () { + MasterKeyDailog dialog = + MasterKeyDailog( + list: widget.model + .allergySeverityList, + okText: + TranslationBase.of( context) - .emptyMessage; - else - return null; - }), - ), - SizedBox( - height: 10, - ), - ],), - isExpand: mySelectedAllergy != null - ? mySelectedAllergy.isExpanded - : false, - ); - - - - - Column( - children: [ - InkWell( - onTap: () { - setState(() { - if (widget.isServiceSelected( - items[index])) { - widget - .removeAllergy( - items[index]); - } else { - // TODO add Allergy - - MySelectedAllergy - mySelectedAllergy = - new MySelectedAllergy( - selectedAllergy: - items[index], - selectedAllergySeverity: - _selectedAllergySeverity, - remark: null, - isChecked: true); - widget.addAllergy( - mySelectedAllergy); + .ok, + okFunction: + (selectedValue) { + setState(() { + mySelectedAllergy + .selectedAllergySeverity = + selectedValue; + }); + }, + ); + showDialog( + barrierDismissible: + false, + context: context, + builder: (BuildContext + context) { + return dialog; + }, + ); } - }); - }, - child: Column( - children: [ - Row( - children: [ - Checkbox( - value: widget - .isServiceSelected( - items[index]), - activeColor: - Colors.red[800], - onChanged: (bool newValue) { - // setState(() { - // if (widget - // .isServiceSelected(items[index])) { - // widget.removeHistory(items[index]); - // } else { - // widget.addHistory(items[index]); - // } - // }); - }), - Expanded( - child: Padding( - padding: const EdgeInsets - .symmetric( - horizontal: 10, - vertical: 0), - child: AppText( - projectViewModel.isArabic - ? items[index] - .nameAr != - "" - ? items[index] - .nameAr - : items[index] - .nameEn - : items[index].nameEn, - color: Color(0xFF575757), - fontSize: 16, - fontWeight: - FontWeight.w600, - ), - ), - ), - ], - ), - if(widget - .isServiceSelected( - items[index])) - Column(children: [ - TextFields( - onTapTextFields: widget.model - .allergySeverityList != - null - ? () { - MasterKeyDailog dialog = - MasterKeyDailog( - list: widget.model - .allergySeverityList, - okText: - TranslationBase.of( - context) - .ok, - okFunction: - (selectedValue) { - setState(() { - mySelectedAllergy - .selectedAllergySeverity = - selectedValue; - }); - }, - ); - showDialog( - barrierDismissible: - false, - context: context, - builder: (BuildContext - context) { - return dialog; - }, - ); - } - : null, - hasLabelText: - mySelectedAllergy - .selectedAllergySeverity != - null - ? true - : false, - showLabelText: true, - hintText: - TranslationBase - .of(context) - .selectSeverity, - fontSize: 13.5, - readOnly: true, - // hintColor: Colors.black, - fontWeight: FontWeight.w600, - maxLines: 2, - minLines: 1, - controller: severityController, - validator: (value) { - if (value == null) - return TranslationBase - .of( - context) - .emptyMessage; - else - return null; - }), - SizedBox( - height: 5, - ), - if(isSubmitted && - mySelectedAllergy - .selectedAllergySeverity == null) - Row( + : null, + isDropDown: true, + hintText: + TranslationBase + .of(context) + .selectSeverity, + enabled: false, + maxLines: 2, + minLines: 2, + controller: severityController,), + SizedBox( + height: 5, + ), + if(isSubmitted && mySelectedAllergy !=null && + mySelectedAllergy + .selectedAllergySeverity == null) + Row( - children: [ - CustomValidationError(), - ], - mainAxisAlignment: MainAxisAlignment.start, - ), + children: [ + CustomValidationError(), + ], + mainAxisAlignment: MainAxisAlignment.start, + ), - SizedBox( - height: 10, - ), - Container( - 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, - fontWeight: FontWeight.w600, - maxLines: 25, - minLines: 10, - initialValue: isSelected - ? mySelectedAllergy - .remark : '', - // controller: remarkControlle + SizedBox( + height: 10, + ), + Container( + margin: EdgeInsets.only( + left: 0, right: 0, top: 15), + child: NewTextFields( + hintText: TranslationBase + .of( + context) + .remarks, + fontSize: 13.5, + // hintColor: Colors.black, + fontWeight: FontWeight.w600, + maxLines: 25, + minLines: 3, + initialValue: isSelected + ? mySelectedAllergy + .remark : '', + // controller: remarkControlle - onChanged: (value) { - if (isSelected) { - mySelectedAllergy - .remark = value; - }; - }, + onChanged: (value) { + if (isSelected) { + mySelectedAllergy + .remark = value; + } + }, - validator: (value) { - if (value == null) - return TranslationBase - .of( - context) - .emptyMessage; - else - return null; - }), - ), - SizedBox( - height: 10, - ), - ],) - ], + validator: (value) { + if (value == null) + return TranslationBase + .of( + context) + .emptyMessage; + else + return null; + }), ), - ), - // DividerWithSpacesAround(), - ], - ); - }, + SizedBox( + height: 10, + ), + ],), + isExpand: mySelectedAllergy != null + ? mySelectedAllergy.isExpanded + : false, + ); + }, + ), ), ), ), - ), - ], - ) - )), + ], + ) + )), + ), ), - ), - SizedBox( - height: 10, - ), - if (widget.model.state == ViewState.Idle) - AppButton( - title: "Add Selected Allergy", - padding: 10, - color: Color(0xFF359846), - onPressed: () { - setState(() { - isSubmitted = true; - }); - widget.addSelectedAllergy(); - }, + SizedBox( + height: 10, ), - ], + if (widget.model.state == ViewState.Idle) + AppButton( + title: "Add Selected Allergy", + padding: 10, + color: Color(0xFF359846), + onPressed: () { + setState(() { + isSubmitted = true; + }); + widget.addSelectedAllergy(); + }, + ), + ], + ), ), ); } diff --git a/lib/widgets/shared/network_base_view.dart b/lib/widgets/shared/network_base_view.dart index adba46cd..8e5ba34e 100644 --- a/lib/widgets/shared/network_base_view.dart +++ b/lib/widgets/shared/network_base_view.dart @@ -34,10 +34,14 @@ class NetworkBaseView extends StatelessWidget { case ViewState.Error: return Center( child: Column( + crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox(height: 100,), - Image.asset('assets/images/no-data.png',height: 250), - Texts(baseViewModel.error??'') + Image.asset('assets/images/no-data.png'), + Padding( + padding: const EdgeInsets.all(8.0), + child: Texts(baseViewModel.error??''), + ) ], ),