Merge branch 'development' into Haroon

merge-requests/263/head
haroon amjad 5 years ago
commit 3bad0a3804

@ -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

@ -292,16 +292,24 @@ const GET_PATIENT_LAST_RECORD = 'Services/Patients.svc/REST/Med_GetPatientLastRe
const GET_DIABETIC_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetDiabeticResultAverage'; const GET_DIABETIC_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetDiabeticResultAverage';
const GET_DIABTEC_RESULT = 'Services/Patients.svc/REST/Patient_GetDiabtecResults'; const GET_DIABTEC_RESULT = 'Services/Patients.svc/REST/Patient_GetDiabtecResults';
const ADD_DIABTEC_RESULT = 'Services/Patients.svc/REST/Patient_AddDiabtecResult'; const ADD_DIABTEC_RESULT = 'Services/Patients.svc/REST/Patient_AddDiabtecResult';
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 GET_BLOOD_PRESSURE_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetBloodPressureResultAverage'; const GET_BLOOD_PRESSURE_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetBloodPressureResultAverage';
const GET_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_GetBloodPressureResult'; const GET_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_GetBloodPressureResult';
const ADD_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_AddBloodPressureResult'; const ADD_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_AddBloodPressureResult';
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_DIABETIC_RESULT = 'Services/Patients.svc/REST/Patient_UpdateDiabeticResult'; const UPDATE_DIABETIC_RESULT = 'Services/Patients.svc/REST/Patient_UpdateDiabeticResult';
const GET_WEIGHT_PRESSURE_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResultAverage'; const GET_WEIGHT_PRESSURE_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResultAverage';
const GET_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResult'; const GET_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResult';
const ADD_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_AddWeightMeasurementResult'; const ADD_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_AddWeightMeasurementResult';
const UPDATE_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_UpdateWeightMeasurementResult';
const DEACTIVATE_WEIGHT_PRESSURE_RESULT = 'services/Patients.svc/REST/Patient_DeactivateWeightMeasurementStatus';
const ADD_ACTIVE_PRESCRIPTIONS_REPORT_BY_PATIENT_ID = 'Services/Patients.svc/Rest/GetActivePrescriptionReportByPatientID'; const ADD_ACTIVE_PRESCRIPTIONS_REPORT_BY_PATIENT_ID = 'Services/Patients.svc/Rest/GetActivePrescriptionReportByPatientID';

@ -1634,4 +1634,20 @@ const Map localizedValues = {
"ar": "موعد اتصال فيديو" "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;

@ -248,7 +248,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());

@ -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,

@ -607,6 +607,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:

@ -54,15 +54,19 @@ class MedicalProfilePage extends StatefulWidget {
class _MedicalProfilePageState extends State<MedicalProfilePage> { 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,context: context,count: appoCountProvider.count,isLogin: projectViewModel.isLogin); projectViewModel: projectViewModel,
return BaseView<MedicalViewModel>( context: context,
count: appoCountProvider.count,
isLogin: projectViewModel.isLogin);
return BaseView<MedicalViewModel>(
onModelReady: (model) => model.getAppointmentHistory(), onModelReady: (model) => model.getAppointmentHistory(),
builder: (_, model, widget) => AppScaffold( builder: (_, model, widget) => AppScaffold(
isShowDecPage: false, isShowDecPage: false,
@ -97,25 +101,30 @@ 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,
), ),
], ],
), ),
), ),
SizedBox(height: 50,), SizedBox(
height: 50,
),
Padding( Padding(
padding: EdgeInsets.symmetric(vertical: 5.0), padding: EdgeInsets.symmetric(vertical: 5.0),
child: GridView.builder( child: GridView.builder(
shrinkWrap: true, shrinkWrap: true,
primary: false, primary: false,
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3, crossAxisCount: 3,
childAspectRatio: MediaQuery.of(context).size.width / (MediaQuery.of(context).size.height / 2.40), childAspectRatio: MediaQuery.of(context)
.size
.width /
(MediaQuery.of(context).size.height / 2.40),
), ),
itemCount: myMedicalList.length, itemCount: myMedicalList.length,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return myMedicalList[index]; return myMedicalList[index];
}, },
), ),
@ -123,8 +132,7 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
], ],
), ),
SizedBox( SizedBox(
height: height: MediaQuery.of(context).size.height * 0.12,
MediaQuery.of(context).size.height * 0.12,
), ),
if (model.user != null && model.isLogin) if (model.user != null && model.isLogin)
Positioned( Positioned(
@ -135,7 +143,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),
@ -187,20 +195,13 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
), ),
); );
} }
fullMedicalData(){
if(projectViewModel.havePrivilege(5))
{}
}
} }
class Medical{ class Medical {
final String title;
final String title; final String imagePath;
final String imagePath; final String subTitle;
final String subTitle; final Widget page;
final Widget page;
Medical({this.title, this.imagePath, this.subTitle, this.page});
Medical({this.title, this.imagePath, this.subTitle, this.page});
} }

@ -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);
}

@ -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(

@ -1377,6 +1377,10 @@ class TranslationBase {
localizedValues["viewTermsConditions"][locale.languageCode]; localizedValues["viewTermsConditions"][locale.languageCode];
String get walkinAppo => localizedValues["WalkinAppo"][locale.languageCode]; String get walkinAppo => localizedValues["WalkinAppo"][locale.languageCode];
String get videoAppo => localizedValues["videoAppo"][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];
} }

@ -95,7 +95,7 @@ class _BottomNavBarState extends State<BottomNavBar> {
icon: EvaIcons.calendar, icon: EvaIcons.calendar,
activeIcon: EvaIcons.calendar, activeIcon: EvaIcons.calendar,
changeIndex: _changeIndex, changeIndex: _changeIndex,
index: _index, index: widget.index,
currentIndex: 2, currentIndex: 2,
name: TranslationBase.of(context).bookAppo, name: TranslationBase.of(context).bookAppo,
), ),

@ -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,

@ -40,7 +40,6 @@ 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;
@ -68,7 +67,6 @@ class AppScaffold extends StatelessWidget {
this.backgroundColor, this.backgroundColor,
this.preferredSize = 0.0, this.preferredSize = 0.0,
this.appBarIcons, this.appBarIcons,
this.image,
this.infoList, this.imagesInfo}); this.infoList, this.imagesInfo});
@override @override
@ -82,7 +80,6 @@ class AppScaffold extends StatelessWidget {
appBarIcons:appBarIcons, appBarIcons:appBarIcons,
isPharmacy: isPharmacy, isPharmacy: isPharmacy,
isShowDecPage: isShowDecPage, isShowDecPage: isShowDecPage,
image: image,
):null, ):null,
bottomSheet: bottomSheet, bottomSheet: bottomSheet,
body: (!Provider.of<ProjectViewModel>(context, listen: false).isLogin && body: (!Provider.of<ProjectViewModel>(context, listen: false).isLogin &&
@ -116,10 +113,9 @@ class AppBarWidget extends StatelessWidget with PreferredSizeWidget {
final List<Widget> appBarIcons; final List<Widget> appBarIcons;
final bool isPharmacy; final bool isPharmacy;
final bool isShowDecPage; final bool isShowDecPage;
final String image;
AppBarWidget({this.appBarTitle, this.appBarIcons, 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) {

Loading…
Cancel
Save