diff --git a/lib/config/config.dart b/lib/config/config.dart index 2c83235b..abf451b8 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -102,6 +102,13 @@ const ARRIVED_PATIENT_URL = const ADD_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/PostSickLeave'; const GET_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/GetAllSickLeaves'; const EXTEND_SICK_LEAVE = 'Services/DoctorApplication.svc/REST/ExtendSickLeave'; +const GET_PRESCRIPTION_LIST = + 'Services/DoctorApplication.svc/REST/GetPrescription'; + +const POST_PRESCRIPTION_LIST = + 'Services/DoctorApplication.svc/REST/PostPrescription'; +const GET_PROCEDURE_LIST = 'Services/DoctorApplication.svc/REST/GetProcedure'; +const POST_PROCEDURE_LIST = 'Services/DoctorApplication.svc/REST/PostProcedure'; const GET_PATIENT_ARRIVAL_LIST = 'Services/DoctorApplication.svc/REST/PatientArrivalList'; @@ -113,7 +120,8 @@ const GET_MASTER_LOOKUP_LIST = 'Services/DoctorApplication.svc/REST/GetMasterLookUpList'; const POST_ALLERGY = 'Services/DoctorApplication.svc/REST/PostAllergies'; const POST_HISTORY = 'Services/DoctorApplication.svc/REST/PostHistory'; -const POST_CHIEF_COMPLAINT = 'Services/DoctorApplication.svc/REST/PostChiefcomplaint'; +const POST_CHIEF_COMPLAINT = + 'Services/DoctorApplication.svc/REST/PostChiefcomplaint'; var selectedPatientType = 1; @@ -171,6 +179,8 @@ const CHANNEL = 9; const SESSION_ID = 'BlUSkYymTt'; const IS_LOGIN_FOR_DOCTOR_APP = true; const PATIENT_OUT_SA = false; +const VIDA_AUTH = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNDg1IiwianRpIjoiMmI5ZTZlYmYtZmYzMC00ZmEyLTgwYjUtZGJlODM2MmZlNmNhIiwiZW1haWwiOiJNb2hhbWVkLlJlc3dhbkBjbG91ZHNvbHV0aW9uLXNhLmNvbSIsImlkIjoiMTQ4NSIsIk5hbWUiOiJTSEFLRVJBIFBBUlZFRU4gKFVTRUQgQlkgRVNFUlZJQ0VTKSIsIkVtcGxveWVlSWQiOiIxNDg1IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiIxNDg1IiwiU0VTU0lPTklEIjoiMjE1NzU3MTYiLCJDbGluaWNJZCI6IjMiLCJyb2xlIjoiRE9DVE9SUyIsIm5iZiI6MTYwNzk3Mjk1MCwiZXhwIjoxNjA4ODM2OTUwLCJpYXQiOjE2MDc5NzI5NTB9.nHDltbMuIA3o4Gqa7mQ88fowDy6Oey9fG1zF45dumec'; /// Timer Info const TIMER_MIN = 10; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index fb2d3cf8..50d32393 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -267,6 +267,7 @@ const Map> localizedValues = { }, 'gender2': {'en': 'Gender: ', 'ar': 'الجنس: '}, 'age2': {'en': 'Age: ', 'ar': 'العمر: '}, + 'replySuccessfully': {'en': 'Reply Successfully', 'ar': 'تم الرد بنجاح'}, "sick-leaves": {"en": "Patient Sick Leave", "ar": "الاجازات المرضية"}, "patient-sick": {"en": "Patient Sick", "ar": "المرضية"}, "leave": {"en": "Leave", "ar": "غادر"}, @@ -275,7 +276,6 @@ const Map> localizedValues = { "clinicname": {"en": "Clinic Name", "ar": "اسم العيادة"}, "sick-leave-date": {"en": "Sick leave date ", "ar": "تاريخ الاجازة."}, "sick-leave-days": {"en": "Sick leave days", "ar": "عدد ايام الاجازة."}, - 'replySuccessfully': {'en': 'Reply Successfully', 'ar': 'تم الرد بنجاح'}, 'admissionDetail': {'en': 'ADMISSION DETAIL: ', 'ar': 'تفاصيل القبول: '}, 'dateTime': {'en': 'DATE / TIME:', 'ar': 'التاريخ / الوقت:'}, 'admissionNo': {'en': 'ADMISSION #: ', 'ar': 'قبول #:'}, @@ -283,12 +283,18 @@ const Map> localizedValues = { 'area': {'en': 'AREA:', 'ar': 'المنطقة'}, 'room': {'en': 'ROOM:', 'ar': 'الغرفة'}, 'bed': {'en': 'BED:', 'ar': 'السرير'}, + 'next': {'en': 'Next', 'ar': 'التالي'}, + 'healthRecordInformation': { + 'en': 'HEALTH RECORD INFORMATION', + 'ar': 'معلومات السجل الصحي' + }, "prevoius-sickleave-issed": { "en": "Total previous sick leave issued by the doctor", "ar": "مجموع الإجازات المرضية السابقة التي أصدرها الطبيب" }, 'clinicSelect': {'en': "Select Clinic", 'ar': 'اختار عيادة'}, 'doctorSelect': {'en': "Select Doctor", 'ar': 'اختار طبيب'}, + "empty-message": {"en": "Please enter message", "ar": "يرجى ادخال الموضوع"}, 'no-sickleve-applied': { 'en': "No sick leave applied", 'ar': 'لم تطبق إجازة مرضية' @@ -306,7 +312,6 @@ const Map> localizedValues = { 'en': "EXTEND SICK LEAVE", 'ar': 'قم بتمديد الإجازة المرضية' }, - "empty-message": {"en": "Please enter Value", "ar": "يرجى ادخال القيمه"}, "chiefComplaintLength": { "en": "Chief Complaint length should be greater than 25", "ar": "يجب أن يكون طول شكوى الرئيس أكبر من 25" @@ -316,11 +321,6 @@ const Map> localizedValues = { 'en': 'No Prescription Listed', 'ar': 'لا وصفة طبية مدرجة' }, - 'next': {'en': 'Next', 'ar': 'التالي'}, - 'healthRecordInformation': { - 'en': 'HEALTH RECORD INFORMATION', - 'ar': 'معلومات السجل الصحي' - }, 'referTo': {'en': "Refer To", 'ar': 'محال إلى'}, 'referredFrom': {'en': "Referred From", 'ar': 'محال من'}, 'branch': {'en': "Branch", 'ar': 'الفرع'}, @@ -339,4 +339,18 @@ const Map> localizedValues = { 'en': "There is no appointments for at this date", 'ar': 'لا توجد مواعيد في هذا التاريخ' }, + 'referralPatient': {'en': 'Referral Patient', 'ar': 'المريض المحال '}, + 'noPrescriptionListed': { + 'en': 'NO PRESCRIPTION LISTED', + 'ar': 'لم يتم سرد أي وصف' + }, + 'addNow': {'en': 'ADD Now', 'ar': 'اضف الآن'}, + 'orderType': {'en': 'Order Type', 'ar': 'نوع الطلب'}, + 'strength': {'en': 'Strength', 'ar': 'شدة'}, + 'doseTime': {'en': 'Dose Time', 'ar': 'وقت الجرعة'}, + 'indication': {'en': 'Indication', 'ar': 'دواعي الاستخدام'}, + 'duration': {'en': 'Duration', 'ar': 'المدة الزمنية'}, + 'instruction': {'en': 'Instructions', 'ar': 'إرشادات'}, + 'addMedication': {'en': 'ADD MEDICATION', 'ar': 'اضف الدواء'}, + 'route': {'en': 'Route', 'ar': 'المسار'}, }; diff --git a/lib/core/model/post_prescrition_req_model.dart b/lib/core/model/post_prescrition_req_model.dart new file mode 100644 index 00000000..892854aa --- /dev/null +++ b/lib/core/model/post_prescrition_req_model.dart @@ -0,0 +1,106 @@ +class PostPrescriptionReqModel { + String vidaAuthTokenID; + int clinicID; + int episodeID; + int appointmentNo; + int patientMRN; + List prescriptionRequestModel; + + PostPrescriptionReqModel( + {this.vidaAuthTokenID = + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMDAyIiwianRpIjoiYTYxZjAyZjItNzUwZS00MTZkLWEzOTQtZTRjZmViZGVjMDE5IiwiZW1haWwiOiIiLCJpZCI6IjEwMDIiLCJOYW1lIjoiVEVNUCAtIERPQ1RPUiIsIkVtcGxveWVlSWQiOiIxNDg1IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiIxNDg1IiwiU0VTU0lPTklEIjoiMjE1ODUzNTIiLCJDbGluaWNJZCI6IjMiLCJyb2xlIjoiRE9DVE9SUyIsIm5iZiI6MTYwODUzMDAyNywiZXhwIjoxNjA5Mzk0MDI3LCJpYXQiOjE2MDg1MzAwMjd9.M1NTREPgz5vQH_GTZ_KGb0xQW5HEDs47AtNR3jbqnms", + this.clinicID = 1, + this.episodeID = 200012117, + this.appointmentNo = 2016054573, + this.patientMRN = 3120690, + this.prescriptionRequestModel}); + + PostPrescriptionReqModel.fromJson(Map json) { + vidaAuthTokenID = json['VidaAuthTokenID']; + clinicID = json['ClinicID']; + episodeID = json['EpisodeID']; + appointmentNo = json['AppointmentNo']; + patientMRN = json['PatientMRN']; + if (json['prescriptionRequestModel'] != null) { + prescriptionRequestModel = new List(); + json['prescriptionRequestModel'].forEach((v) { + prescriptionRequestModel.add(new PrescriptionRequestModel.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + data['ClinicID'] = this.clinicID; + data['EpisodeID'] = this.episodeID; + data['AppointmentNo'] = this.appointmentNo; + data['PatientMRN'] = this.patientMRN; + if (this.prescriptionRequestModel != null) { + data['prescriptionRequestModel'] = + this.prescriptionRequestModel.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class PrescriptionRequestModel { + int itemId; + String doseStartDate; + int duration; + int dose; + int doseUnitId; + int route; + int frequency; + int doseTime; + bool covered; + bool approvalRequired; + String remarks; + String icdcode10Id; + + PrescriptionRequestModel( + {this.itemId = 4, + this.doseStartDate = "2020-12-20T13:07:41.769Z", + this.duration = 2, + this.dose = 1, + this.doseUnitId = 1, + this.route = 1, + this.frequency = 1, + this.doseTime = 1, + this.covered = true, + this.approvalRequired = true, + this.remarks = "test1", + this.icdcode10Id = "test3"}); + + PrescriptionRequestModel.fromJson(Map json) { + itemId = json['itemId']; + doseStartDate = json['doseStartDate']; + duration = json['duration']; + dose = json['dose']; + doseUnitId = json['doseUnitId']; + route = json['route']; + frequency = json['frequency']; + doseTime = json['doseTime']; + covered = json['covered']; + approvalRequired = json['approvalRequired']; + remarks = json['remarks']; + icdcode10Id = json['icdcode10Id']; + } + + Map toJson() { + final Map data = new Map(); + data['itemId'] = this.itemId; + data['doseStartDate'] = this.doseStartDate; + data['duration'] = this.duration; + data['dose'] = this.dose; + data['doseUnitId'] = this.doseUnitId; + data['route'] = this.route; + data['frequency'] = this.frequency; + data['doseTime'] = this.doseTime; + data['covered'] = this.covered; + data['approvalRequired'] = this.approvalRequired; + data['remarks'] = this.remarks; + data['icdcode10Id'] = this.icdcode10Id; + return data; + } +} diff --git a/lib/core/model/prescription_model.dart b/lib/core/model/prescription_model.dart new file mode 100644 index 00000000..9fcf3050 --- /dev/null +++ b/lib/core/model/prescription_model.dart @@ -0,0 +1,157 @@ +class PrescriptionModel { + List entityList; + dynamic rowcount; + dynamic statusMessage; + + PrescriptionModel({this.entityList, this.rowcount, this.statusMessage}); + + PrescriptionModel.fromJson(Map json) { + if (json['entityList'] != null) { + entityList = new List(); + json['entityList'].forEach((v) { + entityList.add(new EntityList.fromJson(v)); + }); + } + rowcount = json['rowcount']; + statusMessage = json['statusMessage']; + } + + Map toJson() { + final Map data = new Map(); + if (this.entityList != null) { + data['entityList'] = this.entityList.map((v) => v.toJson()).toList(); + } + data['rowcount'] = this.rowcount; + data['statusMessage'] = this.statusMessage; + return data; + } +} + +class EntityList { + dynamic appointmentNo; + dynamic clinicName; + dynamic createdBy; + dynamic createdOn; + dynamic doctorName; + dynamic doseDailyQuantity; + dynamic doseDailyUnitID; + dynamic doseDetail; + dynamic doseDurationDays; + dynamic doseTimingID; + dynamic episodeID; + dynamic frequencyID; + dynamic icdCode10ID; + dynamic indication; + dynamic isDispensed; + dynamic isMedicineCovered; + dynamic isSIG; + dynamic medicationName; + dynamic medicationPrice; + dynamic medicineCode; + dynamic orderTypeDescription; + dynamic qty; + dynamic quantity; + dynamic remarks; + dynamic routeID; + dynamic startDate; + dynamic status; + dynamic stopDate; + dynamic uom; + + EntityList( + {this.appointmentNo, + this.clinicName, + this.createdBy, + this.createdOn, + this.doctorName, + this.doseDailyQuantity, + this.doseDailyUnitID, + this.doseDetail, + this.doseDurationDays, + this.doseTimingID, + this.episodeID, + this.frequencyID, + this.icdCode10ID, + this.indication, + this.isDispensed, + this.isMedicineCovered, + this.isSIG, + this.medicationName, + this.medicationPrice, + this.medicineCode, + this.orderTypeDescription, + this.qty, + this.quantity, + this.remarks, + this.routeID, + this.startDate, + this.status, + this.stopDate, + this.uom}); + + EntityList.fromJson(Map json) { + appointmentNo = json['appointmentNo']; + clinicName = json['clinicName']; + createdBy = json['createdBy']; + createdOn = json['createdOn']; + doctorName = json['doctorName']; + doseDailyQuantity = json['doseDailyQuantity']; + doseDailyUnitID = json['doseDailyUnitID']; + doseDetail = json['doseDetail']; + doseDurationDays = json['doseDurationDays']; + doseTimingID = json['doseTimingID']; + episodeID = json['episodeID']; + frequencyID = json['frequencyID']; + icdCode10ID = json['icdCode10ID']; + indication = json['indication']; + isDispensed = json['isDispensed']; + isMedicineCovered = json['isMedicineCovered']; + isSIG = json['isSIG']; + medicationName = json['medicationName']; + medicationPrice = json['medicationPrice']; + medicineCode = json['medicineCode']; + orderTypeDescription = json['orderTypeDescription']; + qty = json['qty']; + quantity = json['quantity']; + remarks = json['remarks']; + routeID = json['routeID']; + startDate = json['startDate']; + status = json['status']; + stopDate = json['stopDate']; + uom = json['uom']; + } + + Map toJson() { + final Map data = new Map(); + data['appointmentNo'] = this.appointmentNo; + data['clinicName'] = this.clinicName; + data['createdBy'] = this.createdBy; + data['createdOn'] = this.createdOn; + data['doctorName'] = this.doctorName; + data['doseDailyQuantity'] = this.doseDailyQuantity; + data['doseDailyUnitID'] = this.doseDailyUnitID; + data['doseDetail'] = this.doseDetail; + data['doseDurationDays'] = this.doseDurationDays; + data['doseTimingID'] = this.doseTimingID; + data['episodeID'] = this.episodeID; + data['frequencyID'] = this.frequencyID; + data['icdCode10ID'] = this.icdCode10ID; + data['indication'] = this.indication; + data['isDispensed'] = this.isDispensed; + data['isMedicineCovered'] = this.isMedicineCovered; + data['isSIG'] = this.isSIG; + data['medicationName'] = this.medicationName; + data['medicationPrice'] = this.medicationPrice; + data['medicineCode'] = this.medicineCode; + data['orderTypeDescription'] = this.orderTypeDescription; + data['qty'] = this.qty; + data['quantity'] = this.quantity; + data['remarks'] = this.remarks; + data['routeID'] = this.routeID; + data['startDate'] = this.startDate; + data['status'] = this.status; + data['stopDate'] = this.stopDate; + data['uom'] = this.uom; + return data; + } +} diff --git a/lib/core/model/prescription_req_model.dart b/lib/core/model/prescription_req_model.dart new file mode 100644 index 00000000..3accb428 --- /dev/null +++ b/lib/core/model/prescription_req_model.dart @@ -0,0 +1,18 @@ +class PrescriptionReqModel { + String vidaAuthTokenID; + dynamic patientMRN; + + PrescriptionReqModel({this.vidaAuthTokenID, this.patientMRN}); + + PrescriptionReqModel.fromJson(Map json) { + vidaAuthTokenID = json['VidaAuthTokenID']; + patientMRN = json['PatientMRN']; + } + + Map toJson() { + final Map data = new Map(); + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + data['PatientMRN'] = this.patientMRN; + return data; + } +} diff --git a/lib/core/model/procedure/get_procedure_model.dart b/lib/core/model/procedure/get_procedure_model.dart new file mode 100644 index 00000000..bdb69b1c --- /dev/null +++ b/lib/core/model/procedure/get_procedure_model.dart @@ -0,0 +1,89 @@ +class GetProcedureModel { + List entityList; + int rowcount; + dynamic statusMessage; + + GetProcedureModel({this.entityList, this.rowcount, this.statusMessage}); + + GetProcedureModel.fromJson(Map json) { + if (json['entityList'] != null) { + entityList = new List(); + json['entityList'].forEach((v) { + entityList.add(new EntityList.fromJson(v)); + }); + } + rowcount = json['rowcount']; + statusMessage = json['statusMessage']; + } + + Map toJson() { + final Map data = new Map(); + if (this.entityList != null) { + data['entityList'] = this.entityList.map((v) => v.toJson()).toList(); + } + data['rowcount'] = this.rowcount; + data['statusMessage'] = this.statusMessage; + return data; + } +} + +class EntityList { + bool allowedClinic; + String category; + String categoryID; + String genderValidation; + String group; + String orderedValidation; + int price; + String procedureId; + String procedureName; + String specialPermission; + String subGroup; + String template; + + EntityList( + {this.allowedClinic, + this.category, + this.categoryID, + this.genderValidation, + this.group, + this.orderedValidation, + this.price, + this.procedureId, + this.procedureName, + this.specialPermission, + this.subGroup, + this.template}); + + EntityList.fromJson(Map json) { + allowedClinic = json['allowedClinic']; + category = json['category']; + categoryID = json['categoryID']; + genderValidation = json['genderValidation']; + group = json['group']; + orderedValidation = json['orderedValidation']; + price = json['price']; + procedureId = json['procedureId']; + procedureName = json['procedureName']; + specialPermission = json['specialPermission']; + subGroup = json['subGroup']; + template = json['template']; + } + + Map toJson() { + final Map data = new Map(); + data['allowedClinic'] = this.allowedClinic; + data['category'] = this.category; + data['categoryID'] = this.categoryID; + data['genderValidation'] = this.genderValidation; + data['group'] = this.group; + data['orderedValidation'] = this.orderedValidation; + data['price'] = this.price; + data['procedureId'] = this.procedureId; + data['procedureName'] = this.procedureName; + data['specialPermission'] = this.specialPermission; + data['subGroup'] = this.subGroup; + data['template'] = this.template; + return data; + } +} diff --git a/lib/core/model/procedure/get_procedure_req_model.dart b/lib/core/model/procedure/get_procedure_req_model.dart new file mode 100644 index 00000000..1769f43f --- /dev/null +++ b/lib/core/model/procedure/get_procedure_req_model.dart @@ -0,0 +1,40 @@ +class GetProcedureReqModel { + int clinicId; + int patientMRN; + int pageSize; + int pageIndex; + List search; + dynamic categoryId; + String vidaAuthTokenID; + + GetProcedureReqModel( + {this.clinicId, + this.patientMRN, + this.pageSize, + this.pageIndex, + this.search, + this.categoryId, + this.vidaAuthTokenID}); + + GetProcedureReqModel.fromJson(Map json) { + clinicId = json['ClinicId']; + patientMRN = json['PatientMRN']; + pageSize = json['PageSize']; + pageIndex = json['PageIndex']; + search = json['Search'].cast(); + categoryId = json['CategoryId']; + vidaAuthTokenID = json['VidaAuthTokenID']; + } + + Map toJson() { + final Map data = new Map(); + data['ClinicId'] = this.clinicId; + data['PatientMRN'] = this.patientMRN; + data['PageSize'] = this.pageSize; + data['PageIndex'] = this.pageIndex; + data['Search'] = this.search; + data['CategoryId'] = this.categoryId; + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + return data; + } +} diff --git a/lib/core/model/procedure/post_procedure_req_model.dart b/lib/core/model/procedure/post_procedure_req_model.dart new file mode 100644 index 00000000..52f62a11 --- /dev/null +++ b/lib/core/model/procedure/post_procedure_req_model.dart @@ -0,0 +1,87 @@ +class PostProcedureReqModel { + int patientMRN; + int appointmentNo; + int episodeID; + List procedures; + String vidaAuthTokenID; + + PostProcedureReqModel( + {this.patientMRN, + this.appointmentNo, + this.episodeID, + this.procedures, + this.vidaAuthTokenID}); + + PostProcedureReqModel.fromJson(Map json) { + patientMRN = json['PatientMRN']; + appointmentNo = json['AppointmentNo']; + episodeID = json['EpisodeID']; + if (json['Procedures'] != null) { + procedures = new List(); + json['Procedures'].forEach((v) { + procedures.add(new Procedures.fromJson(v)); + }); + } + vidaAuthTokenID = json['VidaAuthTokenID']; + } + + Map toJson() { + final Map data = new Map(); + data['PatientMRN'] = this.patientMRN; + data['AppointmentNo'] = this.appointmentNo; + data['EpisodeID'] = this.episodeID; + if (this.procedures != null) { + data['Procedures'] = this.procedures.map((v) => v.toJson()).toList(); + } + data['VidaAuthTokenID'] = this.vidaAuthTokenID; + return data; + } +} + +class Procedures { + String procedure; + String category; + List controls; + + Procedures({this.procedure, this.category, this.controls}); + + Procedures.fromJson(Map json) { + procedure = json['Procedure']; + category = json['Category']; + if (json['Controls'] != null) { + controls = new List(); + json['Controls'].forEach((v) { + controls.add(new Controls.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['Procedure'] = this.procedure; + data['Category'] = this.category; + if (this.controls != null) { + data['Controls'] = this.controls.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class Controls { + String code; + String controlValue; + + Controls({this.code, this.controlValue}); + + Controls.fromJson(Map json) { + code = json['Code']; + controlValue = json['ControlValue']; + } + + Map toJson() { + final Map data = new Map(); + data['Code'] = this.code; + data['ControlValue'] = this.controlValue; + return data; + } +} diff --git a/lib/core/service/prescription_service.dart b/lib/core/service/prescription_service.dart new file mode 100644 index 00000000..46b93481 --- /dev/null +++ b/lib/core/service/prescription_service.dart @@ -0,0 +1,45 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/model/Prescription_model.dart'; +import 'package:doctor_app_flutter/core/model/prescription_req_model.dart'; +import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart'; +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; + +class PrescriptionService extends BaseService { + List _prescriptionList = List(); + List get prescriptionList => _prescriptionList; + + PrescriptionReqModel _prescriptionReqModel = PrescriptionReqModel( + patientMRN: 1231755, + vidaAuthTokenID: + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyODA0IiwianRpIjoiNzNiNmUyZDctMjA0ZC00NzAyLTkxMDYtODE3MzI3OTZkYzI5IiwiZW1haWwiOiJNb2hhbWVkLlJlc3dhbkBjbG91ZHNvbHV0aW9uLXNhLmNvbSIsImlkIjoiMjgwNCIsIk5hbWUiOiJNVUhBTU1BRCBBWkFNIiwiRW1wbG95ZWVJZCI6IjE0ODUiLCJGYWNpbGl0eUdyb3VwSWQiOiIwMTAyNjYiLCJGYWNpbGl0eUlkIjoiMTUiLCJQaGFyYW1jeUZhY2lsaXR5SWQiOiI1NSIsIklTX1BIQVJNQUNZX0NPTk5FQ1RFRCI6IlRydWUiLCJEb2N0b3JJZCI6IjE0ODUiLCJTRVNTSU9OSUQiOiIyMTU3NjIwOSIsIkNsaW5pY0lkIjoiMyIsInJvbGUiOlsiU0VDVVJJVFkgQURNSU5JU1RSQVRPUlMiLCJTRVRVUCBBRE1JTklTVFJBVE9SUyIsIkNFTydTIiwiRVhFQ1VUSVZFIERJUkVDVE9SUyIsIk1BTkFHRVJTIiwiU1VQRVJWSVNPUlMiLCJDTElFTlQgU0VSVklDRVMgQ09PUkRJTkFUT1JTIiwiQ0xJRU5UIFNFUlZJQ0VTIFNVUEVSVklTT1JTIiwiQ0xJRU5UIFNFUlZJQ0VTIE1BTkdFUlMiLCJIRUFEIE5VUlNFUyIsIkRPQ1RPUlMiLCJDSElFRiBPRiBNRURJQ0FMIFNUQUZGUyIsIkJJTy1NRURJQ0FMIFRFQ0hOSUNJQU5TIiwiQklPLU1FRElDQUwgRU5HSU5FRVJTIiwiQklPLU1FRElDQUwgREVQQVJUTUVOVCBIRUFEUyIsIklUIEhFTFAgREVTSyIsIkFETUlOSVNUUkFUT1JTIiwiTEFCIEFETUlOSVNUUkFUT1IiLCJMQUIgVEVDSE5JQ0lBTiIsIkJVU0lORVNTIE9GRklDRSBTVEFGRiIsIkZJTkFOQ0UgQUNDT1VOVEFOVFMiLCJQSEFSTUFDWSBTVEFGRiIsIkFDQ09VTlRTIFNUQUZGIiwiTEFCIFJFQ0VQVElPTklTVCIsIkVSIE5VUlNFIiwiSU5QQVRJRU5UIEJJTExJTkcgU1VQRVJWSVNPUiIsIkxEUi1PUiBOVVJTRVMiLCJBRE1JU1NJT04gU1RBRkYiLCJIRUxQIERFU0sgQURNSU4iLCJBUFBST1ZBTCBTVEFGRiIsIklOUEFUSUVOVCBCSUxMSU5HIENPT1JESU5BVE9SIiwiQklMTElORyBTVEFGRiIsIkNPTlNFTlQgIiwiQ29uc2VudCAtIERlbnRhbCIsIldFQkVNUiJdLCJuYmYiOjE2MDgyMzY2MjAsImV4cCI6MTYwOTEwMDYyMCwiaWF0IjoxNjA4MjM2NjIwfQ.z4Lh0dCRr9GWXvaTo7x5GPV7R5z8ONyh3-0uk3PXMu8", + ); + + PostPrescriptionReqModel _postPrescriptionReqModel = + PostPrescriptionReqModel(); + + Future getPrescription() async { + hasError = false; + _prescriptionList.clear(); + await baseAppClient.post(GET_PRESCRIPTION_LIST, + onSuccess: (dynamic response, int statusCode) { + _prescriptionList + .add(PrescriptionModel.fromJson(response['PrescriptionList'])); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _prescriptionReqModel.toJson()); + } + + Future postPrescription() async { + hasError = false; + //_prescriptionList.clear(); + await baseAppClient.post(POST_PRESCRIPTION_LIST, + onSuccess: (dynamic response, int statusCode) { + _prescriptionList + .add(PrescriptionModel.fromJson(response['PrescriptionList'])); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _postPrescriptionReqModel.toJson()); + } +} diff --git a/lib/core/service/procedure_service.dart b/lib/core/service/procedure_service.dart new file mode 100644 index 00000000..4c795baf --- /dev/null +++ b/lib/core/service/procedure_service.dart @@ -0,0 +1,48 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/core/model/procedure/get_procedure_model.dart'; +import 'package:doctor_app_flutter/core/model/procedure/get_procedure_req_model.dart'; +import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart'; +import 'package:doctor_app_flutter/core/service/base/base_service.dart'; + +class ProcedureService extends BaseService { + List _procedureList = List(); + List get procedureList => _procedureList; + + GetProcedureReqModel _getProcedureReqModel = GetProcedureReqModel( + clinicId: 0, + pageSize: 10, + pageIndex: 1, + patientMRN: 0, + //categoryId: null, + vidaAuthTokenID: + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNDg1IiwianRpIjoiZjQ4YTk0OTQtYTczZS00MDI3LWI2MjgtNzc4MjAwMzUyYWEzIiwiZW1haWwiOiJNb2hhbWVkLlJlc3dhbkBjbG91ZHNvbHV0aW9uLXNhLmNvbSIsImlkIjoiMTQ4NSIsIk5hbWUiOiJTSEFLRVJBIFBBUlZFRU4gKFVTRUQgQlkgRVNFUlZJQ0VTKSIsIkVtcGxveWVlSWQiOiIxNDg1IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiIxNDg1IiwiU0VTU0lPTklEIjoiMjE1ODUyMTAiLCJDbGluaWNJZCI6IjMiLCJyb2xlIjoiRE9DVE9SUyIsIm5iZiI6MTYwODM2NDU2OCwiZXhwIjoxNjA5MjI4NTY4LCJpYXQiOjE2MDgzNjQ1Njh9.YLbvq5nxPn8o9ZYkcbc5YAX7Jy23Mm0s33oRmE8GHDI", + + search: ["lab"], + ); + + PostProcedureReqModel _postProcedureReqModel = PostProcedureReqModel(); + + Future getProcedure() async { + hasError = false; + _procedureList.clear(); + await baseAppClient.post(GET_PROCEDURE_LIST, + onSuccess: (dynamic response, int statusCode) { + _procedureList.add(GetProcedureModel.fromJson(response['ProcedureList'])); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _getProcedureReqModel.toJson()); + } + + Future postProcedure() async { + hasError = false; + _procedureList.clear(); + await baseAppClient.post(POST_PROCEDURE_LIST, + onSuccess: (dynamic response, int statusCode) { + _procedureList.add(GetProcedureModel.fromJson(response['ProcedureList'])); + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: _postProcedureReqModel.toJson()); + } +} diff --git a/lib/core/viewModel/prescription_view_model.dart b/lib/core/viewModel/prescription_view_model.dart new file mode 100644 index 00000000..4ab4b3f7 --- /dev/null +++ b/lib/core/viewModel/prescription_view_model.dart @@ -0,0 +1,38 @@ +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/Prescription_model.dart'; +import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart'; +import 'package:doctor_app_flutter/core/service/prescription_service.dart'; +import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart'; +import 'package:doctor_app_flutter/locator.dart'; + +class PrescriptionViewModel extends BaseViewModel { + bool hasError = false; + PrescriptionService _prescriptionService = locator(); + + List get prescriptionList => + _prescriptionService.prescriptionList; + + Future getPrescription() async { + hasError = false; + //_insuranceCardService.clearInsuranceCard(); + setState(ViewState.Busy); + await _prescriptionService.getPrescription(); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } + + Future postPrescription() async { + hasError = false; + //_insuranceCardService.clearInsuranceCard(); + setState(ViewState.Busy); + await _prescriptionService.postPrescription(); + if (_prescriptionService.hasError) { + error = _prescriptionService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } +} diff --git a/lib/core/viewModel/procedure_View_model.dart b/lib/core/viewModel/procedure_View_model.dart new file mode 100644 index 00000000..f65c0b2e --- /dev/null +++ b/lib/core/viewModel/procedure_View_model.dart @@ -0,0 +1,23 @@ +import 'package:doctor_app_flutter/core/enum/viewstate.dart'; +import 'package:doctor_app_flutter/core/model/procedure/get_procedure_model.dart'; +import 'package:doctor_app_flutter/core/service/procedure_service.dart'; +import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart'; +import 'package:doctor_app_flutter/locator.dart'; + +class ProcedureViewModel extends BaseViewModel { + bool hasError = false; + ProcedureService _procedureService = locator(); + List get procedureList => _procedureService.procedureList; + + Future getProcedure() async { + hasError = false; + //_insuranceCardService.clearInsuranceCard(); + setState(ViewState.Busy); + await _procedureService.getProcedure(); + if (_procedureService.hasError) { + error = _procedureService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } +} diff --git a/lib/landing_page.dart b/lib/landing_page.dart index f67957d3..edfc496c 100644 --- a/lib/landing_page.dart +++ b/lib/landing_page.dart @@ -2,6 +2,7 @@ import 'package:doctor_app_flutter/screens/dashboard_screen.dart'; import 'package:doctor_app_flutter/screens/doctor/message_screen.dart'; import 'package:doctor_app_flutter/screens/doctor/my_schedule_screen.dart'; import 'package:doctor_app_flutter/screens/doctor/services_screen.dart'; +import 'package:doctor_app_flutter/screens/prescription/prescription_screen.dart'; import 'package:doctor_app_flutter/widgets/shared/app_drawer_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/bottom_nav_bar.dart'; import 'package:doctor_app_flutter/widgets/shared/user-guid/app_showcase_widget.dart'; @@ -40,9 +41,7 @@ class _LandingPageState extends State { appBar: AppBar( elevation: 0, backgroundColor: HexColor('#515B5D'), - textTheme: TextTheme( - headline6: - TextStyle(color: Colors.white)), + textTheme: TextTheme(headline6: TextStyle(color: Colors.white)), title: Text(getText(currentTab).toUpperCase()), leading: Builder( builder: (BuildContext context) { @@ -66,7 +65,8 @@ class _LandingPageState extends State { builder: Builder(builder: (context) => DashboardScreen()), ), MessagesScreen(), - MyScheduleScreen(), + //MyScheduleScreen(), + NewPrescriptionScreen(), ServicesScreen() ], ), diff --git a/lib/locator.dart b/lib/locator.dart index fe3f6090..52f93a71 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -1,8 +1,12 @@ import 'package:doctor_app_flutter/core/service/dasboard_service.dart'; import 'package:doctor_app_flutter/core/service/patient_service.dart'; +import 'package:doctor_app_flutter/core/service/prescription_service.dart'; +import 'package:doctor_app_flutter/core/service/procedure_service.dart'; import 'package:doctor_app_flutter/core/service/sickleave_service.dart'; import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/core/viewModel/sick_leave_view_model.dart'; import 'package:get_it/get_it.dart'; @@ -36,6 +40,8 @@ void setupLocator() { locator.registerLazySingleton(() => SickLeaveService()); locator.registerLazySingleton(() => SOAPService()); locator.registerLazySingleton(() => PatientReferralService()); + locator.registerLazySingleton(() => PrescriptionService()); + locator.registerLazySingleton(() => ProcedureService()); /// View Model locator.registerFactory(() => DoctorReplayViewModel()); @@ -48,4 +54,6 @@ void setupLocator() { locator.registerFactory(() => SickLeaveViewModel()); locator.registerFactory(() => SOAPViewModel()); locator.registerFactory(() => PatientReferralViewModel()); + locator.registerFactory(() => PrescriptionViewModel()); + locator.registerFactory(() => ProcedureViewModel()); } diff --git a/lib/models/doctor/list_doctor_working_hours_table_model.dart b/lib/models/doctor/list_doctor_working_hours_table_model.dart index cb103c8a..5f1630bc 100644 --- a/lib/models/doctor/list_doctor_working_hours_table_model.dart +++ b/lib/models/doctor/list_doctor_working_hours_table_model.dart @@ -5,10 +5,14 @@ class ListDoctorWorkingHoursTable { String dayName; String workingHours; - ListDoctorWorkingHoursTable({this.date, this.dayName, this.workingHours}); + ListDoctorWorkingHoursTable({ + this.date, + this.dayName, + this.workingHours, + }); ListDoctorWorkingHoursTable.fromJson(Map json) { - date = Helpers.convertStringToDate(json['Date']) ; + date = Helpers.convertStringToDate(json['Date']); dayName = json['DayName']; workingHours = json['WorkingHours']; } @@ -18,6 +22,7 @@ class ListDoctorWorkingHoursTable { data['Date'] = this.date; data['DayName'] = this.dayName; data['WorkingHours'] = this.workingHours; + return data; } } @@ -25,6 +30,5 @@ class ListDoctorWorkingHoursTable { class WorkingHours { String from; String to; - WorkingHours({this.from,this.to}); - + WorkingHours({this.from, this.to}); } diff --git a/lib/routes.dart b/lib/routes.dart index 507bc75e..3fbec294 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -10,6 +10,7 @@ import 'package:doctor_app_flutter/screens/live_care/video_call.dart'; import 'package:doctor_app_flutter/screens/sick-leave/add-sickleave.dart'; import 'package:doctor_app_flutter/screens/sick-leave/sick_leave.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/SOAP/add_SOAP_index.dart'; +import 'package:doctor_app_flutter/screens/procedures/procedure_screen.dart'; import './screens/QR_reader_screen.dart'; import './screens/auth/change_password_screen.dart'; @@ -42,6 +43,7 @@ import 'screens/doctor/doctor_reply_screen.dart'; import 'screens/live_care/panding_list.dart'; import 'screens/patients/profile/referral/my-referral-detail-screen.dart'; import 'screens/patients/profile/referral/refer-patient-screen.dart'; +import 'screens/prescription/prescription_screen.dart'; const String INIT_ROUTE = ROOT; const String ROOT = 'root'; @@ -82,6 +84,8 @@ const String BODY_MEASUREMENTS = 'patients/body-measurements'; const String IN_PATIENT_PRESCRIPTIONS_DETAILS = 'patients/prescription-details'; // const String VIDEO_CALL = 'video-call'; const String LIVECARE_PENDING_LIST = 'livecare-pendinglist'; +const String ORDER_PRESCRIPTION = 'prescription/prescriptionsss'; +const String ORDER_PROCEDURE = 'procedure/procedure'; // const String LIVECARE_END_DIALOG = 'video-call/EndCallDialogBox'; const String PATIENT_SICKLEAVE = 'patients/patient_sickleave'; const String ADD_SICKLEAVE = 'add-sickleave'; @@ -125,6 +129,9 @@ var routes = { // LIVECARE_END_DIALOG: (_) => EndCallDialogBox(), PATIENT_SICKLEAVE: (_) => SickLeaveScreen(), ADD_SICKLEAVE: (_) => AddSickLeavScreen(), + ORDER_PRESCRIPTION: (_) => NewPrescriptionScreen(), + ORDER_PROCEDURE: (_) => ProcedureScreen(), + // LIVECARE_END_DIALOG: (_) => EndCallDialogBox() MY_REFERRAL_DETAIL: (_) => MyReferralDetailScreen(), }; diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index ab352ce0..9de384b6 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -545,7 +545,7 @@ class _PatientSearchScreenState extends State { ), ], ), - ) + ), ], )); } diff --git a/lib/screens/patients/profile/refer_patient_screen.dart b/lib/screens/patients/profile/refer_patient_screen.dart index 79d2789d..9b56003b 100644 --- a/lib/screens/patients/profile/refer_patient_screen.dart +++ b/lib/screens/patients/profile/refer_patient_screen.dart @@ -52,7 +52,7 @@ class _ReferPatientState extends State { onModelReady: (model) => model.getClinicsList(), builder: (_, model, w) => AppScaffold( baseViewModel: model, - appBarTitle: TranslationBase.of(context).myReferralPatient, + appBarTitle: TranslationBase.of(context).referralPatient, body: model.clinicsList == null ? DrAppEmbeddedError(error: 'Something Wrong!') : SingleChildScrollView( @@ -263,9 +263,9 @@ class _ReferPatientState extends State { Widget priorityBar(BuildContext _context, Size screenSize) { List _priorities = [ - TranslationBase.of(context).veryUrgent, - TranslationBase.of(context).urgent, - TranslationBase.of(context).routine, + TranslationBase.of(context).veryUrgent.toUpperCase(), + TranslationBase.of(context).urgent.toUpperCase(), + TranslationBase.of(context).routine.toUpperCase(), ]; return Container( height: screenSize.height * 0.070, diff --git a/lib/screens/prescription/add_prescription_form.dart b/lib/screens/prescription/add_prescription_form.dart new file mode 100644 index 00000000..40704009 --- /dev/null +++ b/lib/screens/prescription/add_prescription_form.dart @@ -0,0 +1,212 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/models/livecare/transfer_to_admin.dart'; +import 'package:doctor_app_flutter/screens/prescription/prescription_warnings.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +void addPrescriptionForm(context) { + final GlobalKey _formKey = GlobalKey(); + final double spaceBetweenTextFileds = 12; + showModalBottomSheet( + isScrollControlled: true, + context: context, + builder: (BuildContext bc) { + return SingleChildScrollView( + child: Container( + height: 700, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 12.0, vertical: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + //mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + AppText( + TranslationBase.of(context).medicines.toUpperCase(), + fontWeight: FontWeight.w900, + ), + SizedBox( + height: spaceBetweenTextFileds, + ), + Container( + child: Form( + key: _formKey, + child: Column( + //mainAxisAlignment: MainAxisAlignment.end, + children: [ + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: + TranslationBase.of(context).searchMedicine, + borderColor: Colors.white, + textInputType: TextInputType.text, + inputFormatter: ONLY_LETTERS, + ), + ), + SizedBox( + height: spaceBetweenTextFileds, + ), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: TranslationBase.of(context).orderType, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: TranslationBase.of(context).strength, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: TranslationBase.of(context).route, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: TranslationBase.of(context).frequency, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: TranslationBase.of(context).doseTime, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: TranslationBase.of(context).indication, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: TranslationBase.of(context).fromDate, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: TranslationBase.of(context).duration, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: + TranslationBase.of(context).instruction, + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox(height: spaceBetweenTextFileds), + Container( + margin: + EdgeInsets.all(SizeConfig.widthMultiplier * 5), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: + TranslationBase.of(context).addMedication, + onPressed: () { + Navigator.pop(context); + prescriptionWarning(context); + }, + ), + ], + ), + ), + ], + ), + ), + ), + ], + ), + ), + ), + ); + }); +} diff --git a/lib/screens/prescription/prescription_authorazation_form.dart b/lib/screens/prescription/prescription_authorazation_form.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/screens/prescription/prescription_screen.dart b/lib/screens/prescription/prescription_screen.dart new file mode 100644 index 00000000..4ccebf39 --- /dev/null +++ b/lib/screens/prescription/prescription_screen.dart @@ -0,0 +1,405 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; +import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; +import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/screens/prescription/add_prescription_form.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/profile_medical_info_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.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_text_form_field.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +class NewPrescriptionScreen extends StatefulWidget { + @override + _NewPrescriptionScreenState createState() => _NewPrescriptionScreenState(); +} + +class _NewPrescriptionScreenState extends State { + int testNum = 0; + PatiantInformtion patient; + + @override + Widget build(BuildContext context) { + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + patient = routeArgs['patient']; + return BaseView( + onModelReady: (model) => model.getPrescription(), + builder: (BuildContext context, PrescriptionViewModel model, + Widget child) => + AppScaffold( + isShowAppBar: true, + appBarTitle: TranslationBase.of(context).prescription, + body: NetworkBaseView( + baseViewModel: model, + child: SingleChildScrollView( + child: Container( + child: Column( + children: [ + Padding( + padding: EdgeInsets.all(8.0), + child: Row( + children: [ + AvatarWidget( + Icon( + patient.genderDescription == "Male" + ? DoctorApp.male + : DoctorApp.female_icon, + size: 70, + color: Colors.white, + ), + ), + SizedBox( + width: 20, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + patient.firstName + ' ' + patient.lastName, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + if (model.prescriptionList.length > 0) + Row( + children: [ + AppText( + TranslationBase.of(context).fileNo, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + SizedBox( + width: 20, + ), + AppText( + patient.patientId.toString(), + color: Colors.black, + fontWeight: FontWeight.normal, + ), + ], + ), + ], + ) + ], + ), + ), + Divider( + height: 1.0, + thickness: 1.0, + color: Colors.grey, + ), + if (model.prescriptionList.length != 0) + SizedBox( + height: model.prescriptionList[0].rowcount == 0 + ? 200.0 + : 10.0), + //model.prescriptionList == null + if (model.prescriptionList.length != 0) + model.prescriptionList[0].rowcount == 0 + ? Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.stretch, + children: [ + InkWell( + onTap: () { + addPrescriptionForm(context); + //model.postPrescription(); + }, + child: CircleAvatar( + radius: 65, + backgroundColor: Color(0XFFB8382C), + child: CircleAvatar( + radius: 60, + backgroundColor: Colors.white, + child: Icon( + Icons.add, + color: Colors.black, + size: 45.0, + ), + ), + ), + ), + SizedBox( + height: 15.0, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + AppText( + TranslationBase.of(context) + .noPrescriptionListed, + color: Colors.black, + fontWeight: FontWeight.w900, + ), + ], + ), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + AppText( + TranslationBase.of(context).addNow, + color: Color(0XFFB8382C), + fontWeight: FontWeight.w900, + ), + ], + ), + ], + ) + : Padding( + padding: EdgeInsets.all(12.0), + child: NetworkBaseView( + baseViewModel: model, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + InkWell( + child: Container( + height: 50.0, + width: 450.0, + decoration: BoxDecoration( + border: Border.all( + color: Colors.grey), + borderRadius: + BorderRadius.circular(10.0), + ), + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + AppText( + ' Add more medication', + fontWeight: FontWeight.w100, + fontSize: 12.5, + ), + Icon( + Icons.add, + color: Color(0XFFB8382C), + ) + ], + ), + ), + ), + onTap: () { + addPrescriptionForm(context); + }, + ), + SizedBox( + height: 15.0, + ), + ...List.generate( + model.prescriptionList[0].rowcount, + (index) => Container( + child: Column( + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Container( + height: + MediaQuery.of(context) + .size + .height * + 0.2, + width: + MediaQuery.of(context) + .size + .width * + 0.09, + child: Column( + children: [ + AppText( + '8\nDEC', + color: Colors.green, + ) + ], + ), + ), + Container( + height: + MediaQuery.of(context) + .size + .height * + 0.24, + width: + MediaQuery.of(context) + .size + .width * + 0.81, + child: Column( + children: [ + Row( + children: [ + AppText( + 'Start Date:', + fontWeight: + FontWeight + .w900, + fontSize: 15.0, + ), + AppText( + model + .prescriptionList[ + 0] + .entityList[ + index] + .startDate, + fontSize: 11.0, + ), + SizedBox( + width: 6.0, + ), + AppText( + 'Order Type:', + fontWeight: + FontWeight + .w900, + fontSize: 15.0, + ), + AppText( + model + .prescriptionList[ + 0] + .entityList[ + index] + .orderTypeDescription, + fontSize: 13.0, + ), + ], + ), + SizedBox( + height: 2.5, + ), + Row( + children: [ + Container( + child: Expanded( + child: + AppText( + model + .prescriptionList[ + 0] + .entityList[ + index] + .medicationName, + ), + ), + ) + ], + ), + Row( + children: [ + Expanded( + child: AppText( + model + .prescriptionList[ + 0] + .entityList[ + index] + .doseDetail, + fontSize: + 13.0, + ), + ) + ], + ), + SizedBox( + height: 3.0, + ), + Row( + children: [ + AppText( + 'Indication: ', + fontWeight: + FontWeight + .w900, + ), + Expanded( + child: AppText( + model + .prescriptionList[ + 0] + .entityList[ + index] + .indication, + fontSize: + 12.9), + ) + ], + ), + SizedBox( + height: 15.0, + ), + Row( + children: [ + AppText( + model + .prescriptionList[ + 0] + .entityList[ + index] + .doctorName, + fontWeight: + FontWeight + .w900, + ) + ], + ), + Row( + children: [ + AppText(model + .prescriptionList[ + 0] + .entityList[ + index] + .remarks), + ], + ), + SizedBox( + height: 15.0, + ), + + Divider( + height: 0, + thickness: 1.0, + color: Colors.grey, + ), + // SizedBox( + // height: 40, + // ), + ], + ), + ), + ], + ), + ], + ), + ), + ), + ], + ), + ), + ) + ], + ), + ), + ), + )), + ); + } +} diff --git a/lib/screens/prescription/prescription_warnings.dart b/lib/screens/prescription/prescription_warnings.dart new file mode 100644 index 00000000..44bcab0c --- /dev/null +++ b/lib/screens/prescription/prescription_warnings.dart @@ -0,0 +1,168 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +void prescriptionWarning(context) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (BuildContext bc) { + return SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Container( + height: 600, + child: Column( + children: [ + ...List.generate( + 5, + (index) => Container( + child: ExpansionTile( + title: AppText('Prescription warning and alerts(0)'), + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + AppText( + 'DOSESCREENINGRESULTFORETCETC', + color: Color(0XFFB8382C), + ) + ], + ) + ], + ), + ), + ), + SizedBox( + height: 10.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(6.0)), + border: + Border.all(width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: 'Remarks', + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox( + height: 95.0, + ), + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 2), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: 'CONTINUE', + onPressed: () { + Navigator.pop(context); + authorizationForm(context); + }, + ), + ], + ), + ), + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 2), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + color: Colors.white, + title: 'remove', + fontColor: Colors.red, + onPressed: () { + Navigator.pop(context); + prescriptionWarning(context); + }, + ), + ], + ), + ), + ], + ), + ), + )); + }); +} + +void authorizationForm(context) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (BuildContext bc) { + return Container( + height: 500, + child: Form( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + 'Prescription authorization'.toUpperCase(), + fontWeight: FontWeight.w900, + ), + SizedBox( + height: 30.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: 'Auth ID', + borderColor: Colors.white, + textInputType: TextInputType.number, + inputFormatter: ONLY_NUMBERS, + ), + ), + SizedBox( + height: 12.0, + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: 'Password', + borderColor: Colors.white, + textInputType: TextInputType.text, + inputFormatter: ONLY_LETTERS, + obscureText: true, + ), + ), + SizedBox( + height: 190.0, + ), + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 2), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: 'CONTINUE', + onPressed: () { + Navigator.pop(context); + authorizationForm(context); + }, + ), + ], + ), + ), + ], + ), + ), + )); + }); +} diff --git a/lib/screens/procedures/procedure_screen.dart b/lib/screens/procedures/procedure_screen.dart new file mode 100644 index 00000000..3af63004 --- /dev/null +++ b/lib/screens/procedures/procedure_screen.dart @@ -0,0 +1,440 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; +import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart'; +import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; +import 'package:doctor_app_flutter/screens/base/base_view.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.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_text_form_field.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +class ProcedureScreen extends StatefulWidget { + @override + _ProcedureScreenState createState() => _ProcedureScreenState(); +} + +class _ProcedureScreenState extends State { + int testNum = 1; + PatiantInformtion patient; + @override + Widget build(BuildContext context) { + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + patient = routeArgs['patient']; + return BaseView( + onModelReady: (model) => model.getProcedure(), + builder: (BuildContext context, ProcedureViewModel model, Widget child) => + AppScaffold( + isShowAppBar: true, + appBarTitle: 'ORDER PROCEDURE', + body: NetworkBaseView( + baseViewModel: model, + child: SingleChildScrollView( + child: Container( + child: Column( + children: [ + Padding( + padding: EdgeInsets.all(12.0), + child: Row( + children: [ + AvatarWidget( + Icon( + patient.genderDescription == "Male" + ? DoctorApp.male + : DoctorApp.female_icon, + size: 70, + color: Colors.white, + ), + ), + SizedBox( + width: 20, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + patient.firstName + ' ' + patient.lastName, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + Row( + children: [ + AppText( + TranslationBase.of(context).fileNo, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + SizedBox( + width: 20, + ), + AppText( + patient.patientId.toString(), + color: Colors.black, + fontWeight: FontWeight.normal, + ), + ], + ), + ], + ) + ], + ), + ), + Divider( + height: 1.0, + thickness: 1.0, + color: Colors.grey, + ), + if (model.procedureList.length != 0) + SizedBox( + height: model.procedureList[0].rowcount == 0 + ? 200.0 + : 10.0), + //model.prescriptionList == null + if (model.procedureList.length != 0) + model.procedureList[0].rowcount == 0 + ? Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.stretch, + children: [ + InkWell( + onTap: () { + addSelectedProcedure(context); + //model.postPrescription(); + }, + child: CircleAvatar( + radius: 65, + backgroundColor: Color(0XFFB8382C), + child: CircleAvatar( + radius: 60, + backgroundColor: Colors.white, + child: Icon( + Icons.add, + color: Colors.black, + size: 45.0, + ), + ), + ), + ), + SizedBox( + height: 15.0, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + AppText( + 'NO ORDER FOR PROCEDURE LISTED', + color: Colors.black, + fontWeight: FontWeight.w900, + ), + ], + ), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + AppText( + TranslationBase.of(context).addNow, + color: Color(0XFFB8382C), + fontWeight: FontWeight.w900, + ), + ], + ), + ], + ) + : Padding( + padding: EdgeInsets.all(16.0), + child: NetworkBaseView( + baseViewModel: model, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + InkWell( + child: Container( + height: 50.0, + width: 450.0, + decoration: BoxDecoration( + border: Border.all( + color: Colors.grey), + borderRadius: + BorderRadius.circular(10.0), + ), + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + AppText( + ' Add more procedure', + fontWeight: FontWeight.w100, + fontSize: 12.5, + ), + Icon( + Icons.add, + color: Color(0XFFB8382C), + ) + ], + ), + ), + ), + onTap: () { + addSelectedProcedure(context); + }, + ), + // Container( + // decoration: BoxDecoration( + // borderRadius: BorderRadius.all( + // Radius.circular(6.0)), + // border: Border.all( + // width: 1.0, + // color: HexColor("#CCCCCC"))), + // child: AppTextFormField( + // labelText: 'Add more procedure', + // borderColor: Colors.white, + // //suffixIcon: Icons.search, + // + // //textInputType: TextInputType.number, + // inputFormatter: ONLY_NUMBERS, + // onTap: () { + // addSelectedProcedure(context); + // }, + // ), + // ), + SizedBox( + height: 35.0, + ), + ...List.generate( + model.procedureList[0].rowcount, + (index) => Container( + child: Column( + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Container( + height: 120.0, + width: 45.0, + child: Column( + children: [ + AppText( + '8\nDEC', + color: Colors.green, + ) + ], + ), + ), + Container( + height: 120, + width: 325.0, + child: Column( + children: [ + Row( + children: [ + AppText( + 'Code #: ', + fontWeight: + FontWeight + .w900, + fontSize: 15.0, + ), + AppText( + model + .procedureList[ + 0] + .entityList[ + index] + .procedureId + .toString(), + fontSize: 13.0, + ), + SizedBox( + width: 12.0, + ), + AppText( + 'Order Type: ', + fontWeight: + FontWeight + .w900, + fontSize: 15.0, + ), + AppText( + 'Urgent', + fontSize: 13.0, + color: + Colors.red, + ), + ], + ), + Row( + children: [ + Container( + child: Expanded( + child: + AppText( + model + .procedureList[ + 0] + .entityList[ + index] + .procedureName, + fontWeight: + FontWeight + .w800, + ), + ), + ) + ], + ), + + Row( + children: [ + AppText( + 'Price: ', + fontWeight: + FontWeight + .w900, + ), + Expanded( + child: AppText( + model + .procedureList[ + 0] + .entityList[ + index] + .price + .toString(), + fontSize: + 13.0), + ) + ], + ), + SizedBox( + height: 10.0, + ), + + Row( + children: [ + AppText( + 'Some short remark about the procedure', + fontSize: 13.5, + ), + ], + ), + SizedBox( + height: 10.0, + ), + + Divider( + height: 5.0, + thickness: 1.0, + color: Colors.grey, + ) + // SizedBox( + // height: 40, + // ), + ], + ), + ), + Container( + width: 30, + height: 120, + child: Column( + children: [ + Icon(Icons.edit) + ], + ), + ) + ], + ), + ], + ), + ), + ), + ], + ), + ), + ) + ], + ), + ), + ), + )), + ); + } +} + +void addSelectedProcedure(context) { + showModalBottomSheet( + context: context, + builder: (BuildContext bc) { + return SingleChildScrollView( + child: Container( + height: 490, + child: Padding( + padding: EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + 'Select Procedure'.toUpperCase(), + fontWeight: FontWeight.w900, + ), + SizedBox( + height: 9.0, + ), + Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(6.0)), + border: Border.all( + width: 1.0, color: HexColor("#CCCCCC"))), + child: AppTextFormField( + labelText: 'Add Delected Procedures'.toUpperCase(), + borderColor: Colors.white, + textInputType: TextInputType.text, + inputFormatter: ONLY_LETTERS, + ), + ), + SizedBox( + height: 280.0, + ), + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: TranslationBase.of(context).addMedication, + // onPressed: () { + // Navigator.pop(context); + // prescriptionWarning(context); + // }, + ), + ], + ), + ), + ], + ) + ], + ), + ), + ), + ); + }); +} diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index c977eb8e..59eda9e0 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -344,10 +344,11 @@ class TranslationBase { String get noPrescription => localizedValues['no-priscription-listed'][locale.languageCode]; String get next => localizedValues['next'][locale.languageCode]; - String get healthRecordInformation => - localizedValues['healthRecordInformation'][locale.languageCode]; + String get emptyMessage => localizedValues['empty-message'][locale.languageCode]; + String get healthRecordInformation => + localizedValues['healthRecordInformation'][locale.languageCode]; String get chiefComplaintLength => localizedValues['chiefComplaintLength'][locale.languageCode]; @@ -374,6 +375,21 @@ class TranslationBase { String get reject => localizedValues['reject'][locale.languageCode]; String get noAppointmentsErrorMsg => localizedValues['noAppointmentsErrorMsg'][locale.languageCode]; + + String get referralPatient => + localizedValues['referralPatient'][locale.languageCode]; + String get noPrescriptionListed => + localizedValues['noPrescriptionListed'][locale.languageCode]; + String get addNow => localizedValues['addNow'][locale.languageCode]; + String get orderType => localizedValues['orderType'][locale.languageCode]; + String get strength => localizedValues['strength'][locale.languageCode]; + String get doseTime => localizedValues['doseTime'][locale.languageCode]; + String get indication => localizedValues['indication'][locale.languageCode]; + String get duration => localizedValues['duration'][locale.languageCode]; + String get instruction => localizedValues['instruction'][locale.languageCode]; + String get addMedication => + localizedValues['addMedication'][locale.languageCode]; + String get route => localizedValues['route'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/doctor/my_schedule_widget.dart b/lib/widgets/doctor/my_schedule_widget.dart index 68194a31..4e4c6b8c 100644 --- a/lib/widgets/doctor/my_schedule_widget.dart +++ b/lib/widgets/doctor/my_schedule_widget.dart @@ -13,58 +13,73 @@ class MyScheduleWidget extends StatelessWidget { @override Widget build(BuildContext context) { - List workingHours = Helpers.getWorkingHours(workingHoursTable.workingHours); + List workingHours = Helpers.getWorkingHours( + workingHoursTable.workingHours, + ); return CardWithBgWidgetNew( widget: Container( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + Column( + children: [ + Divider( + height: 10, + color: Colors.grey, + thickness: 1.0, + ), + Text('${workingHoursTable.date.day}') + ], + ), Row( children: [ - AppText(workingHoursTable.dayName, - fontSize: 2.5 * SizeConfig.textMultiplier), AppText( - ' ${workingHoursTable.date.day}/${workingHoursTable.date.month}/${workingHoursTable.date.year}', - fontSize: 2.2 * SizeConfig.textMultiplier,fontWeight: FontWeight.w300,), + workingHoursTable.dayName, + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + AppText( + ' ${workingHoursTable.date.day}/${workingHoursTable.date.month}/${workingHoursTable.date.year}', + fontSize: 2.2 * SizeConfig.textMultiplier, + fontWeight: FontWeight.w300, + ), ], ), - SizedBox( - height: 8, - ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: workingHours.map((work) { return Container( child: Column( children: [ - Divider(color: Colors.grey), Row( children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText('From',fontSize: 2.2 * SizeConfig.textMultiplier,fontWeight: FontWeight.bold,), - SizedBox(height: 5,), - AppText(work.from,fontSize: 2.2 * SizeConfig.textMultiplier,fontWeight: FontWeight.w300,) - ], - ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 5, + ), + AppText( + work.from + ' - ', + fontSize: 2.0 * SizeConfig.textMultiplier, + fontWeight: FontWeight.w300, + ) + ], ), - Container(height: SizeConfig.realScreenWidth * 0.1 ,width: 0.8,color: Colors.grey, - margin: EdgeInsets.only(left: 15,right: 15),), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - AppText('To',fontSize: 2.2 * SizeConfig.textMultiplier,fontWeight: FontWeight.bold,), - SizedBox(height: 5,), - AppText(work.to,fontSize: 2.2 * SizeConfig.textMultiplier,fontWeight: FontWeight.w300,) - ], - ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 5, + ), + AppText( + work.to, + fontSize: 2.0 * SizeConfig.textMultiplier, + fontWeight: FontWeight.w300, + ), + ], ), ], ) - ], ), ); diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index 366d4fdf..9b70ae3a 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -10,10 +10,10 @@ import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'PatientProfileButton.dart'; -/* - *@author: Elham Rababah - *@Date:22/4/2020 - *@param: +/* + *@author: Elham Rababah + *@Date:22/4/2020 + *@param: *@return:ProfileMedicalInfoWidget *@desc: Profile Medical Info Widget */ @@ -79,6 +79,20 @@ class ProfileMedicalInfoWidget extends StatelessWidget { nameLine1: TranslationBase.of(context).insurance, nameLine2: TranslationBase.of(context).approvals, icon: 'lab.png'), + PatientProfileButton( + key: key, + patient: patient, + route: ORDER_PRESCRIPTION, + nameLine1: 'Order', + nameLine2: 'Prescription', + icon: 'lab.png'), + PatientProfileButton( + key: key, + patient: patient, + route: ORDER_PROCEDURE, + nameLine1: 'Order Test', + nameLine2: 'Or Procedures', + icon: 'lab.png'), Visibility( visible: selectedPatientType != 0 && selectedPatientType != 5 && diff --git a/lib/widgets/shared/TextFields.dart b/lib/widgets/shared/TextFields.dart index fec58e89..20885eb3 100644 --- a/lib/widgets/shared/TextFields.dart +++ b/lib/widgets/shared/TextFields.dart @@ -2,13 +2,80 @@ import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +class NumberTextInputFormatter extends TextInputFormatter { + @override + TextEditingValue formatEditUpdate( + TextEditingValue oldValue, TextEditingValue newValue) { + final int newTextLength = newValue.text.length; + int selectionIndex = newValue.selection.end; + int usedSubstringIndex = 0; + final StringBuffer newText = StringBuffer(); + if (newTextLength >= 1) { + newText.write('('); + if (newValue.selection.end >= 1) selectionIndex++; + } + if (newTextLength >= 4) { + newText.write(newValue.text.substring(0, usedSubstringIndex = 3) + ') '); + if (newValue.selection.end >= 3) selectionIndex += 2; + } + if (newTextLength >= 7) { + newText.write(newValue.text.substring(3, usedSubstringIndex = 6) + '-'); + if (newValue.selection.end >= 6) selectionIndex++; + } + if (newTextLength >= 11) { + newText.write(newValue.text.substring(6, usedSubstringIndex = 10) + ' '); + if (newValue.selection.end >= 10) selectionIndex++; + } + // Dump the rest. + if (newTextLength >= usedSubstringIndex) + newText.write(newValue.text.substring(usedSubstringIndex)); + return TextEditingValue( + text: newText.toString(), + selection: TextSelection.collapsed(offset: selectionIndex), + ); + } +} +final _mobileFormatter = NumberTextInputFormatter(); class TextFields extends StatefulWidget { - - TextFields({Key key, this.type, this.hintText, this.suffixIcon, this.autoFocus, this.onChanged, this.initialValue, this.minLines, this.maxLines, this.inputFormatters, this.padding, this.focus=false, this.maxLengthEnforced=true, - this.suffixIconColor, this.inputAction, this.onSubmit, this.keepPadding=true, this.textCapitalization = TextCapitalization.none, this.onTap, this.controller, this.keyboardType, this.validator, this.borderOnlyError=false, - this.onSaved, this.onSuffixTap, this.readOnly: false, this.maxLength, this.prefixIcon, this.bare=false, this.fontSize=16.0, this.fontWeight=FontWeight.w700, this.autoValidate=false, this.onTapTextFields}) : super(key: key); + TextFields( + {Key key, + this.type, + this.hintText, + this.suffixIcon, + this.autoFocus, + this.onChanged, + this.initialValue, + this.minLines, + this.maxLines, + this.inputFormatters, + this.padding, + this.focus = false, + this.maxLengthEnforced = true, + this.suffixIconColor, + this.inputAction, + this.onSubmit, + this.keepPadding = true, + this.textCapitalization = TextCapitalization.none, + this.controller, + this.keyboardType, + this.validator, + this.borderOnlyError = false, + this.onSaved, + this.onSuffixTap, + this.readOnly: false, + this.maxLength, + this.prefixIcon, + this.bare = false, + this.onTap, + this.fontSize = 16.0, + this.fontWeight = FontWeight.w700, + this.autoValidate = false, + this.fillColor, + this.hintColor, + this.onTapTextFields}) + : super(key: key); final String hintText; final String initialValue; @@ -16,7 +83,7 @@ class TextFields extends StatefulWidget { final bool autoFocus; final IconData suffixIcon; final Color suffixIconColor; - final IconData prefixIcon; + final Icon prefixIcon; final VoidCallback onTap; final Function onTapTextFields; final TextEditingController controller; @@ -42,6 +109,8 @@ class TextFields extends StatefulWidget { final EdgeInsets padding; final bool focus; final bool borderOnlyError; + final Color hintColor; + final Color fillColor; @override _TextFieldsState createState() => _TextFieldsState(); @@ -64,8 +133,7 @@ class _TextFieldsState extends State { @override void didUpdateWidget(TextFields oldWidget) { - if (widget.focus) - _focusNode.requestFocus(); + if (widget.focus) _focusNode.requestFocus(); super.didUpdateWidget(oldWidget); } @@ -78,25 +146,45 @@ class _TextFieldsState extends State { Widget _buildSuffixIcon() { switch (widget.type) { case "password": - { return Padding( - padding: const EdgeInsets.only(right: 8.0), - child: view ? - InkWell(onTap: () {this.setState(() { view= false; });}, child: Icon(EvaIcons.eye, size: 24.0, color: Color.fromRGBO(78, 62, 253, 1.0))) - : - InkWell(onTap: () {this.setState(() { view= true; });}, child: Icon(EvaIcons.eyeOff, size: 24.0, color: Colors.grey[500])) - );} + { + return Padding( + padding: const EdgeInsets.only(right: 8.0), + child: view + ? InkWell( + onTap: () { + this.setState(() { + view = false; + }); + }, + child: Icon(EvaIcons.eye, + size: 24.0, color: Color.fromRGBO(78, 62, 253, 1.0))) + : InkWell( + onTap: () { + this.setState(() { + view = true; + }); + }, + child: Icon(EvaIcons.eyeOff, + size: 24.0, color: Colors.grey[500]))); + } - break; + break; default: - if (widget.suffixIcon!=null) - return InkWell(onTap: widget.onSuffixTap, child: Icon(widget.suffixIcon, size: 22.0, color: widget.suffixIconColor!=null ? widget.suffixIconColor : Colors.grey[500])); + if (widget.suffixIcon != null) + return InkWell( + onTap: widget.onSuffixTap, + child: Icon(widget.suffixIcon, + size: 22.0, + color: widget.suffixIconColor != null + ? widget.suffixIconColor + : Colors.grey[500])); else return null; } } bool _determineReadOnly() { - if (widget.readOnly!=null && widget.readOnly) { + if (widget.readOnly != null && widget.readOnly) { _focusNode.unfocus(); return true; } else { @@ -106,82 +194,107 @@ class _TextFieldsState extends State { @override Widget build(BuildContext context) { - return ( - AnimatedContainer( - duration: Duration(milliseconds: 300), - decoration: widget.bare ? null :BoxDecoration( - boxShadow: [BoxShadow(color: Color.fromRGBO(70, 68, 167, focus ? 0.20 : 0), offset: Offset(0.0, 13.0), blurRadius: focus ? 34.0 : 12.0)] - ), - child: TextFormField( - onTap: widget.onTapTextFields, - keyboardAppearance: Theme.of(context).brightness, - scrollPhysics: BouncingScrollPhysics(), - autovalidate: widget.autoValidate, - textCapitalization: widget.textCapitalization, - onFieldSubmitted: widget.inputAction==TextInputAction.next ? (widget.onSubmit!=null ? widget.onSubmit : (val) { _focusNode.nextFocus(); }) : widget.onSubmit, - textInputAction: widget.inputAction, - minLines: widget.minLines ?? 1, - maxLines: widget.maxLines ?? 1, - maxLengthEnforced: widget.maxLengthEnforced, - initialValue: widget.initialValue, - onChanged: widget.onChanged, - focusNode: _focusNode, - maxLength: widget.maxLength ?? null, - controller: widget.controller, - keyboardType: widget.keyboardType, - readOnly: _determineReadOnly(), - obscureText: widget.type=="password" && !view ? true : false, - autofocus: widget.autoFocus ?? false, - validator: widget.validator, - onSaved: widget.onSaved, - style: Theme.of(context).textTheme.body2.copyWith( fontSize: widget.fontSize, fontWeight: widget.fontWeight ), - inputFormatters: widget.inputFormatters, - decoration: InputDecoration( - counterText: "", - hintText: widget.hintText, - hintStyle: TextStyle(fontSize: widget.fontSize, fontWeight: widget.fontWeight, color: Theme.of(context).hintColor), - - contentPadding: widget.padding!=null ? widget.padding : EdgeInsets.symmetric(vertical: (widget.bare && !widget.keepPadding) ? 0.0 : 10.0, horizontal: 16.0), - filled: true, - fillColor: widget.bare ? Colors.transparent : Theme.of(context).backgroundColor, - - suffixIcon: _buildSuffixIcon(), - prefixIcon: widget.type!="search" ? - widget.prefixIcon!=null ? - Padding( - padding: EdgeInsets.only(left: 28.0, top: 14.0, bottom: 14.0, right: 0), - child: Text("\$", style: TextStyle( fontSize: 14, fontWeight: FontWeight.w800),), - ) - : - null - : - Icon(EvaIcons.search, size: 20.0, color: Colors.grey[500]), - - errorStyle: TextStyle(fontSize: 12.0, fontWeight: widget.fontWeight, height: widget.borderOnlyError ? 0.0 : null), - errorBorder: OutlineInputBorder( - borderSide: BorderSide(color: Theme.of(context).errorColor.withOpacity(widget.bare ? 0.0 : 0.5 ), width: 2.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0) - ), - focusedErrorBorder: OutlineInputBorder( - borderSide: BorderSide(color: Theme.of(context).errorColor.withOpacity(widget.bare ? 0.0 : 0.5 ), width: 2.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0) - ), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: Theme.of(context).dividerColor.withOpacity(widget.bare ? 0.0 : 1.0 ), width: 2.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0) - ), - disabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Theme.of(context).dividerColor.withOpacity(widget.bare ? 0.0 : 1.0 ), width: 2.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0) - ), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Theme.of(context).dividerColor.withOpacity(widget.bare ? 0.0 : 1.0 ), width: 2.0), - borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0) - ) - + return (AnimatedContainer( + duration: Duration(milliseconds: 300), + decoration: widget.bare + ? null + : BoxDecoration(boxShadow: [ + // BoxShadow( + // color: Color.fromRGBO(70, 68, 167, focus ? 0.20 : 0), + // offset: Offset(0.0, 13.0), + // blurRadius: focus ? 34.0 : 12.0) + BoxShadow( + color: Color.fromRGBO(110, 68, 80, focus ? 0.20 : 0), + offset: Offset(0.0, 13.0), + blurRadius: focus ? 34.0 : 12.0) + ]), + child: TextFormField( + onTap: widget.onTapTextFields, + keyboardAppearance: Theme.of(context).brightness, + scrollPhysics: BouncingScrollPhysics(), + autovalidate: widget.autoValidate, + textCapitalization: widget.textCapitalization, + onFieldSubmitted: widget.inputAction == TextInputAction.next + ? (widget.onSubmit != null + ? widget.onSubmit + : (val) { + _focusNode.nextFocus(); + }) + : widget.onSubmit, + textInputAction: widget.inputAction, + minLines: widget.minLines ?? 1, + maxLines: widget.maxLines ?? 1, + maxLengthEnforced: widget.maxLengthEnforced, + initialValue: widget.initialValue, + onChanged: widget.onChanged, + focusNode: _focusNode, + maxLength: widget.maxLength ?? null, + controller: widget.controller, + keyboardType: widget.keyboardType, + readOnly: _determineReadOnly(), + obscureText: widget.type == "password" && !view ? true : false, + autofocus: widget.autoFocus ?? false, + validator: widget.validator, + onSaved: widget.onSaved, + style: Theme.of(context) + .textTheme + .bodyText1 + .copyWith(fontSize: widget.fontSize, fontWeight: widget.fontWeight), + inputFormatters: widget.keyboardType == TextInputType.phone + ? [ + WhitelistingTextInputFormatter.digitsOnly, + _mobileFormatter, + ] + : widget.inputFormatters, + decoration: InputDecoration( + counterText: "", + hintText: widget.hintText, + hintStyle: TextStyle( + fontSize: widget.fontSize, + fontWeight: widget.fontWeight, + color: widget.hintColor ?? Theme.of(context).hintColor, + ), + contentPadding: widget.padding != null + ? widget.padding + : EdgeInsets.symmetric( + vertical: (widget.bare && !widget.keepPadding) ? 0.0 : 10.0, + horizontal: 16.0), + filled: true, + fillColor: widget.bare + ? Colors.transparent + : Theme.of(context).backgroundColor, + suffixIcon: _buildSuffixIcon(), + prefixIcon: widget.prefixIcon, + errorStyle: TextStyle( + fontSize: 12.0, + fontWeight: widget.fontWeight, + height: widget.borderOnlyError ? 0.0 : null), + errorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Theme.of(context) + .errorColor + .withOpacity(widget.bare ? 0.0 : 0.5), + width: 1.0), + borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), + focusedErrorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Theme.of(context) + .errorColor + .withOpacity(widget.bare ? 0.0 : 0.5), + width: 1.0), + borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 1.0), + borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), + disabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 1.0), + borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.grey, width: 1.0), + borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0), ), ), - ) - ); + ), + )); } } diff --git a/lib/widgets/shared/app_buttons_widget.dart b/lib/widgets/shared/app_buttons_widget.dart index 85b0483d..38a66595 100644 --- a/lib/widgets/shared/app_buttons_widget.dart +++ b/lib/widgets/shared/app_buttons_widget.dart @@ -4,16 +4,15 @@ import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'app_texts_widget.dart'; - -class AppButton extends StatefulWidget { - +class AppButton extends StatefulWidget { final GestureTapCallback onPressed; final String title; final IconData icon; final Color color; final double fontSize; final double padding; + final Color fontColor; final bool loading; final bool disabled; @@ -25,67 +24,66 @@ class AppButton extends StatefulWidget { this.fontSize = 2, this.padding = 13, this.loading = false, - this.disabled = false}); + this.disabled = false, + this.fontColor = Colors.white}); _AppButtonState createState() => _AppButtonState(); } - class _AppButtonState extends State{ +class _AppButtonState extends State { @override Widget build(BuildContext context) { - return - IgnorePointer( - ignoring: widget.loading, - child: RawMaterialButton( - fillColor: widget.color != null ? widget.color : HexColor("#B8382C"), - splashColor: widget.color, - child: Padding( - padding: EdgeInsets.only( - top: widget.padding, - bottom: widget.padding, - //right: SizeConfig.widthMultiplier * widget.padding, - //left: SizeConfig.widthMultiplier * widget.padding - ), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - if (widget.icon != null) - Icon( - widget.icon, - color: Colors.white, - ), - if (widget.icon != null) - SizedBox( - width: 5.0, - ), - widget.loading - ? Padding( - padding: EdgeInsets.all(2.6), - child: SizedBox( - height: 19.0, - width: 19.0, - child: CircularProgressIndicator( - backgroundColor: Colors.white, - valueColor: - AlwaysStoppedAnimation( - Colors.grey[300], - ), - ), - ), - ) - : AppText( - widget.title.toUpperCase(), + return IgnorePointer( + ignoring: widget.loading, + child: RawMaterialButton( + fillColor: widget.color != null ? widget.color : HexColor("#B8382C"), + splashColor: widget.color, + child: Padding( + padding: EdgeInsets.only( + top: widget.padding, + bottom: widget.padding, + //right: SizeConfig.widthMultiplier * widget.padding, + //left: SizeConfig.widthMultiplier * widget.padding + ), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (widget.icon != null) + Icon( + widget.icon, color: Colors.white, - fontSize: SizeConfig.textMultiplier * widget.fontSize, ), - ], - ), + if (widget.icon != null) + SizedBox( + width: 5.0, + ), + widget.loading + ? Padding( + padding: EdgeInsets.all(2.6), + child: SizedBox( + height: 19.0, + width: 19.0, + child: CircularProgressIndicator( + backgroundColor: Colors.white, + valueColor: AlwaysStoppedAnimation( + Colors.grey[300], + ), + ), + ), + ) + : AppText( + widget.title.toUpperCase(), + color: widget.fontColor, + fontSize: SizeConfig.textMultiplier * widget.fontSize, + ), + ], ), - onPressed: widget.onPressed, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(6))), ), - ); + onPressed: widget.onPressed, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(6))), + ), + ); } -} \ No newline at end of file +} diff --git a/lib/widgets/shared/app_text_form_field.dart b/lib/widgets/shared/app_text_form_field.dart index 5819e805..4c2573cd 100644 --- a/lib/widgets/shared/app_text_form_field.dart +++ b/lib/widgets/shared/app_text_form_field.dart @@ -15,6 +15,7 @@ class AppTextFormField extends FormField { FormFieldValidator validator, ValueChanged onChanged, GestureTapCallback onTap, + bool obscureText = false, TextEditingController controller, bool autovalidate = true, TextInputType textInputType, @@ -24,6 +25,7 @@ class AppTextFormField extends FormField { ValueChanged onFieldSubmitted, IconButton prefix, String labelText, + IconData suffixIcon, bool readOnly = false, borderColor}) : super( @@ -36,6 +38,7 @@ class AppTextFormField extends FormField { SizedBox( height: 40.0, child: TextFormField( + obscureText: obscureText, focusNode: focusNode, keyboardType: textInputType, inputFormatters: [ diff --git a/lib/widgets/shared/app_texts_widget.dart b/lib/widgets/shared/app_texts_widget.dart index d5320bb9..6194a4c9 100644 --- a/lib/widgets/shared/app_texts_widget.dart +++ b/lib/widgets/shared/app_texts_widget.dart @@ -43,28 +43,25 @@ class AppText extends StatefulWidget { class _AppTextState extends State { @override Widget build(BuildContext context) { - return Visibility( - visible: widget.visibility, - child: Container( - margin: widget.margin != null - ? EdgeInsets.all(widget.margin) - : EdgeInsets.only( - top: widget.marginTop, - right: widget.marginRight, - bottom: widget.marginBottom, - left: widget.marginLeft), - child: Text( - widget.data, - textAlign: widget.textAlign, - overflow: widget.textOverflow ?? TextOverflow.clip, - style: TextStyle( - color: widget.color, - fontWeight: widget.fontWeight, - fontSize: widget.fontSize ?? (SizeConfig.textMultiplier * 2), - fontFamily: widget.fontFamily, + return Container( + margin: widget.margin != null + ? EdgeInsets.all(widget.margin) + : EdgeInsets.only( + top: widget.marginTop, + right: widget.marginRight, + bottom: widget.marginBottom, + left: widget.marginLeft), + child: Text( + widget.data, + textAlign: widget.textAlign, + overflow: widget.textOverflow ?? TextOverflow.clip, + style: TextStyle( + color: widget.color, + fontWeight: widget.fontWeight, + fontSize: widget.fontSize ?? (SizeConfig.textMultiplier * 2), + fontFamily: widget.fontFamily, - // backgroundColor:widget.backGroundcolor - ), + // backgroundColor:widget.backGroundcolor ), ), ); diff --git a/pubspec.lock b/pubspec.lock index 5c109b95..0135ce10 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,14 +7,14 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "12.0.0" + version: "14.0.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "0.40.6" + version: "0.41.1" archive: dependency: transitive description: @@ -70,7 +70,7 @@ packages: name: build_config url: "https://pub.dartlang.org" source: hosted - version: "0.4.4" + version: "0.4.5" build_daemon: dependency: transitive description: @@ -84,7 +84,7 @@ packages: name: build_modules url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" build_resolvers: dependency: transitive description: @@ -98,21 +98,21 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "1.10.7" + version: "1.10.9" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "6.1.2" + version: "6.1.4" build_web_compilers: dependency: "direct dev" description: name: build_web_compilers url: "https://pub.dartlang.org" source: hosted - version: "2.12.2" + version: "2.15.3" built_collection: dependency: transitive description: @@ -161,7 +161,7 @@ packages: name: checked_yaml url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.0.4" cli_util: dependency: transitive description: @@ -433,7 +433,7 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.2" + version: "0.6.3-nullsafety.1" json_annotation: dependency: transitive description: @@ -475,7 +475,7 @@ packages: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0-nullsafety.4" mime: dependency: transitive description: @@ -629,7 +629,7 @@ packages: name: pubspec_parse url: "https://pub.dartlang.org" source: hosted - version: "0.1.5" + version: "0.1.7" quiver: dependency: transitive description: @@ -732,7 +732,7 @@ packages: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.1" + version: "1.10.0-nullsafety.2" stream_channel: dependency: transitive description: @@ -774,7 +774,7 @@ packages: name: timing url: "https://pub.dartlang.org" source: hosted - version: "0.1.1+2" + version: "0.1.1+3" typed_data: dependency: transitive description: @@ -867,5 +867,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=2.10.0 <2.11.0" + dart: ">=2.11.0-162.0 <=2.11.0-213.1.beta" flutter: ">=1.22.0 <2.0.0"