diff --git a/lib/models/RequestDoctorReply.dart b/lib/models/RequestDoctorReply.dart new file mode 100644 index 00000000..17e1e225 --- /dev/null +++ b/lib/models/RequestDoctorReply.dart @@ -0,0 +1,60 @@ +class RequestDoctorReply { + int projectID; + int doctorID; + int transactionNo; + int languageID; + String stamp; + String iPAdress; + double versionID; + int channel; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + + RequestDoctorReply( + {this.projectID = 15, + this.doctorID = 70907, + this.transactionNo = 0, + this.languageID = 2, + this.stamp = '2020-04-27T12:17:17.721Z', + this.iPAdress = '11.11.11.11', + this.versionID = 1.2, + this.channel = 9, + this.tokenID = '@dm!n', + this.sessionID = '2Z7FX4Lokp', + this.isLoginForDoctorApp = true, + this.patientOutSA = false}); + + RequestDoctorReply.fromJson(Map json) { + projectID = json['ProjectID']; + doctorID = json['DoctorID']; + transactionNo = json['TransactionNo']; + languageID = json['LanguageID']; + stamp = json['stamp']; + iPAdress = json['IPAdress']; + versionID = json['VersionID']; + channel = json['Channel']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + } + + Map toJson() { + final Map data = new Map(); + data['ProjectID'] = this.projectID; + data['DoctorID'] = this.doctorID; + data['TransactionNo'] = this.transactionNo; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.iPAdress; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + return data; + } +} diff --git a/lib/models/RequestSchedule.dart b/lib/models/RequestSchedule.dart new file mode 100644 index 00000000..cddfe0f8 --- /dev/null +++ b/lib/models/RequestSchedule.dart @@ -0,0 +1,68 @@ +class RequestSchedule { + int projectID; + int clinicID; + int doctorID; + int doctorWorkingHoursDays; + int languageID; + String stamp; + String iPAdress; + double versionID; + int channel; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + int patientTypeID; + + RequestSchedule( + this.projectID, + this.clinicID, + this.doctorID, + this.doctorWorkingHoursDays, + this.languageID, + this.stamp, + this.iPAdress, + this.versionID, + this.channel, + this.tokenID, + this.sessionID, + this.isLoginForDoctorApp, + this.patientOutSA, + this.patientTypeID); + + RequestSchedule.fromJson(Map json) { + projectID = json['ProjectID']; + clinicID = json['ClinicID']; + doctorID = json['DoctorID']; + doctorWorkingHoursDays = json['DoctorWorkingHoursDays']; + languageID = json['LanguageID']; + stamp = json['stamp']; + iPAdress = json['IPAdress']; + versionID = json['VersionID']; + channel = json['Channel']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + patientTypeID = json['PatientTypeID']; + } + + Map toJson() { + final Map data = new Map(); + data['ProjectID'] = this.projectID; + data['ClinicID'] = this.clinicID; + data['DoctorID'] = this.doctorID; + data['DoctorWorkingHoursDays'] = this.doctorWorkingHoursDays; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.iPAdress; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + data['PatientTypeID'] = this.patientTypeID; + return data; + } +} diff --git a/lib/models/list_doctor_working_hours_table_model.dart b/lib/models/list_doctor_working_hours_table_model.dart new file mode 100644 index 00000000..d8ca8a04 --- /dev/null +++ b/lib/models/list_doctor_working_hours_table_model.dart @@ -0,0 +1,21 @@ +class ListDoctorWorkingHoursTable { + String date; + String dayName; + String workingHours; + + ListDoctorWorkingHoursTable({this.date, this.dayName, this.workingHours}); + + ListDoctorWorkingHoursTable.fromJson(Map json) { + date = json['Date'] ; + dayName = json['DayName']; + workingHours = json['WorkingHours']; + } + + Map toJson() { + final Map data = new Map(); + data['Date'] = this.date; + data['DayName'] = this.dayName; + data['WorkingHours'] = this.workingHours; + return data; + } +} diff --git a/lib/models/list_gt_my_pationents_question_model.dart b/lib/models/list_gt_my_pationents_question_model.dart new file mode 100644 index 00000000..8e7eac9c --- /dev/null +++ b/lib/models/list_gt_my_pationents_question_model.dart @@ -0,0 +1,108 @@ +class ListGtMyPatientsQuestions { + String setupID; + int projectID; + int transactionNo; + int patientType; + int patientID; + int doctorID; + int requestType; + String requestDate; + String requestTime; + String remarks; + int status; + int createdBy; + String createdOn; + int editedBy; + String editedOn; + String patientName; + String patientNameN; + int gender; + String dateofBirth; + String mobileNumber; + String emailAddress; + String age; + String genderDescription; + bool isVidaCall; + + ListGtMyPatientsQuestions( + {this.setupID, + this.projectID, + this.transactionNo, + this.patientType, + this.patientID, + this.doctorID, + this.requestType, + this.requestDate, + this.requestTime, + this.remarks, + this.status, + this.createdBy, + this.createdOn, + this.editedBy, + this.editedOn, + this.patientName, + this.patientNameN, + this.gender, + this.dateofBirth, + this.mobileNumber, + this.emailAddress, + this.age, + this.genderDescription, + this.isVidaCall}); + + ListGtMyPatientsQuestions.fromJson(Map json) { + setupID = json['SetupID']; + projectID = json['ProjectID']; + transactionNo = json['TransactionNo']; + patientType = json['PatientType']; + patientID = json['PatientID']; + doctorID = json['DoctorID']; + requestType = json['RequestType']; + requestDate = json['RequestDate']; + requestTime = json['RequestTime']; + remarks = json['Remarks']; + status = json['Status']; + createdBy = json['CreatedBy']; + createdOn = json['CreatedOn']; + editedBy = json['EditedBy']; + editedOn = json['EditedOn']; + patientName = json['PatientName']; + patientNameN = json['PatientNameN']; + gender = json['Gender']; + dateofBirth = json['DateofBirth']; + mobileNumber = json['MobileNumber']; + emailAddress = json['EmailAddress']; + age = json['Age']; + genderDescription = json['GenderDescription']; + isVidaCall = json['IsVidaCall']; + } + + Map toJson() { + final Map data = new Map(); + data['SetupID'] = this.setupID; + data['ProjectID'] = this.projectID; + data['TransactionNo'] = this.transactionNo; + data['PatientType'] = this.patientType; + data['PatientID'] = this.patientID; + data['DoctorID'] = this.doctorID; + data['RequestType'] = this.requestType; + data['RequestDate'] = this.requestDate; + data['RequestTime'] = this.requestTime; + data['Remarks'] = this.remarks; + data['Status'] = this.status; + data['CreatedBy'] = this.createdBy; + data['CreatedOn'] = this.createdOn; + data['EditedBy'] = this.editedBy; + data['EditedOn'] = this.editedOn; + data['PatientName'] = this.patientName; + data['PatientNameN'] = this.patientNameN; + data['Gender'] = this.gender; + data['DateofBirth'] = this.dateofBirth; + data['MobileNumber'] = this.mobileNumber; + data['EmailAddress'] = this.emailAddress; + data['Age'] = this.age; + data['GenderDescription'] = this.genderDescription; + data['IsVidaCall'] = this.isVidaCall; + return data; + } +} \ No newline at end of file diff --git a/lib/models/patient_model.dart b/lib/models/patient/patient_model.dart similarity index 100% rename from lib/models/patient_model.dart rename to lib/models/patient/patient_model.dart diff --git a/lib/models/patient/vital_sign_req_model.dart b/lib/models/patient/vital_sign_req_model.dart new file mode 100644 index 00000000..0c3592b8 --- /dev/null +++ b/lib/models/patient/vital_sign_req_model.dart @@ -0,0 +1,77 @@ + +/* + *@author: Elham Rababah + *@Date:27/4/2020 + *@param: + *@return: + *@desc: VitalSignReqModel + */ +class VitalSignReqModel { + int patientID; + int projectID; + int patientTypeID; + int inOutpatientType; + int transNo; + int languageID; + String stamp ; + String iPAdress; + double versionID; + int channel; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + + VitalSignReqModel( + {this.patientID, + this.projectID, + this.inOutpatientType, + this.transNo, + this.languageID, + this.tokenID, + this.stamp = '2020-04-26T09:32:18.317Z', + this.iPAdress='11.11.11.11', + this.versionID=1.2, + this.channel=9, + this.sessionID='E2bsEeYEJo', + this.isLoginForDoctorApp=true, + this.patientTypeID, + this.patientOutSA=false}); + + VitalSignReqModel.fromJson(Map json) { + projectID = json['ProjectID']; + patientID = json['PatientID']; + languageID = json['LanguageID']; + inOutpatientType = json['InOutpatientType']; + transNo = json['TransNo']; + stamp = json['stamp']; + iPAdress = json['IPAdress']; + versionID = json['VersionID']; + channel = json['Channel']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + patientTypeID = json['PatientTypeID']; + } + + Map toJson() { + final Map data = new Map(); + data['ProjectID'] = this.projectID; + data['PatientID'] = this.patientID; + data['InOutpatientType'] = this.inOutpatientType; + data['TransNo'] = this.transNo; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.iPAdress; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + data['PatientTypeID'] = this.patientTypeID; + return data; + } + +} diff --git a/lib/models/patient/vital_sign_res_model.dart b/lib/models/patient/vital_sign_res_model.dart new file mode 100644 index 00000000..5d0eabff --- /dev/null +++ b/lib/models/patient/vital_sign_res_model.dart @@ -0,0 +1,257 @@ +class VitalSignResModel { + int transNo; + Null projectID; + int weightKg; + int heightCm; + var temperatureCelcius; + int pulseBeatPerMinute; + int respirationBeatPerMinute; + int bloodPressureLower; + int bloodPressureHigher; + int sAO2; + int fIO2; + Null painScore; + var bodyMassIndex; + int headCircumCm; + int leanBodyWeightLbs; + int idealBodyWeightLbs; + int temperatureCelciusMethod; + int pulseRhythm; + int respirationPattern; + Null bloodPressureCuffLocation; + Null bloodPressureCuffSize; + Null bloodPressurePatientPosition; + String painLocation; + String painDuration; + String painCharacter; + String painFrequency; + bool isPainManagementDone; + int status; + bool isVitalsRequired; + int patientID; + String createdOn; + int doctorID; + int clinicID; + Null triageCategory; + Null gCScore; + Null lineItemNo; + Null vitalSignDate; + Null actualTimeTaken; + Null sugarLevel; + Null fBS; + Null rBS; + Null observationType; + Null heartRate; + Null muscleTone; + Null reflexIrritability; + Null bodyColor; + Null isFirstAssessment; + Null dateofBirth; + Null timeOfBirth; + String bloodPressure; + String bloodPressureCuffLocationDesc; + String bloodPressureCuffSizeDesc; + String bloodPressurePatientPositionDesc; + String clinicName; + String doctorImageURL; + String doctorName; + String painScoreDesc; + String pulseRhythmDesc; + String respirationPatternDesc; + String temperatureCelciusMethodDesc; + Null time; + + VitalSignResModel( + {this.transNo, + this.projectID, + this.weightKg, + this.heightCm, + this.temperatureCelcius, + this.pulseBeatPerMinute, + this.respirationBeatPerMinute, + this.bloodPressureLower, + this.bloodPressureHigher, + this.sAO2, + this.fIO2, + this.painScore, + this.bodyMassIndex, + this.headCircumCm, + this.leanBodyWeightLbs, + this.idealBodyWeightLbs, + this.temperatureCelciusMethod, + this.pulseRhythm, + this.respirationPattern, + this.bloodPressureCuffLocation, + this.bloodPressureCuffSize, + this.bloodPressurePatientPosition, + this.painLocation, + this.painDuration, + this.painCharacter, + this.painFrequency, + this.isPainManagementDone, + this.status, + this.isVitalsRequired, + this.patientID, + this.createdOn, + this.doctorID, + this.clinicID, + this.triageCategory, + this.gCScore, + this.lineItemNo, + this.vitalSignDate, + this.actualTimeTaken, + this.sugarLevel, + this.fBS, + this.rBS, + this.observationType, + this.heartRate, + this.muscleTone, + this.reflexIrritability, + this.bodyColor, + this.isFirstAssessment, + this.dateofBirth, + this.timeOfBirth, + this.bloodPressure, + this.bloodPressureCuffLocationDesc, + this.bloodPressureCuffSizeDesc, + this.bloodPressurePatientPositionDesc, + this.clinicName, + this.doctorImageURL, + this.doctorName, + this.painScoreDesc, + this.pulseRhythmDesc, + this.respirationPatternDesc, + this.temperatureCelciusMethodDesc, + this.time}); + + VitalSignResModel.fromJson(Map json) { + transNo = json['TransNo']; + projectID = json['ProjectID']; + weightKg = json['WeightKg']; + heightCm = json['HeightCm']; + temperatureCelcius = json['TemperatureCelcius']; + pulseBeatPerMinute = json['PulseBeatPerMinute']; + respirationBeatPerMinute = json['RespirationBeatPerMinute']; + bloodPressureLower = json['BloodPressureLower']; + bloodPressureHigher = json['BloodPressureHigher']; + sAO2 = json['SAO2']; + fIO2 = json['FIO2']; + painScore = json['PainScore']; + bodyMassIndex = json['BodyMassIndex']; + headCircumCm = json['HeadCircumCm']; + leanBodyWeightLbs = json['LeanBodyWeightLbs']; + idealBodyWeightLbs = json['IdealBodyWeightLbs']; + temperatureCelciusMethod = json['TemperatureCelciusMethod']; + pulseRhythm = json['PulseRhythm']; + respirationPattern = json['RespirationPattern']; + bloodPressureCuffLocation = json['BloodPressureCuffLocation']; + bloodPressureCuffSize = json['BloodPressureCuffSize']; + bloodPressurePatientPosition = json['BloodPressurePatientPosition']; + painLocation = json['PainLocation']; + painDuration = json['PainDuration']; + painCharacter = json['PainCharacter']; + painFrequency = json['PainFrequency']; + isPainManagementDone = json['IsPainManagementDone']; + status = json['Status']; + isVitalsRequired = json['IsVitalsRequired']; + patientID = json['PatientID']; + createdOn = json['CreatedOn']; + doctorID = json['DoctorID']; + clinicID = json['ClinicID']; + triageCategory = json['TriageCategory']; + gCScore = json['GCScore']; + lineItemNo = json['LineItemNo']; + vitalSignDate = json['VitalSignDate']; + actualTimeTaken = json['ActualTimeTaken']; + sugarLevel = json['SugarLevel']; + fBS = json['FBS']; + rBS = json['RBS']; + observationType = json['ObservationType']; + heartRate = json['HeartRate']; + muscleTone = json['MuscleTone']; + reflexIrritability = json['ReflexIrritability']; + bodyColor = json['BodyColor']; + isFirstAssessment = json['IsFirstAssessment']; + dateofBirth = json['DateofBirth']; + timeOfBirth = json['TimeOfBirth']; + bloodPressure = json['BloodPressure']; + bloodPressureCuffLocationDesc = json['BloodPressureCuffLocationDesc']; + bloodPressureCuffSizeDesc = json['BloodPressureCuffSizeDesc']; + bloodPressurePatientPositionDesc = json['BloodPressurePatientPositionDesc']; + clinicName = json['ClinicName']; + doctorImageURL = json['DoctorImageURL']; + doctorName = json['DoctorName']; + painScoreDesc = json['PainScoreDesc']; + pulseRhythmDesc = json['PulseRhythmDesc']; + respirationPatternDesc = json['RespirationPatternDesc']; + temperatureCelciusMethodDesc = json['TemperatureCelciusMethodDesc']; + time = json['Time']; + } + + Map toJson() { + final Map data = new Map(); + data['TransNo'] = this.transNo; + data['ProjectID'] = this.projectID; + data['WeightKg'] = this.weightKg; + data['HeightCm'] = this.heightCm; + data['TemperatureCelcius'] = this.temperatureCelcius; + data['PulseBeatPerMinute'] = this.pulseBeatPerMinute; + data['RespirationBeatPerMinute'] = this.respirationBeatPerMinute; + data['BloodPressureLower'] = this.bloodPressureLower; + data['BloodPressureHigher'] = this.bloodPressureHigher; + data['SAO2'] = this.sAO2; + data['FIO2'] = this.fIO2; + data['PainScore'] = this.painScore; + data['BodyMassIndex'] = this.bodyMassIndex; + data['HeadCircumCm'] = this.headCircumCm; + data['LeanBodyWeightLbs'] = this.leanBodyWeightLbs; + data['IdealBodyWeightLbs'] = this.idealBodyWeightLbs; + data['TemperatureCelciusMethod'] = this.temperatureCelciusMethod; + data['PulseRhythm'] = this.pulseRhythm; + data['RespirationPattern'] = this.respirationPattern; + data['BloodPressureCuffLocation'] = this.bloodPressureCuffLocation; + data['BloodPressureCuffSize'] = this.bloodPressureCuffSize; + data['BloodPressurePatientPosition'] = this.bloodPressurePatientPosition; + data['PainLocation'] = this.painLocation; + data['PainDuration'] = this.painDuration; + data['PainCharacter'] = this.painCharacter; + data['PainFrequency'] = this.painFrequency; + data['IsPainManagementDone'] = this.isPainManagementDone; + data['Status'] = this.status; + data['IsVitalsRequired'] = this.isVitalsRequired; + data['PatientID'] = this.patientID; + data['CreatedOn'] = this.createdOn; + data['DoctorID'] = this.doctorID; + data['ClinicID'] = this.clinicID; + data['TriageCategory'] = this.triageCategory; + data['GCScore'] = this.gCScore; + data['LineItemNo'] = this.lineItemNo; + data['VitalSignDate'] = this.vitalSignDate; + data['ActualTimeTaken'] = this.actualTimeTaken; + data['SugarLevel'] = this.sugarLevel; + data['FBS'] = this.fBS; + data['RBS'] = this.rBS; + data['ObservationType'] = this.observationType; + data['HeartRate'] = this.heartRate; + data['MuscleTone'] = this.muscleTone; + data['ReflexIrritability'] = this.reflexIrritability; + data['BodyColor'] = this.bodyColor; + data['IsFirstAssessment'] = this.isFirstAssessment; + data['DateofBirth'] = this.dateofBirth; + data['TimeOfBirth'] = this.timeOfBirth; + data['BloodPressure'] = this.bloodPressure; + data['BloodPressureCuffLocationDesc'] = this.bloodPressureCuffLocationDesc; + data['BloodPressureCuffSizeDesc'] = this.bloodPressureCuffSizeDesc; + data['BloodPressurePatientPositionDesc'] = + this.bloodPressurePatientPositionDesc; + data['ClinicName'] = this.clinicName; + data['DoctorImageURL'] = this.doctorImageURL; + data['DoctorName'] = this.doctorName; + data['PainScoreDesc'] = this.painScoreDesc; + data['PulseRhythmDesc'] = this.pulseRhythmDesc; + data['RespirationPatternDesc'] = this.respirationPatternDesc; + data['TemperatureCelciusMethodDesc'] = this.temperatureCelciusMethodDesc; + data['Time'] = this.time; + return data; + } +} diff --git a/lib/providers/doctor_reply_provider.dart b/lib/providers/doctor_reply_provider.dart new file mode 100644 index 00000000..1c977185 --- /dev/null +++ b/lib/providers/doctor_reply_provider.dart @@ -0,0 +1,61 @@ +import 'dart:convert'; + +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/models/RequestDoctorReply.dart'; +import 'package:doctor_app_flutter/models/list_gt_my_pationents_question_model.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:http/http.dart'; +import 'package:http_interceptor/http_client_with_interceptor.dart'; + +import '../interceptor/http_interceptor.dart'; + +class DoctorReplyProvider with ChangeNotifier { + Client client = + HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); + + List listDoctorWorkingHoursTable = []; + bool isLoading = true; + bool isError = false; + String error = ''; + RequestDoctorReply _requestSchedule = RequestDoctorReply(); + + DoctorReplyProvider() { + getDoctorSchedule(); + } + + getDoctorSchedule() async { + const url = BASE_URL + 'DoctorApplication.svc/REST/GtMyPatientsQuestions'; + try { + if (await Helpers.checkConnection()) { + final response = await client.post(url, + body: json.encode(_requestSchedule.toJson())); + final int statusCode = response.statusCode; + if (statusCode < 200 || statusCode >= 400 || json == null) { + isLoading = false; + isError = true; + error = 'Error While Fetching data'; + } else { + var parsed = json.decode(response.body.toString()); + if (parsed['MessageStatus'] == 1) { + parsed['List_GtMyPatientsQuestions'].forEach((v) { + listDoctorWorkingHoursTable.add( ListGtMyPatientsQuestions.fromJson(v)); + }); + isError = false; + isLoading = false; + } else { + isError = true; + error = parsed['ErrorMessage'] ?? parsed['ErrorEndUserMessage']; + } + } + } else { + isLoading = false; + isError = true; + error = 'Please Check The Internet Connection'; + } + notifyListeners(); + } catch (error) { + throw error; + } + } +} diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index 942685da..1baf7786 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -1,26 +1,39 @@ import 'dart:convert'; -import 'package:doctor_app_flutter/config/config.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; import 'package:http_interceptor/http_client_with_interceptor.dart'; +import '../config/config.dart'; import '../interceptor/http_interceptor.dart'; -import '../models/patient_model.dart'; +import '../models/patient/patient_model.dart'; +import '../models/patient/vital_sign_res_model.dart'; +import '../screens/patients/patiant_info_model.dart'; +import '../util/helpers.dart'; + +const GET_PATIENT_VITAL_SIGN = + BASE_URL + 'Doctors.svc/REST/Doctor_GetPatientVitalSign'; class PatientsProvider with ChangeNotifier { + bool isLoading = true; + bool isError = false; + String error = ''; + List patientVitalSignList = []; Client client = HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); + + PatiantInformtion _selectedPatient; + Future getPatientList(PatientModel patient, patientType) async { - /* const url = + /* const url = BASE_URL+'DoctorApplication.svc/REST/GetMyInPatient';*/ - // var srvicePatiant = ["GetMyOutPatient", "GetMyInPatient", "GtMyDischargePatient","GtMyReferredPatient","GtMyDischargeReferralPatient","GtMyTomorrowPatient","GtMyReferralPatient"]; - // print("a=SERVICES_PATIANT[patientType]========='=======a"); - int val=int.parse(patientType); - final url = BASE_URL+'DoctorApplication.svc/REST/'+SERVICES_PATIANT[val]; - // print("a===========$url=======a"); - - + // var srvicePatiant = ["GetMyOutPatient", "GetMyInPatient", "GtMyDischargePatient","GtMyReferredPatient","GtMyDischargeReferralPatient","GtMyTomorrowPatient","GtMyReferralPatient"]; + // print("a=SERVICES_PATIANT[patientType]========='=======a"); + int val = int.parse(patientType); + final url = + BASE_URL + 'DoctorApplication.svc/REST/' + SERVICES_PATIANT[val]; + // print("a===========$url=======a"); + try { final response = await client.post(url, body: json.encode({ @@ -53,4 +66,57 @@ class PatientsProvider with ChangeNotifier { throw error; } } + +/* + *@author: Elham Rababah + *@Date:27/4/2020 + *@param: + *@return:Future + *@desc: getPatientVitalSign + */ + getPatientVitalSign(patient) async { + try { + if (await Helpers.checkConnection()) { + final response = await client.post(GET_PATIENT_VITAL_SIGN, + body: json.encode(patient)); + final int statusCode = response.statusCode; + isLoading = false; + + if (statusCode < 200 || statusCode >= 400 || json == null) { + isError = true; + error = 'Error While Fetching data'; + } else { + var res = json.decode(response.body); + print('$res'); + if (res['MessageStatus'] == 1) { + patientVitalSignList=[]; + res['List_DoctorPatientVitalSign'].forEach((v) { + patientVitalSignList + .add(new VitalSignResModel.fromJson(v)); + }); + // patientVitalSignList = res['List_DoctorPatientVitalSign']; + } else { + isError = true; + error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; + } + } + } else { + isLoading = false; + isError = true; + error = 'Please Check The Internet Connection'; + } + notifyListeners(); + } catch (error) { + throw error; + } + } + + PatiantInformtion getSelectedPatient() { + return _selectedPatient; + } + + setSelectedPatient(PatiantInformtion patient) { + // return _selectedPatient; + _selectedPatient = patient; + } } diff --git a/lib/providers/schedule_provider.dart b/lib/providers/schedule_provider.dart new file mode 100644 index 00000000..6b75556a --- /dev/null +++ b/lib/providers/schedule_provider.dart @@ -0,0 +1,71 @@ +import 'dart:convert'; + +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:http/http.dart'; +import 'package:http_interceptor/http_client_with_interceptor.dart'; + +import '../interceptor/http_interceptor.dart'; +import '../models/list_doctor_working_hours_table_model.dart'; +import '../models/RequestSchedule.dart'; + +class ScheduleProvider with ChangeNotifier { + Client client = + HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); + + List listDoctorWorkingHoursTable = []; + bool isLoading = true; + bool isError = false; + String error = ''; + RequestSchedule requestSchedule = RequestSchedule( + 15, + 1, + 70907, + 7, + 2, + '2020-04-22T11:25:57.640Z', + '11.11.11.11', + 1.2, + 9, + '2lMDFT8U+Uy5jxRzCO8n2w==', + 'vV6tg9yyVJ222', + true, + false, + 1); + + ScheduleProvider() { + getDoctorSchedule(); + } + + getDoctorSchedule() async { + const url = BASE_URL + 'Doctors.svc/REST/GetDoctorWorkingHoursTable'; + try { + if (await Helpers.checkConnection()) { + final response = await client.post(url, body: json.encode(requestSchedule.toJson())); + final int statusCode = response.statusCode; + if (statusCode < 200 || statusCode >= 400 || json == null) { + isLoading = false; + isError = true; + error = 'Error While Fetching data'; + } else { + var parsed = json.decode(response.body.toString()); + parsed['List_DoctorWorkingHoursTable'].forEach((v) { + listDoctorWorkingHoursTable + .add(new ListDoctorWorkingHoursTable.fromJson(v)); + }); + isError = false; + isLoading = false; + } + } else { + isLoading = false; + isError = true; + error = 'Please Check The Internet Connection'; + } + print('Heeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeer'); + notifyListeners(); + } catch (error) { + throw error; + } + } +} diff --git a/lib/routes.dart b/lib/routes.dart index 0ee97b2f..e887c62e 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,6 +1,4 @@ -import 'package:doctor_app_flutter/screens/patients/patients_list_screen.dart'; - import './screens/QR_reader_screen.dart'; import './screens/auth/change_password_screen.dart'; import './screens/auth/login_screen.dart'; @@ -8,23 +6,23 @@ import './screens/auth/verification_methods_screen.dart'; import './screens/auth/verify_account_screen.dart'; import './screens/blood_bank_screen.dart'; import './screens/dashboard_screen.dart'; -import './screens/doctor_reply_screen.dart'; +import 'screens/doctor/doctor_reply_screen.dart'; import './screens/medicine/medicine_search_screen.dart'; import './screens/my_schedule_screen.dart'; -import './screens/patients/patient_profile_screen.dart'; +import './screens/patients/profile/patient_profile_screen.dart'; import './screens/patients/patient_search_screen.dart'; import './screens/patients/patients_screen.dart'; +import './screens/patients/profile/vital_sign/vital_sign_screen.dart'; import './screens/profile_screen.dart'; import './screens/settings/settings_screen.dart'; - -const String INIT_ROUTE = LOGIN;//PATIENT_SEARCH; +const String INIT_ROUTE = LOGIN; //PATIENT_SEARCH; const String HOME = '/'; const String LOGIN = 'login'; const String PROFILE = 'profile'; const String CHANGE_PASSWORD = 'change-password'; const String VERIFY_ACCOUNT = 'verify-account'; -const String VERIFICATION_METHODS ='verification-methods'; +const String VERIFICATION_METHODS = 'verification-methods'; const String MY_SCHEDULE = 'my-schedule'; const String QR_READER = 'qr-reader'; const String PATIENT_SEARCH = 'patients/patient-search'; @@ -34,6 +32,7 @@ const String BLOOD_BANK = 'blood-bank'; const String DOCTOR_REPLY = 'doctor-reply'; const String MEDICINE_SEARCH = 'medicine-search'; const String SETTINGS = 'settings'; +const String VITAL_SIGN = 'vital-sign'; var routes = { HOME: (_) => DashboardScreen(), @@ -41,7 +40,7 @@ var routes = { PROFILE: (_) => ProfileScreen(), MY_SCHEDULE: (_) => MyScheduleScreen(), PATIENT_SEARCH: (_) => PatientSearchScreen(), - PATIENTS: (_) =>PatientsScreen(), + PATIENTS: (_) => PatientsScreen(), QR_READER: (_) => QrReaderScreen(), BLOOD_BANK: (_) => BloodBankScreen(), DOCTOR_REPLY: (_) => DoctorReplyScreen(), @@ -49,6 +48,7 @@ var routes = { SETTINGS: (_) => SettingsScreen(), CHANGE_PASSWORD: (_) => ChangePasswordScreen(), VERIFY_ACCOUNT: (_) => VerifyAccountScreen(), - VERIFICATION_METHODS:(_)=> VerificationMethodsScreen(), - PATIENTS_PROFILE:(_)=> PatientProfileScreen() + VERIFICATION_METHODS: (_) => VerificationMethodsScreen(), + PATIENTS_PROFILE: (_) => PatientProfileScreen(), + VITAL_SIGN: (_) => VitalSignScreen() }; diff --git a/lib/screens/auth/login_screen.dart b/lib/screens/auth/login_screen.dart index e21498d5..c203dae9 100644 --- a/lib/screens/auth/login_screen.dart +++ b/lib/screens/auth/login_screen.dart @@ -72,7 +72,7 @@ class _LoginsreenState extends State { return Text('Error: ${snapshot.error}'); } else { return Container( - margin: EdgeInsetsDirectional.fromSTEB(30, 0, 0, 0), + margin: EdgeInsetsDirectional.fromSTEB(30, 0, 0, 30), alignment: Alignment.topLeft, child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index b6502760..0148af61 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -1,5 +1,7 @@ import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/providers/doctor_reply_provider.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:provider/provider.dart'; import '../routes.dart'; import '../widgets/shared/app_texts_widget.dart'; import 'package:flutter/material.dart'; @@ -9,6 +11,7 @@ import '../presentation/doctor_app_icons.dart'; import '../widgets/dashboard/dashboard_item_icons_texts.dart'; import '../widgets/dashboard/dashboard_item_texts_widget.dart'; import '../widgets/shared/rounded_container_widget.dart'; +import 'doctor/doctor_reply_screen.dart'; class DashboardScreen extends StatefulWidget { DashboardScreen({Key key, this.title}) : super(key: key); @@ -23,217 +26,245 @@ class _DashboardScreenState extends State { @override Widget build(BuildContext context) { return AppScaffold( - appBarTitle:'Home', + appBarTitle: 'Home', body: Container( - - child: Column( - children: [ - Expanded( - flex: 1, - child: Container( - margin: EdgeInsets.all(10), - child: AppText( - "Today's Statistics", - fontWeight: FontWeight.bold, + child: Column( + children: [ + Expanded( + flex: 1, + child: Container( + margin: EdgeInsets.all(10), + child: AppText( + "Today's Statistics", + fontWeight: FontWeight.bold, + ), + alignment: Alignment.centerLeft, + ), + ), + Expanded( + flex: 3, + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + flex: 2, + child: RoundedContainer( + child: CircularPercentIndicator( + radius: 90.0, + animation: true, + animationDuration: 1200, + lineWidth: 7.0, + percent: .75, + center: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + AppText("38", + fontWeight: FontWeight.bold, + fontSize: SizeConfig.textMultiplier * 4), + AppText("Out-Patients", + fontWeight: FontWeight.normal, + fontSize: SizeConfig.textMultiplier * 1.5, + color: Colors.grey[800]), + ], + ), + circularStrokeCap: CircularStrokeCap.butt, + backgroundColor: Colors.blueGrey[100], + progressColor: Colors.red, ), - alignment: Alignment.centerLeft, - )), - Expanded( - flex: 3, - child: Row( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Expanded( - flex: 2, - child: RoundedContainer(child:CircularPercentIndicator( - radius: 90.0, - animation: true, - animationDuration: 1200, - lineWidth: 7.0, - percent: .75, - center: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - AppText( - "38", - fontWeight: FontWeight.bold, - fontSize: SizeConfig.textMultiplier * 4 - ), - AppText( - "Out-Patients", - fontWeight: FontWeight.normal, - fontSize: SizeConfig.textMultiplier * 1.5, - color: Colors.grey[800] - ), - ], - ), - circularStrokeCap: CircularStrokeCap.butt, - backgroundColor: Colors.blueGrey[100], - progressColor: Colors.red, - ))), - Expanded( - flex: 2, - child: Row( - children: [ - Expanded( - flex: 1, - child: Column( - crossAxisAlignment: - CrossAxisAlignment.stretch, - children: [ - Expanded( - child: DashboardItemTexts( - "Arrived", - "23", - )), - Expanded( - child: DashboardItemTexts( - "Not Arrived", - "23", - )), - ], - )), - Expanded( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.stretch, - children: [ - Expanded( - child: DashboardItemTexts( - "ER", - "23", - )), - Expanded( - child: DashboardItemTexts( - "Walk-in", - "23", - )), - ], - )), - ], - )) - ])), - Expanded( + ), + ), + Expanded( flex: 2, child: Row( - crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( - flex: 2, - child: new DashboardItemIconText( - DoctorApp.home_icon, - "08", - "Lab Result", - backgroundColor: Colors.red, - )), - Expanded( - flex: 2, - child: new DashboardItemIconText( - DoctorApp.home_icon, - "10", - "Radiology", - backgroundColor: Colors.red, - )), - Expanded( - flex: 2, - child: new DashboardItemIconText( - DoctorApp.home_icon, - "05", - "Referral", - backgroundColor: Colors.red, - )), - ], - )), - Expanded( - flex: 2, - child: Row( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ + flex: 1, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + child: DashboardItemTexts( + "Arrived", + "23", + )), + Expanded( + child: DashboardItemTexts( + "Not Arrived", + "23", + ), + ), + ], + ), + ), Expanded( - flex: 2, - child: new DashboardItemIconText( - DoctorApp.home_icon, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + child: DashboardItemTexts( + "ER", "23", - "In-Patient", - showBorder: true, )), - Expanded( - flex: 2, - child: new DashboardItemIconText( - DoctorApp.home_icon, + Expanded( + child: DashboardItemTexts( + "Walk-in", "23", - "Operations", - showBorder: true, )), + ], + )), ], - )), - Expanded( - flex: 1, - child: Container( - margin: EdgeInsets.all(10), - child: AppText( - "Patient Services", - fontWeight: FontWeight.bold, + ), + ) + ], + ), + ), + Expanded( + flex: 2, + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + flex: 2, + child: new DashboardItemIconText( + DoctorApp.home_icon, + "08", + "Lab Result", + backgroundColor: Colors.red, + ), + ), + Expanded( + flex: 2, + child: new DashboardItemIconText( + DoctorApp.home_icon, + "10", + "Radiology", + backgroundColor: Colors.red, + )), + Expanded( + flex: 2, + child: new DashboardItemIconText( + DoctorApp.home_icon, + "05", + "Referral", + backgroundColor: Colors.red, + )), + ], + ), + ), + Expanded( + flex: 2, + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + flex: 2, + child: new DashboardItemIconText( + DoctorApp.home_icon, + "23", + "In-Patient", + showBorder: true, + ), + ), + Expanded( + flex: 2, + child: new DashboardItemIconText( + DoctorApp.home_icon, + "23", + "Operations", + showBorder: true, + )), + ], + ), + ), + Expanded( + flex: 1, + child: Container( + margin: EdgeInsets.all(10), + child: AppText( + "Patient Services", + fontWeight: FontWeight.bold, + ), + alignment: Alignment.centerLeft, + ), + ), + Expanded( + flex: 2, + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + flex: 2, + child: InkWell( + child: DashboardItemIconText( + DoctorApp.home_icon, + "", + "Search Patient", + showBorder: false, + backgroundColor: Colors.green[200], ), - alignment: Alignment.centerLeft, - )), - Expanded( + onTap: () { + Navigator.of(context).pushNamed(PATIENT_SEARCH); + }, + ), + ), + Expanded( flex: 2, - child: Row( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Expanded( - flex: 2, - child: InkWell( child: DashboardItemIconText( - DoctorApp.home_icon, - "", - "Search Patient", - showBorder: false, - backgroundColor: Colors.green[200], - ), - - onTap: () { - Navigator.of(context).pushNamed(PATIENT_SEARCH); - }, - - )), - Expanded( - flex: 2, - child: new DashboardItemIconText( - DoctorApp.home_icon, - "", - "Out Patient", - showBorder: false, - backgroundColor: Colors.deepPurple[300], - )), - ], - )), - Expanded( + child: InkWell( + onTap: () { + + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ChangeNotifierProvider( + create: (_) => DoctorReplyProvider(), + child: DoctorReplyScreen(), + ), + ), + ); + }, + child: DashboardItemIconText( + DoctorApp.home_icon, + "", + "Doctor Reply", + showBorder: false, + backgroundColor: Colors.deepPurple[300], + ), + ), + ), + ], + ), + ), + Expanded( + flex: 2, + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( flex: 2, - child: Row( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Expanded( - flex: 2, - child: new DashboardItemIconText( - DoctorApp.home_icon, - "", - "In Patient", - showBorder: false, - backgroundColor: Colors.blueGrey[900], - )), - Expanded( - flex: 2, - child: new DashboardItemIconText( - DoctorApp.home_icon, - "", - "Discharge Patient", - showBorder: false, - backgroundColor: Colors.brown[400], - )), - ], - )), - ], - ))); + child: new DashboardItemIconText( + DoctorApp.home_icon, + "", + "In Patient", + showBorder: false, + backgroundColor: Colors.blueGrey[900], + ), + ), + Expanded( + flex: 2, + child: new DashboardItemIconText( + DoctorApp.home_icon, + "", + "Discharge Patient", + showBorder: false, + backgroundColor: Colors.brown[400], + ), + ), + ], + ), + ), + ], + ), + ), + ); } } diff --git a/lib/screens/doctor/doctor_reply_screen.dart b/lib/screens/doctor/doctor_reply_screen.dart new file mode 100644 index 00000000..ad200706 --- /dev/null +++ b/lib/screens/doctor/doctor_reply_screen.dart @@ -0,0 +1,125 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/providers/doctor_reply_provider.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_bg_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; +import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; + +/* + *@author: Mohammad Aljammal + *@Date:28/4/2020 + *@param: + *@return: + *@desc: Doctor Reply Screen display data from GtMyPatientsQuestions service + */ +class DoctorReplyScreen extends StatelessWidget { + + DoctorReplyProvider _doctorReplyProvider; + + @override + Widget build(BuildContext context) { + _doctorReplyProvider = Provider.of(context); + return AppScaffold( + appBarTitle: 'Doctor Reply', + showAppDrawer: false, + body:_doctorReplyProvider.isLoading? DrAppCircularProgressIndeicator(): + _doctorReplyProvider.isError? Center( + child: Text( + _doctorReplyProvider.error, + style: TextStyle(color: Theme.of(context).errorColor), + ), + ): + Container( + padding: EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0), + child: ListView( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: _doctorReplyProvider.listDoctorWorkingHoursTable.map((reply) { + return CardWithBgWidget( + widget: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + reply.patientName, + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + SizedBox( + height: 8, + ), + AppText( + reply.remarks, + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + SizedBox( + height: 5, + ), + Row( + children: [ + AppText( + 'Time', + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + Container( + margin: EdgeInsets.only(left: 10), + child: AppText( + reply.requestTime, + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + ), + ], + ), + SizedBox( + height: 5, + ), + Row( + children: [ + AppText( + 'File No', + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + Container( + margin: EdgeInsets.only(left: 10), + child: AppText( + '${reply.patientID}', + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + ), + ], + ), + SizedBox( + height: 5, + ), + Row( + children: [ + AppText( + 'Mobile No', + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + Container( + margin: EdgeInsets.only(left: 10), + child: AppText( + reply.mobileNumber, + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + ), + ], + ), + ], + ), + ), + ); + }).toList(), + ) + ], + ), + ), + ); + } + +} diff --git a/lib/screens/doctor_reply_screen.dart b/lib/screens/doctor_reply_screen.dart deleted file mode 100644 index 2233526b..00000000 --- a/lib/screens/doctor_reply_screen.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter/material.dart'; -class DoctorReplyScreen extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: Text('DoctorReply'),), - ); - } -} \ No newline at end of file diff --git a/lib/screens/my_schedule_screen.dart b/lib/screens/my_schedule_screen.dart index 0c4593ad..c4b82e23 100644 --- a/lib/screens/my_schedule_screen.dart +++ b/lib/screens/my_schedule_screen.dart @@ -1,55 +1,112 @@ +import 'package:doctor_app_flutter/providers/schedule_provider.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import '../config/size_config.dart'; import '../widgets/shared/app_scaffold_widget.dart'; import '../widgets/shared/card_with_bg_widget.dart'; class MyScheduleScreen extends StatelessWidget { - List litems = [ - "1", - "2", - ]; + ScheduleProvider scheduleProvider; @override Widget build(BuildContext context) { + scheduleProvider = Provider.of(context); return AppScaffold( - // pageOnly: false, - appBarTitle: 'My Schdule', - body: Container( - padding: EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0), - child: ListView(children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 20, + // pageOnly: false, + showBottomBar: false, + showAppDrawer: false, + appBarTitle: 'My Schedule', + body: scheduleProvider.isLoading + ? DrAppCircularProgressIndeicator() + : scheduleProvider.isError + ? Center( + child: AppText( + scheduleProvider.error, + color: Theme.of(context).errorColor, + ), + ) + : scheduleProvider.listDoctorWorkingHoursTable.length == 0 + ? Center( + child: AppText( + 'You don\'t have any Schedule', + color: Theme.of(context).errorColor, + ), + ) + : Container( + padding: EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0), + child: ListView( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 20, + ), + AppText('My Schedule', + fontSize: + 2.5 * SizeConfig.textMultiplier), + scheduleListByDate(), + // scheduleListByDate('Wednesday, 8 April '), + ], + ), + ], + ), + ], + ), ), - Text('My Schedule', style: textStyle(2.5, FontWeight.w700)), - scheduleListByDate('Today, 7 April '), - scheduleListByDate('Wednesday, 8 April '), - ], - ), - ], - ), - ]), - )); + ); } - Column scheduleListByDate(date) { + Column scheduleListByDate() { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( height: 10, ), - Text(date, style: textStyle(2.5)), Container( child: Column( - children: litems.map((item) { - return CardWithBgWidget(line1Text: 'ER new development ideas meeting',line2Text:'09:00 AM - 10:50 AM',line3Text: 'Cloud Solution',icon: Icons.add_location, heightPercentage: 0.20, widthPercentage: 0.80,); + children: scheduleProvider.listDoctorWorkingHoursTable.map((item) { + return CardWithBgWidget( + widget: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText(item.dayName, + fontSize: 2.5 * SizeConfig.textMultiplier), + SizedBox( + height: 8, + ), + !item.workingHours.contains('and') + ? AppText(item.workingHours, + fontSize: 2.5 * SizeConfig.textMultiplier) + : Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + item.workingHours.substring( + 0, item.workingHours.indexOf('a')), + fontSize: 2.5 * SizeConfig.textMultiplier), + AppText( + item.workingHours.substring( + item.workingHours.indexOf('d') + 2, + ), + fontSize: 2.5 * SizeConfig.textMultiplier), + ], + ), + SizedBox( + width: 8, + ) + ], + ), + ), + ); }).toList(), ), ), @@ -62,4 +119,3 @@ class MyScheduleScreen extends StatelessWidget { fontSize: size * SizeConfig.textMultiplier, fontWeight: weight); } } - diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index 5e90847c..78b9abea 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -1,4 +1,5 @@ import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; +import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:flutter/services.dart'; @@ -13,7 +14,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import '../../lookups/patient_lookup.dart'; -import '../../models/patient_model.dart'; import '../../widgets/patients/dynamic_elements.dart'; import '../../config/config.dart'; @@ -66,8 +66,7 @@ class _PatientSearchScreenState extends State { // _formKey.currentState.save(); sharedPref.getString(TOKEN).then((token) { - print(token+"EEEEEE"); - _patientSearchFormValues.TokenID = token; + _patientSearchFormValues.TokenID = '@dm!n'; _patientSearchFormValues.ProjectID= 15; // print(_patientSearchFormValues.PatientMobileNumber+"dfdfdfddf"); Navigator.of(context).pushNamed(PATIENTS, arguments: { diff --git a/lib/screens/patients/patients_list_screen.dart b/lib/screens/patients/patients_list_screen.dart index be3b2a86..6d0b97a8 100644 --- a/lib/screens/patients/patients_list_screen.dart +++ b/lib/screens/patients/patients_list_screen.dart @@ -1,8 +1,9 @@ -import '../../models/patient_model.dart'; -import '../../providers/patients_provider.dart'; +import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import '../../providers/patients_provider.dart'; + class PatientsListScreen extends StatefulWidget { @override _PatientsListScreenState createState() => _PatientsListScreenState(); diff --git a/lib/screens/patients/patients_screen.dart b/lib/screens/patients/patients_screen.dart index 99d51bf8..30f88160 100644 --- a/lib/screens/patients/patients_screen.dart +++ b/lib/screens/patients/patients_screen.dart @@ -1,16 +1,17 @@ -/* +/* *@author: Amjad Amireh Merge to Elham rababah - *@Date:27/4/2020 - *@param: + *@Date:27/4/2020 + *@param: *@return:PatientsScreen - *@desc: + *@desc: */ -import 'package:doctor_app_flutter/models/patient_model.dart'; +import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/providers/patients_provider.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/screens/patients/TopTenUsersModelResponse.dart'; import 'package:doctor_app_flutter/screens/patients/patiant_info_model.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -30,14 +31,13 @@ class PatientsScreen extends StatefulWidget { } class _PatientsScreenState extends State { - List litems; - //******************* - List responseModelList; - List _locations =['Today','Tomorrow','Next Week']; - int _activeLocation=0; + List litems; + //******************* + List responseModelList; + List _locations = ['Today', 'Tomorrow', 'Next Week']; + int _activeLocation = 0; - //******************* - + //******************* bool _isInit = true; @@ -47,21 +47,21 @@ class _PatientsScreenState extends State { //*******Amjad add to search box****** final _controller = TextEditingController(); //************** - PatientModel patient; - + PatientModel patient; + @override void didChangeDependencies() { final routeArgs = ModalRoute.of(context).settings.arguments as Map; //PatientModel patient = routeArgs['patientSearchForm']; - patient = routeArgs['patientSearchForm']; - + patient = routeArgs['patientSearchForm']; + //PatiantInformtion patiantInfo = routeArgs['patientSearchForm']; - print(patient.TokenID+"EEEEEE"); + print(patient.TokenID + "EEEEEE"); String patientType = routeArgs['selectedType']; print("**************patiant Type**************"); print(patientType); - print("**************test**************"); + print("**************test**************"); if (_isInit) { // setState(() {}); PatientsProvider patientsProv = Provider.of(context); @@ -69,20 +69,20 @@ class _PatientsScreenState extends State { // print('MessageStatus${res['MessageStatus']}'); print('List_MyInPatient${(res['List_MyInPatient'])}'); setState(() { - int val2=int.parse(patientType); - litems =res[SERVICES_PATIANT2[val2]];//res['List_MyInPatient']; + int val2 = int.parse(patientType); + litems = res[SERVICES_PATIANT2[val2]]; //res['List_MyInPatient']; //******************** - // litems2=res[SERVICES_PATIANT2[val2]]; - //PatiantInformtion - //List responseModelList = new PatiantInformtion.fromJson(litems).;//TopTenUsersModelResponse.fromJson(parsed).list; - final List parsed = litems;//json.decode(response.body); - //List responseModelList = new TopTenUsersModelResponse.fromJson(parsed).list; - // List responseModelList = new TopTenUsersModelResponse.fromJson(parsed).list; - responseModelList = new TopTenUsersModelResponse.fromJson(parsed).list; + // litems2=res[SERVICES_PATIANT2[val2]]; + //PatiantInformtion + //List responseModelList = new PatiantInformtion.fromJson(litems).;//TopTenUsersModelResponse.fromJson(parsed).list; + final List parsed = litems; //json.decode(response.body); + //List responseModelList = new TopTenUsersModelResponse.fromJson(parsed).list; + // List responseModelList = new TopTenUsersModelResponse.fromJson(parsed).list; + responseModelList = + new TopTenUsersModelResponse.fromJson(parsed).list; //******************** _isLoading = false; - _hasError = res['ErrorEndUserMessage']; - + _hasError = res['ErrorEndUserMessage']; }); print(res); }).catchError((error) { @@ -95,67 +95,89 @@ class _PatientsScreenState extends State { @override Widget build(BuildContext context) { + PatientsProvider patientsProv = Provider.of(context); + return AppScaffold( - appBarTitle: 'Patients', - //***********Modify by amjad (create List view to insert all new data webservise in scroll )************* - body: Container(child:ListView( - scrollDirection: Axis.vertical, - children: [ + appBarTitle: 'Patients', + //***********Modify by amjad (create List view to insert all new data webservise in scroll )************* + body: Container( + child: ListView(scrollDirection: Axis.vertical, children: [ Container( - //child:litems == null?Column():Column(children: [ - child:litems == null?Column():Column(children: [ - //*********change to test screen************* */ - // child:Column(children: [ - Padding(padding: - EdgeInsets.only(top:MediaQuery.of(context).size.height*0.03), - - child:_locationBar(context),), - SizedBox(height: 10.0), - Container( - width: SizeConfig.screenWidth * 0.80, - child: TextField( - controller: _controller, - onSubmitted: (value) { - // fetch all the news related to the keyword - if (value.isNotEmpty) { - // vm.search(value); - } - }, - decoration: buildInputDecoration( - context, 'Search patiant'), + //child:litems == null?Column():Column(children: [ + child: litems == null + ? Column() + : Column( + children: [ + //*********change to test screen************* */ + // child:Column(children: [ + Padding( + padding: EdgeInsets.only( + top: MediaQuery.of(context).size.height * 0.03), + child: _locationBar(context), ), - ), - Column(children: responseModelList.map((PatiantInformtion item) { - return InkWell( - child: CardWithBgWidget( - - line1Text:item.nationalityName,//item['FirstName'],//patient.getFirstName(),//item['FirstName'], - line2Text:item.lastName, //responseModelList['LastName'],//item['LastName'],//'12/04/2020 - 02:00 PM', - line3Text: item.middleName, - heightPercentage: MediaQuery.of(context).size.height*0.00025, - widthPercentage: 0.80), - onTap: (){ - Navigator.of(context).pushNamed(PATIENTS_PROFILE, arguments: {"patient": responseModelList}); - }, - ); - }).toList()) - ], - - ), - ), - ], - )) - ); + SizedBox(height: 10.0), + Container( + width: SizeConfig.screenWidth * 0.80, + child: TextField( + controller: _controller, + onSubmitted: (value) { + // fetch all the news related to the keyword + if (value.isNotEmpty) { + // vm.search(value); + } + }, + decoration: + buildInputDecoration(context, 'Search patiant'), + ), + ), + Column( + children: + responseModelList.map((PatiantInformtion item) { + return InkWell( + child: CardWithBgWidget( + widget: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + item.nationalityName, + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + SizedBox( + height: 8, + ), + AppText(item.lastName, + fontSize: + 2.5 * SizeConfig.textMultiplier), + SizedBox( + height: 8, + ), + AppText(item.middleName, + fontSize: + 2.5 * SizeConfig.textMultiplier), + ], + ), + ), + onTap: () { + Navigator.of(context).pushNamed( + PATIENTS_PROFILE, + arguments: {"patient": item}); + }, + ); + }).toList(), + ), + ], + )) + ]))); } //***********amjad update************* - InputDecoration buildInputDecoration(BuildContext context, hint) { + InputDecoration buildInputDecoration(BuildContext context, hint) { return InputDecoration( - prefixIcon:Icon(Icons.search,color: Colors.red), + prefixIcon: Icon(Icons.search, color: Colors.red), filled: true, fillColor: Colors.white, //Image.asset(asset), - /* icon: Padding( + /* icon: Padding( padding: const EdgeInsets.all(8.0), child: Icon(Icons.search), ),*/ @@ -171,72 +193,52 @@ class _PatientsScreenState extends State { borderSide: BorderSide(color: Theme.of(context).primaryColor), )); } + //************* - Widget _locationBar(BuildContext _context){ + Widget _locationBar(BuildContext _context) { + //********* + //********* - - //********* return Container( - height: MediaQuery.of(context).size.height*0.065, - width:SizeConfig.screenWidth * 0.80, - decoration: BoxDecoration( - color:Color(0Xff59434f),//Color.fromARGB(89, 67, 79,0), - borderRadius: BorderRadius.circular(20) - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly,mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: _locations.map((l){ - bool _isActive=_locations[_activeLocation]==l ? true : false ; - return Column( - mainAxisSize: MainAxisSize.min, - children: [InkWell(child:Text(l , - style:TextStyle(fontSize: 15,color:Colors.white,fontWeight:FontWeight.bold), - ), - onTap: () { - print(l); - print(_locations.indexOf(l)); - setState(() { - _activeLocation=_locations.indexOf(l); - }); - } - - ), - - _isActive? Container( - decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), - color: Colors.white), - height: 3, - width: 80, - ):Container() - ]); - }).toList(), - )); - } -} - //*********************** - //************************************ -class CustomShapeClipper extends CustomClipper { - @override - Path getClip(Size size) { - final Path path = Path(); - path.lineTo(0.0, size.height); - - var firstEndPoint = Offset(size.width * .5, size.height / 2); - var firstControlpoint = Offset(size.width * 0.25, size.height * 0.95 + 30); - path.quadraticBezierTo(firstControlpoint.dx, firstControlpoint.dy, - firstEndPoint.dx, firstEndPoint.dy); - - var secondEndPoint = Offset(size.width, size.height * 0.10); - var secondControlPoint = Offset(size.width * .75, size.height * .10 - 20); - path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy, - secondEndPoint.dx, secondEndPoint.dy); - - path.lineTo(size.width, 0.0); - path.close(); - return path; + height: MediaQuery.of(context).size.height * 0.065, + width: SizeConfig.screenWidth * 0.80, + decoration: BoxDecoration( + color: Color(0Xff59434f), //Color.fromARGB(89, 67, 79,0), + borderRadius: BorderRadius.circular(20)), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: _locations.map((l) { + bool _isActive = _locations[_activeLocation] == l ? true : false; + return Column(mainAxisSize: MainAxisSize.min, children: [ + InkWell( + child: Text( + l, + style: TextStyle( + fontSize: 15, + color: Colors.white, + fontWeight: FontWeight.bold), + ), + onTap: () { + print(l); + print(_locations.indexOf(l)); + setState(() { + _activeLocation = _locations.indexOf(l); + }); + }), + _isActive + ? Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white), + height: 3, + width: 80, + ) + : Container() + ]); + }).toList(), + )); } - - @override - bool shouldReclip(CustomClipper oldClipper) => true; } +//*********************** diff --git a/lib/screens/patients/patient_profile_screen.dart b/lib/screens/patients/profile/patient_profile_screen.dart similarity index 72% rename from lib/screens/patients/patient_profile_screen.dart rename to lib/screens/patients/profile/patient_profile_screen.dart index fba86c13..5241f18c 100644 --- a/lib/screens/patients/patient_profile_screen.dart +++ b/lib/screens/patients/profile/patient_profile_screen.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import '../../widgets/patients/profile/patient_profile_widget.dart'; -import '../../widgets/shared/app_scaffold_widget.dart'; +import '../../../widgets/patients/profile/patient_profile_widget.dart'; +import '../../../widgets/shared/app_scaffold_widget.dart'; class PatientProfileScreen extends StatelessWidget { const PatientProfileScreen({Key key}) : super(key: key); diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_screen.dart new file mode 100644 index 00000000..ab36a618 --- /dev/null +++ b/lib/screens/patients/profile/vital_sign/vital_sign_screen.dart @@ -0,0 +1,134 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import '../../../../config/shared_pref_kay.dart'; +import '../../../../models/patient/vital_sign_req_model.dart'; +import '../../../../providers/patients_provider.dart'; +import '../../../../screens/patients/patiant_info_model.dart'; +import '../../../../util/dr_app_shared_pref.dart'; +import '../../../../widgets/shared/app_scaffold_widget.dart'; +import '../../../../widgets/shared/card_with_bg_widget.dart'; +import '../../../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; + +DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); + +/* + *@author: Elham Rababah + *@Date:26/4/2020 + *@param: + *@return:VitalSignScreen + *@desc: VitalSignScreen class + */ + +class VitalSignScreen extends StatefulWidget { + @override + _VitalSignScreenState createState() => _VitalSignScreenState(); +} + +class _VitalSignScreenState extends State { + PatientsProvider patientsProv; + var _isInit = true; + + /* + *@author: Elham Rababah + *@Date:28/4/2020 + *@param: context + *@return: + *@desc: getVitalSignList Function + */ + getVitalSignList(context) { + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + PatiantInformtion patient = routeArgs['patient']; + sharedPref.getString(TOKEN).then((token) { + VitalSignReqModel vitalSignReqModel = VitalSignReqModel( + patientID: 1237159, //patient.patientId, + projectID: 12, //patient.projectId, + tokenID: '@dm!n', + patientTypeID: patient.patientType, + inOutpatientType: 2, + languageID: 2, + transNo: 0, + ); + //patient.admissionNo != null ? int.parse(patient.admissionNo) : 0); + patientsProv.getPatientVitalSign(vitalSignReqModel.toJson()); + }); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + patientsProv = Provider.of(context); + getVitalSignList(context); + } + _isInit = false; + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: "VITAL SIGN", + body: patientsProv.isLoading + ? DrAppCircularProgressIndeicator() + : patientsProv.isError + ? Center( + child: Text( + patientsProv.error, + style: TextStyle(color: Theme.of(context).errorColor), + ), + ) + : patientsProv.patientVitalSignList.length == 0 + ? Center( + child: Text( + 'You don\'t have any Schedule', + style: TextStyle(color: Theme.of(context).errorColor), + ), + ) + : Container( + child: ListView.builder( + itemCount: patientsProv.patientVitalSignList.length, + itemBuilder: (BuildContext ctxt, int index) { + return InkWell( + child: CardWithBgWidget( + widget: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + 'DoctorName - ${patientsProv.patientVitalSignList[index].doctorName}', + fontSize: 2.5 * SizeConfig.textMultiplier, + ), + SizedBox( + height: 8, + ), + AppText('painScoreDesc - ${patientsProv.patientVitalSignList[index].painScoreDesc}', + fontSize: + 2.5 * SizeConfig.textMultiplier), + SizedBox( + height: 8, + ), + ], + ), + ), + onTap: () {}, + ); + }), + ), + ); + } +} + +// patientsProv.patientVitalSignList.map((VitalSignResModel item) { +// return InkWell( +// child: CardWithBgWidget( +// line1Text: 'DoctorName - ${item.doctorName}', +// line2Text: +// 'PainScoreDesc - ${item.painScoreDesc}', +// heightPercentage: 0.15, +// widthPercentage: 0.80), +// onTap: () { +// Navigator.of(context).pushNamed(VITAL_SIGN); +// }, +// ); +// }).toList() diff --git a/lib/util/helpers.dart b/lib/util/helpers.dart index fb303a15..a0a54c72 100644 --- a/lib/util/helpers.dart +++ b/lib/util/helpers.dart @@ -4,7 +4,10 @@ import 'package:flutter/material.dart'; import '../config/size_config.dart'; import '../util/dr_app_toast_msg.dart'; +import 'package:connectivity/connectivity.dart'; + DrAppToastMsg toastMsg = DrAppToastMsg(); + /* *@author: Elham Rababah *@Date:12/4/2020 @@ -45,8 +48,7 @@ class Helpers { children: items.map((item) { return Text( '${item["$decKey"]}', - style: - TextStyle(color: Theme.of(context).primaryColor, fontSize: 20), + style: TextStyle(fontSize: 20), ); }).toList(), @@ -60,6 +62,13 @@ class Helpers { ); } +/* + *@author: Elham Rababah + *@Date:12/4/2020 + *@param: msg + *@return: + *@desc: showErrorToast +*/ showErrorToast([msg = null]) { String localMsg = 'Something wrong happened, please contact the admin'; @@ -69,4 +78,22 @@ class Helpers { toastMsg.showErrorToast(localMsg); } + +/* + *@author: Mohammad Aljammal + *@Date:27/4/2020 + *@param: + *@return: Boolean + *@desc: Check The Internet Connection + */ + static Future checkConnection() async { + ConnectivityResult connectivityResult = + await (Connectivity().checkConnectivity()); + if ((connectivityResult == ConnectivityResult.mobile) || + (connectivityResult == ConnectivityResult.wifi)) { + return true; + } else { + return false; + } + } } diff --git a/lib/widgets/auth/verfiy_account.dart b/lib/widgets/auth/verfiy_account.dart index bf050556..e8c97a54 100644 --- a/lib/widgets/auth/verfiy_account.dart +++ b/lib/widgets/auth/verfiy_account.dart @@ -200,7 +200,13 @@ class _VerifyAccountState extends State { } return null; } - +/* + *@author: Elham Rababah + *@Date:28/4/2020 + *@param: context + *@return:InputDecoration + *@desc: buildInputDecoration + */ InputDecoration buildInputDecoration(BuildContext context) { return InputDecoration( // ts/images/password_icon.png @@ -215,6 +221,13 @@ class _VerifyAccountState extends State { )); } +/* + *@author: Elham Rababah + *@Date:28/4/2020 + *@param: + *@return: RichText + *@desc: buildText + */ RichText buildText() { var text = RichText( text: new TextSpan( @@ -253,7 +266,7 @@ class _VerifyAccountState extends State { verifyAccountFormValue['digit3'] + verifyAccountFormValue['digit4']; print(activationCode); - + print('${_loggedUser}'); Map model = { "activationCode": activationCode, "DoctorID": _loggedUser['DoctorID'], diff --git a/lib/widgets/patients/dynamic_elements.dart b/lib/widgets/patients/dynamic_elements.dart index 443c7385..f8e3e6ac 100644 --- a/lib/widgets/patients/dynamic_elements.dart +++ b/lib/widgets/patients/dynamic_elements.dart @@ -1,5 +1,5 @@ import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/patient_model.dart'; +import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; diff --git a/lib/widgets/patients/profile/Profile_general_info_Widget.dart b/lib/widgets/patients/profile/Profile_general_info_Widget.dart index 5e4b22d7..767e5377 100644 --- a/lib/widgets/patients/profile/Profile_general_info_Widget.dart +++ b/lib/widgets/patients/profile/Profile_general_info_Widget.dart @@ -1,4 +1,7 @@ +import 'package:doctor_app_flutter/providers/patients_provider.dart'; +import 'package:doctor_app_flutter/screens/patients/patiant_info_model.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import './profile_general_info_content_widget.dart'; import '../../../config/size_config.dart'; @@ -12,26 +15,28 @@ import '../../shared/rounded_container_widget.dart'; *@desc: Profile General Info Widget class */ class ProfileGeneralInfoWidget extends StatelessWidget { - const ProfileGeneralInfoWidget({ - Key key, - }) : super(key: key); + ProfileGeneralInfoWidget({Key key, this.patient}) : super(key: key); + + PatiantInformtion patient; @override Widget build(BuildContext context) { + // PatientsProvider patientsProv = Provider.of(context); + // patient = patientsProv.getSelectedPatient(); return RoundedContainer( child: ListView( children: [ ProfileGeneralInfoContentWidget( title: "Age", - info: '55 Yr', + info: '${patient.age}', ), ProfileGeneralInfoContentWidget( title: "Contact Number", - info: '00 966 5000000000', + info: '${patient.mobileNumber}', ), ProfileGeneralInfoContentWidget( title: "Email", - info: 'Elham@yahoo.com', + info: '${patient.emailAddress}', ), ], ), @@ -39,4 +44,4 @@ class ProfileGeneralInfoWidget extends StatelessWidget { height: SizeConfig.screenHeight * 0.25, ); } -} \ No newline at end of file +} diff --git a/lib/widgets/patients/profile/patient_profile_widget.dart b/lib/widgets/patients/profile/patient_profile_widget.dart index 9a1d3437..5dd70fb9 100644 --- a/lib/widgets/patients/profile/patient_profile_widget.dart +++ b/lib/widgets/patients/profile/patient_profile_widget.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/screens/patients/patiant_info_model.dart'; import 'package:flutter/material.dart'; import './Profile_general_info_Widget.dart'; @@ -13,12 +14,49 @@ import './profile_status_info_widget.dart'; *@desc: Patient Profile Widget */ class PatientProfileWidget extends StatelessWidget { + // Map patient = { + // "ProjectID": 15, + // "ClinicID": null, + // "DoctorID": 70907, + // "PatientID": 3315674, + // "DoctorName": "MOQBIL ABDULLAH AL HODAITHY", + // "DoctorNameN": null, + // "FirstName": "WALEED", + // "MiddleName": "ALI", + // "LastName": "AL-YAZIDI", + // "FirstNameN": null, + // "MiddleNameN": null, + // "LastNameN": null, + // "Gender": 1, + // "DateofBirth": "/Date(534286800000+0300)/", + // "NationalityID": null, + // "MobileNumber": "0500014559", + // "EmailAddress": "unknown@unknown.com", + // "PatientIdentificationNo": "1063236754", + // "NationalityName": "Saudi", + // "NationalityNameN": null, + // "PatientStatusType": null, + // "PatientType": 1, + // "AppointmentDate": "/Date(1587848400000+0300)/", + // "StartTime": "13:00:00", + // "Age": "34 Yr", + // "ClinicDescription": "INTERNAL MEDICINE CLINIC", + // "GenderDescription": "Male", + // "AdmissionDate": "/Date(1587848400000+0300)/", + // "AdmissionNo": "2020008652" + // }; + + PatiantInformtion patient; + + @override Widget build(BuildContext context) { + final routeArgs =ModalRoute.of(context).settings.arguments as Map; + patient = routeArgs['patient']; return ListView(padding: EdgeInsets.zero, children: [ - ProfileHeaderWidget(), - ProfileGeneralInfoWidget(), - ProfileMedicalInfoWidget(), + ProfileHeaderWidget(patient: patient), + ProfileGeneralInfoWidget(patient: patient), + ProfileMedicalInfoWidget(patient: patient), ProfileStatusInfoWidget() ]); } diff --git a/lib/widgets/patients/profile/profile_header_widget.dart b/lib/widgets/patients/profile/profile_header_widget.dart index 05a132ac..bceb8bfe 100644 --- a/lib/widgets/patients/profile/profile_header_widget.dart +++ b/lib/widgets/patients/profile/profile_header_widget.dart @@ -1,5 +1,8 @@ +import 'package:doctor_app_flutter/providers/patients_provider.dart'; +import 'package:doctor_app_flutter/screens/patients/patiant_info_model.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; import '../../../config/size_config.dart'; import '../../shared/profile_image_widget.dart'; @@ -12,23 +15,27 @@ import '../../shared/profile_image_widget.dart'; *@desc: Profile Header Widget class */ class ProfileHeaderWidget extends StatelessWidget { - const ProfileHeaderWidget({ + ProfileHeaderWidget({ Key key, + this.patient }) : super(key: key); + PatiantInformtion patient; + @override Widget build(BuildContext context) { + // PatientsProvider patientsProv = Provider.of(context); + // patient = patientsProv.getSelectedPatient(); return Container( height: SizeConfig.heightMultiplier * 30, child: ProfileImageWidget( url: "http://images4.fanpop.com/image/photos/16200000/David-Schwimmer-Ross-Geller-ross-geller-16258927-629-779.jpg", - name: "Fahad AlSlehm", - des: "324599", + name: patient.firstName + ' ' + patient.lastName, + des: patient.patientId.toString(), height: SizeConfig.heightMultiplier * 17, width: SizeConfig.heightMultiplier * 17, color: Hexcolor('#58434F')), ); } } - diff --git a/lib/widgets/patients/profile/profile_medical_info_widget.dart b/lib/widgets/patients/profile/profile_medical_info_widget.dart index 198f6147..80175001 100644 --- a/lib/widgets/patients/profile/profile_medical_info_widget.dart +++ b/lib/widgets/patients/profile/profile_medical_info_widget.dart @@ -1,3 +1,5 @@ +import 'package:doctor_app_flutter/routes.dart'; +import 'package:doctor_app_flutter/screens/patients/patiant_info_model.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; @@ -5,7 +7,6 @@ import '../../../config/size_config.dart'; import '../../shared/app_texts_widget.dart'; import '../../shared/rounded_container_widget.dart'; - /* *@author: Elham Rababah *@Date:22/4/2020 @@ -14,14 +15,12 @@ import '../../shared/rounded_container_widget.dart'; *@desc: Profile Medical Info Widget */ class ProfileMedicalInfoWidget extends StatelessWidget { - const ProfileMedicalInfoWidget({ - Key key, - }) : super(key: key); - + ProfileMedicalInfoWidget({Key key, this.patient}) : super(key: key); + PatiantInformtion patient; @override Widget build(BuildContext context) { String url = "assets/images/"; - final double contWidth = SizeConfig.screenWidth * 0.70; + final double contWidth = SizeConfig.realScreenWidth * 0.70; final double contHeight = SizeConfig.screenHeight * 0.30; return RoundedContainer( @@ -44,11 +43,16 @@ class ProfileMedicalInfoWidget extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - CircleAvatarWidget( - des: 'Vital Sign', - url: url + 'heartbeat.png', - width: (contWidth) / 3.5, - height: (contWidth) / 3.5, + InkWell( + onTap: () { + navigator(context,VITAL_SIGN); + }, + child: CircleAvatarWidget( + des: 'Vital Sign', + url: url + 'heartbeat.png', + width: (contWidth) / 3.5, + height: (contWidth) / 3.5, + ), ), CircleAvatarWidget( des: 'Lab Result', @@ -79,6 +83,11 @@ class ProfileMedicalInfoWidget extends StatelessWidget { height: contHeight, ); } + + void navigator(BuildContext context,route) { + Navigator.of(context).pushNamed(VITAL_SIGN, + arguments: {'patient': patient}); + } } class CircleAvatarWidget extends StatelessWidget { @@ -106,7 +115,7 @@ class CircleAvatarWidget extends StatelessWidget { decoration: new BoxDecoration( // color: Colors.green, // border color shape: BoxShape.circle, - border: Border.all(color: Hexcolor('#B7831A'),width: 1.5)), + border: Border.all(color: Hexcolor('#B7831A'), width: 1.5)), child: CircleAvatar( radius: SizeConfig.imageSizeMultiplier * 12, child: Image.asset(url), diff --git a/lib/widgets/shared/app_drawer_widget.dart b/lib/widgets/shared/app_drawer_widget.dart index 4651684c..038af349 100644 --- a/lib/widgets/shared/app_drawer_widget.dart +++ b/lib/widgets/shared/app_drawer_widget.dart @@ -1,6 +1,9 @@ +import 'package:doctor_app_flutter/providers/schedule_provider.dart'; import 'package:doctor_app_flutter/routes.dart'; +import 'package:doctor_app_flutter/screens/my_schedule_screen.dart'; import 'package:doctor_app_flutter/screens/profile_screen.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import '../../config/size_config.dart'; import '../../widgets/shared/drawer_item_widget.dart'; @@ -27,7 +30,7 @@ class _AppDrawerState extends State { Container( height: SizeConfig.heightMultiplier * 30, child: InkWell( - child: DrawerHeader( + child: DrawerHeader( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -50,24 +53,37 @@ class _AppDrawerState extends State { ], ), ), - onTap: () { - Navigator.of(context).pushNamed(PROFILE); - }, ), + onTap: () { + Navigator.of(context).pushNamed(PROFILE); + }, + ), ), InkWell( child: DrawerItem("My Schedule", Icons.table_chart), onTap: () { - Navigator.of(context).pushNamed(MY_SCHEDULE); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ChangeNotifierProvider( + create: (_) => ScheduleProvider(), + child: MyScheduleScreen(), + ), + ), + ); }, ), - InkWell(child: DrawerItem("Settings", Icons.settings), onTap: (){ + InkWell( + child: DrawerItem("Settings", Icons.settings), + onTap: () { Navigator.of(context).pushNamed(SETTINGS); - - },), - InkWell(child: DrawerItem("QR Reader", Icons.search),onTap:(){ + }, + ), + InkWell( + child: DrawerItem("QR Reader", Icons.search), + onTap: () { Navigator.of(context).pushNamed(QR_READER); - - } ,), + }, + ), ])), ), width: SizeConfig.realScreenWidth * 0.55, diff --git a/lib/widgets/shared/app_scaffold_widget.dart b/lib/widgets/shared/app_scaffold_widget.dart index 5fd84067..897e0ba1 100644 --- a/lib/widgets/shared/app_scaffold_widget.dart +++ b/lib/widgets/shared/app_scaffold_widget.dart @@ -3,9 +3,9 @@ import 'package:hexcolor/hexcolor.dart'; import '../../config/size_config.dart'; import '../../presentation/doctor_app_icons.dart'; -import '../../screens/patients/patients_screen.dart'; import '../../widgets/shared/app_drawer_widget.dart'; import '../../widgets/shared/app_loader_widget.dart'; +import '../../widgets/shared/custom_shape_clipper.dart'; class AppScaffold extends StatelessWidget { bool pageOnly = false; @@ -24,7 +24,7 @@ class AppScaffold extends StatelessWidget { this.appBarTitle, this.showAppBar, this.showBottomBar, - this.showAppDrawer, + this.showAppDrawer = true, this.body, this.showbg, this.showCurve, @@ -45,15 +45,10 @@ class AppScaffold extends StatelessWidget { color: Colors.black, fontWeight: FontWeight.bold)), title: Text(appBarTitle.toUpperCase()), leading: Builder(builder: (BuildContext context) { - return new GestureDetector( - onTap: () { - Scaffold.of(context).openDrawer(); - }, - child: IconButton( - icon: Icon(Icons.menu), - color: Colors.black, - onPressed: () => Scaffold.of(context).openDrawer(), - ), + return IconButton( + icon: showAppDrawer ? Icon(Icons.menu) : Icon(Icons.arrow_back_ios) , + color: Colors.black, + onPressed: () => showAppDrawer? Scaffold.of(context).openDrawer() : Navigator.pop(context), ); }), centerTitle: true, diff --git a/lib/widgets/shared/card_with_bg_widget.dart b/lib/widgets/shared/card_with_bg_widget.dart index 1936b586..07562a5e 100644 --- a/lib/widgets/shared/card_with_bg_widget.dart +++ b/lib/widgets/shared/card_with_bg_widget.dart @@ -3,80 +3,50 @@ import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart' import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; +/* + *@author: Mohammad Aljammal + *@Date:27/4/2020 + *@param: Widget + *@return: + *@desc: Card With Bg Widget + */ + class CardWithBgWidget extends StatelessWidget { - String line1Text; - String line2Text; - String line3Text; - IconData icon; - double heightPercentage; - double widthPercentage; - CardWithBgWidget( - {this.line1Text = '', - this.line2Text = '', - this.line3Text = '', - this.icon, - this.heightPercentage, - this.widthPercentage}); + final Widget widget; + + CardWithBgWidget({@required this.widget}); @override Widget build(BuildContext context) { - return Stack( - children: [ - RoundedContainer( - child:Container( - height: SizeConfig.screenHeight * heightPercentage, - width: SizeConfig.screenWidth * widthPercentage, - ), - raduis: 10, - backgroundColor: Hexcolor('#58434F'), - showBorder: true, - borderColor: Hexcolor('#707070'), - borderWidth: 0.5, + return Container( + margin: EdgeInsets.symmetric(vertical: 10.0), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(10.0), ), - Positioned( - left: 10, - child: RoundedContainer( - child:Container( - padding: const EdgeInsets.all(15.0), - height: SizeConfig.screenHeight * heightPercentage, - width: SizeConfig.screenWidth * widthPercentage, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(line1Text, style: textStyle(2.5)), - SizedBox( - height: 8, - ), - Text(line2Text, style: textStyle(2.5)), - SizedBox( - height: 8, - ), - Row( - children: [ - Icon(icon), - Text(line3Text, style: textStyle(2.5)) - ], - ) - ], - ), + border: Border.all(color: Hexcolor('#707070'), width: 2.0), + ), + child: Material( + borderRadius: BorderRadius.all(Radius.circular(10.0)), + child: Stack( + children: [ + Positioned( + child: Container( + width: 10, + color: Hexcolor('#58434F'), ), - elevation: 0, - // raduis: 0, - showBorder: true, - borderColor: Hexcolor('#707070'), - customCornerRaduis: true, - bottomLeft: 0, - topLeft: 0, - bottomRight: 10, - topRight: 10, - borderWidth: 0.5), + bottom: 0, + top: 0, + left: 0, + ), + Container( + padding: EdgeInsets.all(15.0), + margin: EdgeInsets.only(left: 10), + child: widget) + ], ), - ], + ), ); } - - TextStyle textStyle(size, [FontWeight weight]) { - return TextStyle( - fontSize: size * SizeConfig.textMultiplier, fontWeight: weight); - } } diff --git a/pubspec.lock b/pubspec.lock index e717a7f9..8cd1be91 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -35,7 +35,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.1" bazel_worker: dependency: transitive description: @@ -49,7 +49,7 @@ packages: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "2.0.0" build: dependency: transitive description: @@ -126,7 +126,7 @@ packages: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.1.3" checked_yaml: dependency: transitive description: @@ -134,6 +134,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.2" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" code_builder: dependency: transitive description: @@ -147,7 +154,28 @@ packages: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.14.12" + connectivity: + dependency: "direct main" + description: + name: connectivity + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.8+2" + connectivity_macos: + dependency: transitive + description: + name: connectivity_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0+2" + connectivity_platform_interface: + dependency: transitive + description: + name: connectivity_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" convert: dependency: transitive description: @@ -183,6 +211,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.4" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" fixnum: dependency: transitive description: @@ -289,13 +324,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.9.10" - image: - dependency: transitive - description: - name: image - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.4" imei_plugin: dependency: "direct main" description: @@ -393,7 +421,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" + version: "1.7.0" pedantic: dependency: transitive description: @@ -408,20 +436,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.1+1" - petitparser: + platform: dependency: transitive description: - name: petitparser + name: platform url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" - platform: + version: "2.2.1" + plugin_platform_interface: dependency: transitive description: - name: platform + name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" + version: "1.0.2" pool: dependency: transitive description: @@ -552,7 +580,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "1.7.0" stack_trace: dependency: transitive description: @@ -594,7 +622,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.11" + version: "0.2.15" timing: dependency: transitive description: @@ -630,13 +658,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0" - xml: - dependency: transitive - description: - name: xml - url: "https://pub.dartlang.org" - source: hosted - version: "3.5.0" yaml: dependency: transitive description: @@ -646,4 +667,4 @@ packages: version: "2.2.0" sdks: dart: ">=2.7.0 <3.0.0" - flutter: ">=1.12.13+hotfix.4 <2.0.0" + flutter: ">=1.12.13+hotfix.5 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 996ef2fc..1f7041ad 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: local_auth: ^0.6.1+3 http_interceptor: ^0.2.0 progress_hud_v2: ^2.0.0 + connectivity: ^0.4.8+2 # The following adds the Cupertino Icons font to your application.