Merge branch 'development' of https://gitlab.com/Cloud_Solution/diplomatic-quarter into sultan-patientapp

merge-update-with-lab-changes
Sultan Khan 5 years ago
commit 3ac69692be

@ -10,6 +10,7 @@
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -20,7 +20,7 @@ PODS:
- Firebase/Messaging (6.33.0): - Firebase/Messaging (6.33.0):
- Firebase/CoreOnly - Firebase/CoreOnly
- FirebaseMessaging (~> 4.7.0) - FirebaseMessaging (~> 4.7.0)
- firebase_core (0.5.2): - firebase_core (0.5.3):
- Firebase/CoreOnly (~> 6.33.0) - Firebase/CoreOnly (~> 6.33.0)
- Flutter - Flutter
- firebase_core_web (0.1.0): - firebase_core_web (0.1.0):
@ -70,7 +70,7 @@ PODS:
- Flutter - Flutter
- flutter_tts (0.0.1): - flutter_tts (0.0.1):
- Flutter - Flutter
- "geolocator (6.0.0+4)": - geolocator (6.1.9):
- Flutter - Flutter
- google_maps_flutter (0.0.1): - google_maps_flutter (0.0.1):
- Flutter - Flutter
@ -110,6 +110,8 @@ PODS:
- Flutter - Flutter
- local_auth (0.0.1): - local_auth (0.0.1):
- Flutter - Flutter
- location (0.0.1):
- Flutter
- manage_calendar_events (0.0.1): - manage_calendar_events (0.0.1):
- Flutter - Flutter
- map_launcher (0.0.1): - map_launcher (0.0.1):
@ -213,6 +215,7 @@ DEPENDENCIES:
- image_picker (from `.symlinks/plugins/image_picker/ios`) - image_picker (from `.symlinks/plugins/image_picker/ios`)
- just_audio (from `.symlinks/plugins/just_audio/ios`) - just_audio (from `.symlinks/plugins/just_audio/ios`)
- local_auth (from `.symlinks/plugins/local_auth/ios`) - local_auth (from `.symlinks/plugins/local_auth/ios`)
- location (from `.symlinks/plugins/location/ios`)
- manage_calendar_events (from `.symlinks/plugins/manage_calendar_events/ios`) - manage_calendar_events (from `.symlinks/plugins/manage_calendar_events/ios`)
- map_launcher (from `.symlinks/plugins/map_launcher/ios`) - map_launcher (from `.symlinks/plugins/map_launcher/ios`)
- maps_launcher (from `.symlinks/plugins/maps_launcher/ios`) - maps_launcher (from `.symlinks/plugins/maps_launcher/ios`)
@ -315,6 +318,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/just_audio/ios" :path: ".symlinks/plugins/just_audio/ios"
local_auth: local_auth:
:path: ".symlinks/plugins/local_auth/ios" :path: ".symlinks/plugins/local_auth/ios"
location:
:path: ".symlinks/plugins/location/ios"
manage_calendar_events: manage_calendar_events:
:path: ".symlinks/plugins/manage_calendar_events/ios" :path: ".symlinks/plugins/manage_calendar_events/ios"
map_launcher: map_launcher:
@ -385,7 +390,7 @@ SPEC CHECKSUMS:
device_calendar: 23b28a5f1ab3bf77e34542fb1167e1b8b29a98f5 device_calendar: 23b28a5f1ab3bf77e34542fb1167e1b8b29a98f5
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
Firebase: 8db6f2d1b2c5e2984efba4949a145875a8f65fe5 Firebase: 8db6f2d1b2c5e2984efba4949a145875a8f65fe5
firebase_core: 350ba329d1641211bc6183a3236893cafdacfea7 firebase_core: 5d6a02f3d85acd5f8321c2d6d62877626a670659
firebase_core_web: d501d8b946b60c8af265428ce483b0fff5ad52d1 firebase_core_web: d501d8b946b60c8af265428ce483b0fff5ad52d1
firebase_messaging: 0aea2cd5885b65e19ede58ee3507f485c992cc75 firebase_messaging: 0aea2cd5885b65e19ede58ee3507f485c992cc75
FirebaseCore: d889d9e12535b7f36ac8bfbf1713a0836a3012cd FirebaseCore: d889d9e12535b7f36ac8bfbf1713a0836a3012cd
@ -400,7 +405,7 @@ SPEC CHECKSUMS:
flutter_local_notifications: 9e4738ce2471c5af910d961a6b7eadcf57c50186 flutter_local_notifications: 9e4738ce2471c5af910d961a6b7eadcf57c50186
flutter_plugin_android_lifecycle: dc0b544e129eebb77a6bfb1239d4d1c673a60a35 flutter_plugin_android_lifecycle: dc0b544e129eebb77a6bfb1239d4d1c673a60a35
flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d
geolocator: 1ae40084cc6c1586ce5ad12cfc3fd38c64d05f2f geolocator: 057a0c63a43e9c5296d8ad845a3ac8e6df23d899
google_maps_flutter: c7f9c73576de1fbe152a227bfd6e6c4ae8088619 google_maps_flutter: c7f9c73576de1fbe152a227bfd6e6c4ae8088619
GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833 GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833
GoogleMaps: 4b5346bddfe6911bb89155d43c903020170523ac GoogleMaps: 4b5346bddfe6911bb89155d43c903020170523ac
@ -410,6 +415,7 @@ SPEC CHECKSUMS:
image_picker: 9c3312491f862b28d21ecd8fdf0ee14e601b3f09 image_picker: 9c3312491f862b28d21ecd8fdf0ee14e601b3f09
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
local_auth: 25938960984c3a7f6e3253e3f8d962fdd16852bd local_auth: 25938960984c3a7f6e3253e3f8d962fdd16852bd
location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740
manage_calendar_events: 0338d505ea26cdfd20cd883279bc28afa11eca34 manage_calendar_events: 0338d505ea26cdfd20cd883279bc28afa11eca34
map_launcher: e325db1261d029ff33e08e03baccffe09593ffea map_launcher: e325db1261d029ff33e08e03baccffe09593ffea
maps_launcher: eae38ee13a9c3f210fa04e04bb4c073fa4c6ed92 maps_launcher: eae38ee13a9c3f210fa04e04bb4c073fa4c6ed92

@ -282,6 +282,9 @@ const GET_USER_TERMS = 'Services/Patients.svc/REST/GetUserTermsAndConditions';
const UPDATE_HEALTH_TERMS = const UPDATE_HEALTH_TERMS =
'services/Patients.svc/REST/UpdatePateintHealthSummaryReport'; 'services/Patients.svc/REST/UpdatePateintHealthSummaryReport';
const GET_PATIENT_HEALTH_STATS =
'Services/Patients.svc/REST/Med_GetTransactionsSts';
//URL to get medicine and pharmacies list //URL to get medicine and pharmacies list
const CHANNEL = 3; const CHANNEL = 3;
const GENERAL_ID = 'Cs2020@2016\$2958'; const GENERAL_ID = 'Cs2020@2016\$2958';
@ -380,6 +383,25 @@ const GET_CALL_REQUEST_TYPE_LOV =
const UPDATE_DIABETIC_RESULT = const UPDATE_DIABETIC_RESULT =
'Services/Patients.svc/REST/Patient_UpdateDiabeticResult'; 'Services/Patients.svc/REST/Patient_UpdateDiabeticResult';
const SEND_AVERAGE_BLOOD_SUGAR_REPORT =
'Services/Notifications.svc/REST/SendAverageBloodSugarReport';
const DEACTIVATE_DIABETIC_STATUS =
'services/Patients.svc/REST/Patient_DeactivateDiabeticStatus';
const DEACTIVATE_BLOOD_PRESSURES_STATUS =
'services/Patients.svc/REST/Patient_DeactivateBloodPressureStatus';
const UPDATE_BLOOD_PRESSURE_RESULT =
'Services/Patients.svc/REST/Patient_UpdateBloodPressureResult';
const SEND_AVERAGE_BLOOD_WEIGHT_REPORT =
'Services/Notifications.svc/REST/SendAverageBodyWeightReport';
const SEND_AVERAGE_BLOOD_PRESSURE_REPORT =
'Services/Notifications.svc/REST/SendAverageBloodPressureReport';
const UPDATE_WEIGHT_PRESSURE_RESULT =
'Services/Patients.svc/REST/Patient_UpdateWeightMeasurementResult';
const DEACTIVATE_WEIGHT_PRESSURE_RESULT =
'services/Patients.svc/REST/Patient_DeactivateWeightMeasurementStatus';
const GET_DOCTOR_RESPONSE = 'Services/Patients.svc/REST/GetDoctorResponse'; const GET_DOCTOR_RESPONSE = 'Services/Patients.svc/REST/GetDoctorResponse';
const UPDATE_READ_STATUS = 'Services/Patients.svc/REST/UpdateReadStatus'; const UPDATE_READ_STATUS = 'Services/Patients.svc/REST/UpdateReadStatus';
const INSERT_CALL_INFO = 'Services/Doctors.svc/REST/InsertCallInfo'; const INSERT_CALL_INFO = 'Services/Doctors.svc/REST/InsertCallInfo';

@ -583,6 +583,7 @@ const Map localizedValues = {
"BalanceAmount": {"en": "Wallet Amount", "ar": "مبلغ المحفظة"}, "BalanceAmount": {"en": "Wallet Amount", "ar": "مبلغ المحفظة"},
"TotalBalance": {"en": "Total Amount", "ar": "المبلغ الإجمالي"}, "TotalBalance": {"en": "Total Amount", "ar": "المبلغ الإجمالي"},
"CreateAdvancedPayment": {"en": "Recharge Wallet", "ar": "إعادة شحن المحفظة"}, "CreateAdvancedPayment": {"en": "Recharge Wallet", "ar": "إعادة شحن المحفظة"},
"AdvancePayment": {"en": "Advance Payment", "ar": "الدفع مقدما"}, "AdvancePayment": {"en": "Advance Payment", "ar": "الدفع مقدما"},
"AdvancePaymentLabel": { "AdvancePaymentLabel": {
"en": "en":
@ -1569,6 +1570,7 @@ const Map localizedValues = {
"en": "Track Delivery Driver", "en": "Track Delivery Driver",
"ar": "trackDeliveryDriver" "ar": "trackDeliveryDriver"
}, },
"NearestErDesc": { "NearestErDesc": {
"en": "en":
"\nThis service Displays nearest branch\n among all the branches of All Habib \n medical Group based on your current Location", "\nThis service Displays nearest branch\n among all the branches of All Habib \n medical Group based on your current Location",
@ -1606,6 +1608,7 @@ const Map localizedValues = {
"يرجى التأكد من أن عنوان البريد الإلكتروني محدث وأن العملية لعرض الجدول الزمني" "يرجى التأكد من أن عنوان البريد الإلكتروني محدث وأن العملية لعرض الجدول الزمني"
}, },
"add-new-child": {"en": "ADD NEW CHILD", "ar": "إضافة طفل جديد"}, "add-new-child": {"en": "ADD NEW CHILD", "ar": "إضافة طفل جديد"},
"send-child-email-msg": { "send-child-email-msg": {
"en": "Send the child's schedule to the email", "en": "Send the child's schedule to the email",
"ar": "أرسل جدول الطفل إلى البريد الإلكتروني" "ar": "أرسل جدول الطفل إلى البريد الإلكتروني"
@ -1619,6 +1622,38 @@ const Map localizedValues = {
"en": "Child added successfully", "en": "Child added successfully",
"ar": "تمت إضافة الطفل بنجاح" "ar": "تمت إضافة الطفل بنجاح"
}, },
"bloodSugar": {"en": "Blood", "ar": "السكر في الدم"},
"sugar": {"en": "Sugar", "ar": ""},
"bloodCholesterol": {"en": "Blood", "ar": " الكولسترول في الدم"},
"cholesterol": {"en": "Cholesterol", "ar": ""},
"triglycerides": {"en": "Triglycerides", "ar": "الدهون الثلاثية"},
"fatInBlood": {"en": "Fat In Blood", "ar": ""},
"convertFrom": {"en": "Convert From", "ar": "تحويل من"},
"calculate": {"en": "calculate", "ar": "حساب"},
"enterReadingValue": {"en": "Enter the reading value", "ar": "ادخل القيمة"},
"result": {"en": "Result", "ar": "النتيجة"},
"bloodSugarConversion": {
"en": "Blood Sugar Conversion",
"ar": "السكر في الدم"
},
"convertBloodSugarStatement": {
"en":
"Convert blood sugar/glucose from mmol/l (UK standard) to mg/dlt (US standard) and vice versa.",
"ar":
"تحويل مستوى السكر في الدم من مليمول/ لتر (مقياس المملكة المتحدة) الى ملغ/ ديسيلتر (مقياس الولايات المتحدة) والعكس"
},
"convertCholesterolStatement": {
"en": "Convert blood cholesterol from\n mmol/l to mg/dlt and vice versa.",
"ar":
"تحويل مستوى الكولسترول في الدم من مليمول/ لتر (مقياس المملكة المتحدة) الى ملغ/ ديسيلتر (مقياس الولايات المتحدة) والعكس"
},
"triglyceridesConvertStatement": {
"en": "Convert Triglycerides from mmol/l to mg/dlt and vice versa.",
"ar":
"تحويل مستوى الدهون الثلاثية في الدم من مليمول/ لتر (مقياس المملكة المتحدة) الى ملغ/ ديسيلتر (مقياس الولايات المتحدة) والعكس"
},
"my-tracker": {"en": "My Tracker", "ar": "قراءاتي"}, "my-tracker": {"en": "My Tracker", "ar": "قراءاتي"},
"weekly": {"en": "Weekly", "ar": "أسبوعي"}, "weekly": {"en": "Weekly", "ar": "أسبوعي"},
"monthly": {"en": "Monthly", "ar": "شهري"}, "monthly": {"en": "Monthly", "ar": "شهري"},
@ -1638,5 +1673,14 @@ const Map localizedValues = {
"en": "To view the terms and conditions", "en": "To view the terms and conditions",
"ar": "لعرض الشروط والأحكام" "ar": "لعرض الشروط والأحكام"
}, },
"WalkinAppo": {
"en": "Hospital Visit Appointment",
"ar": "موعد زيارة للمستشفى"
},
"videoAppo": {"en": "Video Call Appointment", "ar": "موعد اتصال فيديو"},
// "visit": {"en" : "Visit", "ar": "الزيارة"}, // "visit": {"en" : "Visit", "ar": "الزيارة"},
"weight-add": {"en": "Enter Weight Value", "ar": "أدخل الوزن "},
"systolic-add": {"en": "Enter Systolic Value", "ar": "أدخل قيمة الإنقباض "},
"diastolic-add": {"en": "Enter Diastolic Value", "ar": "أدخل قيمة الإنبساط "},
"cmc-heading": {"en": "Comprehensive Medical Checkup", "ar": "فحص طبي شامل"},
}; };

@ -68,6 +68,19 @@ class BloodPressureService extends BaseService {
super.error = error; super.error = error;
}, body: Map()); }, body: Map());
} }
Future sendReportByEmail() async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['isDentalAllowedBackend'] = false;
body['to'] = user.emailAddress;
await baseAppClient.post(SEND_AVERAGE_BLOOD_PRESSURE_REPORT,
onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
addDiabtecResult( addDiabtecResult(
{String bloodPressureDate, {String bloodPressureDate,
@ -93,4 +106,43 @@ class BloodPressureService extends BaseService {
super.error = error; super.error = error;
}, body: body); }, body: body);
} }
updateDiabtecResult(
{String bloodPressureDate,
String diastolicPressure,
String systolicePressure,
int measuredArm}) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['BloodPressureDate'] = bloodPressureDate;
body['DiastolicPressure'] = diastolicPressure;
body['SystolicePressure'] = systolicePressure;
body['MeasuredArm'] ='$measuredArm';
body['isDentalAllowedBackend'] = false;
await baseAppClient.post(UPDATE_BLOOD_PRESSURE_RESULT,
onSuccess: (response, statusCode) async {
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future deactivateDiabeticStatus({int lineItemNo }) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['isDentalAllowedBackend'] = false;
body['LineItemNo'] =lineItemNo;
await baseAppClient.post(DEACTIVATE_BLOOD_PRESSURES_STATUS,
onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
} }

@ -24,6 +24,11 @@ class BloodSugarService extends BaseService {
monthDiabtectResultAverageList.clear(); monthDiabtectResultAverageList.clear();
weekDiabtectResultAverageList.clear(); weekDiabtectResultAverageList.clear();
yearDiabtecResultAverageList.clear(); yearDiabtecResultAverageList.clear();
monthDiabtecPatientResult.clear();
weekDiabtecPatientResult.clear();
yearDiabtecPatientResult.clear();
response['List_MonthDiabtectResultAverage'].forEach((item) { response['List_MonthDiabtectResultAverage'].forEach((item) {
monthDiabtectResultAverageList monthDiabtectResultAverageList
.add(MonthDiabtectResultAverage.fromJson(item)); .add(MonthDiabtectResultAverage.fromJson(item));
@ -76,15 +81,16 @@ class BloodSugarService extends BaseService {
body['BloodSugerDateChart'] = bloodSugerDateChart; body['BloodSugerDateChart'] = bloodSugerDateChart;
body['BloodSugerResult'] = bloodSugerResult; body['BloodSugerResult'] = bloodSugerResult;
body['DiabtecUnit'] = diabtecUnit; body['DiabtecUnit'] = diabtecUnit;
body['MeasuredTime'] = measuredTime; body['MeasuredTime'] = measuredTime+1;
body['isDentalAllowedBackend'] = false; body['isDentalAllowedBackend'] = false;
await baseAppClient.post(ADD_BLOOD_PRESSURE_RESULT, await baseAppClient.post(ADD_DIABTEC_RESULT,
onSuccess: (response, statusCode) async {}, onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, body: body); }, body: body);
} }
updateDiabtecResult({DateTime month,DateTime hour,String bloodSugerResult,String diabtecUnit, int measuredTime,int lineItemNo}) async { updateDiabtecResult({DateTime month,DateTime hour,String bloodSugerResult,String diabtecUnit, int measuredTime,int lineItemNo}) async {
hasError = false; hasError = false;
super.error = ""; super.error = "";
@ -93,7 +99,7 @@ class BloodSugarService extends BaseService {
body['DiabtecUnit'] = diabtecUnit; body['DiabtecUnit'] = diabtecUnit;
body['BloodSugerDateChart'] = '${month.year}-${month.month}-${month.day} ${hour.hour}:${hour.minute}:00'; body['BloodSugerDateChart'] = '${month.year}-${month.month}-${month.day} ${hour.hour}:${hour.minute}:00';
body['isDentalAllowedBackend'] = false; body['isDentalAllowedBackend'] = false;
body['MeasuredTime'] = measuredTime; body['MeasuredTime'] = measuredTime+1;
body['LineItemNo'] = lineItemNo; body['LineItemNo'] = lineItemNo;
await baseAppClient.post(UPDATE_DIABETIC_RESULT, await baseAppClient.post(UPDATE_DIABETIC_RESULT,
onSuccess: (response, statusCode) async {}, onSuccess: (response, statusCode) async {},
@ -102,4 +108,32 @@ class BloodSugarService extends BaseService {
super.error = error; super.error = error;
}, body: body); }, body: body);
} }
Future sendReportByEmail() async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['isDentalAllowedBackend'] = false;
body['to'] = user.emailAddress;
await baseAppClient.post(SEND_AVERAGE_BLOOD_SUGAR_REPORT,
onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future deactivateDiabeticStatus({int lineItemNo }) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['isDentalAllowedBackend'] = false;
body['LineItemNo'] =lineItemNo;
await baseAppClient.post(DEACTIVATE_DIABETIC_STATUS,
onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
} }

@ -6,11 +6,13 @@ import 'package:diplomaticquarterapp/core/model/my_trakers/weight/YearWeightMeas
import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart';
class WeightService extends BaseService { class WeightService extends BaseService {
///Average ///Average
List<MonthWeightMeasurementResultAverage> monthWeightMeasurementResultAverage = List(); List<MonthWeightMeasurementResultAverage>
List<WeekWeightMeasurementResultAverage> weekWeightMeasurementResultAverage = List(); monthWeightMeasurementResultAverage = List();
List<YearWeightMeasurementResultAverage> yearWeightMeasurementResultAverage = List(); List<WeekWeightMeasurementResultAverage> weekWeightMeasurementResultAverage =
List();
List<YearWeightMeasurementResultAverage> yearWeightMeasurementResultAverage =
List();
///Result ///Result
List<WeightMeasurementResult> monthWeightMeasurementResult = List(); List<WeightMeasurementResult> monthWeightMeasurementResult = List();
@ -59,7 +61,8 @@ class WeightService extends BaseService {
}); });
response['List_MonthWeightMeasurementResult'].forEach((item) { response['List_MonthWeightMeasurementResult'].forEach((item) {
monthWeightMeasurementResult.add(WeightMeasurementResult.fromJson(item)); monthWeightMeasurementResult
.add(WeightMeasurementResult.fromJson(item));
}); });
response['List_YearWeightMeasurementResult'].forEach((item) { response['List_YearWeightMeasurementResult'].forEach((item) {
@ -72,9 +75,7 @@ class WeightService extends BaseService {
} }
addWeightResult( addWeightResult(
{String weightDate, {String weightDate, String weightMeasured, int weightUnit}) async {
String weightMeasured,
int weightUnit}) async {
hasError = false; hasError = false;
super.error = ""; super.error = "";
@ -85,9 +86,53 @@ class WeightService extends BaseService {
body['isDentalAllowedBackend'] = false; body['isDentalAllowedBackend'] = false;
await baseAppClient.post(ADD_WEIGHT_PRESSURE_RESULT, await baseAppClient.post(ADD_WEIGHT_PRESSURE_RESULT,
onSuccess: (response, statusCode) async { onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
updateWeightResult({int lineItemNo, int weightUnit,String weightMeasured,String weightDate}) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['LineItemNo'] = lineItemNo;
body['weightUnit'] = '$weightUnit';
body['WeightMeasured'] = weightMeasured;
body['WeightDate'] = weightDate;
body['isDentalAllowedBackend'] = false;
await baseAppClient.post(UPDATE_WEIGHT_PRESSURE_RESULT,
onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future sendReportByEmail() async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['isDentalAllowedBackend'] = false;
body['to'] = user.emailAddress;
await baseAppClient.post(SEND_AVERAGE_BLOOD_WEIGHT_REPORT,
onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
deleteWeightResult({int lineItemNo, }) async {
hasError = false;
super.error = "";
Map<String, dynamic> body = Map();
body['LineItemNo'] = lineItemNo;
body['isDentalAllowedBackend'] = false;
}, await baseAppClient.post(DEACTIVATE_WEIGHT_PRESSURE_RESULT,
onSuccess: (response, statusCode) async {},
onFailure: (String error, int statusCode) { onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;

@ -1,33 +1,31 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_pressur/BloodPressureResult.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/blood_pressur/BloodPressureResult.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPatientResult.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/YearMonthlyChartDate.dart';
import 'package:diplomaticquarterapp/core/service/medical/BloodPressureService.dart'; import 'package:diplomaticquarterapp/core/service/medical/BloodPressureService.dart';
import 'package:diplomaticquarterapp/core/service/medical/BloodSugarService.dart';
import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/locator.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import '../../../core/viewModels/base_view_model.dart'; import '../../../core/viewModels/base_view_model.dart';
class BloodPressureViewMode extends BaseViewModel { class BloodPressureViewMode extends BaseViewModel {
BloodPressureService bloodPressureService = locator<BloodPressureService>(); BloodPressureService bloodPressureService = locator<BloodPressureService>();
///BLOOD List<BloodPressureResult> get monthDiabtecPatientResult =>
List<WeekChartDate> _bloodDiastolicPressureWeeklyTimeSeriesSalesList = List(); bloodPressureService.monthDiabtecPatientResult;
List<WeekChartDate> _bloodSystolicePressureWeeklyTimeSeriesSalesList = List();
List<YearMonthlyChartDate> _bloodDiastolicMonthlyTimeSeriesSalesList = List(); List<BloodPressureResult> get weekDiabtecPatientResult =>
List<YearMonthlyChartDate> _bloodSystolicMonthlyTimeSeriesSalesList = List(); bloodPressureService.weekDiabtecPatientResult;
List<WeekChartDate> _bloodSystoliceYearTimeSeriesSalesList = List(); List<BloodPressureResult> get yearDiabtecPatientResult =>
List<WeekChartDate> _bloodDiastolicYearTimeSeriesSalesList = List(); bloodPressureService.yearDiabtecPatientResult;
List<BloodPressureResult> get monthDiabtecPatientResult => bloodPressureService.monthDiabtecPatientResult; List<TimeSeriesSales2> weightWeekTimeSeriesDataTop = [];
List<TimeSeriesSales2> weightWeekTimeSeriesDataLow = [];
List<BloodPressureResult> get weekDiabtecPatientResult => bloodPressureService.weekDiabtecPatientResult; List<TimeSeriesSales3> weighMonthTimeSeriesDataTop = [];
List<TimeSeriesSales3> weighMonthTimeSeriesDataLow = [];
List<BloodPressureResult> get yearDiabtecPatientResult => bloodPressureService.yearDiabtecPatientResult; List<TimeSeriesSales2> weightYearTimeSeriesDataTop = [];
List<TimeSeriesSales2> weightYearTimeSeriesDataLow = [];
Future getBloodPressure() async { Future getBloodPressure() async {
setState(ViewState.Busy); setState(ViewState.Busy);
@ -35,114 +33,94 @@ class BloodPressureViewMode extends BaseViewModel {
await bloodPressureService.getDiabtecResults(); await bloodPressureService.getDiabtecResults();
if (bloodPressureService.hasError) { if (bloodPressureService.hasError) {
error = bloodPressureService.error; error = bloodPressureService.error;
setState(ViewState.Error); setState(ViewState.ErrorLocal);
} else { } else {
clearDate();
bloodPressureService.weekDiabtectResultAverageList.forEach((element) { bloodPressureService.weekDiabtectResultAverageList.forEach((element) {
_bloodDiastolicPressureWeeklyTimeSeriesSalesList.add(WeekChartDate( weightWeekTimeSeriesDataTop.add(TimeSeriesSales2(
x: element.bloodPressureDate, element.bloodPressureDate,
y: element.dailyDiastolicPressureAverageResult)); element.dailyDiastolicPressureAverageResult.toDouble()));
_bloodSystolicePressureWeeklyTimeSeriesSalesList.add(WeekChartDate( weightWeekTimeSeriesDataLow.add(TimeSeriesSales2(
x: element.bloodPressureDate, element.bloodPressureDate,
y: element.dailySystolicePressureAverageResult)); element.dailySystolicePressureAverageResult.toDouble()));
});
for (int index = 0; for (int index = 0; index < bloodPressureService.monthDiabtectResultAverageList.length; index++) {
index < bloodPressureService.monthDiabtectResultAverageList.length;
index++) { weighMonthTimeSeriesDataTop.add(TimeSeriesSales3(index, bloodPressureService.monthDiabtectResultAverageList[index].weekDiastolicPressureAverageResult.toDouble()));
_bloodDiastolicMonthlyTimeSeriesSalesList.add(YearMonthlyChartDate(
x: index, weighMonthTimeSeriesDataLow.add(TimeSeriesSales3(index, bloodPressureService.monthDiabtectResultAverageList[index].weekSystolicePressureAverageResult.toDouble()));
y: bloodPressureService.monthDiabtectResultAverageList[index] }
.weekDiastolicPressureAverageResult));
_bloodSystolicMonthlyTimeSeriesSalesList.add(YearMonthlyChartDate(
x: index,
y: bloodPressureService.monthDiabtectResultAverageList[index]
.weekSystolicePressureAverageResult));
}
bloodPressureService.yearDiabtecResultAverageList.forEach((element) {
_bloodSystoliceYearTimeSeriesSalesList
.add(WeekChartDate(x: element.date, y: element.monthSystolicePressureAverageResult));
_bloodDiastolicYearTimeSeriesSalesList
.add(WeekChartDate(x: element.date, y: element.monthDiastolicPressureAverageResult));
});
bloodPressureService.yearDiabtecResultAverageList.forEach((element) {
weightYearTimeSeriesDataTop.add(TimeSeriesSales2(element.date,
element.monthSystolicePressureAverageResult.toDouble()));
weightYearTimeSeriesDataLow.add(TimeSeriesSales2(element.date,
element.monthDiastolicPressureAverageResult.toDouble()));
});
});
setState(ViewState.Idle); setState(ViewState.Idle);
} }
} }
List<charts.Series<WeekChartDate, DateTime>> getBloodWeeklySeries() {
return [
charts.Series<WeekChartDate, DateTime>(
id: 'Diastolic',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (WeekChartDate sales, _) => sales.x,
measureFn: (WeekChartDate sales, _) => sales.y,
data: _bloodDiastolicPressureWeeklyTimeSeriesSalesList,
),
charts.Series<WeekChartDate, DateTime>(
id: 'Systolice',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (WeekChartDate sales, _) => sales.x,
measureFn: (WeekChartDate sales, _) => sales.y,
data: _bloodSystolicePressureWeeklyTimeSeriesSalesList,
)
];
}
List<charts.Series<YearMonthlyChartDate, int>> void clearDate(){
getBloodMonthlyTimeSeriesSales() { weightWeekTimeSeriesDataTop.clear();
return [ weightWeekTimeSeriesDataLow.clear();
charts.Series<YearMonthlyChartDate, int>( weighMonthTimeSeriesDataTop.clear();
id: 'Sales', weighMonthTimeSeriesDataLow.clear();
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, weightYearTimeSeriesDataTop.clear();
domainFn: (YearMonthlyChartDate sales, _) => sales.x, weightYearTimeSeriesDataLow.clear();
measureFn: (YearMonthlyChartDate sales, _) => sales.y,
data: _bloodDiastolicMonthlyTimeSeriesSalesList,
),
charts.Series<YearMonthlyChartDate, int>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (YearMonthlyChartDate sales, _) => sales.x,
measureFn: (YearMonthlyChartDate sales, _) => sales.y,
data: _bloodSystolicMonthlyTimeSeriesSalesList,
),
];
} }
List<charts.Series<WeekChartDate, DateTime>> getBloodYearTimeSeriesSales() { Future sendReportByEmail() async {
return [ setState(ViewState.BusyLocal);
charts.Series<WeekChartDate, DateTime>(
id: 'Sales', await bloodPressureService.sendReportByEmail();
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, if (bloodPressureService.hasError) {
domainFn: (WeekChartDate sales, _) => sales.x, error = bloodPressureService.error;
measureFn: (WeekChartDate sales, _) => sales.y, setState(ViewState.ErrorLocal);
data: _bloodSystoliceYearTimeSeriesSalesList, } else {
), setState(ViewState.Idle);
charts.Series<WeekChartDate, DateTime>( }
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (WeekChartDate sales, _) => sales.x,
measureFn: (WeekChartDate sales, _) => sales.y,
data: _bloodDiastolicYearTimeSeriesSalesList,
)
];
} }
addDiabtecResult( Future addORUpdateDiabtecResult(
{String bloodPressureDate, {String bloodPressureDate,
String diastolicPressure, String diastolicPressure,
String systolicePressure, String systolicePressure,
int measuredArm}) async { int measuredArm,bool isUpdate = false}) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
if(!isUpdate)
await bloodPressureService.addDiabtecResult( await bloodPressureService.addDiabtecResult(
bloodPressureDate: bloodPressureDate, bloodPressureDate: bloodPressureDate,
diastolicPressure: diastolicPressure, diastolicPressure: diastolicPressure,
systolicePressure: systolicePressure, systolicePressure: systolicePressure,
measuredArm: measuredArm); measuredArm: measuredArm);
else
await bloodPressureService.updateDiabtecResult(
bloodPressureDate: bloodPressureDate,
diastolicPressure: diastolicPressure,
systolicePressure: systolicePressure,
measuredArm: measuredArm);
if (bloodPressureService.hasError) {
error = bloodPressureService.error;
setState(ViewState.ErrorLocal);
} else {
await getBloodPressure();
setState(ViewState.Idle);
}
}
Future deactivateDiabeticStatus({int lineItemNo}) async {
setState(ViewState.BusyLocal);
await bloodPressureService.deactivateDiabeticStatus(lineItemNo: lineItemNo);
if (bloodPressureService.hasError) { if (bloodPressureService.hasError) {
error = bloodPressureService.error; error = bloodPressureService.error;
setState(ViewState.Error); setState(ViewState.ErrorLocal);
} else { } else {
await getBloodPressure(); await getBloodPressure();
setState(ViewState.Idle); setState(ViewState.Idle);

@ -5,17 +5,13 @@ import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/YearMonthly
import 'package:diplomaticquarterapp/core/service/medical/BloodSugarService.dart'; import 'package:diplomaticquarterapp/core/service/medical/BloodSugarService.dart';
import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/locator.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import '../../../core/viewModels/base_view_model.dart'; import '../../../core/viewModels/base_view_model.dart';
class BloodSugarViewMode extends BaseViewModel { class BloodSugarViewMode extends BaseViewModel {
BloodSugarService bloodSugarService = locator<BloodSugarService>(); BloodSugarService bloodSugarService = locator<BloodSugarService>();
///BLOOD
List<WeekChartDate> _bloodWeeklyTimeSeriesSalesList = List();
List<YearMonthlyChartDate> _bloodMonthlyTimeSeriesSalesList = List();
List<WeekChartDate> _bloodYearTimeSeriesSalesList = List();
List<DiabtecPatientResult> get monthDiabtecPatientResult => List<DiabtecPatientResult> get monthDiabtecPatientResult =>
bloodSugarService.monthDiabtecPatientResult; bloodSugarService.monthDiabtecPatientResult;
@ -25,6 +21,10 @@ class BloodSugarViewMode extends BaseViewModel {
List<DiabtecPatientResult> get yearDiabtecPatientResult => List<DiabtecPatientResult> get yearDiabtecPatientResult =>
bloodSugarService.yearDiabtecPatientResult; bloodSugarService.yearDiabtecPatientResult;
List<TimeSeriesSales2> bloodWeekTimeSeriesData = [];
List<TimeSeriesSales2> yearTimeSeriesData = [];
List<TimeSeriesSales3> monthTimeSeriesData = [];
Future getBloodSugar() async { Future getBloodSugar() async {
setState(ViewState.Busy); setState(ViewState.Busy);
await bloodSugarService.getBloodSugar(); await bloodSugarService.getBloodSugar();
@ -34,70 +34,43 @@ class BloodSugarViewMode extends BaseViewModel {
setState(ViewState.Error); setState(ViewState.Error);
} else { } else {
bloodSugarService.weekDiabtectResultAverageList.forEach((element) { bloodSugarService.weekDiabtectResultAverageList.forEach((element) {
_bloodWeeklyTimeSeriesSalesList.add( bloodWeekTimeSeriesData.add(TimeSeriesSales2(
WeekChartDate(x: element.dateChart, y: element.dailyAverageResult)); element.dateChart,
element.dailyAverageResult.toDouble(),
));
}); });
for (int index = 0; for (int index = 0;
index < bloodSugarService.monthDiabtectResultAverageList.length; index < bloodSugarService.monthDiabtectResultAverageList.length;
index++) { index++) {
_bloodMonthlyTimeSeriesSalesList.add(YearMonthlyChartDate( monthTimeSeriesData.add(TimeSeriesSales3(
x: index, index,
y: bloodSugarService bloodSugarService
.monthDiabtectResultAverageList[index].weekAverageResult)); .monthDiabtectResultAverageList[index].weekAverageResult
.toDouble(),
));
} }
bloodSugarService.yearDiabtecResultAverageList.forEach((element) { bloodSugarService.yearDiabtecResultAverageList.forEach((element) {
_bloodYearTimeSeriesSalesList yearTimeSeriesData.add(TimeSeriesSales2(
.add(WeekChartDate(x: element.date, y: element.monthAverageResult)); element.date,
element.monthAverageResult.toDouble(),
));
}); });
setState(ViewState.Idle); setState(ViewState.Idle);
} }
} }
List<charts.Series<WeekChartDate, DateTime>> getBloodWeeklySeries() { Future addDiabtecResult(
return [ {String bloodSugerDateChart,
new charts.Series<WeekChartDate, DateTime>( String bloodSugerResult,
id: 'Sales', String diabtecUnit,
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, int measuredTime}) async {
domainFn: (WeekChartDate sales, _) => sales.x,
measureFn: (WeekChartDate sales, _) => sales.y,
data: _bloodWeeklyTimeSeriesSalesList,
)
];
}
List<charts.Series<YearMonthlyChartDate, int>>
getBloodMonthlyTimeSeriesSales() {
return [
new charts.Series<YearMonthlyChartDate, int>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (YearMonthlyChartDate sales, _) => sales.x,
measureFn: (YearMonthlyChartDate sales, _) => sales.y,
data: _bloodMonthlyTimeSeriesSalesList,
)
];
}
List<charts.Series<WeekChartDate, DateTime>> getBloodYearTimeSeriesSales() {
return [
new charts.Series<WeekChartDate, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (WeekChartDate sales, _) => sales.x,
measureFn: (WeekChartDate sales, _) => sales.y,
data: _bloodYearTimeSeriesSalesList,
)
];
}
Future addDiabtecResult({String bloodSugerDateChart, String bloodSugerResult, String diabtecUnit, int measuredTime}) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await bloodSugarService.addDiabtecResult( await bloodSugarService.addDiabtecResult(
bloodSugerDateChart: bloodSugerDateChart, bloodSugerDateChart: bloodSugerDateChart,
bloodSugerResult: bloodSugerResult , bloodSugerResult: bloodSugerResult,
diabtecUnit: diabtecUnit, diabtecUnit: diabtecUnit,
measuredTime: measuredTime); measuredTime: measuredTime);
if (bloodSugarService.hasError) { if (bloodSugarService.hasError) {
@ -109,10 +82,17 @@ class BloodSugarViewMode extends BaseViewModel {
} }
} }
Future updateDiabtecResult({DateTime month,DateTime hour,String bloodSugerResult,String diabtecUnit, int measuredTime,int lineItemNo}) async { Future updateDiabtecResult(
{DateTime month,
DateTime hour,
String bloodSugerResult,
String diabtecUnit,
int measuredTime,
int lineItemNo}) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await bloodSugarService.updateDiabtecResult( await bloodSugarService.updateDiabtecResult(
bloodSugerResult: bloodSugerResult , bloodSugerResult: bloodSugerResult,
diabtecUnit: diabtecUnit, diabtecUnit: diabtecUnit,
hour: hour, hour: hour,
measuredTime: measuredTime, measuredTime: measuredTime,
@ -120,13 +100,35 @@ class BloodSugarViewMode extends BaseViewModel {
month: month); month: month);
if (bloodSugarService.hasError) { if (bloodSugarService.hasError) {
error = bloodSugarService.error; error = bloodSugarService.error;
setState(ViewState.Error); setState(ViewState.ErrorLocal);
} else { } else {
await getBloodSugar(); await getBloodSugar();
setState(ViewState.Idle); setState(ViewState.Idle);
} }
} }
Future sendReportByEmail() async {
setState(ViewState.BusyLocal);
await bloodSugarService.sendReportByEmail();
if (bloodSugarService.hasError) {
error = bloodSugarService.error;
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
}
Future deactivateDiabeticStatus({int lineItemNo}) async {
setState(ViewState.BusyLocal);
await bloodSugarService.deactivateDiabeticStatus(lineItemNo: lineItemNo);
if (bloodSugarService.hasError) {
error = bloodSugarService.error;
setState(ViewState.ErrorLocal);
} else {
await getBloodSugar();
setState(ViewState.Idle);
}
}
} }

@ -9,16 +9,13 @@ import 'package:diplomaticquarterapp/core/service/medical/BloodSugarService.dart
import 'package:diplomaticquarterapp/core/service/medical/WeightPressureService.dart'; import 'package:diplomaticquarterapp/core/service/medical/WeightPressureService.dart';
import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/locator.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import '../../../core/viewModels/base_view_model.dart'; import '../../../core/viewModels/base_view_model.dart';
class WeightPressureViewMode extends BaseViewModel { class WeightPressureViewModel extends BaseViewModel {
WeightService weightService = locator<WeightService>(); WeightService weightService = locator<WeightService>();
List<WeekChartDate> _weightWeeklyTimeSeriesSalesList = List();
List<YearMonthlyChartDate> _weightMonthlyTimeSeriesSalesList = List();
List<WeekChartDate> _weightYearTimeSeriesSalesList = List();
List<WeightMeasurementResult> get monthWeightMeasurementResult => List<WeightMeasurementResult> get monthWeightMeasurementResult =>
weightService.monthWeightMeasurementResult; weightService.monthWeightMeasurementResult;
@ -28,6 +25,10 @@ class WeightPressureViewMode extends BaseViewModel {
List<WeightMeasurementResult> get yearWeightMeasurementResult => List<WeightMeasurementResult> get yearWeightMeasurementResult =>
weightService.yearWeightMeasurementResult; weightService.yearWeightMeasurementResult;
List<TimeSeriesSales2> weightWeekTimeSeriesData = [];
List<TimeSeriesSales3> weighMonthTimeSeriesData = [];
List<TimeSeriesSales2> weightYearTimeSeriesData = [];
Future getWeight() async { Future getWeight() async {
setState(ViewState.Busy); setState(ViewState.Busy);
await weightService.getWeightAverage(); await weightService.getWeightAverage();
@ -37,71 +38,84 @@ class WeightPressureViewMode extends BaseViewModel {
setState(ViewState.Error); setState(ViewState.Error);
} else { } else {
weightService.weekWeightMeasurementResultAverage.forEach((element) { weightService.weekWeightMeasurementResultAverage.forEach((element) {
_weightWeeklyTimeSeriesSalesList.add(WeekChartDate( weightWeekTimeSeriesData.add(TimeSeriesSales2(
x: element.weightDate, y: element.dailyAverageResult)); element.weightDate,
element.dailyAverageResult.toDouble(),
));
}); });
for (int index = 0; for (int index = 0;
index < weightService.monthWeightMeasurementResultAverage.length; index < weightService.monthWeightMeasurementResultAverage.length;
index++) { index++) {
_weightMonthlyTimeSeriesSalesList.add(YearMonthlyChartDate( weighMonthTimeSeriesData.add(TimeSeriesSales3(
x: index, index,
y: weightService.monthWeightMeasurementResultAverage[index].weekAverageResult)); weightService
.monthWeightMeasurementResultAverage[index].weekAverageResult
.toDouble(),
));
} }
weightService.yearWeightMeasurementResultAverage.forEach((element) { weightService.yearWeightMeasurementResultAverage.forEach((element) {
_weightYearTimeSeriesSalesList weightYearTimeSeriesData.add(TimeSeriesSales2(
.add(WeekChartDate(x: element.date, y: element.monthAverageResult)); element.date,
element.monthAverageResult.toDouble(),
));
}); });
setState(ViewState.Idle); setState(ViewState.Idle);
} }
} }
List<charts.Series<WeekChartDate, DateTime>> getWeightWeeklySeries() { addWeightResult(
return [ {String weightDate, String weightMeasured, int weightUnit}) async {
charts.Series<WeekChartDate, DateTime>( setState(ViewState.BusyLocal);
id: 'Diastolic', await weightService.addWeightResult(
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, weightDate: weightDate,
domainFn: (WeekChartDate sales, _) => sales.x, weightMeasured: weightMeasured,
measureFn: (WeekChartDate sales, _) => sales.y, weightUnit: weightUnit,
data: _weightWeeklyTimeSeriesSalesList, );
), if (weightService.hasError) {
]; error = weightService.error;
setState(ViewState.Error);
} else {
await getWeight();
setState(ViewState.Idle);
}
} }
Future sendReportByEmail() async {
setState(ViewState.BusyLocal);
List<charts.Series<YearMonthlyChartDate, int>> await weightService.sendReportByEmail();
getWeightMonthlyTimeSeriesSales() { if (weightService.hasError) {
return [ error = weightService.error;
charts.Series<YearMonthlyChartDate, int>( setState(ViewState.ErrorLocal);
id: 'Sales', } else {
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, setState(ViewState.Idle);
domainFn: (YearMonthlyChartDate sales, _) => sales.x, }
measureFn: (YearMonthlyChartDate sales, _) => sales.y,
data: _weightMonthlyTimeSeriesSalesList,
),
];
} }
List<charts.Series<WeekChartDate, DateTime>> getWeightYearTimeSeriesSales() { updateWeightResult({int lineItemNo, int weightUnit, String weightMeasured,String weightDate}) async {
return [ setState(ViewState.BusyLocal);
charts.Series<WeekChartDate, DateTime>( await weightService.updateWeightResult(
id: 'Sales', lineItemNo: lineItemNo,
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, weightMeasured: weightMeasured,
domainFn: (WeekChartDate sales, _) => sales.x, weightUnit: weightUnit,
measureFn: (WeekChartDate sales, _) => sales.y, weightDate: weightDate
data: _weightYearTimeSeriesSalesList, );
), if (weightService.hasError) {
]; error = weightService.error;
setState(ViewState.Error);
} else {
await getWeight();
setState(ViewState.Idle);
}
} }
addWeightResult( deleteWeightResult({int lineItemNo, }) async {
{String weightDate, String weightMeasured, int weightUnit}) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await weightService.addWeightResult( await weightService.deleteWeightResult(
weightDate: weightDate, lineItemNo: lineItemNo,
weightMeasured: weightMeasured, );
weightUnit: weightUnit,);
if (weightService.hasError) { if (weightService.hasError) {
error = weightService.error; error = weightService.error;
setState(ViewState.Error); setState(ViewState.Error);

@ -32,7 +32,7 @@ class ProjectViewModel extends BaseViewModel {
Locale get appLocal => _appLocale; Locale get appLocal => _appLocale;
LocaleType get localeType => isArabic ? LocaleType.en : LocaleType.ar; LocaleType get localeType => isArabic ? LocaleType.ar : LocaleType.en;
bool get isArabic => _isArabic; bool get isArabic => _isArabic;

@ -255,7 +255,7 @@ void setupLocator() {
locator.registerFactory(() => H2OViewModel()); locator.registerFactory(() => H2OViewModel());
locator.registerFactory(() => BloodSugarViewMode()); locator.registerFactory(() => BloodSugarViewMode());
locator.registerFactory(() => BloodPressureViewMode()); locator.registerFactory(() => BloodPressureViewMode());
locator.registerFactory(() => WeightPressureViewMode()); locator.registerFactory(() => WeightPressureViewModel());
locator.registerFactory(() => EyeViewModel()); locator.registerFactory(() => EyeViewModel());
locator.registerFactory(() => ActiveMedicationsViewModel()); locator.registerFactory(() => ActiveMedicationsViewModel());
locator.registerFactory(() => AskDoctorViewModel()); locator.registerFactory(() => AskDoctorViewModel());

@ -0,0 +1,8 @@
class healthData {
int MedCategoryID;
int MedSubCategoryID;
String Value;
String Notes;
String MachineDate;
int TransactionsListID;
}

@ -0,0 +1,36 @@
class YearlyStepsResModel {
double valueSum;
int medCategoryID;
int month;
String monthName;
int patientID;
int year;
YearlyStepsResModel(
{this.valueSum,
this.medCategoryID,
this.month,
this.monthName,
this.patientID,
this.year});
YearlyStepsResModel.fromJson(Map<String, dynamic> json) {
valueSum = json['ValueSum'];
medCategoryID = json['MedCategoryID'];
month = json['Month'];
monthName = json['MonthName'];
patientID = json['PatientID'];
year = json['Year'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ValueSum'] = this.valueSum;
data['MedCategoryID'] = this.medCategoryID;
data['Month'] = this.month;
data['MonthName'] = this.monthName;
data['PatientID'] = this.patientID;
data['Year'] = this.year;
return data;
}
}

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -490,11 +491,11 @@ class _BMICalculatorState extends State<BMICalculator> {
height: 25.0, height: 25.0,
), ),
Container( Container(
height: 100.0, height: 50.0,
width: 350.0, width: 350.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: 'CALCULATE',
onTap: () { onTap: () => {
setState(() { setState(() {
calculateBMI(); calculateBMI();
showTextResult(); showTextResult();
@ -510,7 +511,7 @@ class _BMICalculatorState extends State<BMICalculator> {
)), )),
); );
} }
}); })
}, },
), ),
), ),

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -687,9 +688,9 @@ class _BmrCalculatorState extends State<BmrCalculator> {
height: 30.0, height: 30.0,
), ),
Container( Container(
height: 100.0, height: 50.0,
width: 350.0, width: 350.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: 'CALCULATE',
onTap: () { onTap: () {
setState(() { setState(() {

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -985,8 +986,13 @@ class _BodyFatState extends State<BodyFat> {
Container( Container(
height: 100.0, height: 100.0,
width: 350.0, width: 350.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: 'CALCULATE',
// onTap: () => {
// setState(() {
// print('hiii');
// })
// }
onTap: () { onTap: () {
setState(() { setState(() {
calculateBodyFat(); calculateBodyFat();

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -648,7 +649,7 @@ class _CalorieCalculatorState extends State<CalorieCalculator> {
Container( Container(
height: 100.0, height: 100.0,
width: 350.0, width: 350.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: 'CALCULATE',
onTap: () { onTap: () {
setState(() { setState(() {

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -329,9 +330,9 @@ class _CarbsState extends State<Carbs> {
height: 55.0, height: 55.0,
), ),
Container( Container(
height: 100.0, height: 50.0,
width: 350.0, width: 350.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: 'CALCULATE',
onTap: () { onTap: () {
setState(() { setState(() {

@ -1,5 +1,6 @@
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -111,9 +112,9 @@ class _DeliveryDueState extends State<DeliveryDue> {
height: 280.0, height: 280.0,
), ),
Container( Container(
height: 100.0, height: 50.0,
width: 350.0, width: 350.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: 'CALCULATE',
onTap: () { onTap: () {
setState(() { setState(() {

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -518,7 +519,7 @@ class _IdealBodyState extends State<IdealBody> {
Container( Container(
height: 100.0, height: 100.0,
width: 350.0, width: 350.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: 'CALCULATE',
onTap: () { onTap: () {
setState(() { setState(() {

@ -1,5 +1,6 @@
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -319,9 +320,9 @@ class _OvulationPeriodState extends State<OvulationPeriod> {
height: 220.0, height: 220.0,
), ),
Container( Container(
height: 100.0, height: 50.0,
width: 350.0, width: 350.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: 'CALCULATE',
onTap: () { onTap: () {
setState(() { setState(() {

@ -18,7 +18,7 @@ class _HealthConverterState extends State<HealthConverter> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return AppScaffold(
isShowAppBar: true, isShowAppBar: true,
appBarTitle: 'Health Converter', appBarTitle: TranslationBase.of(context).converters,
body: Column( body: Column(
children: [ children: [
Container( Container(
@ -37,9 +37,9 @@ class _HealthConverterState extends State<HealthConverter> {
); );
}, },
child: MedicalProfileItem( child: MedicalProfileItem(
title: 'Blood', title: TranslationBase.of(context).bloodSugar,
imagePath: 'blood_sugar_icon.png', imagePath: 'blood_sugar_icon.png',
subTitle: 'Sugar', subTitle: TranslationBase.of(context).sugar,
), ),
), ),
), ),
@ -55,9 +55,9 @@ class _HealthConverterState extends State<HealthConverter> {
); );
}, },
child: MedicalProfileItem( child: MedicalProfileItem(
title: 'Blood', title: TranslationBase.of(context).bloodCholesterol,
imagePath: 'blood_cholesterol_icon.png', imagePath: 'blood_cholesterol_icon.png',
subTitle: 'Cholesterol', subTitle: TranslationBase.of(context).cholesterol,
), ),
), ),
), ),
@ -77,9 +77,9 @@ class _HealthConverterState extends State<HealthConverter> {
); );
}, },
child: MedicalProfileItem( child: MedicalProfileItem(
title: 'Triglycerides', title: TranslationBase.of(context).triglycerides,
imagePath: 'triglycerides_blood_icon.png', imagePath: 'triglycerides_blood_icon.png',
subTitle: 'Fat in blood', subTitle: TranslationBase.of(context).fatInBlood,
), ),
), ),
), ),

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
@ -62,7 +63,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return AppScaffold(
isShowAppBar: true, isShowAppBar: true,
appBarTitle: 'Blood Cholesterol ', appBarTitle: TranslationBase.of(context).bloodCholesterol,
body: Padding( body: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView( child: SingleChildScrollView(
@ -74,7 +75,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
Container( Container(
width: 350.0, width: 350.0,
child: Text( child: Text(
'Convert blood cholesterol from\n mmol/l to mg/dlt and vice versa.', TranslationBase.of(context).convertCholesterolStatement,
//textAlign: TextAlign.center, //textAlign: TextAlign.center,
style: TextStyle(fontSize: 20.0), style: TextStyle(fontSize: 20.0),
), ),
@ -95,7 +96,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
child: Row( child: Row(
children: [ children: [
Texts( Texts(
'Convert from', TranslationBase.of(context).convertFrom,
), ),
], ],
), ),
@ -117,7 +118,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
}); });
}, },
child: Container( child: Container(
height: 55.0, height: 65.0,
width: 150.0, width: 150.0,
decoration: BoxDecoration( decoration: BoxDecoration(
boxShadow: [ boxShadow: [
@ -150,7 +151,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
}); });
}, },
child: Container( child: Container(
height: 55.0, height: 65.0,
width: 150.0, width: 150.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: cardMMOLColor, color: cardMMOLColor,
@ -196,7 +197,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
decoration: InputDecoration( decoration: InputDecoration(
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide(color: Colors.black45)), borderSide: BorderSide(color: Colors.black45)),
labelText: " Enter the reading value", labelText: TranslationBase.of(context).enterReadingValue,
labelStyle: TextStyle( labelStyle: TextStyle(
color: Colors.black87, color: Colors.black87,
), ),
@ -209,7 +210,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
Visibility( Visibility(
visible: _visible, visible: _visible,
child: Container( child: Container(
height: 95.0, height: 115.0,
width: 350.0, width: 350.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
@ -222,7 +223,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Texts('Result:'), Texts(TranslationBase.of(context).result + ":"),
Row( Row(
children: [ children: [
Text( Text(
@ -252,10 +253,10 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
), ),
Flexible( Flexible(
child: Container( child: Container(
height: 100.0, height: 60.0,
width: 150.0, width: 150.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: TranslationBase.of(context).calculate,
onTap: () { onTap: () {
setState(() { setState(() {
_visible == false _visible == false

@ -64,7 +64,7 @@ class _BloodSugarState extends State<BloodSugar> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return AppScaffold(
isShowAppBar: true, isShowAppBar: true,
appBarTitle: 'Blood Sugar Conversion', appBarTitle: TranslationBase.of(context).bloodSugarConversion,
body: Padding( body: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView( child: SingleChildScrollView(
@ -76,7 +76,7 @@ class _BloodSugarState extends State<BloodSugar> {
Container( Container(
width: 350.0, width: 350.0,
child: Text( child: Text(
'Convert blood sugar/glucose from mmol/l (UK standard) to mg/dlt (US standard) and vice versa.', TranslationBase.of(context).convertBloodSugarStatement,
//textAlign: TextAlign.center, //textAlign: TextAlign.center,
style: TextStyle(fontSize: 20.0), style: TextStyle(fontSize: 20.0),
), ),
@ -97,7 +97,7 @@ class _BloodSugarState extends State<BloodSugar> {
child: Row( child: Row(
children: [ children: [
Texts( Texts(
'Convert from', TranslationBase.of(context).convertFrom,
) )
], ],
), ),
@ -119,7 +119,7 @@ class _BloodSugarState extends State<BloodSugar> {
}); });
}, },
child: Container( child: Container(
height: 55.0, height: 65.0,
width: 150.0, width: 150.0,
decoration: BoxDecoration( decoration: BoxDecoration(
boxShadow: [ boxShadow: [
@ -152,7 +152,7 @@ class _BloodSugarState extends State<BloodSugar> {
}); });
}, },
child: Container( child: Container(
height: 55.0, height: 65.0,
width: 150.0, width: 150.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: cardMMOLColor, color: cardMMOLColor,
@ -196,7 +196,7 @@ class _BloodSugarState extends State<BloodSugar> {
], ],
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
decoration: InputDecoration( decoration: InputDecoration(
labelText: " Enter the reading value", labelText: TranslationBase.of(context).enterReadingValue,
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide(color: Colors.black45)), borderSide: BorderSide(color: Colors.black45)),
labelStyle: TextStyle( labelStyle: TextStyle(
@ -211,7 +211,7 @@ class _BloodSugarState extends State<BloodSugar> {
Visibility( Visibility(
visible: _visible, visible: _visible,
child: Container( child: Container(
height: 95.0, height: 115.0,
width: 350.0, width: 350.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
@ -224,7 +224,7 @@ class _BloodSugarState extends State<BloodSugar> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Texts('Result:'), Texts(TranslationBase.of(context).result + ": "),
Row( Row(
children: [ children: [
Text( Text(
@ -254,10 +254,10 @@ class _BloodSugarState extends State<BloodSugar> {
), ),
Flexible( Flexible(
child: Container( child: Container(
height: 100.0, height: 60.0,
width: 150.0, width: 150.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label: TranslationBase.of(context).calculate,
onTap: () { onTap: () {
setState(() { setState(() {
_visible == false _visible == false

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -64,7 +65,7 @@ class _TriglyceridesState extends State<Triglycerides> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return AppScaffold(
isShowAppBar: true, isShowAppBar: true,
appBarTitle: 'Triglycerides', appBarTitle: TranslationBase.of(context).triglycerides,
body: Padding( body: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView( child: SingleChildScrollView(
@ -76,7 +77,7 @@ class _TriglyceridesState extends State<Triglycerides> {
Container( Container(
width: 350.0, width: 350.0,
child: Text( child: Text(
'Convert Triglycerides from mmol/l to\n mg/dlt and vice versa.', TranslationBase.of(context).triglyceridesConvertStatement,
//textAlign: TextAlign.center, //textAlign: TextAlign.center,
style: TextStyle(fontSize: 20.0), style: TextStyle(fontSize: 20.0),
), ),
@ -95,7 +96,9 @@ class _TriglyceridesState extends State<Triglycerides> {
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: 15.0), padding: const EdgeInsets.symmetric(horizontal: 15.0),
child: Row( child: Row(
children: [Texts('Convert from')], children: [
Texts(TranslationBase.of(context).convertFrom)
],
), ),
), ),
SizedBox( SizedBox(
@ -115,7 +118,7 @@ class _TriglyceridesState extends State<Triglycerides> {
}); });
}, },
child: Container( child: Container(
height: 55.0, height: 65.0,
width: 150.0, width: 150.0,
decoration: BoxDecoration( decoration: BoxDecoration(
boxShadow: [ boxShadow: [
@ -148,7 +151,7 @@ class _TriglyceridesState extends State<Triglycerides> {
}); });
}, },
child: Container( child: Container(
height: 55.0, height: 65.0,
width: 150.0, width: 150.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: cardMMOLColor, color: cardMMOLColor,
@ -194,7 +197,7 @@ class _TriglyceridesState extends State<Triglycerides> {
decoration: InputDecoration( decoration: InputDecoration(
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide(color: Colors.black45)), borderSide: BorderSide(color: Colors.black45)),
labelText: " Enter the reading value", labelText: TranslationBase.of(context).enterReadingValue,
labelStyle: TextStyle( labelStyle: TextStyle(
color: Colors.black87, color: Colors.black87,
), ),
@ -207,7 +210,7 @@ class _TriglyceridesState extends State<Triglycerides> {
Visibility( Visibility(
visible: _visible, visible: _visible,
child: Container( child: Container(
height: 95.0, height: 115.0,
width: 350.0, width: 350.0,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
@ -220,7 +223,7 @@ class _TriglyceridesState extends State<Triglycerides> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Texts('Result:'), Texts(TranslationBase.of(context).result + ":"),
Row( Row(
children: [ children: [
Text( Text(
@ -250,10 +253,11 @@ class _TriglyceridesState extends State<Triglycerides> {
), ),
Flexible( Flexible(
child: Container( child: Container(
height: 100.0, height: 60.0,
width: 250.0, width: 250.0,
child: Button( child: SecondaryButton(
label: 'CALCULATE', label:
TranslationBase.of(context).calculate.toUpperCase(),
onTap: () { onTap: () {
setState(() { setState(() {
_visible == false _visible == false

@ -2,7 +2,6 @@ import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart'; import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info_and_mobile_number.dart'; import 'package:diplomaticquarterapp/core/model/my_balance/patient_info_and_mobile_number.dart';
import 'package:diplomaticquarterapp/core/viewModels/appointment_rate_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
@ -166,7 +165,7 @@ class ConfirmPaymentPage extends StatelessWidget {
patientID: int.parse(advanceModel.fileNumber), patientID: int.parse(advanceModel.fileNumber),
projectID: advanceModel.hospitalsModel.iD) projectID: advanceModel.hospitalsModel.iD)
.then((value) { .then((value) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
if (model.state != ViewState.ErrorLocal && if (model.state != ViewState.ErrorLocal &&
model.state != ViewState.Error) showSMSDialog(); model.state != ViewState.Error) showSMSDialog();
}); });
@ -218,7 +217,8 @@ class ConfirmPaymentPage extends StatelessWidget {
authenticatedUser.firstName, authenticatedUser.firstName,
authenticatedUser.patientID, authenticatedUser.patientID,
authenticatedUser, authenticatedUser,
browser); browser,
false);
} }
onBrowserLoadStart(String url) { onBrowserLoadStart(String url) {
@ -277,8 +277,8 @@ class ConfirmPaymentPage extends StatelessWidget {
String paymentReference = res['Fort_id'].toString(); String paymentReference = res['Fort_id'].toString();
GifLoaderDialogUtils.showMyDialog(AppGlobal.context); GifLoaderDialogUtils.showMyDialog(AppGlobal.context);
service service
.createAdvancePayment(appo, appo.projectID.toString(), res['Amount'], res['Fort_id'], .createAdvancePayment(appo, appo.projectID.toString(), res['Amount'],
res['PaymentMethod'], AppGlobal.context) res['Fort_id'], res['PaymentMethod'], AppGlobal.context)
.then((res) { .then((res) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context); GifLoaderDialogUtils.hideDialog(AppGlobal.context);
print(res['OnlineCheckInAppointments'][0]['AdvanceNumber']); print(res['OnlineCheckInAppointments'][0]['AdvanceNumber']);
@ -315,5 +315,4 @@ class ConfirmPaymentPage extends StatelessWidget {
Future navigateToHome(context) async { Future navigateToHome(context) async {
Navigator.of(context).pushNamed(HOME); Navigator.of(context).pushNamed(HOME);
} }
} }

@ -187,27 +187,29 @@ class _BookConfirmState extends State<BookConfirm> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: <Widget>[ children: <Widget>[
Row( !widget.isLiveCareAppointment ? Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Container(
margin: EdgeInsets.fromLTRB(5.0, 0.0, 5.0, 0.0), margin:
child: Image.asset( EdgeInsets.fromLTRB(5.0, 0.0, 5.0, 0.0),
"assets/images/new-design/icon_hospital.png"), child: Image.asset(
), "assets/images/new-design/icon_hospital.png"),
Container( ),
margin: EdgeInsets.fromLTRB(20.0, 5.0, 10.0, 5.0), Container(
child: Text( margin:
TranslationBase.of(context).hospital + EdgeInsets.fromLTRB(20.0, 5.0, 10.0, 5.0),
": " + child: Text(
widget.doctor.projectName, TranslationBase.of(context).hospital +
style: TextStyle( ": " +
fontSize: 14.0, widget.doctor.projectName,
color: Colors.grey[700], style: TextStyle(
letterSpacing: 1.0)), fontSize: 14.0,
), color: Colors.grey[700],
], letterSpacing: 1.0)),
), ),
],
) : Container(),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[ children: <Widget>[
@ -325,7 +327,8 @@ class _BookConfirmState extends State<BookConfirm> {
Container( Container(
margin: EdgeInsets.only(top: 5.0), margin: EdgeInsets.only(top: 5.0),
child: Text( child: Text(
TranslationBase.of(context).gender + ": " + TranslationBase.of(context).gender +
": " +
widget.authUser.genderDescription, widget.authUser.genderDescription,
style: TextStyle( style: TextStyle(
fontSize: 12.0, fontSize: 12.0,
@ -335,7 +338,9 @@ class _BookConfirmState extends State<BookConfirm> {
Container( Container(
margin: EdgeInsets.only(top: 5.0, bottom: 3.0), margin: EdgeInsets.only(top: 5.0, bottom: 3.0),
child: Text( child: Text(
TranslationBase.of(context).age + ": " + widget.authUser.age.toString(), TranslationBase.of(context).age +
": " +
widget.authUser.age.toString(),
style: TextStyle( style: TextStyle(
fontSize: 12.0, fontSize: 12.0,
color: Colors.grey[600], color: Colors.grey[600],
@ -423,7 +428,8 @@ class _BookConfirmState extends State<BookConfirm> {
context) context)
.then((res) { .then((res) {
if (res['MessageStatus'] == 1) { if (res['MessageStatus'] == 1) {
AppToast.showSuccessToast(message: TranslationBase.of(context).bookedSuccess); AppToast.showSuccessToast(
message: TranslationBase.of(context).bookedSuccess);
print(res['AppointmentNo']); print(res['AppointmentNo']);
Future.delayed(new Duration(milliseconds: 500), () { Future.delayed(new Duration(milliseconds: 500), () {
@ -543,13 +549,13 @@ class _BookConfirmState extends State<BookConfirm> {
getLiveCareAppointmentPatientShare(context, String appointmentNo, getLiveCareAppointmentPatientShare(context, String appointmentNo,
int clinicID, int projectID, DoctorList docObject) { int clinicID, int projectID, DoctorList docObject) {
GifLoaderDialogUtils.hideDialog(context);
widget.service widget.service
.getLiveCareAppointmentPatientShare( .getLiveCareAppointmentPatientShare(
appointmentNo, clinicID, projectID, context) appointmentNo, clinicID, projectID, context)
.then((res) { .then((res) {
print(res); print(res);
widget.patientShareResponse = new PatientShareResponse.fromJson(res); widget.patientShareResponse = new PatientShareResponse.fromJson(res);
GifLoaderDialogUtils.hideDialog(context);
navigateToBookSuccess(context, docObject, widget.patientShareResponse); navigateToBookSuccess(context, docObject, widget.patientShareResponse);
}).catchError((err) { }).catchError((err) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);

@ -255,7 +255,7 @@ class _BookSuccessState extends State<BookSuccess> {
minWidth: MediaQuery.of(context).size.width * 0.7, minWidth: MediaQuery.of(context).size.width * 0.7,
height: 45.0, height: 45.0,
child: RaisedButton( child: RaisedButton(
color: new Color(0xFF40ACC9), color: new Color(0xffc5272d),
textColor: Colors.white, textColor: Colors.white,
disabledTextColor: Colors.white, disabledTextColor: Colors.white,
disabledColor: new Color(0xFFbcc2c4), disabledColor: new Color(0xFFbcc2c4),
@ -318,7 +318,7 @@ class _BookSuccessState extends State<BookSuccess> {
minWidth: MediaQuery.of(context).size.width * 0.7, minWidth: MediaQuery.of(context).size.width * 0.7,
height: 45.0, height: 45.0,
child: RaisedButton( child: RaisedButton(
color: new Color(0xFF40ACC9), color: new Color(0xFFc5272d),
textColor: Colors.white, textColor: Colors.white,
disabledTextColor: Colors.white, disabledTextColor: Colors.white,
disabledColor: new Color(0xFFbcc2c4), disabledColor: new Color(0xFFbcc2c4),
@ -637,7 +637,12 @@ class _BookSuccessState extends State<BookSuccess> {
authenticatedUser.firstName, authenticatedUser.firstName,
authenticatedUser.patientID, authenticatedUser.patientID,
authenticatedUser, authenticatedUser,
widget.browser); widget.browser,
widget.patientShareResponse.isLiveCareAppointment,
widget.patientShareResponse.appointmentDate,
widget.patientShareResponse.appointmentNo,
widget.patientShareResponse.clinicID,
widget.patientShareResponse.doctorID);
} }
} }

@ -61,7 +61,7 @@ class DoctorView extends StatelessWidget {
letterSpacing: 1.0)), letterSpacing: 1.0)),
Container( Container(
margin: EdgeInsets.only(top: 3.0), margin: EdgeInsets.only(top: 3.0),
child: Text(this.doctor.clinicName, child: Text(this.doctor.clinicName != null ? this.doctor.clinicName : "",
style: TextStyle( style: TextStyle(
fontSize: 12.0, fontSize: 12.0,
color: Colors.grey[600], color: Colors.grey[600],

@ -9,6 +9,7 @@ import 'package:diplomaticquarterapp/services/covid-drivethru/covid-drivethru.da
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -469,9 +470,7 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots>
} }
bookCovidTestAppointment() { bookCovidTestAppointment() {
// Navigator.push(context, GifLoaderDialogUtils.showMyDialog(context);
// MaterialPageRoute(builder: (context) => CovidPaymentAlert()));
DoctorList docObject = new DoctorList(); DoctorList docObject = new DoctorList();
docObject.doctorID = widget.selectedDoctorID; docObject.doctorID = widget.selectedDoctorID;
docObject.clinicID = widget.selectedClinicID; docObject.clinicID = widget.selectedClinicID;
@ -494,11 +493,12 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots>
print(res); print(res);
if (res['MessageStatus'] == 1) { if (res['MessageStatus'] == 1) {
AppToast.showSuccessToast(message: "Appointment Booked Successfully"); AppToast.showSuccessToast(message: "Appointment Booked Successfully");
Future.delayed(new Duration(milliseconds: 1800), () { // Future.delayed(new Duration(milliseconds: 1800), () {
getPatientShare(context, res['AppointmentNo'], docObject.clinicID, getPatientShare(context, res['AppointmentNo'], docObject.clinicID,
docObject.projectID, docObject); docObject.projectID, docObject);
}); // });
} else { } else {
GifLoaderDialogUtils.hideDialog(context);
appo = new AppoitmentAllHistoryResultList(); appo = new AppoitmentAllHistoryResultList();
appo.appointmentNo = res['SameClinicApptList'][0]['AppointmentNo']; appo.appointmentNo = res['SameClinicApptList'][0]['AppointmentNo'];
appo.clinicID = res['SameClinicApptList'][0]['DoctorID']; appo.clinicID = res['SameClinicApptList'][0]['DoctorID'];
@ -529,14 +529,16 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots>
cancelAppointment(DoctorList docObject, AppoitmentAllHistoryResultList appo, cancelAppointment(DoctorList docObject, AppoitmentAllHistoryResultList appo,
BuildContext context) { BuildContext context) {
GifLoaderDialogUtils.showMyDialog(context);
ConfirmDialog.closeAlertDialog(context); ConfirmDialog.closeAlertDialog(context);
DoctorsListService service = new DoctorsListService(); DoctorsListService service = new DoctorsListService();
service.cancelAppointment(appo, context).then((res) { service.cancelAppointment(appo, context).then((res) {
if (res['MessageStatus'] == 1) { if (res['MessageStatus'] == 1) {
Future.delayed(new Duration(milliseconds: 1500), () { // Future.delayed(new Duration(milliseconds: 1500), () {
insertAppointmentCovidTest(context, docObject); insertAppointmentCovidTest(context, docObject);
}); // });
} else { } else {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: res['ErrorEndUserMessage']); AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
} }
}).catchError((err) { }).catchError((err) {
@ -592,6 +594,7 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots>
}); });
} else {} } else {}
} else { } else {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: res['ErrorEndUserMessage']); AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
} }
}).catchError((err) { }).catchError((err) {

@ -166,7 +166,7 @@ class _ApointmentCardState extends State<AppointmentCard> {
), ),
Container( Container(
transform: transform:
Matrix4.translationValues(15.0, -40.0, 0.0), Matrix4.translationValues(15.0, -40.0, 0.0),
child: projectViewModel.isArabic child: projectViewModel.isArabic
? Image.asset( ? Image.asset(
"assets/images/new-design/arrow_menu_black-ar.png", "assets/images/new-design/arrow_menu_black-ar.png",

@ -13,7 +13,6 @@ import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart';
import 'package:diplomaticquarterapp/pages/ToDoList/widgets/paymentDialog.dart'; import 'package:diplomaticquarterapp/pages/ToDoList/widgets/paymentDialog.dart';
import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
@ -26,7 +25,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/countdown_timer_controller.dart'; import 'package:flutter_countdown_timer/countdown_timer_controller.dart';
import 'package:flutter_countdown_timer/current_remaining_time.dart'; import 'package:flutter_countdown_timer/current_remaining_time.dart';
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart'; import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:rating_bar/rating_bar.dart'; import 'package:rating_bar/rating_bar.dart';
@ -95,249 +93,315 @@ class _ToDoState extends State<ToDo> {
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Container( return Container(
margin: EdgeInsets.all(10.0), margin: EdgeInsets.all(10.0),
child: Card( child: Column(
margin: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0), children: [
color: Colors.white, Container(
shape: RoundedRectangleBorder( child: Card(
borderRadius: BorderRadius.circular(10), margin: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0),
), color: Colors.white,
child: Container( shape: RoundedRectangleBorder(
width: MediaQuery.of(context).size.width, borderRadius: BorderRadius.circular(10),
padding: EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Row(
children: <Widget>[
Image.asset(
"assets/images/new-design/time_icon.png",
width: 20.0,
height: 20.0),
Container(
margin:
EdgeInsets.only(left: 10.0, right: 10.0),
child: Text(
DateUtil.getWeekDayMonthDayYearDateFormatted(
DateUtil.convertStringToDate(
widget.appoList[index]
.appointmentDate),
projectViewModel.isArabic
? "ar"
: "en") +
" " +
widget.appoList[index].startTime
.substring(0, 5),
style: TextStyle(fontSize: 10.0)),
),
widget.appoList[index].isLiveCareAppointment
? SvgPicture.asset(
"assets/images/new-design/liveCare_logo_icon.svg",
width: 20.0,
height: 20.0)
: Image.asset(
"assets/images/new-design/hospital_address_icon.png",
width: 20.0,
height: 20.0),
Container(
margin:
EdgeInsets.only(left: 5.0, right: 5.0),
child: widget
.appoList[index].isLiveCareAppointment
? Text(
TranslationBase.of(context)
.liveCareAppo,
style: TextStyle(fontSize: 12.0))
: Text(
widget.appoList[index].projectName !=
null
? widget
.appoList[index].projectName
: "-",
overflow: TextOverflow.clip,
maxLines: 2,
style: TextStyle(fontSize: 10.0)),
),
],
),
Container(
margin: EdgeInsets.only(top: 5.0),
child: Divider(
color: Colors.grey[500],
),
), ),
Flex( child: Container(
direction: Axis.horizontal, width: MediaQuery.of(context).size.width,
children: <Widget>[ padding: EdgeInsets.all(10.0),
Expanded( child: Column(
flex: 1, crossAxisAlignment: CrossAxisAlignment.start,
child: Container( mainAxisSize: MainAxisSize.max,
height: MediaQuery.of(context).size.height * children: <Widget>[
0.1, Row(
children: <Widget>[
Image.asset(
"assets/images/new-design/time_icon.png",
width: 20.0,
height: 20.0),
Container(
margin: EdgeInsets.only(
left: 10.0, right: 10.0),
child: Text(
DateUtil.getWeekDayMonthDayYearDateFormatted(
DateUtil.convertStringToDate(
widget.appoList[index]
.appointmentDate),
projectViewModel.isArabic
? "ar"
: "en") +
" " +
widget.appoList[index].startTime
.substring(0, 5),
style: TextStyle(fontSize: 10.0)),
),
!widget.appoList[index]
.isLiveCareAppointment
? Image.asset(
"assets/images/new-design/hospital_address_icon.png",
width: 20.0,
height: 20.0)
: Container(),
Container(
margin: EdgeInsets.only(
left: 5.0, right: 5.0),
child: widget.appoList[index]
.isLiveCareAppointment
? Container()
: Text(
widget.appoList[index]
.projectName !=
null
? widget.appoList[index]
.projectName
: "-",
overflow: TextOverflow.clip,
maxLines: 2,
style:
TextStyle(fontSize: 10.0)),
),
],
),
Container(
margin: EdgeInsets.only(top: 5.0), margin: EdgeInsets.only(top: 5.0),
child: ClipRRect( child: Divider(
borderRadius: color: Colors.grey[500],
BorderRadius.circular(100.0),
child: Image.network(
widget.appoList[index].doctorImageURL,
fit: BoxFit.fill),
), ),
), ),
), Flex(
Expanded( direction: Axis.horizontal,
flex: 3, children: <Widget>[
child: Container( Expanded(
margin: EdgeInsets.only( flex: 1,
top: 10.0, left: 20.0, right: 20.0), child: Container(
child: Column( height: MediaQuery.of(context)
crossAxisAlignment: .size
CrossAxisAlignment.start, .height *
children: <Widget>[ 0.1,
Text( margin: EdgeInsets.only(top: 5.0),
widget.appoList[index].doctorTitle + child: ClipRRect(
" " + borderRadius:
BorderRadius.circular(100.0),
child: Image.network(
widget.appoList[index] widget.appoList[index]
.doctorNameObj, .doctorImageURL,
style: TextStyle( fit: BoxFit.fill),
fontSize: 14.0, ),
color: Colors.black,
fontWeight: FontWeight.bold,
letterSpacing: 1.0)),
Container(
margin: EdgeInsets.only(
top: 3.0, bottom: 3.0),
child: Text(
getDoctorSpeciality(widget
.appoList[index]
.doctorSpeciality)
.trim(),
style: TextStyle(
fontSize: 12.0,
color: Colors.grey[600],
letterSpacing: 1.0)),
), ),
Row( ),
mainAxisAlignment: Expanded(
MainAxisAlignment.spaceBetween, flex: 3,
mainAxisSize: MainAxisSize.max, child: Container(
children: <Widget>[ margin: EdgeInsets.only(
RatingBar.readOnly( top: 10.0,
initialRating: widget left: 20.0,
.appoList[index] right: 20.0),
.actualDoctorRate child: Column(
.toDouble(), crossAxisAlignment:
size: 20.0, CrossAxisAlignment.start,
filledColor: Colors.yellow[700], children: <Widget>[
emptyColor: Colors.grey[500], Text(
isHalfAllowed: true, widget.appoList[index]
halfFilledIcon: Icons.star_half, .doctorTitle +
filledIcon: Icons.star, " " +
emptyIcon: Icons.star, widget.appoList[index]
), .doctorNameObj,
], style: TextStyle(
fontSize: 14.0,
color: Colors.black,
fontWeight:
FontWeight.bold,
letterSpacing: 1.0)),
Container(
margin: EdgeInsets.only(
top: 3.0, bottom: 3.0),
child: Text(
getDoctorSpeciality(widget
.appoList[index]
.doctorSpeciality)
.trim(),
style: TextStyle(
fontSize: 12.0,
color: Colors.grey[600],
letterSpacing: 1.0)),
),
Row(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
RatingBar.readOnly(
initialRating: widget
.appoList[index]
.actualDoctorRate
.toDouble(),
size: 20.0,
filledColor:
Colors.yellow[700],
emptyColor:
Colors.grey[500],
isHalfAllowed: true,
halfFilledIcon:
Icons.star_half,
filledIcon: Icons.star,
emptyIcon: Icons.star,
),
],
),
Container(
child: CountdownTimer(
controller: new CountdownTimerController(
endTime: DateTime.now()
.millisecondsSinceEpoch +
(widget
.appoList[
index]
.remaniningHoursTocanPay *
1000) *
60),
widgetBuilder: (_,
CurrentRemainingTime
time) {
return time != null
? Text(
'${time.days != null ? time.days : "0"}:${time.hours.toString().length == 1 ? "0" + time.hours.toString() : time.hours}:${time.min}:${time.sec} ' +
TranslationBase.of(
context)
.upcomingTimeLeft,
style: TextStyle(
fontSize: 12.0,
color: Color(
0xff40ACC9)))
: Container();
},
),
),
],
),
), ),
Container( ),
child: CountdownTimer( Expanded(
controller: new CountdownTimerController( flex: 1,
endTime: DateTime.now() child: InkWell(
.millisecondsSinceEpoch + onTap: () => performNextAction(
(widget.appoList[index] widget.appoList[index]),
.remaniningHoursTocanPay * child: Container(
1000) * margin: EdgeInsets.only(top: 20.0),
60), child: Column(
widgetBuilder: children: <Widget>[
(_, CurrentRemainingTime time) { Image.asset(
return time != null getNextActionImage(widget
? Text( .appoList[index]
'${time.days}:${time.hours}:${time.min}:${time.sec} ' + .nextAction),
TranslationBase.of( width: 50.0,
context) height: 50.0),
.upcomingTimeLeft, Container(
margin:
EdgeInsets.only(top: 5.0),
child: Text(
getNextActionText(widget
.appoList[index]
.nextAction),
textAlign:
TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: 12.0, fontSize: 12.0)),
color: Color( )
0xff40ACC9))) ],
: Container(); ),
},
), ),
), ),
], )
), ],
), ),
), Divider(
Expanded( color: Colors.grey[500],
flex: 1, ),
child: InkWell( Flex(
onTap: () => performNextAction( direction: Axis.horizontal,
widget.appoList[index]), children: <Widget>[
child: Container( Expanded(
margin: EdgeInsets.only(top: 20.0), flex: 2,
child: Column( child: Container(
children: <Widget>[ child: Text(
Image.asset( getNextActionDescription(widget
getNextActionImage(widget
.appoList[index].nextAction), .appoList[index].nextAction),
width: 50.0, style: TextStyle(
height: 50.0), fontSize: 12.0,
Container( color: Colors.grey[700])),
margin: EdgeInsets.only(top: 5.0), ),
child: Text(
getNextActionText(widget
.appoList[index]
.nextAction),
textAlign: TextAlign.center,
style:
TextStyle(fontSize: 12.0)),
)
],
), ),
), Expanded(
flex: 1,
child: GestureDetector(
onTap: () {
navigateToAppointmentDetails(
context,
widget.appoList[index]);
},
child: Container(
child: Text(
TranslationBase.of(context)
.upcomingDetails,
textAlign: TextAlign.end,
style: TextStyle(
fontSize: 12.0,
color:
new Color(0xFF40ACC9),
decoration: TextDecoration
.underline)),
),
),
)
],
), ),
) ],
], ),
),
Divider(
color: Colors.grey[500],
), ),
Flex( ),
direction: Axis.horizontal, ),
children: <Widget>[ Container(
Expanded( decoration: BoxDecoration(
flex: 2, borderRadius: BorderRadius.only(
child: Container( bottomLeft: Radius.circular(10.0),
child: Text( bottomRight: Radius.circular(10.0)),
getNextActionDescription( color: Color(0xff20bc44),
widget.appoList[index].nextAction), ),
style: TextStyle( height: 30.0,
fontSize: 12.0, margin: projectViewModel.isArabic ? EdgeInsets.fromLTRB(160.0, 0.0, 30.0, 0.0) : EdgeInsets.fromLTRB(30.0, 0.0, 160.0, 0.0),
color: Colors.grey[700])), transform: Matrix4.translationValues(0.0, -8.0, 0.0),
), child: Row(
), mainAxisAlignment: MainAxisAlignment.start,
Expanded( children: [
flex: 1, widget.appoList[index].isLiveCareAppointment
child: GestureDetector( ? Container(
onTap: () { margin: EdgeInsets.fromLTRB(
navigateToAppointmentDetails( 5.0, 0.0, 5.0, 0.0),
context, widget.appoList[index]); child: Image.asset(
}, "assets/images/new-design/video.png"),
child: Container( )
child: Text( : Container(
TranslationBase.of(context) margin: EdgeInsets.fromLTRB(
.upcomingDetails, 5.0, 0.0, 5.0, 0.0),
textAlign: TextAlign.end, child: Image.asset(
style: TextStyle( "assets/images/new-design/walkin.png"),
fontSize: 12.0,
color: new Color(0xFF40ACC9),
decoration:
TextDecoration.underline)),
), ),
), widget.appoList[index].isLiveCareAppointment
) ? Container(
], child: Text(TranslationBase.of(context).videoAppo,
), style: TextStyle(
], color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 12.0)),
)
: Container(
child: Text(TranslationBase.of(context).walkinAppo,
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 12.0)),
)
],
),
), ),
), ],
), ),
); );
}, },
@ -567,12 +631,34 @@ class _ToDoState extends State<ToDo> {
} }
getPatientShare(context, AppoitmentAllHistoryResultList appo) { getPatientShare(context, AppoitmentAllHistoryResultList appo) {
GifLoaderDialogUtils.showMyDialog(context);
DoctorsListService service = new DoctorsListService(); DoctorsListService service = new DoctorsListService();
if (appo.isLiveCareAppointment) {
getLiveCareAppointmentPatientShare(context, service, appo);
} else {
GifLoaderDialogUtils.showMyDialog(context);
service
.getPatientShare(appo.appointmentNo.toString(), appo.clinicID,
appo.projectID, context)
.then((res) {
GifLoaderDialogUtils.hideDialog(context);
widget.patientShareResponse = new PatientShareResponse.fromJson(res);
openPaymentDialog(appo, widget.patientShareResponse);
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: err);
print(err);
});
}
}
getLiveCareAppointmentPatientShare(context, DoctorsListService service,
AppoitmentAllHistoryResultList appo) {
GifLoaderDialogUtils.showMyDialog(context);
service service
.getPatientShare(appo.appointmentNo.toString(), appo.clinicID, .getLiveCareAppointmentPatientShare(appo.appointmentNo.toString(),
appo.projectID, context) appo.clinicID, appo.projectID, context)
.then((res) { .then((res) {
print(res);
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
widget.patientShareResponse = new PatientShareResponse.fromJson(res); widget.patientShareResponse = new PatientShareResponse.fromJson(res);
openPaymentDialog(appo, widget.patientShareResponse); openPaymentDialog(appo, widget.patientShareResponse);
@ -674,7 +760,12 @@ class _ToDoState extends State<ToDo> {
authenticatedUser.firstName, authenticatedUser.firstName,
authenticatedUser.patientID, authenticatedUser.patientID,
authenticatedUser, authenticatedUser,
widget.browser); widget.browser,
appo.isLiveCareAppointment,
appo.appointmentDate,
appo.appointmentNo,
appo.clinicID,
appo.doctorID);
} }
onBrowserLoadStart(String url) { onBrowserLoadStart(String url) {

@ -197,7 +197,7 @@ class _TodoListCardState extends State<TodoListCard> {
), ),
) )
], ],
) ),
], ],
), ),
), ),

@ -3,6 +3,7 @@ import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_page.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_index_page.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/HomeHealthCare/home_health_care_page.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/all_habib_medical_service_page.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/all_habib_medical_service_page.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/contact_us_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/contact_us_page.dart';
import 'package:diplomaticquarterapp/pages/Covid-DriveThru/covid-drivethru-location.dart'; import 'package:diplomaticquarterapp/pages/Covid-DriveThru/covid-drivethru-location.dart';
@ -421,7 +422,7 @@ class _HomePageState extends State<HomePage> {
Navigator.push( Navigator.push(
context, context,
FadePage( FadePage(
page: HomeHealthCareIndexPage(), page: HomeHealthCarePage(),
), ),
); );
}, },
@ -436,10 +437,10 @@ class _HomePageState extends State<HomePage> {
height: 50, height: 50,
), ),
SizedBox( SizedBox(
height: 3, height: 10,
), ),
Texts( Texts(
TranslationBase.of(context).homeHealthCareService, TranslationBase.of(context).cmcHeading,
textAlign: TextAlign.center, textAlign: TextAlign.center,
color: Colors.white, color: Colors.white,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
@ -505,7 +506,7 @@ class _HomePageState extends State<HomePage> {
height: 50, height: 50,
), ),
SizedBox( SizedBox(
height: 3, height:10,
), ),
Texts( Texts(
TranslationBase.of(context).emergencyService, TranslationBase.of(context).emergencyService,

@ -323,6 +323,7 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
Permission.notification, Permission.notification,
Permission.accessMediaLocation, Permission.accessMediaLocation,
Permission.calendar, Permission.calendar,
Permission.activityRecognition
].request(); ].request();
var permissionsGranted = await deviceCalendarPlugin.hasPermissions(); var permissionsGranted = await deviceCalendarPlugin.hasPermissions();
@ -607,6 +608,8 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
return TranslationBase.of(context).medicalProfile; return TranslationBase.of(context).medicalProfile;
case 2: case 2:
return TranslationBase.of(context).bookAppo; return TranslationBase.of(context).bookAppo;
case 5:
return TranslationBase.of(context).bookAppo;
case 3: case 3:
return TranslationBase.of(context).services; return TranslationBase.of(context).services;
case 4: case 4:

@ -49,6 +49,7 @@ class _LiveCareHomeState extends State<LiveCareHome>
child: Column(children: [ child: Column(children: [
/// this is will not colored with theme data /// this is will not colored with theme data
TabBar( TabBar(
labelColor: Colors.black,
tabs: [ tabs: [
Tab(text: TranslationBase.of(context).consultation), Tab(text: TranslationBase.of(context).consultation),
Tab(text: TranslationBase.of(context).logs), Tab(text: TranslationBase.of(context).logs),

@ -21,7 +21,7 @@ class _ScheduleClinicCardState extends State<ScheduleClinicCard> {
return Container( return Container(
child: Card( child: Card(
margin: EdgeInsets.fromLTRB(15.0, 10.0, 15.0, 8.0), margin: EdgeInsets.fromLTRB(15.0, 10.0, 15.0, 8.0),
color: widget.isSelected ? Colors.blue : Colors.white, color: widget.isSelected ? Color(0xff06b806) : Colors.white,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
), ),
@ -35,8 +35,8 @@ class _ScheduleClinicCardState extends State<ScheduleClinicCard> {
Container( Container(
child: Text( child: Text(
widget.languageID == 'ar' widget.languageID == 'ar'
? widget.clinicsHaveScheduleList.clinicDescN ? widget.clinicsHaveScheduleList.clinicDescN != null ? widget.clinicsHaveScheduleList.clinicDescN: ""
: widget.clinicsHaveScheduleList.clinicDesc, : widget.clinicsHaveScheduleList.clinicDesc != null ? widget.clinicsHaveScheduleList.clinicDesc: "Dermatology",
style: TextStyle( style: TextStyle(
fontSize: 16.0, fontSize: 16.0,
color: color:

@ -42,10 +42,11 @@ class _LiveCareHistoryCardState extends State<LiveCareHistoryCard> {
), ),
child: Container( child: Container(
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 0.22, // height: MediaQuery.of(context).size.height * 0.22,
padding: EdgeInsets.all(10.0), padding: EdgeInsets.all(10.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
Text("Requested date:", Text("Requested date:",
style: style:

@ -283,7 +283,8 @@ class _clinic_listState extends State<ClinicList> {
authenticatedUser.firstName, authenticatedUser.firstName,
authenticatedUser.patientID, authenticatedUser.patientID,
authenticatedUser, authenticatedUser,
browser); browser,
false);
} }
onBrowserLoadStart(String url) { onBrowserLoadStart(String url) {

@ -225,7 +225,8 @@ class ConfirmPaymentPage extends StatelessWidget {
advanceModel.patientName, advanceModel.patientName,
advanceModel.fileNumber, advanceModel.fileNumber,
authenticatedUser, authenticatedUser,
browser); browser,
false);
} }
onBrowserLoadStart(String url) { onBrowserLoadStart(String url) {

@ -56,11 +56,11 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
var authProvider = new AuthProvider(); var authProvider = new AuthProvider();
List<Medical> medical = List(); List<Medical> medical = List();
ProjectViewModel projectViewModel; ProjectViewModel projectViewModel;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
projectViewModel = Provider.of(context); projectViewModel = Provider.of(context);
var appoCountProvider = Provider.of<ToDoCountProviderModel>(context); var appoCountProvider = Provider.of<ToDoCountProviderModel>(context);
List<Widget> myMedicalList = Utils.myMedicalList( List<Widget> myMedicalList = Utils.myMedicalList(
projectViewModel: projectViewModel, projectViewModel: projectViewModel,
context: context, context: context,
@ -71,7 +71,7 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
builder: (_, model, widget) => AppScaffold( builder: (_, model, widget) => AppScaffold(
isShowDecPage: false, isShowDecPage: false,
baseViewModel: model, baseViewModel: model,
isHelp: true, // isHelp: true,
body: Container( body: Container(
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
@ -102,7 +102,7 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
itemCount: model itemCount: model
.appoitmentAllHistoryResultList.length, .appoitmentAllHistoryResultList.length,
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
reverse: !projectViewModel.isArabic, reverse: projectViewModel.isArabic,
), ),
], ],
), ),
@ -144,7 +144,7 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
width: double.infinity, width: double.infinity,
height: 80, height: 80,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).primaryColor, color: Colors.grey[500],
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
border: Border.all( border: Border.all(
color: Colors.transparent, width: 0.5), color: Colors.transparent, width: 0.5),
@ -196,10 +196,6 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
), ),
); );
} }
fullMedicalData() {
if (projectViewModel.havePrivilege(5)) {}
}
} }
class Medical { class Medical {

@ -1,188 +1,283 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/weight_pressure_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/weight_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart'; import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:feather_icons_flutter/feather_icons_flutter.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class AddWeightPage extends StatefulWidget { class AddWeightPage extends StatefulWidget {
final WeightPressureViewModel model;
final bool isUpdate;
final DateTime dayWeightDate;
final int lineItemNo;
final String weightValue;
final String measureTimeSelectedType;
final int weightUnit;
AddWeightPage(
{Key key,
this.model,
this.isUpdate = false,
this.dayWeightDate,
this.lineItemNo,
this.weightValue,
this.measureTimeSelectedType,
this.weightUnit})
: super(key: key);
@override @override
_AddWeightPageState createState() => _AddWeightPageState(); _AddWeightPageState createState() => _AddWeightPageState();
} }
class _AddWeightPageState extends State<AddWeightPage> { class _AddWeightPageState extends State<AddWeightPage> {
TextEditingController _weightValueController = TextEditingController(); TextEditingController _weightValueController = TextEditingController();
DateTime bloodSugarDate = DateTime.now(); DateTime dayWeightDate = DateTime.now();
DateTime timeSugarDate = DateTime.now(); DateTime timeWeightDate = DateTime.now();
int weightUnit = 1; int weightUnit = 1;
final List<String> measureUnitEnList = [ final List<String> measureUnitEnList = [
'Kg', 'Kg',
'Pound', 'Pound',
]; ];
final List<String> measureUnitArList = [ final List<String> measureUnitArList = ["كيلو جرام", "باوند"];
'Kg', String measureTimeSelectedType;
'Pound',
];
String measureTimeSelectedType = 'Kg';
@override
void initState() {
super.initState();
if (widget.isUpdate) {
dayWeightDate = widget.dayWeightDate;
timeWeightDate = widget.dayWeightDate;
measureTimeSelectedType = widget.measureTimeSelectedType;
if (measureUnitEnList.contains(widget.measureTimeSelectedType))
weightUnit = measureUnitEnList.indexOf(widget.measureTimeSelectedType);
else if (measureUnitArList.contains(widget.measureTimeSelectedType))
weightUnit = measureUnitArList.indexOf(widget.measureTimeSelectedType);
_weightValueController.text = widget.weightValue;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<WeightPressureViewMode>( return AppScaffold(
builder: (_, model, w) => AppScaffold( isShowAppBar: true,
isShowAppBar: true, appBarTitle: widget.isUpdate
appBarTitle: 'Add', ? TranslationBase.of(context).update
body: SingleChildScrollView( : TranslationBase.of(context).add,
physics: BouncingScrollPhysics(), appBarIcons:widget.isUpdate? [
child: Container( IconButton(
margin: EdgeInsets.all(15), icon: Icon(Icons.delete),
child: Column( color: Colors.white,
children: [ onPressed: () {
SizedBox( ConfirmDialog dialog = new ConfirmDialog(
height: 15, context: context,
), confirmMessage: 'Remove this measure',
NewTextFields( okText: TranslationBase.of(context).ok,
hintText: 'Enter Weight Value', cancelText: TranslationBase.of(context).cancel,
controller: _weightValueController, okFunction: () async {
keyboardType: TextInputType.number, ConfirmDialog.closeAlertDialog(context);
),
SizedBox( GifLoaderDialogUtils.showMyDialog(context);
height: 8, widget.model
), .deleteWeightResult(lineItemNo: widget.lineItemNo)
InkWell( .then((value) {
onTap: () { GifLoaderDialogUtils.hideDialog(context);
confirmSelectMeasureTimeDialog(projectViewModel.isArabic if (widget.model.state == ViewState.ErrorLocal)
? measureUnitEnList AppToast.showErrorToast(
: measureUnitArList); message: widget.model.error);
else
Navigator.pop(context);
}).catchError((e) {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(
message: widget.model.error);
});
}, },
child: Container( cancelFunction: () => {});
padding: EdgeInsets.all(12), dialog.showAlertDialog(context);
width: double.infinity, },
height: 65, )
decoration: BoxDecoration( ]:null,
borderRadius: BorderRadius.circular(12), body: SingleChildScrollView(
color: Colors.white), physics: BouncingScrollPhysics(),
child: Row( child: Container(
mainAxisAlignment: MainAxisAlignment.spaceBetween, margin: EdgeInsets.all(15),
children: [ child: Column(
Texts(measureTimeSelectedType), children: [
Icon( SizedBox(
Icons.arrow_drop_down, height: 15,
color: Colors.grey, ),
) NewTextFields(
], hintText: TranslationBase.of(context).weightAdd,
), controller: _weightValueController,
keyboardType: TextInputType.number,
),
SizedBox(
height: 8,
),
InkWell(
onTap: () {
confirmSelectMeasureTimeDialog(projectViewModel.isArabic
? measureUnitArList
: measureUnitEnList);
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(measureTimeSelectedType ??
TranslationBase.of(context).other),
Icon(
Icons.arrow_drop_down,
color: Colors.grey,
)
],
), ),
), ),
SizedBox( ),
height: 8, SizedBox(
), height: 8,
InkWell( ),
onTap: () { InkWell(
DatePicker.showDatePicker(context, onTap: () {
showTitleActions: true, DatePicker.showDatePicker(
minTime: DateTime(DateTime.now().year - 1, 1, 1), context,
maxTime: DateTime.now(), onConfirm: (date) { showTitleActions: true,
print('confirm $date'); minTime: DateTime(DateTime.now().year - 1, 1, 1),
maxTime: DateTime.now(),
onConfirm: (date) {
setState(() { setState(() {
bloodSugarDate = date; dayWeightDate = date;
}); });
}, },
currentTime: bloodSugarDate, currentTime: dayWeightDate,
locale: projectViewModel.localeType); locale: projectViewModel.localeType,
}, );
child: Container( },
padding: EdgeInsets.all(12), child: Container(
width: double.infinity, padding: EdgeInsets.all(12),
height: 65, width: double.infinity,
decoration: BoxDecoration( height: 65,
borderRadius: BorderRadius.circular(12), decoration: BoxDecoration(
color: Colors.white), borderRadius: BorderRadius.circular(12),
child: Row( color: Colors.white),
mainAxisAlignment: MainAxisAlignment.spaceBetween, child: Row(
children: [ mainAxisAlignment: MainAxisAlignment.spaceBetween,
Texts('Date'), children: [
Texts(getDate()), Texts(TranslationBase.of(context).date),
], Texts(getDate()),
), ],
), ),
), ),
SizedBox( ),
height: 8, SizedBox(
), height: 8,
InkWell( ),
onTap: () { InkWell(
DatePicker.showTimePicker(context, showTitleActions: true, onTap: () {
onConfirm: (date) { DatePicker.showTimePicker(
print('confirm $date'); context,
showTitleActions: true,
onConfirm: (date) {
setState(() { setState(() {
timeSugarDate = date; timeWeightDate = date;
}); });
}, },
currentTime: timeSugarDate, currentTime: timeWeightDate,
locale: projectViewModel.localeType); locale: projectViewModel.localeType,
}, );
child: Container( },
padding: EdgeInsets.all(12), child: Container(
width: double.infinity, padding: EdgeInsets.all(12),
height: 65, width: double.infinity,
decoration: BoxDecoration( height: 65,
borderRadius: BorderRadius.circular(12), decoration: BoxDecoration(
color: Colors.white), borderRadius: BorderRadius.circular(12),
child: Row( color: Colors.white),
mainAxisAlignment: MainAxisAlignment.spaceBetween, child: Row(
children: [Texts('Time'), Texts(getTime())], mainAxisAlignment: MainAxisAlignment.spaceBetween,
), children: [
Texts(TranslationBase.of(context).time),
Texts(getTime())
],
), ),
), ),
], ),
), ],
), ),
), ),
bottomSheet: Container( ),
color: Colors.transparent, bottomSheet: Container(
width: double.infinity, color: Colors.transparent,
height: MediaQuery.of(context).size.width * 0.2, width: double.infinity,
child: Padding( height: MediaQuery.of(context).size.width * 0.2,
padding: const EdgeInsets.all(15.0), child: Padding(
child: SecondaryButton( padding: const EdgeInsets.all(15.0),
loading: model.state == ViewState.BusyLocal, child: SecondaryButton(
label: 'SAVE', loading: widget.model.state == ViewState.BusyLocal,
textColor: Colors.white, label: TranslationBase.of(context).save.toUpperCase(),
onTap: () { textColor: Colors.white,
if (_weightValueController.text.isNotEmpty ) { onTap: () {
model.addWeightResult( if (_weightValueController.text.isNotEmpty) {
weightDate: '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00', if (widget.isUpdate) {
GifLoaderDialogUtils.showMyDialog(context);
widget.model.updateWeightResult(
weightDate: '${dayWeightDate.year}-${dayWeightDate.month}-${dayWeightDate.day} ${timeWeightDate.hour}:${timeWeightDate.minute}:00',
weightMeasured: _weightValueController.text.toString(), weightMeasured: _weightValueController.text.toString(),
weightUnit: weightUnit, weightUnit: weightUnit,
); lineItemNo: widget.lineItemNo
} )
}), .then((value) {
), GifLoaderDialogUtils.hideDialog(context);
if (widget.model.state == ViewState.Error)
AppToast.showErrorToast(message: widget.model.error);
else
Navigator.pop(context);
});
} else
widget.model.addWeightResult(
weightDate: '${dayWeightDate.year}-${dayWeightDate.month}-${dayWeightDate.day} ${timeWeightDate.hour}:${timeWeightDate.minute}:00',
weightMeasured: _weightValueController.text.toString(),
weightUnit: weightUnit,
)
.then((value) {
GifLoaderDialogUtils.hideDialog(context);
if (widget.model.state == ViewState.Error)
AppToast.showErrorToast(message: widget.model.error);
else
Navigator.pop(context);
});
}
}),
), ),
), ),
); );
} }
String getDate() { String getDate() {
return "${DateUtil.getMonth(bloodSugarDate.month)} ${bloodSugarDate.day}, ${bloodSugarDate.year}"; return "${DateUtil.getMonth(dayWeightDate.month)} ${dayWeightDate.day}, ${dayWeightDate.year}";
} }
String getTime() { String getTime() {
return " ${timeSugarDate.hour}:${timeSugarDate.minute}"; return " ${timeWeightDate.hour}:${timeWeightDate.minute}";
} }
void confirmSelectMeasureTimeDialog(List<String> list) { void confirmSelectMeasureTimeDialog(List<String> list) {
@ -190,7 +285,7 @@ class _AddWeightPageState extends State<AddWeightPage> {
context: context, context: context,
child: RadioStringDialog( child: RadioStringDialog(
radioList: list, radioList: list,
title: 'Measure unit', title: TranslationBase.of(context).measureUnit,
selectedValue: measureTimeSelectedType, selectedValue: measureTimeSelectedType,
onValueSelected: (value) { onValueSelected: (value) {
setState(() { setState(() {

@ -1,12 +1,15 @@
import 'dart:ui'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/weight_pressure_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/weight_pressure_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/TabBarWidget.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_send_email_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'AddWeightPage.dart'; import 'AddWeightPage.dart';
import 'WeightMonthlyPage.dart'; import 'WeightMonthlyPage.dart';
import 'WeightYeaPage.dart'; import 'WeightYeaPage.dart';
@ -35,73 +38,42 @@ class _WeightHomePageState extends State<WeightHomePage>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BaseView<WeightPressureViewMode>( return BaseView<WeightPressureViewModel>(
onModelReady: (model) => model.getWeight(), onModelReady: (model) => model.getWeight(),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
isShowAppBar: true, isShowAppBar: true,
appBarTitle: 'Weight', appBarTitle: TranslationBase.of(context).weight,
appBarIcons: [IconButton(
icon: Icon(Icons.email),
color: Colors.white,
onPressed: () {
showDialog(
context: context,
child: ConfirmSendEmailDialog(
email: model.user.emailAddress,
onTapSendEmail: () async{
GifLoaderDialogUtils.showMyDialog(context);
model.sendReportByEmail().then((value) {
GifLoaderDialogUtils.hideDialog(context);
if(model.state == ViewState.ErrorLocal){
AppToast.showErrorToast(message: model.error);
}else{
AppToast.showSuccessToast(message:TranslationBase.of(context).emailSentSuccessfully, );
}
}).catchError((e){
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: model.error);
});
},
),
);
},
),],
baseViewModel: model, baseViewModel: model,
body: Scaffold( body: Scaffold(
extendBodyBehindAppBar: true, extendBodyBehindAppBar: true,
appBar: PreferredSize( appBar: TabBarWidget(
preferredSize: Size.fromHeight(60.0), tabController: _tabController,
child: Stack(
children: <Widget>[
Positioned(
bottom: 1,
left: 0,
right: 0,
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Container(
color: Theme.of(context)
.scaffoldBackgroundColor
.withOpacity(0.8),
height: 70.0,
),
),
),
Center(
child: Container(
height: 55.0,
color: Colors.white,
child: Center(
child: TabBar(
isScrollable: true,
controller: _tabController,
indicatorWeight: 5.0,
indicatorSize: TabBarIndicatorSize.tab,
indicatorColor: Colors.red[800],
labelColor: Theme.of(context).primaryColor,
labelPadding:
EdgeInsets.only(top: 4.0, left: 5.0, right: 5.0),
unselectedLabelColor: Colors.grey[800],
tabs: [
Container(
width: MediaQuery.of(context).size.width * 0.27,
child: Center(
child: Texts('Weekly'),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.27,
child: Center(
child: Texts('Monthly'),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.27,
child: Center(
child: Texts('Yearly'),
),
),
],
),
),
),
),
],
),
), ),
body: Column( body: Column(
children: <Widget>[ children: <Widget>[
@ -111,16 +83,13 @@ class _WeightHomePageState extends State<WeightHomePage>
controller: _tabController, controller: _tabController,
children: <Widget>[ children: <Widget>[
WeightWeeklyPage( WeightWeeklyPage(
data: model.getWeightWeeklySeries(), model: model,
diabtecPatientResult: model.weekWeightMeasurementResult,
), ),
WeightMonthlyPage( WeightMonthlyPage(
data: model.getWeightMonthlyTimeSeriesSales(), model: model,
diabtecPatientResult: model.monthWeightMeasurementResult,
), ),
WeightYearPage( WeightYearPage(
data: model.getWeightYearTimeSeriesSales(), model: model,
diabtecPatientResult: model.yearWeightMeasurementResult,
) )
], ],
), ),
@ -129,13 +98,15 @@ class _WeightHomePageState extends State<WeightHomePage>
), ),
floatingActionButton: InkWell( floatingActionButton: InkWell(
onTap: () { onTap: () {
Navigator.push(context, FadePage(page: AddWeightPage())); Navigator.push(context, FadePage(page: AddWeightPage(model: model,)));
}, },
child: Container( child: Container(
width: 55, width: 55,
height: 55, height: 55,
decoration: BoxDecoration( decoration: BoxDecoration(
shape: BoxShape.circle, color: HexColor('515B5D')), shape: BoxShape.circle,
color: Theme.of(context).primaryColor,
),
child: Center( child: Center(
child: Icon( child: Icon(
Icons.add, Icons.add,

@ -3,41 +3,48 @@ import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPa
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/YearMonthlyChartDate.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/YearMonthlyChartDate.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/weight/WeightMeasurementResult.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/weight/WeightMeasurementResult.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/weight_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/MonthLineChartCurved.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
class WeightMonthlyPage extends StatelessWidget { class WeightMonthlyPage extends StatelessWidget {
final List<charts.Series<YearMonthlyChartDate, int>> data; final WeightPressureViewModel model;
final List<WeightMeasurementResult> diabtecPatientResult;
const WeightMonthlyPage({Key key, this.data, this.diabtecPatientResult}) const WeightMonthlyPage({
: super(key: key); Key key,
this.model,
}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body: model.weighMonthTimeSeriesData.isEmpty?Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),):ListView(
children: [ children: [
Container( Container(
width: double.maxFinite, width: double.maxFinite,
height: 180, color: Colors.white,
color: Colors.white, child: MonthLineChartCurved(
child: charts.LineChart(data, horizontalInterval: 1.0,
//animate: animate, title: TranslationBase.of(context).weight,
defaultRenderer: timeSeries: model.weighMonthTimeSeriesData,
new charts.LineRendererConfig(includePoints: true)), indexes: model.weighMonthTimeSeriesData.length ~/ 5.5,
), )),
SizedBox( SizedBox(
height: 12, height: 12,
), ),
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Texts('Details'), child: Texts(TranslationBase.of(context).details),
), ),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -49,7 +56,7 @@ class WeightMonthlyPage extends StatelessWidget {
border: TableBorder.symmetric( border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]), inside: BorderSide(width: 2.0, color: Colors.grey[300]),
), ),
children: fullData(), children: fullData(context, projectViewModel, model),
), ),
], ],
), ),
@ -59,21 +66,27 @@ class WeightMonthlyPage extends StatelessWidget {
); );
} }
List<TableRow> fullData() { List<TableRow> fullData(BuildContext context,
ProjectViewModel projectViewModel, WeightPressureViewModel model) {
List<TableRow> tableRow = []; List<TableRow> tableRow = [];
tableRow.add( tableRow.add(
TableRow( TableRow(
children: [ children: [
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0), topLeft: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
topRight: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
), ),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Date', TranslationBase.of(context).date,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -82,11 +95,11 @@ class WeightMonthlyPage extends StatelessWidget {
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Time', TranslationBase.of(context).time,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -94,11 +107,19 @@ class WeightMonthlyPage extends StatelessWidget {
height: 40), height: 40),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
topRight: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Value', TranslationBase.of(context).value,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -107,7 +128,7 @@ class WeightMonthlyPage extends StatelessWidget {
], ],
), ),
); );
diabtecPatientResult.forEach( model.monthWeightMeasurementResult.forEach(
(diabtec) { (diabtec) {
tableRow.add( tableRow.add(
TableRow( TableRow(
@ -119,7 +140,7 @@ class WeightMonthlyPage extends StatelessWidget {
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${DateUtil.getMonthDayYearDateFormatted(diabtec.weightDate)} ', '${projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(diabtec.weightDate) : DateUtil.getMonthDayYearDateFormatted(diabtec.weightDate)} ',
textAlign: TextAlign.center, textAlign: TextAlign.center,
fontSize: 12, fontSize: 12,
), ),

@ -1,32 +1,41 @@
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/weight/WeightMeasurementResult.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/weight/WeightMeasurementResult.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/weight_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/LineChartCurved.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
import 'AddWeightPage.dart';
class WeightWeeklyPage extends StatelessWidget { class WeightWeeklyPage extends StatelessWidget {
final List<charts.Series<WeekChartDate, DateTime>> data; final WeightPressureViewModel model;
final List<WeightMeasurementResult> diabtecPatientResult;
const WeightWeeklyPage({Key key, this.data, this.diabtecPatientResult}) const WeightWeeklyPage({Key key, this.model}) : super(key: key);
: super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body: model.weightWeekTimeSeriesData.isEmpty?Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),):ListView(
children: [ children: [
Container( Container(
width: double.maxFinite, margin: EdgeInsets.only(top: 12, left: 8, right: 8),
height: 180,
color: Colors.white, color: Colors.white,
child: charts.TimeSeriesChart( child: LineChartCurved(
data, horizontalInterval: 1.0,
dateTimeFactory: const charts.LocalDateTimeFactory(), title: TranslationBase.of(context).weight,
timeSeries: model.weightWeekTimeSeriesData,
indexes: model.weightWeekTimeSeriesData.length ~/ 5.5,
), ),
), ),
SizedBox( SizedBox(
@ -34,7 +43,7 @@ class WeightWeeklyPage extends StatelessWidget {
), ),
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Texts('Details'), child: Texts(TranslationBase.of(context).details),
), ),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -46,7 +55,7 @@ class WeightWeeklyPage extends StatelessWidget {
border: TableBorder.symmetric( border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]), inside: BorderSide(width: 2.0, color: Colors.grey[300]),
), ),
children: fullData(), children: fullData(context, projectViewModel, model),
), ),
], ],
), ),
@ -56,21 +65,27 @@ class WeightWeeklyPage extends StatelessWidget {
); );
} }
List<TableRow> fullData() { List<TableRow> fullData(BuildContext context,
ProjectViewModel projectViewModel, WeightPressureViewModel model) {
List<TableRow> tableRow = []; List<TableRow> tableRow = [];
tableRow.add( tableRow.add(
TableRow( TableRow(
children: [ children: [
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0), topLeft: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
topRight: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
), ),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Date', TranslationBase.of(context).date,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -79,11 +94,11 @@ class WeightWeeklyPage extends StatelessWidget {
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Time', TranslationBase.of(context).time,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -91,37 +106,40 @@ class WeightWeeklyPage extends StatelessWidget {
height: 40), height: 40),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Value', TranslationBase.of(context).value,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
), ),
height: 40), height: 40),
Container( Container(
child: Container( decoration: BoxDecoration(
decoration: BoxDecoration( color: Theme.of(context).primaryColor,
color: HexColor('#515B5D'), borderRadius: BorderRadius.only(
borderRadius: BorderRadius.only( topLeft: projectViewModel.isArabic
topRight: Radius.circular(10.0), ? Radius.circular(10.0)
), : Radius.circular(0.0),
topRight: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
), ),
child: Center( ),
child: Texts( child: Center(
'Edit', child: Texts(
color: Colors.white, TranslationBase.of(context).edit,
fontSize: 15, color: Colors.white,
), fontSize: 15,
), ),
height: 40), ),
), height: 40),
], ],
), ),
); );
diabtecPatientResult.forEach( model.weekWeightMeasurementResult.forEach(
(diabtec) { (diabtec) {
tableRow.add( tableRow.add(
TableRow( TableRow(
@ -133,7 +151,7 @@ class WeightWeeklyPage extends StatelessWidget {
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${DateUtil.getMonthDayYearDateFormatted(diabtec.weightDate)} ', '${projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(diabtec.weightDate) : DateUtil.getMonthDayYearDateFormatted(diabtec.weightDate)} ',
textAlign: TextAlign.center, textAlign: TextAlign.center,
fontSize: 12, fontSize: 12,
), ),
@ -166,12 +184,30 @@ class WeightWeeklyPage extends StatelessWidget {
), ),
), ),
), ),
Container( InkWell(
height: 70, onTap: () {
padding: EdgeInsets.all(10), Navigator.push(
color: Colors.white, context,
child: Center( FadePage(
child: Icon(Icons.edit), page: AddWeightPage(
isUpdate: true,
dayWeightDate: diabtec.weightDate,
measureTimeSelectedType: 'Kg',
weightValue: diabtec.weightMeasured.toString(),
lineItemNo: diabtec.lineItemNo,
weightUnit: int.parse(diabtec.unit),
model: model,
),
),
);
},
child: Container(
height: 70,
padding: EdgeInsets.all(10),
color: Colors.white,
child: Center(
child: Icon(Icons.edit),
),
), ),
), ),
], ],

@ -2,41 +2,48 @@ import 'package:diplomaticquarterapp/core/model/my_trakers/blood_pressur/BloodPr
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPatientResult.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPatientResult.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/weight/WeightMeasurementResult.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/weight/WeightMeasurementResult.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/weight_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/LineChartCurved.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
class WeightYearPage extends StatelessWidget { class WeightYearPage extends StatelessWidget {
final List<charts.Series<WeekChartDate, DateTime>> data; final WeightPressureViewModel model;
final List<WeightMeasurementResult> diabtecPatientResult;
const WeightYearPage({Key key, this.data, this.diabtecPatientResult})
const WeightYearPage({Key key, this.model, })
: super(key: key); : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body: model.weightYearTimeSeriesData.isEmpty ? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),) : ListView(
children: [ children: [
Container( Container(
width: double.maxFinite, width: double.maxFinite,
height: 180, color: Colors.white,
color: Colors.white, child: LineChartCurved(
child: charts.TimeSeriesChart( horizontalInterval: 2.0,
data, title: TranslationBase.of(context).weight,
dateTimeFactory: const charts.LocalDateTimeFactory(), timeSeries: model.weightYearTimeSeriesData,
), indexes: model.weightYearTimeSeriesData.length ~/ 5.5,
)
), ),
SizedBox( SizedBox(
height: 12, height: 12,
), ),
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Texts('Details'), child: Texts(TranslationBase.of(context).details),
), ),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -48,7 +55,7 @@ class WeightYearPage extends StatelessWidget {
border: TableBorder.symmetric( border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]), inside: BorderSide(width: 2.0, color: Colors.grey[300]),
), ),
children: fullData(), children: fullData(context, projectViewModel, model),
), ),
], ],
), ),
@ -58,21 +65,27 @@ class WeightYearPage extends StatelessWidget {
); );
} }
List<TableRow> fullData() { List<TableRow> fullData(BuildContext context,
ProjectViewModel projectViewModel, WeightPressureViewModel model) {
List<TableRow> tableRow = []; List<TableRow> tableRow = [];
tableRow.add( tableRow.add(
TableRow( TableRow(
children: [ children: [
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0), topLeft: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
topRight: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
), ),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Date', TranslationBase.of(context).date,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -81,11 +94,11 @@ class WeightYearPage extends StatelessWidget {
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Time', TranslationBase.of(context).time,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -93,11 +106,19 @@ class WeightYearPage extends StatelessWidget {
height: 40), height: 40),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
topRight: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Value', TranslationBase.of(context).value,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -106,8 +127,8 @@ class WeightYearPage extends StatelessWidget {
], ],
), ),
); );
diabtecPatientResult.forEach( model.yearWeightMeasurementResult.forEach(
(diabtec) { (diabtec) {
tableRow.add( tableRow.add(
TableRow( TableRow(
children: [ children: [
@ -118,7 +139,7 @@ class WeightYearPage extends StatelessWidget {
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${DateUtil.getMonthDayYearDateFormatted(diabtec.weightDate)} ', '${projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(diabtec.weightDate) : DateUtil.getMonthDayYearDateFormatted(diabtec.weightDate)} ',
textAlign: TextAlign.center, textAlign: TextAlign.center,
fontSize: 12, fontSize: 12,
), ),

@ -1,21 +1,41 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_pressure_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/blood_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart'; import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:feather_icons_flutter/feather_icons_flutter.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class AddBloodPressurePage extends StatefulWidget { class AddBloodPressurePage extends StatefulWidget {
final DateTime bloodSugarDate;
final String measureTimeSelectedType;
final bool isUpdate;
final int lineItemNo;
final String bloodSystolicValue;
final String bloodDiastolicValue;
final BloodPressureViewMode model;
const AddBloodPressurePage(
{Key key,
this.bloodSugarDate,
this.measureTimeSelectedType,
this.isUpdate=false,
this.lineItemNo,
this.model,
this.bloodSystolicValue,
this.bloodDiastolicValue})
: super(key: key);
@override @override
_AddBloodPressurePageState createState() => _AddBloodPressurePageState(); _AddBloodPressurePageState createState() => _AddBloodPressurePageState();
} }
@ -28,8 +48,8 @@ class _AddBloodPressurePageState extends State<AddBloodPressurePage> {
DateTime timeSugarDate = DateTime.now(); DateTime timeSugarDate = DateTime.now();
int measuredArm = 1; int measuredArm = 1;
final List<String> measureTimeEnList = [ final List<String> measureTimeEnList = [
'Left Arm', 'Left',
'Right Arm', 'Right',
]; ];
final List<String> measureTimeArList = [ final List<String> measureTimeArList = [
'الذراع الأيسر', 'الذراع الأيسر',
@ -37,152 +57,220 @@ class _AddBloodPressurePageState extends State<AddBloodPressurePage> {
]; ];
String measureTimeSelectedType = 'Left Arm'; String measureTimeSelectedType = 'Left Arm';
@override
void initState() {
super.initState();
if (widget.isUpdate) {
bloodSugarDate = widget.bloodSugarDate;
bloodSugarDate = widget.bloodSugarDate;
measureTimeSelectedType = widget.measureTimeSelectedType;
if (measureTimeEnList.contains(widget.measureTimeSelectedType))
measuredArm = measureTimeEnList.indexOf(widget.measureTimeSelectedType);
else if (measureTimeArList.contains(widget.measureTimeSelectedType))
measuredArm = measureTimeArList.indexOf(widget.measureTimeSelectedType);
_bloodSystolicValueController.text = widget.bloodSystolicValue;
_bloodDiastolicValueController.text = widget.bloodDiastolicValue;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<BloodPressureViewMode>( return AppScaffold(
builder: (_, model, w) => AppScaffold( isShowAppBar: true,
isShowAppBar: true, appBarTitle: widget.isUpdate
appBarTitle: 'Add', ? TranslationBase.of(context).update
body: SingleChildScrollView( : TranslationBase.of(context).add,
physics: BouncingScrollPhysics(), appBarIcons: widget.isUpdate?[
child: Container( IconButton(
margin: EdgeInsets.all(15), icon: Icon(Icons.delete),
child: Column( color: Colors.white,
children: [ onPressed: () {
SizedBox( ConfirmDialog dialog = new ConfirmDialog(
height: 15, context: context,
), confirmMessage: 'Remove this measure',
NewTextFields( okText: TranslationBase.of(context).ok,
hintText: 'Enter Systolic Value', cancelText: TranslationBase.of(context).cancel,
controller: _bloodSystolicValueController, okFunction: () async {
keyboardType: TextInputType.number, ConfirmDialog.closeAlertDialog(context);
),
SizedBox( GifLoaderDialogUtils.showMyDialog(context);
height: 8, widget.model
), .deactivateDiabeticStatus(lineItemNo: widget.lineItemNo)
NewTextFields( .then((value) {
hintText: 'Blood Diastolic Value', GifLoaderDialogUtils.hideDialog(context);
controller: _bloodDiastolicValueController, if (widget.model.state == ViewState.ErrorLocal)
keyboardType: TextInputType.number, AppToast.showErrorToast(message: widget.model.error);
), else
SizedBox( Navigator.pop(context);
height: 8, }).catchError((e) {
), GifLoaderDialogUtils.hideDialog(context);
InkWell( AppToast.showErrorToast(message: widget.model.error);
onTap: () { });
confirmSelectMeasureTimeDialog(projectViewModel.isArabic },
? measureTimeEnList cancelFunction: () => {});
: measureTimeArList); dialog.showAlertDialog(context);
}, },
child: Container( )
padding: EdgeInsets.all(12), ]:null,
width: double.infinity, body: SingleChildScrollView(
height: 65, physics: BouncingScrollPhysics(),
decoration: BoxDecoration( child: Container(
borderRadius: BorderRadius.circular(12), margin: EdgeInsets.all(15),
color: Colors.white), child: Column(
child: Row( children: [
mainAxisAlignment: MainAxisAlignment.spaceBetween, SizedBox(
children: [ height: 15,
Texts(measureTimeSelectedType), ),
Icon( NewTextFields(
Icons.arrow_drop_down, hintText: TranslationBase.of(context).systolicAdd,
color: Colors.grey, controller: _bloodSystolicValueController,
) keyboardType: TextInputType.number,
], ),
), SizedBox(
height: 8,
),
NewTextFields(
hintText: TranslationBase.of(context).diastolicAdd,
controller: _bloodDiastolicValueController,
keyboardType: TextInputType.number,
),
SizedBox(
height: 8,
),
InkWell(
onTap: () {
confirmSelectMeasureTimeDialog(projectViewModel.isArabic
? measureTimeEnList
: measureTimeArList);
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(measureTimeSelectedType),
Icon(
Icons.arrow_drop_down,
color: Colors.grey,
)
],
), ),
), ),
SizedBox( ),
height: 8, SizedBox(
), height: 8,
InkWell( ),
onTap: () { InkWell(
DatePicker.showDatePicker(context, onTap: () {
showTitleActions: true, DatePicker.showDatePicker(context,
minTime: DateTime(DateTime.now().year - 1, 1, 1), showTitleActions: true,
maxTime: DateTime.now(), onConfirm: (date) { minTime: DateTime(DateTime.now().year - 1, 1, 1),
print('confirm $date'); maxTime: DateTime.now(), onConfirm: (date) {
setState(() { setState(
() {
bloodSugarDate = date; bloodSugarDate = date;
}); },
}, );
currentTime: bloodSugarDate,
locale: projectViewModel.localeType);
}, },
child: Container( currentTime: bloodSugarDate,
padding: EdgeInsets.all(12), locale: projectViewModel.localeType);
width: double.infinity, },
height: 65, child: Container(
decoration: BoxDecoration( padding: EdgeInsets.all(12),
borderRadius: BorderRadius.circular(12), width: double.infinity,
color: Colors.white), height: 65,
child: Row( decoration: BoxDecoration(
mainAxisAlignment: MainAxisAlignment.spaceBetween, borderRadius: BorderRadius.circular(12),
children: [ color: Colors.white),
Texts('Date'), child: Row(
Texts(getDate()), mainAxisAlignment: MainAxisAlignment.spaceBetween,
], children: [
), Texts(TranslationBase.of(context).date),
Texts(getDate()),
],
), ),
), ),
SizedBox( ),
height: 8, SizedBox(
), height: 8,
InkWell( ),
onTap: () { InkWell(
DatePicker.showTimePicker(context, showTitleActions: true, onTap: () {
onConfirm: (date) { DatePicker.showTimePicker(context, showTitleActions: true,
print('confirm $date'); onConfirm: (date) {
setState(() { setState(
() {
timeSugarDate = date; timeSugarDate = date;
}); },
}, );
currentTime: timeSugarDate,
locale: projectViewModel.localeType);
}, },
child: Container( currentTime: timeSugarDate,
padding: EdgeInsets.all(12), locale: projectViewModel.localeType);
width: double.infinity, },
height: 65, child: Container(
decoration: BoxDecoration( padding: EdgeInsets.all(12),
borderRadius: BorderRadius.circular(12), width: double.infinity,
color: Colors.white), height: 65,
child: Row( decoration: BoxDecoration(
mainAxisAlignment: MainAxisAlignment.spaceBetween, borderRadius: BorderRadius.circular(12),
children: [Texts('Time'), Texts(getTime())], color: Colors.white),
), child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(TranslationBase.of(context).time),
Texts(getTime())
],
), ),
), ),
], ),
), ],
), ),
), ),
bottomSheet: Container( ),
color: Colors.transparent, bottomSheet: Container(
width: double.infinity, color: Colors.transparent,
height: MediaQuery.of(context).size.width * 0.2, width: double.infinity,
child: Padding( height: MediaQuery.of(context).size.width * 0.2,
padding: const EdgeInsets.all(15.0), child: Padding(
child: SecondaryButton( padding: const EdgeInsets.all(15.0),
loading: model.state == ViewState.BusyLocal, child: SecondaryButton(
label: 'SAVE', loading: widget.model.state == ViewState.BusyLocal,
textColor: Colors.white, label: TranslationBase.of(context).save.toUpperCase(),
onTap: () { textColor: Colors.white,
if (_bloodSystolicValueController.text.isNotEmpty && onTap: () async {
_bloodDiastolicValueController.text.isNotEmpty) { if (_bloodSystolicValueController.text.isNotEmpty &&
model.addDiabtecResult( _bloodDiastolicValueController.text.isNotEmpty) {
bloodPressureDate: '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00', GifLoaderDialogUtils.showMyDialog(context);
diastolicPressure: _bloodDiastolicValueController.text.toString(),
systolicePressure: _bloodSystolicValueController.text.toString(), widget.model.addORUpdateDiabtecResult(
measuredArm: measuredArm, isUpdate: widget.isUpdate,
); bloodPressureDate:
} '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00',
}), diastolicPressure:
), _bloodDiastolicValueController.text.toString(),
systolicePressure:
_bloodSystolicValueController.text.toString(),
measuredArm: measuredArm,
).then((value) {
GifLoaderDialogUtils.hideDialog(context);
if(widget.model.state == ViewState.BusyLocal)
AppToast.showErrorToast(message: widget.model.error);
else
Navigator.pop(context);
;
}).catchError((e){
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: widget.model.error);
});
}
}),
), ),
), ),
); );

@ -1,15 +1,15 @@
import 'dart:ui'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_pressure_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/blood_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/TabBarWidget.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_send_email_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'AddBloodPressurePage.dart'; import 'AddBloodPressurePage.dart';
import 'BloodPressureMonthly.dart'; import 'BloodPressureMonthly.dart';
import 'BloodPressureYeaPage.dart'; import 'BloodPressureYeaPage.dart';
@ -42,69 +42,37 @@ class _BloodPressureHomePageState extends State<BloodPressureHomePage>
onModelReady: (model) => model.getBloodPressure(), onModelReady: (model) => model.getBloodPressure(),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
isShowAppBar: true, isShowAppBar: true,
appBarTitle: 'Blood Pressure', appBarTitle: TranslationBase.of(context).bloodPressure,
baseViewModel: model, baseViewModel: model,
appBarIcons: [IconButton(
icon: Icon(Icons.email),
color: Colors.white,
onPressed: () {
showDialog(
context: context,
child: ConfirmSendEmailDialog(
email: model.user.emailAddress,
onTapSendEmail: () async{
GifLoaderDialogUtils.showMyDialog(context);
model.sendReportByEmail().then((value) {
GifLoaderDialogUtils.hideDialog(context);
if(model.state == ViewState.ErrorLocal){
AppToast.showErrorToast(message: model.error);
}else{
AppToast.showSuccessToast(message:TranslationBase.of(context).emailSentSuccessfully, );
}
}).catchError((e){
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: model.error);
});
},
),
);
},
),],
body: Scaffold( body: Scaffold(
extendBodyBehindAppBar: true, extendBodyBehindAppBar: true,
appBar: PreferredSize( appBar: TabBarWidget(tabController: _tabController,),
preferredSize: Size.fromHeight(60.0),
child: Stack(
children: <Widget>[
Positioned(
bottom: 1,
left: 0,
right: 0,
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Container(
color: Theme.of(context)
.scaffoldBackgroundColor
.withOpacity(0.8),
height: 70.0,
),
),
),
Center(
child: Container(
height: 55.0,
color: Colors.white,
child: Center(
child: TabBar(
isScrollable: true,
controller: _tabController,
indicatorWeight: 5.0,
indicatorSize: TabBarIndicatorSize.tab,
labelColor: Theme.of(context).primaryColor,
labelPadding:
EdgeInsets.only(top: 4.0, left: 5.0, right: 5.0),
unselectedLabelColor: Colors.grey[800],
tabs: [
Container(
width: MediaQuery.of(context).size.width * 0.27,
child: Center(
child: Texts('Weekly'),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.27,
child: Center(
child: Texts('Monthly'),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.27,
child: Center(
child: Texts('Yearly'),
),
),
],
),
),
),
),
],
),
),
body: Column( body: Column(
children: <Widget>[ children: <Widget>[
Expanded( Expanded(
@ -113,16 +81,13 @@ class _BloodPressureHomePageState extends State<BloodPressureHomePage>
controller: _tabController, controller: _tabController,
children: <Widget>[ children: <Widget>[
BloodPressureWeeklyPage( BloodPressureWeeklyPage(
data: model.getBloodWeeklySeries(), model: model,
diabtecPatientResult: model.weekDiabtecPatientResult,
), ),
BloodPressureMonthlyPage( BloodPressureMonthlyPage(
data: model.getBloodMonthlyTimeSeriesSales(), model: model,
diabtecPatientResult: model.monthDiabtecPatientResult,
), ),
BloodPressureYearPage( BloodPressureYearPage(
data: model.getBloodYearTimeSeriesSales(), model: model,
diabtecPatientResult: model.yearDiabtecPatientResult,
) )
], ],
), ),
@ -131,13 +96,13 @@ class _BloodPressureHomePageState extends State<BloodPressureHomePage>
), ),
floatingActionButton: InkWell( floatingActionButton: InkWell(
onTap: () { onTap: () {
Navigator.push(context, FadePage(page: AddBloodPressurePage())); Navigator.push(context, FadePage(page: AddBloodPressurePage(model: model,)));
}, },
child: Container( child: Container(
width: 55, width: 55,
height: 55, height: 55,
decoration: BoxDecoration( decoration: BoxDecoration(
shape: BoxShape.circle, color: HexColor('515B5D')), shape: BoxShape.circle, color: Theme.of(context).primaryColor),
child: Center( child: Center(
child: Icon( child: Icon(
Icons.add, Icons.add,

@ -1,43 +1,45 @@
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_pressur/BloodPressureResult.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/blood_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPatientResult.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/MonthCurvedChartBloodPressure.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/YearMonthlyChartDate.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';
class BloodPressureMonthlyPage extends StatelessWidget { class BloodPressureMonthlyPage extends StatelessWidget {
final List<charts.Series<YearMonthlyChartDate, int>> data; final BloodPressureViewMode model;
final List<BloodPressureResult> diabtecPatientResult;
const BloodPressureMonthlyPage({Key key, this.model}) : super(key: key);
const BloodPressureMonthlyPage(
{Key key, this.data, this.diabtecPatientResult})
: super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body: model.weighMonthTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),):ListView(
children: [ children: [
Container( Container(
width: double.maxFinite, margin: EdgeInsets.only(top: 12, left: 8, right: 8),
height: 180, color: Colors.white,
color: Colors.white, child: MonthCurvedChartBloodPressure(
child: charts.LineChart(data, horizontalInterval: 20.0,
//animate: animate, title: TranslationBase.of(context).bloodPressure,
defaultRenderer: timeSeries1: model.weighMonthTimeSeriesDataTop,
new charts.LineRendererConfig(includePoints: true)), timeSeries2: model.weighMonthTimeSeriesDataLow,
), indexes: model.weightWeekTimeSeriesDataLow.length ~/ 5.5,
),
),
SizedBox( SizedBox(
height: 12, height: 12,
), ),
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Texts('Details'), child: Texts(TranslationBase.of(context).details),
), ),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -49,7 +51,7 @@ class BloodPressureMonthlyPage extends StatelessWidget {
border: TableBorder.symmetric( border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]), inside: BorderSide(width: 2.0, color: Colors.grey[300]),
), ),
children: fullData(), children: fullData(context,projectViewModel,model),
), ),
], ],
), ),
@ -59,7 +61,8 @@ class BloodPressureMonthlyPage extends StatelessWidget {
); );
} }
List<TableRow> fullData() { List<TableRow> fullData(BuildContext context,
ProjectViewModel projectViewModel, BloodPressureViewMode model) {
List<TableRow> tableRow = []; List<TableRow> tableRow = [];
tableRow.add( tableRow.add(
TableRow( TableRow(
@ -67,7 +70,7 @@ class BloodPressureMonthlyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0), topLeft: Radius.circular(10.0),
), ),
@ -85,7 +88,7 @@ class BloodPressureMonthlyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
@ -99,11 +102,11 @@ class BloodPressureMonthlyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Measured', 'Arm',
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -113,14 +116,14 @@ class BloodPressureMonthlyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topRight: Radius.circular(10.0), topRight: Radius.circular(10.0),
), ),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Value', 'SBP/DBP',
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -130,68 +133,50 @@ class BloodPressureMonthlyPage extends StatelessWidget {
], ],
), ),
); );
diabtecPatientResult.forEach( model.monthDiabtecPatientResult.reversed.forEach(
(diabtec) { (diabtec) {
tableRow.add( tableRow.add(
TableRow( TableRow(
children: [ children: [
Container( Container(
child: Container( color: Colors.white,
height: 70, child: Center(
padding: EdgeInsets.all(10), child: Texts(
color: Colors.white, '${projectViewModel.isArabic? DateUtil.getMonthDayYearDateFormattedAr(diabtec.bloodPressureDate):DateUtil.getMonthDayYearDateFormatted(diabtec.bloodPressureDate)}',
child: Center( fontSize: 15,
child: Texts( textAlign: TextAlign.center,
'${DateUtil.getMonthDayYearDateFormatted(diabtec.bloodPressureDate)} ',
textAlign: TextAlign.center,
fontSize: 12,
),
), ),
), ),
height: 40,
), ),
Container( Container(
child: Container(
height: 70,
padding: EdgeInsets.all(10),
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${diabtec.bloodPressureDate.hour}:${diabtec.bloodPressureDate.minute}', '${diabtec.bloodPressureDate.hour}:${diabtec.bloodPressureDate.minute}',
textAlign: TextAlign.center, fontSize: 15,
fontSize: 12,
), ),
), ),
), height: 40),
),
Container( Container(
child: Container(
height: 70,
padding: EdgeInsets.all(10),
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${diabtec.measuredArmDesc}', diabtec.measuredArmDesc,
textAlign: TextAlign.center, fontSize: 15,
fontSize: 12,
), ),
), ),
), height: 40),
),
Container( Container(
child: Container(
height: 70,
padding: EdgeInsets.all(10),
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${diabtec.systolicePressure}/${diabtec.diastolicPressure}', '${diabtec.systolicePressure}/${diabtec.diastolicPressure}',
textAlign: TextAlign.center,
fontSize: 12,
color: Colors.red, color: Colors.red,
fontSize: 15,
), ),
), ),
), height: 40),
),
], ],
), ),
); );

@ -1,33 +1,34 @@
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_pressur/BloodPressureResult.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/blood_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPatientResult.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/CurvedChartBloodPressure.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:provider/provider.dart';
import 'package:hexcolor/hexcolor.dart';
class BloodPressureYearPage extends StatelessWidget { class BloodPressureYearPage extends StatelessWidget {
final List<charts.Series<WeekChartDate, DateTime>> data; final BloodPressureViewMode model;
final List<BloodPressureResult> diabtecPatientResult;
const BloodPressureYearPage({Key key, this.data, this.diabtecPatientResult}) const BloodPressureYearPage({Key key, this.model}) : super(key: key);
: super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body: model.weightYearTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),):ListView(
children: [ children: [
Container( Container(
width: double.maxFinite, margin: EdgeInsets.only(top: 12, left: 8, right: 8),
height: 180,
color: Colors.white, color: Colors.white,
child: charts.TimeSeriesChart( child: CurvedChartBloodPressure(
data, horizontalInterval: 3.0,// model.weightWeekTimeSeriesDataLow.length==1 ?1 :20.0,
dateTimeFactory: const charts.LocalDateTimeFactory(), title: TranslationBase.of(context).bloodPressure,
timeSeries1: model.weightYearTimeSeriesDataTop,
timeSeries2: model.weightYearTimeSeriesDataLow,
indexes: model.weightWeekTimeSeriesDataLow.length ~/ 5.5,
), ),
), ),
SizedBox( SizedBox(
@ -35,7 +36,7 @@ class BloodPressureYearPage extends StatelessWidget {
), ),
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Texts('Details'), child: Texts(TranslationBase.of(context).details),
), ),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -47,7 +48,7 @@ class BloodPressureYearPage extends StatelessWidget {
border: TableBorder.symmetric( border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]), inside: BorderSide(width: 2.0, color: Colors.grey[300]),
), ),
children: fullData(), children: fullData(context, projectViewModel, model),
), ),
], ],
), ),
@ -57,7 +58,10 @@ class BloodPressureYearPage extends StatelessWidget {
); );
} }
List<TableRow> fullData() { List<TableRow> fullData(
BuildContext context,
ProjectViewModel projectViewModel,
BloodPressureViewMode bloodSugarViewMode) {
List<TableRow> tableRow = []; List<TableRow> tableRow = [];
tableRow.add( tableRow.add(
TableRow( TableRow(
@ -65,14 +69,19 @@ class BloodPressureYearPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0), topLeft: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
topRight: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
), ),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Date', TranslationBase.of(context).date,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -83,11 +92,11 @@ class BloodPressureYearPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Time', TranslationBase.of(context).time,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -97,11 +106,11 @@ class BloodPressureYearPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Measured', TranslationBase.of(context).measured,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -111,14 +120,19 @@ class BloodPressureYearPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topRight: Radius.circular(10.0), topLeft: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
topRight: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
), ),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Value', TranslationBase.of(context).value,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -128,7 +142,7 @@ class BloodPressureYearPage extends StatelessWidget {
], ],
), ),
); );
diabtecPatientResult.forEach( model.yearDiabtecPatientResult.reversed.forEach(
(diabtec) { (diabtec) {
tableRow.add( tableRow.add(
TableRow( TableRow(

@ -1,33 +1,37 @@
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_pressur/BloodPressureResult.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/blood_pressure_view_model.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPatientResult.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/CurvedChartBloodPressure.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:provider/provider.dart';
import 'package:hexcolor/hexcolor.dart';
import 'AddBloodPressurePage.dart';
class BloodPressureWeeklyPage extends StatelessWidget { class BloodPressureWeeklyPage extends StatelessWidget {
final List<charts.Series<WeekChartDate, DateTime>> data; final BloodPressureViewMode model;
final List<BloodPressureResult> diabtecPatientResult;
const BloodPressureWeeklyPage({Key key, this.data, this.diabtecPatientResult}) const BloodPressureWeeklyPage({Key key, this.model}) : super(key: key);
: super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body: model.weightWeekTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),): ListView(
children: [ children: [
Container( Container(
width: double.maxFinite, margin: EdgeInsets.only(top: 12, left: 8, right: 8),
height: 180,
color: Colors.white, color: Colors.white,
child: charts.TimeSeriesChart( child: CurvedChartBloodPressure(
data, horizontalInterval:3.0,
dateTimeFactory: const charts.LocalDateTimeFactory(), title: TranslationBase.of(context).bloodPressure,
timeSeries1: model.weightWeekTimeSeriesDataTop,
timeSeries2: model.weightWeekTimeSeriesDataLow,
indexes: model.weightWeekTimeSeriesDataLow.length ~/ 5.5,
), ),
), ),
SizedBox( SizedBox(
@ -35,7 +39,7 @@ class BloodPressureWeeklyPage extends StatelessWidget {
), ),
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Texts('Details'), child: Texts(TranslationBase.of(context).details),
), ),
Container( Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@ -47,7 +51,7 @@ class BloodPressureWeeklyPage extends StatelessWidget {
border: TableBorder.symmetric( border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]), inside: BorderSide(width: 2.0, color: Colors.grey[300]),
), ),
children: fullData(), children: fullData(context, projectViewModel, model),
), ),
], ],
), ),
@ -57,7 +61,10 @@ class BloodPressureWeeklyPage extends StatelessWidget {
); );
} }
List<TableRow> fullData() { List<TableRow> fullData(
BuildContext context,
ProjectViewModel projectViewModel,
BloodPressureViewMode bloodSugarViewMode) {
List<TableRow> tableRow = []; List<TableRow> tableRow = [];
tableRow.add( tableRow.add(
TableRow( TableRow(
@ -65,14 +72,19 @@ class BloodPressureWeeklyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0), topLeft: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
topRight: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
), ),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Date', TranslationBase.of(context).date,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -83,11 +95,11 @@ class BloodPressureWeeklyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Time', TranslationBase.of(context).time,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -97,11 +109,11 @@ class BloodPressureWeeklyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Measured', TranslationBase.of(context).measured,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -111,11 +123,11 @@ class BloodPressureWeeklyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Value', TranslationBase.of(context).value,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -125,14 +137,19 @@ class BloodPressureWeeklyPage extends StatelessWidget {
Container( Container(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: HexColor('#515B5D'), color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topRight: Radius.circular(10.0), topLeft: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
topRight: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
), ),
), ),
child: Center( child: Center(
child: Texts( child: Texts(
'Edit', TranslationBase.of(context).edit,
color: Colors.white, color: Colors.white,
fontSize: 15, fontSize: 15,
), ),
@ -142,7 +159,7 @@ class BloodPressureWeeklyPage extends StatelessWidget {
], ],
), ),
); );
diabtecPatientResult.forEach( model.weekDiabtecPatientResult.reversed.forEach(
(diabtec) { (diabtec) {
tableRow.add( tableRow.add(
TableRow( TableRow(
@ -202,7 +219,23 @@ class BloodPressureWeeklyPage extends StatelessWidget {
), ),
), ),
), ),
Container( InkWell(
onTap: () {
Navigator.push(
context,
FadePage(
page: AddBloodPressurePage(
model: model,
isUpdate: true,
lineItemNo: diabtec.lineItemNo,
bloodSugarDate: diabtec.bloodPressureDate,
bloodDiastolicValue: diabtec.diastolicPressure.toString(),
bloodSystolicValue: diabtec.systolicePressure.toString(),
measureTimeSelectedType: diabtec.measuredArmDesc,
),
),
);
},
child: Container( child: Container(
height: 70, height: 70,
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),

@ -1,7 +1,6 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart'; import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
@ -10,6 +9,7 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -31,7 +31,9 @@ class AddBloodSugarPage extends StatefulWidget {
this.measureUnitSelectedType, this.measureUnitSelectedType,
this.isUpdate = false, this.isUpdate = false,
this.measuredTime, this.measuredTime,
this.bloodSugarValue, this.lineItemNo, this.bloodSugarViewMode}) this.bloodSugarValue,
this.lineItemNo,
this.bloodSugarViewMode})
: super(key: key); : super(key: key);
@override @override
@ -94,6 +96,40 @@ class _AddBloodSugarPageState extends State<AddBloodSugarPage> {
appBarTitle: widget.isUpdate appBarTitle: widget.isUpdate
? TranslationBase.of(context).update ? TranslationBase.of(context).update
: TranslationBase.of(context).add, : TranslationBase.of(context).add,
appBarIcons: widget.isUpdate?[
IconButton(
icon: Icon(Icons.delete),
color: Colors.white,
onPressed: () {
ConfirmDialog dialog = new ConfirmDialog(
context: context,
confirmMessage: 'Remove this measure',
okText: TranslationBase.of(context).ok,
cancelText: TranslationBase.of(context).cancel,
okFunction: () async {
ConfirmDialog.closeAlertDialog(context);
GifLoaderDialogUtils.showMyDialog(context);
widget.bloodSugarViewMode
.deactivateDiabeticStatus(lineItemNo: widget.lineItemNo)
.then((value) {
GifLoaderDialogUtils.hideDialog(context);
if (widget.bloodSugarViewMode.state == ViewState.ErrorLocal)
AppToast.showErrorToast(
message: widget.bloodSugarViewMode.error);
else
Navigator.pop(context);
}).catchError((e) {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(
message: widget.bloodSugarViewMode.error);
});
},
cancelFunction: () => {});
dialog.showAlertDialog(context);
},
)
]:null,
body: SingleChildScrollView( body: SingleChildScrollView(
physics: BouncingScrollPhysics(), physics: BouncingScrollPhysics(),
child: Container( child: Container(
@ -143,10 +179,10 @@ class _AddBloodSugarPageState extends State<AddBloodSugarPage> {
showTitleActions: true, showTitleActions: true,
minTime: DateTime(DateTime.now().year - 1, 1, 1), minTime: DateTime(DateTime.now().year - 1, 1, 1),
maxTime: DateTime.now(), onConfirm: (date) { maxTime: DateTime.now(), onConfirm: (date) {
setState(() { setState(() {
bloodSugarDate = date; bloodSugarDate = date;
}); });
}, },
currentTime: bloodSugarDate, currentTime: bloodSugarDate,
locale: projectViewModel.localeType); locale: projectViewModel.localeType);
}, },
@ -173,10 +209,10 @@ class _AddBloodSugarPageState extends State<AddBloodSugarPage> {
onTap: () { onTap: () {
DatePicker.showTimePicker(context, showTitleActions: true, DatePicker.showTimePicker(context, showTitleActions: true,
onConfirm: (date) { onConfirm: (date) {
setState(() { setState(() {
timeSugarDate = date; timeSugarDate = date;
}); });
}, },
currentTime: timeSugarDate, currentTime: timeSugarDate,
locale: projectViewModel.localeType); locale: projectViewModel.localeType);
}, },
@ -236,39 +272,44 @@ class _AddBloodSugarPageState extends State<AddBloodSugarPage> {
child: Padding( child: Padding(
padding: const EdgeInsets.all(15.0), padding: const EdgeInsets.all(15.0),
child: SecondaryButton( child: SecondaryButton(
label: TranslationBase.of(context).save, label: TranslationBase.of(context).save.toUpperCase(),
textColor: Colors.white, textColor: Colors.white,
onTap: () { onTap: () {
if (_bloodSugarValueController.text.isNotEmpty) { if (_bloodSugarValueController.text.isNotEmpty) {
GifLoaderDialogUtils.showMyDialog(context); if (widget.isUpdate) {
if (widget.isUpdate) GifLoaderDialogUtils.showMyDialog(context);
widget.bloodSugarViewMode.updateDiabtecResult( widget.bloodSugarViewMode
month: bloodSugarDate, .updateDiabtecResult(
hour: timeSugarDate, month: bloodSugarDate,
diabtecUnit: measureUnitSelectedType, hour: timeSugarDate,
measuredTime: measuredTime, diabtecUnit: measureUnitSelectedType,
lineItemNo: widget.lineItemNo, measuredTime: measuredTime,
bloodSugerResult: lineItemNo: widget.lineItemNo,
_bloodSugarValueController.text.toString()).then((value) { bloodSugerResult:
_bloodSugarValueController.text.toString())
.then((value) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
if(widget.bloodSugarViewMode.state == ViewState.Error) if (widget.bloodSugarViewMode.state == ViewState.ErrorLocal)
AppToast.showErrorToast(message: widget.bloodSugarViewMode.error); AppToast.showErrorToast(
message: widget.bloodSugarViewMode.error);
else else
Navigator.pop(context); Navigator.pop(context);
}); });
else } else
widget.bloodSugarViewMode.addDiabtecResult( widget.bloodSugarViewMode
.addDiabtecResult(
diabtecUnit: measureUnitSelectedType, diabtecUnit: measureUnitSelectedType,
measuredTime: measuredTime, measuredTime: measuredTime,
bloodSugerResult: bloodSugerResult:
_bloodSugarValueController.text.toString(), _bloodSugarValueController.text.toString(),
bloodSugerDateChart: bloodSugerDateChart:
'${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00', '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00',
).then((value) { )
.then((value) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
if(widget.bloodSugarViewMode.state == ViewState.Error) if (widget.bloodSugarViewMode.state == ViewState.Error)
AppToast.showErrorToast(message: widget.bloodSugarViewMode.error); AppToast.showErrorToast(
message: widget.bloodSugarViewMode.error);
else else
Navigator.pop(context); Navigator.pop(context);
}); });

@ -2,8 +2,11 @@ import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPa
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/YearMonthlyChartDate.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/YearMonthlyChartDate.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/LineChartCurved.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/MonthLineChartCurved.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -13,25 +16,25 @@ import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class BloodMonthlyPage extends StatelessWidget { class BloodMonthlyPage extends StatelessWidget {
final List<charts.Series<YearMonthlyChartDate, int>> data;
final List<DiabtecPatientResult> diabtecPatientResult; final List<DiabtecPatientResult> diabtecPatientResult;
final List<TimeSeriesSales3> timeSeriesData ;
const BloodMonthlyPage({Key key, this.data, this.diabtecPatientResult}) const BloodMonthlyPage({Key key, this.diabtecPatientResult, this.timeSeriesData})
: super(key: key); : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body: timeSeriesData.isEmpty?Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),): ListView(
children: [ children: [
Container( Container(
width: double.maxFinite, width: double.maxFinite,
height: 180, color: Colors.white,
color: Colors.white, child: MonthLineChartCurved(
child: charts.LineChart(data, title: 'Sugar',
//animate: animate, timeSeries: timeSeriesData,
defaultRenderer: indexes: timeSeriesData.length ~/ 5.5,
new charts.LineRendererConfig(includePoints: true)), )
), ),
SizedBox( SizedBox(
height: 12, height: 12,
@ -146,7 +149,7 @@ class BloodMonthlyPage extends StatelessWidget {
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${DateUtil.getMonthDayYearDateFormatted(diabtec.dateChart)} ', '${projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(diabtec.dateChart):DateUtil.getMonthDayYearDateFormatted(diabtec.dateChart)} ',
textAlign: TextAlign.center, textAlign: TextAlign.center,
fontSize: 12, fontSize: 12,
), ),

@ -1,8 +1,10 @@
import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPatientResult.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPatientResult.dart';
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/LineChartCurved.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -12,55 +14,62 @@ import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class BloodYearPage extends StatelessWidget { class BloodYearPage extends StatelessWidget {
final List<charts.Series<WeekChartDate, DateTime>> data;
final List<DiabtecPatientResult> diabtecPatientResult; final List<DiabtecPatientResult> diabtecPatientResult;
final List<TimeSeriesSales2> timeSeriesData;
const BloodYearPage({Key key, this.data, this.diabtecPatientResult}) const BloodYearPage({Key key, this.diabtecPatientResult, this.timeSeriesData})
: super(key: key); : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body: timeSeriesData.isEmpty
children: [ ? Container(
Container( child: Center(
width: double.maxFinite, child: Texts(TranslationBase.of(context).noDataAvailable),
height: 180, ),
color: Colors.white, )
child: charts.TimeSeriesChart( : ListView(
data, children: [
dateTimeFactory: const charts.LocalDateTimeFactory(), Container(
), width: double.maxFinite,
), color: Colors.white,
SizedBox( child: LineChartCurved(
height: 12, title: 'Sugar',
), timeSeries: timeSeriesData,
Padding( indexes: timeSeriesData.length ~/ 5.5,
padding: const EdgeInsets.all(8.0), )),
child: Texts(TranslationBase.of(context).details), SizedBox(
), height: 12,
Container(
padding: EdgeInsets.all(10),
color: Colors.transparent,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Table(
border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]),
),
children: fullData(context,projectViewModel),
), ),
Padding(
padding: const EdgeInsets.all(8.0),
child: Texts(TranslationBase.of(context).details),
),
Container(
padding: EdgeInsets.all(10),
color: Colors.transparent,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Table(
border: TableBorder.symmetric(
inside:
BorderSide(width: 2.0, color: Colors.grey[300]),
),
children: fullData(context, projectViewModel),
),
],
),
)
], ],
), ),
)
],
),
); );
} }
List<TableRow> fullData(BuildContext context,ProjectViewModel projectViewModel) { List<TableRow> fullData(
BuildContext context, ProjectViewModel projectViewModel) {
List<TableRow> tableRow = []; List<TableRow> tableRow = [];
tableRow.add( tableRow.add(
TableRow( TableRow(
@ -70,8 +79,12 @@ class BloodYearPage extends StatelessWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: projectViewModel.isArabic? Radius.circular(0.0):Radius.circular(10.0), topLeft: projectViewModel.isArabic
topRight: projectViewModel.isArabic? Radius.circular(10.0):Radius.circular(0.0), ? Radius.circular(0.0)
: Radius.circular(10.0),
topRight: projectViewModel.isArabic
? Radius.circular(10.0)
: Radius.circular(0.0),
), ),
), ),
child: Center( child: Center(
@ -117,8 +130,12 @@ class BloodYearPage extends StatelessWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: projectViewModel.isArabic? Radius.circular(10.0):Radius.circular(0.0), topLeft: projectViewModel.isArabic
topRight: projectViewModel.isArabic? Radius.circular(0.0):Radius.circular(10.0), ? Radius.circular(10.0)
: Radius.circular(0.0),
topRight: projectViewModel.isArabic
? Radius.circular(0.0)
: Radius.circular(10.0),
), ),
), ),
child: Center( child: Center(
@ -130,7 +147,6 @@ class BloodYearPage extends StatelessWidget {
), ),
height: 40), height: 40),
), ),
], ],
), ),
); );
@ -146,7 +162,7 @@ class BloodYearPage extends StatelessWidget {
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${DateUtil.getMonthDayYearDateFormatted(diabtec.dateChart)} ', '${projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(diabtec.dateChart) : DateUtil.getMonthDayYearDateFormatted(diabtec.dateChart)} ',
textAlign: TextAlign.center, textAlign: TextAlign.center,
fontSize: 12, fontSize: 12,
), ),

@ -1,9 +1,14 @@
import 'dart:ui'; import 'dart:ui';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/TabBarWidget.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_send_email_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -42,70 +47,38 @@ class _BloodSugarHomePageState extends State<BloodSugarHomePage>
return BaseView<BloodSugarViewMode>( return BaseView<BloodSugarViewMode>(
onModelReady: (model) => model.getBloodSugar(), onModelReady: (model) => model.getBloodSugar(),
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
appBarIcons: [IconButton(
icon: Icon(Icons.email),
color: Colors.white,
onPressed: () {
showDialog(
context: context,
child: ConfirmSendEmailDialog(
email: model.user.emailAddress,
onTapSendEmail: () async{
GifLoaderDialogUtils.showMyDialog(context);
model.sendReportByEmail().then((value) {
GifLoaderDialogUtils.hideDialog(context);
if(model.state == ViewState.ErrorLocal){
AppToast.showErrorToast(message: model.error);
}else{
AppToast.showSuccessToast(message:TranslationBase.of(context).emailSentSuccessfully, );
}
}).catchError((e){
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: model.error);
});
},
),
);
},
),],
isShowAppBar: true, isShowAppBar: true,
appBarTitle: TranslationBase.of(context).bloodSugar, appBarTitle: TranslationBase.of(context).bloodSugar,
baseViewModel: model, baseViewModel: model,
body: Scaffold( body: Scaffold(
extendBodyBehindAppBar: true, extendBodyBehindAppBar: true,
appBar: PreferredSize( appBar: TabBarWidget(tabController: _tabController,),
preferredSize: Size.fromHeight(60.0),
child: Stack(
children: <Widget>[
Positioned(
bottom: 1,
left: 0,
right: 0,
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Container(
color: Theme.of(context)
.scaffoldBackgroundColor
.withOpacity(0.8),
height: 70.0,
),
),
),
Center(
child: Container(
height: 55.0,
color: Colors.white,
child: Center(
child: TabBar(
isScrollable: true,
controller: _tabController,
indicatorWeight: 5.0,
indicatorSize: TabBarIndicatorSize.tab,
labelColor: Theme.of(context).primaryColor,
labelPadding:
EdgeInsets.only(top: 4.0, left: 5.0, right: 5.0),
unselectedLabelColor: Colors.grey[800],
tabs: [
Container(
width: MediaQuery.of(context).size.width * 0.33,
child: Center(
child: Texts(TranslationBase.of(context).weekly),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.33,
child: Center(
child: Texts(TranslationBase.of(context).monthlyT),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.34,
child: Center(
child: Texts(TranslationBase.of(context).yearly),
),
),
],
),
),
),
),
],
),
),
body: Column( body: Column(
children: <Widget>[ children: <Widget>[
Expanded( Expanded(
@ -114,16 +87,16 @@ class _BloodSugarHomePageState extends State<BloodSugarHomePage>
controller: _tabController, controller: _tabController,
children: <Widget>[ children: <Widget>[
BloodSugarWeeklyPage( BloodSugarWeeklyPage(
data: model.getBloodWeeklySeries(), timeSeriesData: model.bloodWeekTimeSeriesData,
diabtecPatientResult: model.weekDiabtecPatientResult, diabtecPatientResult: model.weekDiabtecPatientResult,
bloodSugarViewMode: model, bloodSugarViewMode: model,
), ),
BloodMonthlyPage( BloodMonthlyPage(
data: model.getBloodMonthlyTimeSeriesSales(), timeSeriesData: model.monthTimeSeriesData,
diabtecPatientResult: model.monthDiabtecPatientResult, diabtecPatientResult: model.monthDiabtecPatientResult,
), ),
BloodYearPage( BloodYearPage(
data: model.getBloodYearTimeSeriesSales(), timeSeriesData: model.yearTimeSeriesData,
diabtecPatientResult: model.yearDiabtecPatientResult, diabtecPatientResult: model.yearDiabtecPatientResult,
) )
], ],

@ -2,40 +2,44 @@ import 'package:diplomaticquarterapp/core/model/my_trakers/blood_sugar/DiabtecPa
import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart'; import 'package:diplomaticquarterapp/core/model/my_trakers/chartData/WeekChartDate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/LineChartCurved.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'AddBloodSugarPage.dart'; import 'AddBloodSugarPage.dart';
class BloodSugarWeeklyPage extends StatelessWidget { class BloodSugarWeeklyPage extends StatelessWidget {
final List<charts.Series<WeekChartDate, DateTime>> data;
final List<DiabtecPatientResult> diabtecPatientResult; final List<DiabtecPatientResult> diabtecPatientResult;
final BloodSugarViewMode bloodSugarViewMode; final BloodSugarViewMode bloodSugarViewMode;
final List<TimeSeriesSales2> timeSeriesData;
const BloodSugarWeeklyPage({Key key, this.data, this.diabtecPatientResult, this.bloodSugarViewMode}) BloodSugarWeeklyPage(
{Key key,
this.diabtecPatientResult,
this.bloodSugarViewMode,
this.timeSeriesData})
: super(key: key); : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold( return AppScaffold(
body: ListView( body:timeSeriesData.isEmpty?Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),): ListView(
children: [ children: [
Container( Container(
width: double.maxFinite, margin: EdgeInsets.only(top: 12, left: 8, right: 8),
height: 180,
color: Colors.white, color: Colors.white,
child: charts.TimeSeriesChart( child: LineChartCurved(
data, title: 'Sugar',
dateTimeFactory: const charts.LocalDateTimeFactory(), timeSeries: timeSeriesData,
indexes: timeSeriesData.length ~/ 5.5,
), ),
), ),
SizedBox( SizedBox(
@ -55,7 +59,8 @@ class BloodSugarWeeklyPage extends StatelessWidget {
border: TableBorder.symmetric( border: TableBorder.symmetric(
inside: BorderSide(width: 2.0, color: Colors.grey[300]), inside: BorderSide(width: 2.0, color: Colors.grey[300]),
), ),
children: fullData(context, projectViewModel,bloodSugarViewMode), children:
fullData(context, projectViewModel, bloodSugarViewMode),
), ),
], ],
), ),
@ -66,7 +71,9 @@ class BloodSugarWeeklyPage extends StatelessWidget {
} }
List<TableRow> fullData( List<TableRow> fullData(
BuildContext context, ProjectViewModel projectViewModel, BloodSugarViewMode bloodSugarViewMode) { BuildContext context,
ProjectViewModel projectViewModel,
BloodSugarViewMode bloodSugarViewMode) {
List<TableRow> tableRow = []; List<TableRow> tableRow = [];
tableRow.add( tableRow.add(
TableRow( TableRow(
@ -173,7 +180,7 @@ class BloodSugarWeeklyPage extends StatelessWidget {
color: Colors.white, color: Colors.white,
child: Center( child: Center(
child: Texts( child: Texts(
'${DateUtil.getMonthDayYearDateFormatted(diabtec.dateChart)}', '${projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(diabtec.dateChart):DateUtil.getMonthDayYearDateFormatted(diabtec.dateChart)} ',
textAlign: TextAlign.center, textAlign: TextAlign.center,
fontSize: 12, fontSize: 12,
), ),

@ -0,0 +1,273 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import '../../../../Constants.dart';
class CurvedChartBloodPressure extends StatelessWidget {
final String title;
final List<TimeSeriesSales2> timeSeries1;
final List<TimeSeriesSales2> timeSeries2;
final int indexes;
final double horizontalInterval;
CurvedChartBloodPressure(
{this.title,
this.timeSeries1,
this.indexes,
this.timeSeries2,
this.horizontalInterval = 20.0});
List<int> xAxixs = List();
List<double> yAxixs = List();
@override
Widget build(BuildContext context) {
getXaxix();
return AspectRatio(
aspectRatio: 1.1,
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18)),
// color: Colors.white,
),
child: Stack(
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
const SizedBox(
height: 15,
),
Text(
title,
style: TextStyle(
color: Colors.black, fontSize: 15, letterSpacing: 2),
textAlign: TextAlign.center,
),
SizedBox(
height: 10,
),
Expanded(
child: Padding(
padding:
const EdgeInsets.only(right: 18.0, left: 16.0, top: 15),
child: LineChart(
sampleData1(context),
swapAnimationDuration: const Duration(milliseconds: 250),
),
),
),
SizedBox(
height: 10,
),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
children: [
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: Theme.of(context).primaryColor),
),
SizedBox(
width: 5,
),
Texts(TranslationBase.of(context).systolicLng)
],
),
SizedBox(
width: 15,
),
Row(
children: [
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
shape: BoxShape.rectangle, color: secondaryColor),
),
SizedBox(
width: 5,
),
Texts(TranslationBase.of(context).diastolicLng)
],
),
],
)
],
),
],
),
),
);
}
getXaxix() {
for (int index = 0; index < timeSeries1.length; index++) {
int mIndex = indexes * index;
if (mIndex < timeSeries1.length) {
xAxixs.add(mIndex);
}
}
}
LineChartData sampleData1(context) {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
),
touchCallback: (LineTouchResponse touchResponse) {},
handleBuiltInTouches: true,
),
gridData: FlGridData(
show: true, drawVerticalLine: true, drawHorizontalLine: true),
titlesData: FlTitlesData(
bottomTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontSize: 10,
),
margin: 22,
getTitles: (value) {
if (timeSeries1.length < 15) {
if (timeSeries1.length > value.toInt()) {
return '${timeSeries1[value.toInt()].time.month}/ ${timeSeries1[value.toInt()].time.year}';
} else
return '';
} else {
if (value.toInt() == 0)
return '${timeSeries1[value.toInt()].time.month}/ ${timeSeries1[value.toInt()].time.year}';
if (value.toInt() == timeSeries1.length - 1)
return '${timeSeries1[value.toInt()].time.month}/ ${timeSeries1[value.toInt()].time.year}';
if (xAxixs.contains(value.toInt())) {
return '${timeSeries1[value.toInt()].time.month}/ ${timeSeries1[value.toInt()].time.year}';
}
}
return '';
},
),
leftTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: 10,
),
getTitles: (value) {
if (value.toInt() == 0)
return '${value.toInt()}';
else if (value.toInt() % horizontalInterval == 0)
return '${value.toInt()}';
else
return '';
},
margin: 12,
),
),
borderData: FlBorderData(
show: true,
border: const Border(
bottom: BorderSide(
color: Colors.black,
width: 0.5,
),
left: BorderSide(
color: Colors.black,
),
right: BorderSide(
color: Colors.black,
),
top: BorderSide(
color: Colors.transparent,
),
),
),
minX: 0,
maxX: (timeSeries1.length - 1).toDouble(),
maxY: getMaxY() + 0.3,
minY: getMinY(),
lineBarsData: getData(context),
);
}
double getMaxY() {
double max = 0;
timeSeries1.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble > max) max = resultValueDouble;
});
timeSeries2.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble > max) max = resultValueDouble;
});
return max.roundToDouble();
}
double getMinY() {
double min = timeSeries1[0].sales;
timeSeries1.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble < min) min = resultValueDouble;
});
timeSeries2.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble < min) min = resultValueDouble;
});
int value = min.toInt();
return value.toDouble();
}
List<LineChartBarData> getData(context) {
List<FlSpot> spots = List();
for (int index = 0; index < timeSeries1.length; index++) {
spots.add(FlSpot(index.toDouble(), timeSeries1[index].sales));
}
List<FlSpot> spots2 = List();
for (int index = 0; index < timeSeries2.length; index++) {
spots2.add(FlSpot(index.toDouble(), timeSeries2[index].sales));
}
final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: spots,
isCurved: true,
colors: [Colors.red],
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
final LineChartBarData lineChartBarData2 = LineChartBarData(
spots: spots2,
isCurved: true,
colors: [Theme.of(context).primaryColor],
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
return [lineChartBarData1, lineChartBarData2];
}
}

@ -0,0 +1,222 @@
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import '../../../../Constants.dart';
class LineChartCurved extends StatelessWidget {
final String title;
final List<TimeSeriesSales2> timeSeries;
final int indexes;
final double horizontalInterval;
LineChartCurved(
{this.title,
this.timeSeries,
this.indexes,
this.horizontalInterval = 20.0});
List<int> xAxixs = List();
List<double> yAxixs = List();
@override
Widget build(BuildContext context) {
getXaxix();
getYaxix();
return AspectRatio(
aspectRatio: 1.1,
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18)),
// color: Colors.white,
),
child: Stack(
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
const SizedBox(
height: 4,
),
Text(
title,
style: TextStyle(
color: Colors.black, fontSize: 15, letterSpacing: 2),
textAlign: TextAlign.center,
),
SizedBox(
height: 10,
),
Expanded(
child: Padding(
padding: const EdgeInsets.only(
right: 18.0, left: 16.0, top: 15, bottom: 15),
child: LineChart(
sampleData1(context),
swapAnimationDuration: const Duration(milliseconds: 250),
),
),
),
const SizedBox(
height: 10,
),
],
),
],
),
),
);
}
getXaxix() {
for (int index = 0; index < timeSeries.length; index++) {
int mIndex = indexes * index;
if (mIndex < timeSeries.length) {
xAxixs.add(mIndex);
}
}
}
getYaxix() {
int indexess = (timeSeries.length * 0.30).toInt();
for (int index = 0; index < timeSeries.length; index++) {
int mIndex = indexess * index;
if (mIndex < timeSeries.length) {
yAxixs.add(timeSeries[mIndex].sales);
}
}
}
LineChartData sampleData1(context) {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
),
touchCallback: (LineTouchResponse touchResponse) {},
handleBuiltInTouches: true,
),
gridData: FlGridData(
horizontalInterval: horizontalInterval,
show: true,
drawVerticalLine: true,
drawHorizontalLine: true),
titlesData: FlTitlesData(
bottomTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontSize: 10,
),
// rotateAngle: 90,
//rotateAngle:-65,
margin: 22,
getTitles: (value) {
if (timeSeries.length < 15) {
if (timeSeries.length > value.toInt()) {
return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
} else
return '';
} else {
if (value.toInt() == 0)
return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
if (value.toInt() == timeSeries.length - 1)
return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
if (xAxixs.contains(value.toInt())) {
return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
}
}
return '';
},
),
leftTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: 10,
),
getTitles: (value) {
if (value.toInt() == 0)
return '${value.toInt()}';
else if (value.toInt() % horizontalInterval == 0)
return '${value.toInt()}';
else
return '';
},
margin: 12,
),
),
borderData: FlBorderData(
show: true,
border: const Border(
bottom: BorderSide(
color: Colors.black,
width: 0.5,
),
left: BorderSide(
color: Colors.black,
),
right: BorderSide(
color: Colors.black,
),
top: BorderSide(
color: Colors.transparent,
),
),
),
minX: 0,
maxX: (timeSeries.length - 1).toDouble(),
maxY: getMaxY() + 0.3,
minY: getMinY(),
lineBarsData: getData(context),
);
}
double getMaxY() {
double max = 0;
timeSeries.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble > max) max = resultValueDouble;
});
return max.roundToDouble();
}
double getMinY() {
double min = timeSeries[0].sales;
timeSeries.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble < min) min = resultValueDouble;
});
int value = min.toInt();
return value.toDouble();
}
List<LineChartBarData> getData(context) {
List<FlSpot> spots = List();
for (int index = 0; index < timeSeries.length; index++) {
spots.add(FlSpot(index.toDouble(), timeSeries[index].sales));
}
final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: spots,
isCurved: true,
colors: [secondaryColor],
barWidth: 5,
isStrokeCapRound: true,
curveSmoothness: 0.12,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
return [
lineChartBarData1,
];
}
}

@ -0,0 +1,252 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
class MonthCurvedChartBloodPressure extends StatelessWidget {
final String title;
final List<TimeSeriesSales3> timeSeries1;
final List<TimeSeriesSales3> timeSeries2;
final int indexes;
final double horizontalInterval;
MonthCurvedChartBloodPressure(
{this.title, this.timeSeries1, this.indexes, this.timeSeries2, this.horizontalInterval = 20.0});
List<int> xAxixs = List();
List<double> yAxixs = List();
@override
Widget build(BuildContext context) {
getXaxix();
return AspectRatio(
aspectRatio: 1.1,
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18)),
// color: Colors.white,
),
child: Stack(
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
const SizedBox(
height: 15,
),
Text(
title,
style: TextStyle(
color: Colors.black, fontSize: 15, letterSpacing: 2),
textAlign: TextAlign.center,
),
SizedBox(
height: 10,
),
Expanded(
child: Padding(
padding:
const EdgeInsets.only(right: 18.0, left: 16.0, top: 15),
child: LineChart(
sampleData1(context),
swapAnimationDuration: const Duration(milliseconds: 250),
),
),
),
SizedBox(
height: 10,
),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
children: [
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: Theme.of(context).primaryColor),
),
SizedBox(
width: 5,
),
Texts(TranslationBase.of(context).systolicLng)
],
),
SizedBox(
width: 15,
),
Row(
children: [
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
shape: BoxShape.rectangle, color: Colors.grey),
),
SizedBox(
width: 5,
),
Texts(TranslationBase.of(context).diastolicLng)
],
),
],
)
],
),
],
),
),
);
}
getXaxix() {
for (int index = 0; index < timeSeries1.length; index++) {
int mIndex = indexes * index;
if (mIndex < timeSeries1.length) {
xAxixs.add(mIndex);
}
}
}
LineChartData sampleData1(context) {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
),
touchCallback: (LineTouchResponse touchResponse) {},
handleBuiltInTouches: true,
),
gridData: FlGridData(
show: true, drawVerticalLine: true, drawHorizontalLine: true),
titlesData: FlTitlesData(
bottomTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontSize: 10,
),
margin: 22,
getTitles: (value) {
return '';
},
),
leftTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: 10,
),
getTitles: (value) {
if (value.toInt() == 0)
return '${value.toInt()}';
else if (value.toInt() % horizontalInterval == 0)
return '${value.toInt()}';
else
return '';
},
margin: 12,
),
),
borderData: FlBorderData(
show: true,
border: const Border(
bottom: BorderSide(
color: Colors.black,
width: 0.5,
),
left: BorderSide(
color: Colors.black,
),
right: BorderSide(
color: Colors.black,
),
top: BorderSide(
color: Colors.transparent,
),
),
),
minX: 0,
maxX: (timeSeries1.length - 1).toDouble(),
maxY: getMaxY() + 0.3,
minY: getMinY(),
lineBarsData: getData(context),
);
}
double getMaxY() {
double max = 0;
timeSeries1.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble > max) max = resultValueDouble;
});
timeSeries2.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble > max) max = resultValueDouble;
});
return max.roundToDouble();
}
double getMinY() {
double min = timeSeries1[0].sales;
timeSeries1.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble < min) min = resultValueDouble;
});
timeSeries2.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble < min) min = resultValueDouble;
});
int value = min.toInt();
return value.toDouble();
}
List<LineChartBarData> getData(context) {
List<FlSpot> spots = List();
for (int index = 0; index < timeSeries1.length; index++) {
spots.add(FlSpot(index.toDouble(), timeSeries1[index].sales));
}
List<FlSpot> spots2 = List();
for (int index = 0; index < timeSeries2.length; index++) {
spots2.add(FlSpot(index.toDouble(), timeSeries2[index].sales));
}
final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: spots,
isCurved: true,
colors: [Colors.red],
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
final LineChartBarData lineChartBarData2 = LineChartBarData(
spots: spots2,
isCurved: true,
colors: [Theme.of(context).primaryColor],
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
return [lineChartBarData1, lineChartBarData2];
}
}

@ -0,0 +1,206 @@
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import '../../../../Constants.dart';
class MonthLineChartCurved extends StatelessWidget {
final String title;
final List<TimeSeriesSales3> timeSeries;
final int indexes;
final double horizontalInterval;
MonthLineChartCurved(
{this.title,
this.timeSeries,
this.indexes,
this.horizontalInterval = 15.0});
List<int> xAxixs = List();
List<double> yAxixs = List();
@override
Widget build(BuildContext context) {
getXaxix();
getYaxix();
return AspectRatio(
aspectRatio: 1.1,
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18)),
// color: Colors.white,
),
child: Stack(
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
const SizedBox(
height: 4,
),
Text(
title,
style: TextStyle(
color: Colors.black, fontSize: 15, letterSpacing: 2),
textAlign: TextAlign.center,
),
SizedBox(
height: 10,
),
Expanded(
child: Padding(
padding: const EdgeInsets.only(
right: 18.0, left: 16.0, top: 15, bottom: 15),
child: LineChart(
sampleData1(context),
swapAnimationDuration: const Duration(milliseconds: 250),
),
),
),
const SizedBox(
height: 10,
),
],
),
],
),
),
);
}
getXaxix() {
for (int index = 0; index < timeSeries.length; index++) {
int mIndex = indexes * index;
if (mIndex < timeSeries.length) {
xAxixs.add(mIndex);
}
}
}
getYaxix() {
int indexess = (timeSeries.length * 0.30).toInt();
for (int index = 0; index < timeSeries.length; index++) {
int mIndex = indexess * index;
if (mIndex < timeSeries.length) {
yAxixs.add(timeSeries[mIndex].sales);
}
}
}
LineChartData sampleData1(context) {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
),
touchCallback: (LineTouchResponse touchResponse) {},
handleBuiltInTouches: true,
),
gridData: FlGridData(
horizontalInterval: horizontalInterval,
show: true,
drawVerticalLine: true,
drawHorizontalLine: true),
titlesData: FlTitlesData(
bottomTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontSize: 10,
),
margin: 22,
getTitles: (value) {
return '${value.toInt()}';
},
),
leftTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: 10,
),
getTitles: (value) {
if (value.toInt() == 0)
return '${value.toInt()}';
else if (value.toInt() % horizontalInterval == 0)
return '${value.toInt()}';
else
return '';
},
margin: 12,
),
),
borderData: FlBorderData(
show: true,
border: const Border(
bottom: BorderSide(
color: Colors.black,
width: 0.5,
),
left: BorderSide(
color: Colors.black,
),
right: BorderSide(
color: Colors.black,
),
top: BorderSide(
color: Colors.transparent,
),
),
),
minX: 0,
maxX: (timeSeries.length - 1).toDouble(),
maxY: getMaxY() + 0.3,
minY: getMinY(),
lineBarsData: getData(context),
);
}
double getMaxY() {
double max = 0;
timeSeries.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble > max) max = resultValueDouble;
});
return max.roundToDouble();
}
double getMinY() {
double min = timeSeries[0].sales;
timeSeries.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble < min) min = resultValueDouble;
});
int value = min.toInt();
return value.toDouble();
}
List<LineChartBarData> getData(context) {
List<FlSpot> spots = List();
for (int index = 0; index < timeSeries.length; index++) {
spots.add(FlSpot(index.toDouble(), timeSeries[index].sales));
}
final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: spots,
isCurved: true,
colors: [secondaryColor],
barWidth: 5,
isStrokeCapRound: true,
curveSmoothness: 0.0,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
return [
lineChartBarData1,
];
}
}

@ -0,0 +1,73 @@
import 'dart:ui';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class TabBarWidget extends StatelessWidget with PreferredSizeWidget{
final TabController tabController;
const TabBarWidget({Key key, this.tabController}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Positioned(
bottom: 1,
left: 0,
right: 0,
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Container(
color:
Theme.of(context).scaffoldBackgroundColor.withOpacity(0.8),
height: 70.0,
),
),
),
Center(
child: Container(
height: 55.0,
color: Colors.white,
child: Center(
child: TabBar(
isScrollable: true,
controller: tabController,
indicatorWeight: 5.0,
indicatorSize: TabBarIndicatorSize.tab,
labelColor: Theme.of(context).primaryColor,
labelPadding:
EdgeInsets.only(top: 4.0, left: 5.0, right: 5.0),
unselectedLabelColor: Colors.grey[800],
tabs: [
Container(
width: MediaQuery.of(context).size.width * 0.33,
child: Center(
child: Texts(TranslationBase.of(context).weekly),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.33,
child: Center(
child: Texts(TranslationBase.of(context).monthlyT),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.34,
child: Center(
child: Texts(TranslationBase.of(context).yearly),
),
),
],
),
),
),
),
],
);
}
@override
Size get preferredSize => Size(double.maxFinite, 60);
}

@ -0,0 +1,248 @@
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:diplomaticquarterapp/models/SmartWatch/YearlyStepsResModel.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
class StepsTracker extends StatefulWidget {
@override
_StepsTrackerState createState() => _StepsTrackerState();
}
class _StepsTrackerState extends State<StepsTracker>
with SingleTickerProviderStateMixin {
TabController _tabController;
int weeklyStatsAvgValue = 0;
int monthlyStatsAvgValue = 0;
int yearlyStatsAvgValue = 0;
int avgStepsValue = 0;
int dataLength = 0;
List<YearlyStepsResModel> yearlyStepsList = List();
List<TimeSeriesSales> yearlyTimeSeriesData = [];
bool isDataLoaded = false;
@override
void initState() {
_tabController = new TabController(length: 3, vsync: this);
WidgetsBinding.instance.addPostFrameCallback((_) {
getYearlyStepsData();
});
super.initState();
}
@override
Widget build(BuildContext context) {
return AppScaffold(
isShowAppBar: true,
appBarTitle: "Steps",
isShowDecPage: false,
body: Container(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
TabBar(
tabs: [
Tab(text: TranslationBase.of(context).weekly),
Tab(text: TranslationBase.of(context).monthly),
Tab(text: TranslationBase.of(context).yearly),
],
controller: _tabController,
),
Expanded(
child: new TabBarView(
physics: NeverScrollableScrollPhysics(),
children: [
isDataLoaded ? getWeeklyStepsDetails() : Container(),
isDataLoaded ? getMonthlyStepsDetails() : Container(),
isDataLoaded ? getYearlyStepsDetails() : Container()
],
controller: _tabController,
),
),
],
),
),
);
}
getYearlyStepsData() {
avgStepsValue = 0;
dataLength = 0;
DoctorsListService service = new DoctorsListService();
GifLoaderDialogUtils.showMyDialog(context);
service.getPatientHealthDataStats(6, 3, context).then((res) {
GifLoaderDialogUtils.hideDialog(context);
print(res['Med_GetYearStepsTransactionsStsList']);
yearlyStepsList.clear();
res['Med_GetYearStepsTransactionsStsList'].forEach((element) {
yearlyStepsList.add(new YearlyStepsResModel.fromJson(element));
if (element['ValueSum'] != null) {
double value = element['ValueSum'];
avgStepsValue += value.toInt();
dataLength++;
}
});
print(avgStepsValue);
print(dataLength);
setState(() {
yearlyStatsAvgValue = avgStepsValue ~/ dataLength;
isDataLoaded = true;
});
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
// AppToast.showErrorToast(message: err);
print(err);
});
}
generateData() {
if (yearlyStepsList.length > 0) {
yearlyTimeSeriesData.clear();
yearlyStepsList.forEach(
(element) {
yearlyTimeSeriesData.add(
TimeSeriesSales(
new DateTime(element.year, element.month, 1),
element.valueSum != null ? element.valueSum.toInt() : 0,
),
);
},
);
yearlyTimeSeriesData.forEach((element) {
print(element.sales);
print(element.time);
});
}
return [
new charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
data: yearlyTimeSeriesData,
)
];
}
getWeeklyStepsDetails() {
return Container(
child: Text("Weekly"),
);
}
getMonthlyStepsDetails() {
return Container(
child: Text("Monthly"),
);
}
getYearlyStepsDetails() {
return Container(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
child: AppTimeSeriesChart(
seriesList: generateData(),
chartName: "Steps",
startDate: DateTime(
yearlyStepsList[0].year, yearlyStepsList[0].month, 1),
endDate: DateTime(
yearlyStepsList[yearlyStepsList.length - 1].year,
yearlyStepsList[yearlyStepsList.length - 1].month,
1),
),
),
Container(
margin: EdgeInsets.only(top: 5.0),
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: BorderSide(color: Colors.grey[400], width: 0.6)),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
padding: EdgeInsets.fromLTRB(30.0, 15.0, 30.0, 15.0),
child:
Text("Average Steps", style: TextStyle(fontSize: 18.0)),
),
Container(
margin: EdgeInsets.only(bottom: 10.0),
child: Text(yearlyStatsAvgValue.toString() + " Steps",
style: TextStyle(
fontSize: 20.0, fontWeight: FontWeight.bold)),
),
],
),
),
),
Container(
margin: EdgeInsets.all(10.0),
child: Divider(
color: Colors.grey[500],
),
),
Container(
transform: Matrix4.translationValues(0.0, -10.0, 0.0),
margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 5.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("History", style: TextStyle(fontSize: 14.0)),
Row(
children: [
Text("view more", style: TextStyle(fontSize: 14.0)),
Container(
margin: EdgeInsets.only(left: 3.0, right: 3.0),
transform: Matrix4.translationValues(0.0, 1.5, 0.0),
width: 30.0,
height: 30.0,
child: Image.asset(
"assets/images/new-design/view_more.png",
fit: BoxFit.contain),
),
],
),
],
),
),
Container(
margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 5.0),
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: BorderSide(color: Colors.grey[400], width: 0.6)),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
padding: EdgeInsets.fromLTRB(30.0, 15.0, 30.0, 15.0),
child: Text("Date",
style: TextStyle(
fontSize: 18.0, fontWeight: FontWeight.bold)),
),
Container(
padding: EdgeInsets.fromLTRB(30.0, 0.0, 30.0, 0.0),
child: Text("Steps", style: TextStyle(fontSize: 18.0)),
),
],
),
),
),
],
),
);
}
}

@ -2,6 +2,8 @@ import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../Constants.dart';
class LineChartCurved extends StatelessWidget { class LineChartCurved extends StatelessWidget {
final String title; final String title;
final List<TimeSeriesSales2> timeSeries; final List<TimeSeriesSales2> timeSeries;
@ -199,7 +201,7 @@ class LineChartCurved extends StatelessWidget {
final LineChartBarData lineChartBarData1 = LineChartBarData( final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: spots, spots: spots,
isCurved: true, isCurved: true,
colors: [Theme.of(context).primaryColor], colors: [secondaryColor],
barWidth: 5, barWidth: 5,
isStrokeCapRound: true, isStrokeCapRound: true,
dotData: FlDotData( dotData: FlDotData(

@ -228,7 +228,7 @@ class LineChartCurvedBloodPressure extends StatelessWidget {
final LineChartBarData lineChartBarData1 = LineChartBarData( final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: spots, spots: spots,
isCurved: true, isCurved: true,
colors: [Theme.of(context).primaryColor], colors: [Colors.red],
barWidth: 5, barWidth: 5,
isStrokeCapRound: true, isStrokeCapRound: true,
dotData: FlDotData( dotData: FlDotData(
@ -241,7 +241,7 @@ class LineChartCurvedBloodPressure extends StatelessWidget {
final LineChartBarData lineChartBarData2 = LineChartBarData( final LineChartBarData lineChartBarData2 = LineChartBarData(
spots: spots2, spots: spots2,
isCurved: true, isCurved: true,
colors: [Colors.grey], colors: [Theme.of(context).primaryColor],
barWidth: 5, barWidth: 5,
isStrokeCapRound: true, isStrokeCapRound: true,
dotData: FlDotData( dotData: FlDotData(

@ -41,7 +41,8 @@ class DoctorsListService extends BaseService {
long = await this.sharedPref.getDouble(USER_LONG); long = await this.sharedPref.getDouble(USER_LONG);
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"LanguageID": languageID == 'ar' ? 1 : 2, "LanguageID": languageID == 'ar' ? 1 : 2,
@ -105,7 +106,8 @@ class DoctorsListService extends BaseService {
long = await this.sharedPref.getDouble(USER_LONG); long = await this.sharedPref.getDouble(USER_LONG);
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"LanguageID": languageID == 'ar' ? 1 : 2, "LanguageID": languageID == 'ar' ? 1 : 2,
@ -145,7 +147,8 @@ class DoctorsListService extends BaseService {
Future<Map> getDoctorsProfile( Future<Map> getDoctorsProfile(
int docID, int clinicID, int projectID, context) async { int docID, int clinicID, int projectID, context) async {
Map<String, dynamic> request; Map<String, dynamic> request;
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"LanguageID": languageID == 'ar' ? 1 : 2, "LanguageID": languageID == 'ar' ? 1 : 2,
@ -177,10 +180,10 @@ class DoctorsListService extends BaseService {
return Future.value(localRes); return Future.value(localRes);
} }
Future<Map> getDoctorsRating( Future<Map> getDoctorsRating(int docID, context) async {
int docID, context) async {
Map<String, dynamic> request; Map<String, dynamic> request;
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"LanguageID": languageID == 'ar' ? 1 : 2, "LanguageID": languageID == 'ar' ? 1 : 2,
@ -203,17 +206,17 @@ class DoctorsListService extends BaseService {
await baseAppClient.post(GET_DOCTOR_RATING_NOTES, await baseAppClient.post(GET_DOCTOR_RATING_NOTES,
onSuccess: (response, statusCode) async { onSuccess: (response, statusCode) async {
localRes = response; localRes = response;
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
throw error; throw error;
}, body: request); }, body: request);
return Future.value(localRes); return Future.value(localRes);
} }
Future<Map> getDoctorsRatingDetails( Future<Map> getDoctorsRatingDetails(int docID, context) async {
int docID, context) async {
Map<String, dynamic> request; Map<String, dynamic> request;
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"LanguageID": languageID == 'ar' ? 1 : 2, "LanguageID": languageID == 'ar' ? 1 : 2,
@ -236,17 +239,18 @@ class DoctorsListService extends BaseService {
await baseAppClient.post(GET_DOCTOR_RATING_DETAILS, await baseAppClient.post(GET_DOCTOR_RATING_DETAILS,
onSuccess: (response, statusCode) async { onSuccess: (response, statusCode) async {
localRes = response; localRes = response;
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
throw error; throw error;
}, body: request); }, body: request);
return Future.value(localRes); return Future.value(localRes);
} }
Future<Map> getDoctorFreeSlots( Future<Map> getDoctorFreeSlots(
int docID, int clinicID, int projectID, BuildContext context) async { int docID, int clinicID, int projectID, BuildContext context) async {
Map<String, dynamic> request; Map<String, dynamic> request;
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"DoctorID": docID, "DoctorID": docID,
@ -281,7 +285,8 @@ class DoctorsListService extends BaseService {
Future<Map> getDoctorScheduledFreeSlots(int docID, int clinicID, Future<Map> getDoctorScheduledFreeSlots(int docID, int clinicID,
int projectID, int serviceID, BuildContext context) async { int projectID, int serviceID, BuildContext context) async {
Map<String, dynamic> request; Map<String, dynamic> request;
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"DoctorID": docID, "DoctorID": docID,
@ -324,7 +329,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"IsForLiveCare": false, "IsForLiveCare": false,
@ -383,7 +389,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"IsForLiveCare": true, "IsForLiveCare": true,
@ -437,7 +444,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -481,7 +489,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -526,7 +535,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -560,7 +570,8 @@ class DoctorsListService extends BaseService {
Future<Map> getPatientAppointmentCurfewHistory( Future<Map> getPatientAppointmentCurfewHistory(
bool isActiveAppointment) async { bool isActiveAppointment) async {
Map<String, dynamic> request; Map<String, dynamic> request;
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -601,7 +612,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -654,7 +666,8 @@ class DoctorsListService extends BaseService {
long = await this.sharedPref.getDouble(USER_LONG); long = await this.sharedPref.getDouble(USER_LONG);
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -701,7 +714,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -751,7 +765,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -802,7 +817,8 @@ class DoctorsListService extends BaseService {
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -847,7 +863,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"ClientRequestID": transactionID, "ClientRequestID": transactionID,
@ -886,7 +903,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"AdvanceNumber": advanceNumber, "AdvanceNumber": advanceNumber,
@ -923,7 +941,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"IsForAskYourDoctor": true, "IsForAskYourDoctor": true,
@ -963,7 +982,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"VersionID": req.VersionID, "VersionID": req.VersionID,
@ -999,7 +1019,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -1058,7 +1079,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"AppointmentNo": appoNo, "AppointmentNo": appoNo,
@ -1133,7 +1155,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"AppointmentNo": appo.appointmentNo, "AppointmentNo": appo.appointmentNo,
@ -1174,7 +1197,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"AppointmentDate": appoDate, "AppointmentDate": appoDate,
@ -1223,7 +1247,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
"ProjectID": projectID, "ProjectID": projectID,
@ -1282,7 +1307,8 @@ class DoctorsListService extends BaseService {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest(); Request req = appGlobal.getPublicRequest();
request = { request = {
@ -1320,4 +1346,42 @@ class DoctorsListService extends BaseService {
}, body: request); }, body: request);
return Future.value(localRes); return Future.value(localRes);
} }
Future<Map> getPatientHealthDataStats(
int medCategoryId, int medCategoryStsId, BuildContext context) async {
Map<String, dynamic> request;
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
var data = AuthenticatedUser.fromJson(
await this.sharedPref.getObject(USER_PROFILE));
authUser = data;
}
var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
Request req = appGlobal.getPublicRequest();
request = {
"MedCategoryID": medCategoryId,
"MedGetStsID": medCategoryStsId,
"VersionID": req.VersionID,
"Channel": req.Channel,
"LanguageID": languageID == 'ar' ? 1 : 2,
"IPAdress": req.IPAdress,
"generalid": req.generalid,
"PatientOutSA": authUser.outSA,
"SessionID": "YckwoXhUmWBsnHKEKig",
"isDentalAllowedBackend": false,
"DeviceTypeID": req.DeviceTypeID,
"PatientID": authUser.patientID,
"TokenID": "@dm!n",
"PatientTypeID": authUser.patientType,
"PatientType": authUser.patientType
};
dynamic localRes;
await baseAppClient.post(GET_PATIENT_HEALTH_STATS,
onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
return Future.value(localRes);
}
} }

@ -1346,7 +1346,6 @@ class TranslationBase {
String get measureTime => String get measureTime =>
localizedValues['measure-time'][locale.languageCode]; localizedValues['measure-time'][locale.languageCode];
String get update => localizedValues['update'][locale.languageCode]; String get update => localizedValues['update'][locale.languageCode];
String get covid19_driveThrueTest => String get covid19_driveThrueTest =>
localizedValues['covid19_driveThrueTest'][locale.languageCode]; localizedValues['covid19_driveThrueTest'][locale.languageCode];
String get eReferral => localizedValues['E-Referral'][locale.languageCode]; String get eReferral => localizedValues['E-Referral'][locale.languageCode];
@ -1364,10 +1363,40 @@ class TranslationBase {
localizedValues["vaccination-add-child-msg"][locale.languageCode]; localizedValues["vaccination-add-child-msg"][locale.languageCode];
String get childAddedSuccessfully => String get childAddedSuccessfully =>
localizedValues["child_added_successfully"][locale.languageCode]; localizedValues["child_added_successfully"][locale.languageCode];
String get sugar => localizedValues["sugar"][locale.languageCode];
String get bloodCholesterol =>
localizedValues["bloodCholesterol"][locale.languageCode];
String get cholesterol => localizedValues["cholesterol"][locale.languageCode];
String get triglycerides =>
localizedValues["triglycerides"][locale.languageCode];
String get fatInBlood => localizedValues["fatInBlood"][locale.languageCode];
String get calculate => localizedValues["calculate"][locale.languageCode];
String get enterReadingValue =>
localizedValues["enterReadingValue"][locale.languageCode];
String get convertBloodSugarStatement =>
localizedValues["convertBloodSugarStatement"][locale.languageCode];
String get convertFrom => localizedValues["convertFrom"][locale.languageCode];
String get result => localizedValues["result"][locale.languageCode];
String get bloodSugarConversion =>
localizedValues["bloodSugarConversion"][locale.languageCode];
String get convertCholesterolStatement =>
localizedValues["convertCholesterolStatement"][locale.languageCode];
String get triglyceridesConvertStatement =>
localizedValues["triglyceridesConvertStatement"][locale.languageCode];
String get bloodDEnterDesc => String get bloodDEnterDesc =>
localizedValues["bloodD-enter-desc"][locale.languageCode]; localizedValues["bloodD-enter-desc"][locale.languageCode];
String get viewTermsConditions => String get viewTermsConditions =>
localizedValues["viewTermsConditions"][locale.languageCode]; localizedValues["viewTermsConditions"][locale.languageCode];
String get walkinAppo => localizedValues["WalkinAppo"][locale.languageCode];
String get videoAppo => localizedValues["videoAppo"][locale.languageCode];
String get weightAdd => localizedValues["weight-add"][locale.languageCode];
String get systolicAdd =>
localizedValues["systolic-add"][locale.languageCode];
String get diastolicAdd =>
localizedValues["systolic-add"][locale.languageCode];
String get cmcHeading => localizedValues["cmc-heading"][locale.languageCode];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -47,70 +47,67 @@ class _BottomNavBarState extends State<BottomNavBar> {
color: Colors.white, color: Colors.white,
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 18), padding: EdgeInsets.symmetric(horizontal: 18),
child: Directionality( child: Row(
textDirection: TextDirection.ltr, mainAxisSize: MainAxisSize.max,
child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround,
mainAxisSize: MainAxisSize.max, children: [
mainAxisAlignment: MainAxisAlignment.spaceAround, BottomNavigationItem(
children: [ icon: EvaIcons.home,
BottomNavigationItem( activeIcon: EvaIcons.home,
icon: DQIcons.my_medical_file, changeIndex: _changeIndex,
activeIcon: DQIcons.my_medical_file, index: widget.index,
changeIndex: _changeIndex, currentIndex: 0,
index: widget.index, name: TranslationBase.of(context).home,
currentIndex: 1, ),
name: TranslationBase.of(context).medicalProfile, BottomNavigationItem(
), icon: DQIcons.my_medical_file,
BottomNavigationItem( activeIcon: DQIcons.my_medical_file,
icon: DQIcons.family, changeIndex: _changeIndex,
activeIcon: DQIcons.family, index: widget.index,
changeIndex: _changeIndex, currentIndex: 1,
index: widget.index, name: TranslationBase.of(context).medicalProfile,
currentIndex: 3, ),
name: TranslationBase.of(context).myFamily, if (widget.index == 0 && projectViewModel.havePrivilege(34))
), Expanded(
if (widget.index == 0) child: SizedBox(
Expanded( height: 50,
child: SizedBox( child: Column(
height: 50, mainAxisSize: MainAxisSize.min,
child: Column( mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min, children: <Widget>[
mainAxisAlignment: MainAxisAlignment.center, SizedBox(height: 22),
children: <Widget>[ ],
SizedBox(height: 22),
],
),
),
),
if (widget.index != 0 && projectViewModel.havePrivilege(34))
BottomNavigationItem(
icon: EvaIcons.calendar,
activeIcon: EvaIcons.calendar,
changeIndex: _changeIndex,
index: _index,
currentIndex: 2,
name: TranslationBase.of(context).bookAppo,
), ),
if (widget.index == 0 && projectViewModel.havePrivilege(34)) ),
BottomNavigationItem( ),
icon: EvaIcons.calendar, if (widget.index != 0 && projectViewModel.havePrivilege(34))
activeIcon: EvaIcons.calendar, BottomNavigationItem(
changeIndex: _changeIndex, icon: EvaIcons.calendar,
index: widget.index, activeIcon: EvaIcons.calendar,
currentIndex: 4, changeIndex: _changeIndex,
name: TranslationBase.of(context).todoList, index: widget.index,
), currentIndex: 2,
if (projectViewModel.havePrivilege(77)) name: TranslationBase.of(context).bookAppo,
BottomNavigationItem( ),
icon: DQIcons.roboticon, BottomNavigationItem(
activeIcon: DQIcons.roboticon, icon: DQIcons.family,
changeIndex: _changeIndex, activeIcon: DQIcons.family,
index: widget.index, changeIndex: _changeIndex,
currentIndex: 0, index: widget.index,
name: TranslationBase.of(context).help, currentIndex: 3,
) name: TranslationBase.of(context).myFamily,
], ),
)), if (projectViewModel.havePrivilege(51))
BottomNavigationItem(
icon: EvaIcons.calendar,
activeIcon: EvaIcons.calendar,
changeIndex: _changeIndex,
index: widget.index,
currentIndex: 4,
name: TranslationBase.of(context).todoList,
)
],
),
), ),
); );
} }

@ -69,3 +69,9 @@ class TimeSeriesSales2 {
TimeSeriesSales2(this.time, this.sales); TimeSeriesSales2(this.time, this.sales);
} }
class TimeSeriesSales3 {
final int time;
final double sales;
TimeSeriesSales3(this.time, this.sales);
}

@ -72,9 +72,8 @@ class TimeLineWidget extends StatelessWidget {
width: 15, width: 15,
height: 15, height: 15,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).primaryColor, color: Colors.yellow[700],
border: Border.all( border: Border.all(color: Colors.yellow[700], width: 2),
color: Theme.of(context).primaryColor, width: 2),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
Radius.circular(25.0), Radius.circular(25.0),
@ -111,7 +110,7 @@ class TimeLineWidget extends StatelessWidget {
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Texts( Texts(
appoitmentAllHistoryResul.clinicName, appoitmentAllHistoryResul.clinicName.trim(),
color: Colors.white, color: Colors.white,
fontSize: 12.5, fontSize: 12.5,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
@ -132,9 +131,8 @@ class TimeLineWidget extends StatelessWidget {
width: 15, width: 15,
height: 15, height: 15,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).primaryColor, color: Colors.yellow[700],
border: Border.all( border: Border.all(color: Colors.yellow[700], width: 2),
color: Theme.of(context).primaryColor, width: 2),
shape: BoxShape.rectangle, shape: BoxShape.rectangle,
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
Radius.circular(25.0), Radius.circular(25.0),
@ -164,7 +162,7 @@ class TimeLineWidget extends StatelessWidget {
height: 3, height: 3,
), ),
Texts( Texts(
appoitmentAllHistoryResul.doctorNameObj, appoitmentAllHistoryResul.doctorNameObj.trim(),
color: Colors.white, color: Colors.white,
fontSize: 10.5, fontSize: 10.5,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,

@ -1,8 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart';
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
@ -13,14 +11,14 @@ class MyInAppBrowser extends InAppBrowser {
// static String SERVICE_URL = // static String SERVICE_URL =
// 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT // 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT
static String SERVICE_URL = static String SERVICE_URL =
'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE
// static String PREAUTH_SERVICE_URL = // static String PREAUTH_SERVICE_URL =
// 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT // 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT
static String PREAUTH_SERVICE_URL = static String PREAUTH_SERVICE_URL =
'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store
static List<String> successURLS = [ static List<String> successURLS = [
'success', 'success',
@ -42,6 +40,9 @@ class MyInAppBrowser extends InAppBrowser {
String deviceToken; String deviceToken;
double lat = 0.0;
double long = 0.0;
static bool isPaymentDone = false; static bool isPaymentDone = false;
MyInAppBrowser({this.onExitCallback, this.appo, this.onLoadStartCallback}); MyInAppBrowser({this.onExitCallback, this.appo, this.onLoadStartCallback});
@ -98,6 +99,11 @@ class MyInAppBrowser extends InAppBrowser {
await this.sharedPref.getObject(USER_PROFILE)); await this.sharedPref.getObject(USER_PROFILE));
authUser = data; authUser = data;
} }
if (await this.sharedPref.getDouble(USER_LAT) != null &&
await this.sharedPref.getDouble(USER_LONG) != null) {
lat = await this.sharedPref.getDouble(USER_LAT);
long = await this.sharedPref.getDouble(USER_LONG);
}
} }
openPaymentBrowser( openPaymentBrowser(
@ -111,12 +117,33 @@ class MyInAppBrowser extends InAppBrowser {
String patientName, String patientName,
dynamic patientID, dynamic patientID,
AuthenticatedUser authenticatedUser, AuthenticatedUser authenticatedUser,
InAppBrowser browser) { InAppBrowser browser,
getDeviceToken(); bool isLiveCareAppo,
[var appoDate,
var appoNo,
var clinicID,
var doctorID]) {
this.browser = browser; this.browser = browser;
this.browser.openUrl( getPatientData();
url: generateURL(amount, orderDesc, transactionID, projId, emailId, generateURL(
paymentMethod, patientType, patientName, patientID, authenticatedUser)); amount,
orderDesc,
transactionID,
projId,
emailId,
paymentMethod,
patientType,
patientName,
patientID,
authenticatedUser,
isLiveCareAppo,
appoDate,
appoNo,
clinicID,
doctorID)
.then((value) {
this.browser.openUrl(url: value);
});
} }
openBrowser(String url) { openBrowser(String url) {
@ -124,7 +151,7 @@ class MyInAppBrowser extends InAppBrowser {
this.browser.openUrl(url: url); this.browser.openUrl(url: url);
} }
String generateURL( Future<String> generateURL(
double amount, double amount,
String orderDesc, String orderDesc,
String transactionID, String transactionID,
@ -135,18 +162,19 @@ class MyInAppBrowser extends InAppBrowser {
String patientName, String patientName,
dynamic patientID, dynamic patientID,
AuthenticatedUser authUser, AuthenticatedUser authUser,
[var patientData, bool isLiveCareAppo,
[var appoDate,
var appoNo,
var clinicID,
var doctorID,
var patientData,
var servID, var servID,
var LiveServID]) { var LiveServID]) async {
getPatientData(); getDeviceToken();
String currentLanguageID = getLanguageID() == 'ar' ? 'AR' : 'EN'; String currentLanguageID = getLanguageID() == 'ar' ? 'AR' : 'EN';
String form = getForm(); String form = isLiveCareAppo ? getLiveCareForm() : getForm();
// if (authUser != null) { form = form.replaceFirst("EMAIL_VALUE", emailId);
// form = form.replaceFirst("EMAIL_VALUE", authUser.emailAddress);
// } else {
form = form.replaceFirst("EMAIL_VALUE", emailId);
// }
form = form.replaceFirst('AMOUNT_VALUE', amount.toString()); form = form.replaceFirst('AMOUNT_VALUE', amount.toString());
form = form.replaceFirst('ORDER_DESCRIPTION_VALUE', orderDesc); form = form.replaceFirst('ORDER_DESCRIPTION_VALUE', orderDesc);
@ -157,12 +185,13 @@ class MyInAppBrowser extends InAppBrowser {
form = form.replaceFirst('LANG_VALUE', currentLanguageID); form = form.replaceFirst('LANG_VALUE', currentLanguageID);
form = form.replaceFirst('PATIENT_OUT_SA', form = form.replaceFirst('PATIENT_OUT_SA',
authUser.outSA == 0 ? false.toString() : true.toString()); authUser.outSA == 0 ? false.toString() : true.toString());
form = form.replaceFirst('PATIENT_TYPE_ID', form = form.replaceFirst(
patientData == null ? patientType.toString() : "1"); 'PATIENT_TYPE_ID', patientData == null ? patientType.toString() : "1");
// form = form.replaceFirst('DEVICE_TOKEN', this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false) + "," + this.cs.sharedService.getSharedData(AuthenticationService.APNS_TOKEN, false)); form = form.replaceFirst(
// form = form.replaceFirst('LATITUDE_VALUE', this.cs.sharedService.getSharedData('userLat', false)); 'DEVICE_TOKEN', await sharedPref.getString(PUSH_TOKEN));
// form = form.replaceFirst('LONGITUDE_VALUE', this.cs.sharedService.getSharedData('userLong', false)); form = form.replaceFirst('LATITUDE_VALUE', this.lat.toString());
form = form.replaceFirst('LONGITUDE_VALUE', this.long.toString());
if (servID == "4") if (servID == "4")
form = form.replaceFirst( form = form.replaceFirst(
@ -178,17 +207,16 @@ class MyInAppBrowser extends InAppBrowser {
form = form.replaceFirst('LIVE_SERVICE_ID', "2"); form = form.replaceFirst('LIVE_SERVICE_ID', "2");
} }
// if (patientData == null) { form = form.replaceFirst('CUSTNAME_VALUE', patientName);
form = form.replaceFirst('CUSTNAME_VALUE', patientName); form = form.replaceFirst('CUSTID_VALUE', patientID.toString());
form = form.replaceFirst('CUSTID_VALUE', patientID.toString());
// } else {
// form = form.replaceFirst('CUSTNAME_VALUE', patientData.depositorName);
// form = form.replaceFirst('CUSTID_VALUE', patientData.fileNumber);
// }
form = form.replaceFirst('LATITUDE_VALUE', "24.708488"); if (isLiveCareAppo) {
form = form.replaceFirst('LONGITUDE_VALUE', "46.665925"); form = form.replaceFirst('IS_SCHEDULE_VALUE', "true");
form = form.replaceFirst('DEVICE_TOKEN', DEVICE_TOKEN); form = form.replaceFirst('APPOINTMENT_DATE_VALUE', appoDate);
form = form.replaceFirst('APPOINTMENT_NO_VALUE', appoNo.toString());
form = form.replaceFirst('DOCTOR_ID_VALUE', doctorID.toString());
form = form.replaceFirst('CLINIC_ID_VALUE', clinicID.toString());
}
var bytes = utf8.encode(form); var bytes = utf8.encode(form);
var base64Str = base64.encode(bytes); var base64Str = base64.encode(bytes);
@ -228,6 +256,42 @@ class MyInAppBrowser extends InAppBrowser {
'</body>' + '</body>' +
'</html>'; '</html>';
} }
String getLiveCareForm() {
return '<html> ' +
'<head></head>' +
'<body>' +
'<form id="paymentForm" action="SERVICE_URL_VALUE" method="post">' +
'<input type="hidden" name="Amount" value="AMOUNT_VALUE">' +
'<input type="hidden" name="ProjID" value="PROJECT_ID_VALUE">' +
'<input type="hidden" name="IsSchedule" value="IS_SCHEDULE_VALUE">' +
'<input type="hidden" name="AppointmentDate" value="APPOINTMENT_DATE_VALUE">' +
'<input type="hidden" name="AppointmentNo" value="APPOINTMENT_NO_VALUE">' +
'<input type="hidden" name="DoctorID" value="DOCTOR_ID_VALUE">' +
'<input type="hidden" name="ClinicID" value="CLINIC_ID_VALUE">' +
'<input type="hidden" name="Order_Desc" value="ORDER_DESCRIPTION_VALUE">' +
'<input type="hidden" name="OrderID" value="ORDER_ID_VALUE">' +
'<input type="hidden" name="PaymentOption" value="PAYMENT_OPTION_VALUE">' +
'<input type="hidden" name="Email" value="EMAIL_VALUE">' +
'<input type="hidden" name="ServID" value="SERV_ID" >' +
'<input type="hidden" name="ChannelID" value="2" >' +
'<input type="hidden" name="Lang" value="LANG_VALUE" >' +
'<input type="hidden" name="ReturnURL" value="" >' +
'<input type="hidden" name="CustName" value="CUSTNAME_VALUE" >' +
'<input type="hidden" name="PatientOutSA" value="PATIENT_OUT_SA" >' +
'<input type="hidden" name="PatientTypeID" value="PATIENT_TYPE_ID" >' +
'<input type="hidden" name="DeviceToken" value="DEVICE_TOKEN" >' +
'<input type="hidden" name="Longitude" value="LONGITUDE_VALUE" >' +
'<input type="hidden" name="Latitude" value="LATITUDE_VALUE" >' +
'<input type="hidden" name="Live_ServiceID" value="LIVE_SERVICE_ID" >' +
'<input type="hidden" name="CustID" value="CUSTID_VALUE" >' +
'<input type="hidden" name="ResponseContinueURL" value="http://hmg.com/Documents/success.html" >' +
'<input type="hidden" name="BackClickUrl" value="http://hmg.com/Documents/success.html" >' +
'</form>' +
'<script type="text/javascript"> document.getElementById("paymentForm").submit(); </script>' +
'</body>' +
'</html>';
}
} }
class MyChromeSafariBrowser extends ChromeSafariBrowser { class MyChromeSafariBrowser extends ChromeSafariBrowser {

@ -13,21 +13,19 @@ import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/bottom_bar.dart'; import 'package:diplomaticquarterapp/widgets/others/bottom_bar.dart';
import 'package:diplomaticquarterapp/widgets/progress_indicator/app_loader_widget.dart'; import 'package:diplomaticquarterapp/widgets/progress_indicator/app_loader_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:diplomaticquarterapp/widgets/weather_slider/weather_slider.dart'; import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart';
import 'package:diplomaticquarterapp/widgets/typewriter/typewiter.dart'; import 'package:diplomaticquarterapp/widgets/robo-search/search.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart';
import '../../locator.dart'; import '../../locator.dart';
import 'floating_button_search.dart'; import 'floating_button_search.dart';
import '../progress_indicator/app_loader_widget.dart'; import '../progress_indicator/app_loader_widget.dart';
import 'arrow_back.dart'; import 'arrow_back.dart';
import 'network_base_view.dart'; import 'network_base_view.dart';
import 'not_auh_page.dart'; import 'not_auh_page.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
class AppScaffold extends StatelessWidget { class AppScaffold extends StatelessWidget {
final String appBarTitle; final String appBarTitle;
@ -42,119 +40,82 @@ class AppScaffold extends StatelessWidget {
final bool isPharmacy; final bool isPharmacy;
final String title; final String title;
final String description; final String description;
final String image;
final bool isShowDecPage; final bool isShowDecPage;
final List<String> infoList; final List<String> infoList;
final Color backgroundColor; final Color backgroundColor;
final bool isHelp;
final double preferredSize; final double preferredSize;
final List<Widget> appBarIcons; final List<Widget> appBarIcons;
final PreferredSizeWidget appBarWidget;
ProjectViewModel projectProvider;
final List<ImagesInfo> imagesInfo; final List<ImagesInfo> imagesInfo;
AuthenticatedUserObject authenticatedUserObject = AuthenticatedUserObject authenticatedUserObject =
locator<AuthenticatedUserObject>(); locator<AuthenticatedUserObject>();
AppScaffold({ AppScaffold(
@required this.body, {@required this.body,
this.appBarTitle = '', this.appBarTitle = '',
this.isLoading = false, this.isLoading = false,
this.isShowAppBar = false, this.isShowAppBar = false,
this.hasAppBarParam, this.hasAppBarParam,
this.bottomSheet, this.bottomSheet,
this.baseViewModel, this.baseViewModel,
this.floatingActionButton, this.floatingActionButton,
this.isPharmacy = false, this.isPharmacy = false,
this.title, this.title,
this.description, this.description,
this.isShowDecPage = true, this.isShowDecPage = true,
this.backgroundColor, this.isBottomBar,
this.isBottomBar, this.backgroundColor,
this.preferredSize = 0.0, this.preferredSize = 0.0,
this.appBarIcons, this.appBarIcons,
this.appBarWidget, this.infoList, this.imagesInfo});
this.image,
this.infoList,
this.isHelp = false,
this.imagesInfo,
});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
AppGlobal.context = context; AppGlobal.context = context;
PreferredSizeWidget appBar; return Scaffold(
backgroundColor:
if (this.appBarWidget == null) { backgroundColor ?? Theme.of(context).scaffoldBackgroundColor,
PreferredSizeWidget appBarWidget = AppBarWidget( appBar: isShowAppBar? AppBarWidget(
appBarTitle, appBarTitle:appBarTitle,
appBarIcons, appBarIcons:appBarIcons,
isShowAppBar,
isPharmacy: isPharmacy, isPharmacy: isPharmacy,
isShowDecPage: isShowDecPage, isShowDecPage: isShowDecPage,
image: image, ):null,
); bottomSheet: bottomSheet,
appBar = preferredSize == 0 body: (!Provider.of<ProjectViewModel>(context, listen: false).isLogin &&
? appBarWidget isShowDecPage)
: PreferredSize( ? NotAutPage(
child: appBarWidget, title: title ?? appBarTitle,
preferredSize: Size.fromHeight(preferredSize)); description: description,
} else { infoList: infoList,
appBar = this.appBarWidget; imagesInfo: imagesInfo,
} )
: baseViewModel != null
return Scaffold( ? NetworkBaseView(
backgroundColor: child: body,
backgroundColor ?? Theme.of(context).scaffoldBackgroundColor, baseViewModel: baseViewModel,
appBar: appBar, )
body: (!Provider.of<ProjectViewModel>(context, listen: false).isLogin && : body,
isShowDecPage) );
? NotAutPage(
title: appBarTitle,
description: description,
infoList: infoList,
imagesInfo: imagesInfo,
)
: baseViewModel != null
? NetworkBaseView(
child: buildBodyWidget(context),
baseViewModel: baseViewModel,
)
: buildBodyWidget(context),
bottomSheet: bottomSheet
//floatingActionButton: floatingActionButton ?? floatingActionButton,
// bottomNavigationBar:
// this.isBottomBar == true ? BottomBarSearch() : SizedBox()
//floatingActionButton: FloatingSearchButton(),
);
} }
buildAppLoaderWidget(bool isLoading) { buildAppLoaderWidget(bool isLoading) {
return isLoading ? AppLoaderWidget() : Container(); return isLoading ? AppLoaderWidget() : Container();
} }
buildBodyWidget(context) {
// return body; //Stack(children: <Widget>[body, buildAppLoaderWidget(isLoading)]);
//&& Provider.of<ProjectViewModel>(context, listen: false).havePrivilege(77) need to added
return Stack(
children: <Widget>[body, isHelp == true ? RobotIcon() : Container()]);
}
} }
class AppBarWidget extends StatelessWidget with PreferredSizeWidget { class AppBarWidget extends StatelessWidget with PreferredSizeWidget {
final AuthenticatedUserObject authenticatedUserObject = final AuthenticatedUserObject authenticatedUserObject =
locator<AuthenticatedUserObject>(); locator<AuthenticatedUserObject>();
final String appBarTitle; final String appBarTitle;
final List<Widget> appBarIcons; final List<Widget> appBarIcons;
final bool isShowAppBar;
final bool isPharmacy; final bool isPharmacy;
final bool isShowDecPage; final bool isShowDecPage;
final String image;
AppBarWidget(this.appBarTitle, this.appBarIcons, this.isShowAppBar, AppBarWidget({this.appBarTitle, this.appBarIcons,
{this.isPharmacy = true, this.isShowDecPage = true, this.image}); this.isPharmacy = true, this.isShowDecPage = true});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -162,172 +123,55 @@ class AppBarWidget extends StatelessWidget with PreferredSizeWidget {
} }
Widget buildAppBar(BuildContext context) { Widget buildAppBar(BuildContext context) {
return isShowAppBar ProjectViewModel projectViewModel = Provider.of(context);
? AppBar( return AppBar(
elevation: 0, elevation: 0,
backgroundColor: backgroundColor:
isPharmacy ? Colors.green : Theme.of(context).appBarTheme.color, isPharmacy ? Colors.green : Theme.of(context).appBarTheme.color,
textTheme: TextTheme( textTheme: TextTheme(
headline6: headline6:
TextStyle(color: Colors.white, fontWeight: FontWeight.bold), TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
), ),
title: Texts( title: Text(
authenticatedUserObject.isLogin || !isShowDecPage authenticatedUserObject.isLogin || !isShowDecPage
? appBarTitle.toUpperCase() ? appBarTitle.toUpperCase()
: TranslationBase.of(context).serviceInformationTitle, : TranslationBase.of(context).serviceInformationTitle,
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white, color: Colors.white,
bold: true, fontFamily:
), projectViewModel.isArabic ? 'Cairo' : 'WorkSans')),
leading: Builder( leading: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {
return ArrowBack(); return ArrowBack();
}, },
), ),
centerTitle: true, centerTitle: true,
actions: <Widget>[ actions: <Widget>[
isPharmacy isPharmacy
? IconButton( ? IconButton(
icon: Icon(Icons.shopping_cart), icon: Icon(Icons.shopping_cart),
color: Colors.white, color: Colors.white,
onPressed: () { onPressed: () {
Navigator.of(context) Navigator.of(context)
.popUntil(ModalRoute.withName('/')); .popUntil(ModalRoute.withName('/'));
}) })
: Container(), : Container(),
image != null IconButton(
? InkWell( icon: Icon(FontAwesomeIcons.home),
onTap: () => Navigator.push( color: Colors.white,
context, onPressed: () {
FadePage( Navigator.pushAndRemoveUntil(
page: InsuranceUpdate(), context,
), MaterialPageRoute(
), builder: (context) => LandingPage()),
child: Padding( (Route<dynamic> r) => false);
padding: const EdgeInsets.all(8.0), },
child: Image.asset(
image,
height: SizeConfig.heightMultiplier * 5,
width: SizeConfig.heightMultiplier * 5,
color: Colors.white,
),
),
)
: IconButton(
icon: Icon(FontAwesomeIcons.home),
color: Colors.white,
onPressed: () {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => LandingPage()),
(Route<dynamic> r) => false);
},
),
if (appBarIcons != null) ...appBarIcons
],
)
: Container(
height: 0,
width: 0,
);
}
@override
Size get preferredSize => Size(double.maxFinite, 60);
}
class RobotIcon extends StatefulWidget {
@override
_RobotIcon createState() => _RobotIcon();
}
class _RobotIcon extends State<RobotIcon> {
var event = RobotProvider();
bool isAnimation = false;
@override
void initState() {
event.controller.stream.listen((p) {
if (p['animationEnable'] == 'false') {
setState(() {
if (this.mounted) {
this.isAnimation = false;
}
});
}
});
setState(() {
setAnimation();
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Positioned(
child: Column(
children: [
isAnimation
? Container(
height: 150,
width: 200,
padding: EdgeInsets.all(5),
margin: EdgeInsets.only(right: 35.0, bottom: 0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
boxShadow: [
BoxShadow(color: Colors.black, spreadRadius: 1),
],
),
child: TyperAnimatedTextKit(
text: Provider.of<ProjectViewModel>(context,
listen: false)
.isArabic ==
true
? "هذه الخدمة تم تصميمها لتتمكن من ربط الملفات الطبية للعائلة بملفك الطبي حتى تتمكن من إدارة سجلاتهم عن طريق تسجيل الدخول إلى ملفك الطبي."
: "Through this service, you will be able to link your family medical files to your medical file so that you can manage their records by login to your medical file.",
textLength: Provider.of<ProjectViewModel>(context,
listen: false)
.isArabic ==
true
? "هذه الخدمة تم تصميمها لتتمكن من ربط الملفات الطبية للعائلة بملفك الطبي حتى تتمكن من إدارة سجلاتهم عن طريق تسجيل الدخول إلى ملفك الطبي."
.length
: "Through this service, you will be able to link your family medical files to your medical file so that you can manage their records by login to your medical file."
.length))
: Container(),
Stack(
children: [
isAnimation
? Positioned(
top: 0,
right: 40,
child: Container(
height: 0,
width: 0,
decoration: ShapeDecoration(
color: Colors.grey,
shape: MessageBorder(reverse: true),
)))
: Container(),
FloatingSearchButton()
],
)
],
), ),
right: -30, if (appBarIcons != null) ...appBarIcons
bottom: 50); ],
}
setAnimation() async {
//await sharedPref.getBool(IS_ROBOT_VISIBLE) ||
var animation =
await sharedPref.getBool(IS_ROBOT_INIT) == null ? true : false;
setState(() { );
this.isAnimation = animation;
});
} }
@override @override

Loading…
Cancel
Save