diff --git a/assets/images/AlHabibMedicalService/health_calculator/bmi.png b/assets/images/AlHabibMedicalService/health_calculator/bmi.png new file mode 100644 index 00000000..6df6c9f9 Binary files /dev/null and b/assets/images/AlHabibMedicalService/health_calculator/bmi.png differ diff --git a/assets/images/AlHabibMedicalService/health_calculator/bmr.png b/assets/images/AlHabibMedicalService/health_calculator/bmr.png new file mode 100644 index 00000000..db31ed43 Binary files /dev/null and b/assets/images/AlHabibMedicalService/health_calculator/bmr.png differ diff --git a/assets/images/AlHabibMedicalService/health_calculator/body-fat.png b/assets/images/AlHabibMedicalService/health_calculator/body-fat.png new file mode 100644 index 00000000..97b05df3 Binary files /dev/null and b/assets/images/AlHabibMedicalService/health_calculator/body-fat.png differ diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 40871ddf..fed1b69a 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1089,6 +1089,7 @@ const Map localizedValues = { }, "MoreDetails": {"en": "More details", "ar": " المزيد من التفاصيل "}, "SendCopy": {"en": "Send Copy", "ar": "ارسال نسخة"}, + "ResendOrder": {"en": "Resend order & deliver", "ar": "إعادة طلب و توصيل"}, "Ports": {"en": "Ports", "ar": "المنافذ"}, "Way": {"en": "Way", "ar": "الطزيقة"}, diff --git a/lib/core/service/medical/BloodPressureService.dart b/lib/core/service/medical/BloodPressureService.dart index 82130750..7a849808 100644 --- a/lib/core/service/medical/BloodPressureService.dart +++ b/lib/core/service/medical/BloodPressureService.dart @@ -73,7 +73,7 @@ class BloodPressureService extends BaseService { super.error = ""; Map body = Map(); body['isDentalAllowedBackend'] = false; - body['to'] = user.emailAddress; + body['To'] = user.emailAddress; await baseAppClient.post(SEND_AVERAGE_BLOOD_PRESSURE_REPORT, onSuccess: (response, statusCode) async {}, onFailure: (String error, int statusCode) { diff --git a/lib/core/service/medical/BloodSugarService.dart b/lib/core/service/medical/BloodSugarService.dart index e8e2fabf..4de444ea 100644 --- a/lib/core/service/medical/BloodSugarService.dart +++ b/lib/core/service/medical/BloodSugarService.dart @@ -114,7 +114,7 @@ class BloodSugarService extends BaseService { super.error = ""; Map body = Map(); body['isDentalAllowedBackend'] = false; - body['to'] = user.emailAddress; + body['To'] = user.emailAddress; await baseAppClient.post(SEND_AVERAGE_BLOOD_SUGAR_REPORT, onSuccess: (response, statusCode) async {}, onFailure: (String error, int statusCode) { diff --git a/lib/core/viewModels/medical/labs_view_model.dart b/lib/core/viewModels/medical/labs_view_model.dart index 4473c117..f75abe88 100644 --- a/lib/core/viewModels/medical/labs_view_model.dart +++ b/lib/core/viewModels/medical/labs_view_model.dart @@ -122,14 +122,17 @@ class LabsViewModel extends BaseViewModel { error = _labsService.error; setState(ViewState.Error); } else { - bool isShouldClear = false; - if (_labsService.labOrdersResultsList.length == 1) { - labOrdersResultsList.forEach((element) { - if (element.resultValue.contains('/') || element.resultValue.contains('*') || element.resultValue.isEmpty) - isShouldClear = true; - }); - } - if (isShouldClear) _labsService.labOrdersResultsList.clear(); + /// commented out based on PAP-304 + // bool isShouldClear = false; + // if (_labsService.labOrdersResultsList.length == 1) { + // labOrdersResultsList.forEach((element) { + // if (element.resultValue.contains('/') || element.resultValue.contains('*') || element.resultValue.isEmpty) + // isShouldClear = true; + // }); + // } + // if (isShouldClear) + // + // _labsService.labOrdersResultsList.clear(); setState(ViewState.Idle); } } diff --git a/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bmi_calculator.dart b/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bmi_calculator.dart index 45ea16fd..ec7074c2 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bmi_calculator.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bmi_calculator.dart @@ -6,8 +6,10 @@ import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'dart:math'; +import '../health_calc_desc.dart'; import 'result_page.dart'; const activeCardColor = Color(0xff70777A); @@ -121,7 +123,25 @@ class _BMICalculatorState extends State { return AppScaffold( isShowAppBar: true, isShowDecPage: false, - appBarTitle: "${TranslationBase.of(context).bmi} ${TranslationBase.of(context).calcHealth}", + showHomeAppBarIcon: false, + appBarIcons: [ + IconButton( + icon: Icon(Icons.info_outline), + color: Colors.white, + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => HealthDescPage( + "${TranslationBase.of(context).bmi} ${TranslationBase.of(context).calcHealth}", + TranslationBase.of(context).bmiCalcDesc, + "assets/images/AlHabibMedicalService/health_calculator/bmi.png")), + ); + }, + ) + ], + appBarTitle: + "${TranslationBase.of(context).bmi} ${TranslationBase.of(context).calcHealth}", body: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.center, @@ -158,7 +178,8 @@ class _BMICalculatorState extends State { Row( children: [ Padding( - padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 8.0), + padding: EdgeInsets.symmetric( + vertical: 10.0, horizontal: 8.0), child: Center( child: Container( width: 60.0, @@ -179,7 +200,8 @@ class _BMICalculatorState extends State { Container( height: 38.0, child: Column( - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ Container( @@ -261,15 +283,18 @@ class _BMICalculatorState extends State { color: Colors.grey.withOpacity(0.5), spreadRadius: 3, blurRadius: 7, - offset: Offset(0, 3), // changes position of shadow + offset: + Offset(0, 3), // changes position of shadow ), ], color: cmCard, borderRadius: BorderRadius.circular(3.0), ), child: Padding( - padding: const EdgeInsets.symmetric(vertical: 0.0, horizontal: 18.0), - child: Center(child: Texts(TranslationBase.of(context).cm)), + padding: const EdgeInsets.symmetric( + vertical: 0.0, horizontal: 18.0), + child: Center( + child: Texts(TranslationBase.of(context).cm)), ), ), ), @@ -290,13 +315,16 @@ class _BMICalculatorState extends State { color: Colors.grey.withOpacity(0.5), spreadRadius: 3, blurRadius: 7, - offset: Offset(0, 3), // changes position of shadow + offset: + Offset(0, 3), // changes position of shadow ), ], ), child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: Center(child: Texts(TranslationBase.of(context).feet)), + padding: + const EdgeInsets.symmetric(horizontal: 16.0), + child: Center( + child: Texts(TranslationBase.of(context).feet)), ), ), ), @@ -328,7 +356,8 @@ class _BMICalculatorState extends State { Row( children: [ Padding( - padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 8.0), + padding: EdgeInsets.symmetric( + vertical: 10.0, horizontal: 8.0), child: Center( child: Container( width: 60.0, @@ -349,7 +378,8 @@ class _BMICalculatorState extends State { Container( height: 38.0, child: Column( - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ Container( @@ -431,15 +461,18 @@ class _BMICalculatorState extends State { color: Colors.grey.withOpacity(0.5), spreadRadius: 3, blurRadius: 7, - offset: Offset(0, 3), // changes position of shadow + offset: + Offset(0, 3), // changes position of shadow ), ], color: kgCard, borderRadius: BorderRadius.circular(3.0), ), child: Padding( - padding: const EdgeInsets.symmetric(vertical: 0.0, horizontal: 18.0), - child: Center(child: Texts(TranslationBase.of(context).kg)), + padding: const EdgeInsets.symmetric( + vertical: 0.0, horizontal: 18.0), + child: Center( + child: Texts(TranslationBase.of(context).kg)), ), ), ), @@ -460,13 +493,17 @@ class _BMICalculatorState extends State { color: Colors.grey.withOpacity(0.5), spreadRadius: 3, blurRadius: 7, - offset: Offset(0, 3), // changes position of shadow + offset: + Offset(0, 3), // changes position of shadow ), ], ), child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: Center(child: Texts(TranslationBase.of(context).pound)), + padding: + const EdgeInsets.symmetric(horizontal: 16.0), + child: Center( + child: + Texts(TranslationBase.of(context).pound)), ), ), ), diff --git a/lib/pages/AlHabibMedicalService/health_calculator/health_calc_desc.dart b/lib/pages/AlHabibMedicalService/health_calculator/health_calc_desc.dart new file mode 100644 index 00000000..19f8e986 --- /dev/null +++ b/lib/pages/AlHabibMedicalService/health_calculator/health_calc_desc.dart @@ -0,0 +1,40 @@ +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; + +class HealthDescPage extends StatelessWidget { + final String title; + final String desc; + final String icon; + + HealthDescPage(this.title, this.desc, this.icon); + + @override + Widget build(BuildContext context) { + return AppScaffold( + isShowAppBar: true, + isShowDecPage: false, + appBarTitle: title, + body: Container( + margin: EdgeInsets.all(8.0), + child: Row( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: Image.asset( + icon, + fit: BoxFit.cover, + height: 80, + ), + ), + Expanded( + child: Text( + desc, + style: TextStyle(fontSize: 18.0), + ), + ) + ], + ), + ), + ); + } +} diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index 35a248ae..211e1933 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -558,7 +558,7 @@ class _LandingPageState extends State with WidgetsBindingObserver { changeIndex: _changeCurrentTab, index: currentTab, ), - floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, + floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked , floatingActionButton: (projectViewModel.havePrivilege(34) && currentTab == 0) ? FloatingButton( diff --git a/lib/pages/medical/active_medications/ActiveMedicationsPage.dart b/lib/pages/medical/active_medications/ActiveMedicationsPage.dart index 5bc9618d..a6fc5fef 100644 --- a/lib/pages/medical/active_medications/ActiveMedicationsPage.dart +++ b/lib/pages/medical/active_medications/ActiveMedicationsPage.dart @@ -49,7 +49,8 @@ class ActiveMedicationsPage extends StatelessWidget { height: 5, ), Texts( - TranslationBase.of(context).expDate+' :' + + TranslationBase.of(context).expDate + + ' :' + DateUtil.getDayMonthYearDateFormatted(model .activePrescriptionReport[index].orderDate), ), @@ -57,21 +58,24 @@ class ActiveMedicationsPage extends StatelessWidget { height: 5, ), Texts( - TranslationBase.of(context).route+ ' :' + + TranslationBase.of(context).route + + ' :' + model.activePrescriptionReport[index].route, ), SizedBox( height: 5, ), Texts( - TranslationBase.of(context).frequency+ ' :' + + TranslationBase.of(context).frequency + + ' :' + model.activePrescriptionReport[index].frequency, ), SizedBox( height: 5, ), Texts( - TranslationBase.of(context).dailyQuantity + ' :${model.activePrescriptionReport[index].doseDailyQuantity}', + TranslationBase.of(context).dailyQuantity + + ' :${model.activePrescriptionReport[index].doseDailyQuantity}', ), ], ), @@ -86,16 +90,20 @@ class ActiveMedicationsPage extends StatelessWidget { color: Colors.red, size: 28, ), - SizedBox(height: 25,), + SizedBox( + height: 25, + ), InkWell( - onTap: (){ + onTap: () { Navigator.push( context, FadePage( page: ReminderPage( - frequency: model.activePrescriptionReport[index] + frequency: model + .activePrescriptionReport[index] .frequencyNumber, - days: model.activePrescriptionReport[index].days, + days: model + .activePrescriptionReport[index].days, itemDescription: model .activePrescriptionReport[index] .itemDescription, diff --git a/lib/pages/medical/my_trackers/blood_pressure/AddBloodPressurePage.dart b/lib/pages/medical/my_trackers/blood_pressure/AddBloodPressurePage.dart index a88bf755..beaa8c2a 100644 --- a/lib/pages/medical/my_trackers/blood_pressure/AddBloodPressurePage.dart +++ b/lib/pages/medical/my_trackers/blood_pressure/AddBloodPressurePage.dart @@ -27,13 +27,13 @@ class AddBloodPressurePage extends StatefulWidget { const AddBloodPressurePage( {Key key, - this.bloodSugarDate, - this.measureTimeSelectedType, - this.isUpdate = false, - this.lineItemNo, - this.model, - this.bloodSystolicValue, - this.bloodDiastolicValue}) + this.bloodSugarDate, + this.measureTimeSelectedType, + this.isUpdate = false, + this.lineItemNo, + this.model, + this.bloodSystolicValue, + this.bloodDiastolicValue}) : super(key: key); @override @@ -80,38 +80,44 @@ class _AddBloodPressurePageState extends State { return AppScaffold( isShowAppBar: true, - appBarTitle: widget.isUpdate ? TranslationBase.of(context).update : TranslationBase.of(context).add, + appBarTitle: widget.isUpdate + ? TranslationBase.of(context).update + : 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); + ? [ + 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.model.deactivateDiabeticStatus(lineItemNo: widget.lineItemNo).then((value) { - GifLoaderDialogUtils.hideDialog(context); - if (widget.model.state == ViewState.ErrorLocal) - AppToast.showErrorToast(message: widget.model.error); - else - Navigator.pop(context); - }).catchError((e) { - GifLoaderDialogUtils.hideDialog(context); - AppToast.showErrorToast(message: widget.model.error); - }); - }, - cancelFunction: () => {}); - dialog.showAlertDialog(context); - }, - ) - ] + GifLoaderDialogUtils.showMyDialog(context); + widget.model + .deactivateDiabeticStatus( + lineItemNo: widget.lineItemNo) + .then((value) { + GifLoaderDialogUtils.hideDialog(context); + if (widget.model.state == ViewState.ErrorLocal) + AppToast.showErrorToast( + message: widget.model.error); + else + Navigator.pop(context); + }).catchError((e) { + GifLoaderDialogUtils.hideDialog(context); + AppToast.showErrorToast(message: widget.model.error); + }); + }, + cancelFunction: () => {}); + dialog.showAlertDialog(context); + }, + ) + ] : null, body: SingleChildScrollView( physics: BouncingScrollPhysics(), @@ -144,13 +150,15 @@ class _AddBloodPressurePageState extends State { ), InkWell( onTap: () { - confirmSelectMeasureTimeDialog(projectViewModel.isArabic ? measureTimeArList : measureTimeEnList); + confirmSelectMeasureTimeDialog(!projectViewModel.isArabic ? measureTimeArList : measureTimeEnList); }, child: Container( padding: EdgeInsets.all(12), width: double.infinity, height: 65, - decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: Colors.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -172,18 +180,22 @@ class _AddBloodPressurePageState extends State { showTitleActions: true, minTime: DateTime(DateTime.now().year - 1, 1, 1), maxTime: DateTime.now(), onConfirm: (date) { - setState( - () { - bloodSugarDate = date; + setState( + () { + bloodSugarDate = date; + }, + ); }, - ); - }, currentTime: bloodSugarDate, locale: projectViewModel.localeType); + currentTime: bloodSugarDate, + locale: projectViewModel.localeType); }, child: Container( padding: EdgeInsets.all(12), width: double.infinity, height: 65, - decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: Colors.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -198,22 +210,30 @@ class _AddBloodPressurePageState extends State { ), InkWell( onTap: () { - DatePicker.showTimePicker(context, showTitleActions: true, onConfirm: (date) { - setState( - () { - timeSugarDate = date; + DatePicker.showTimePicker(context, showTitleActions: true, + onConfirm: (date) { + setState( + () { + timeSugarDate = date; + }, + ); }, - ); - }, currentTime: timeSugarDate, locale: projectViewModel.localeType); + currentTime: timeSugarDate, + locale: projectViewModel.localeType); }, child: Container( padding: EdgeInsets.all(12), width: double.infinity, height: 65, - decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: Colors.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [Texts(TranslationBase.of(context).time), Texts(getTime())], + children: [ + Texts(TranslationBase.of(context).time), + Texts(getTime()) + ], ), ), ), @@ -231,18 +251,23 @@ class _AddBloodPressurePageState extends State { loading: widget.model.state == ViewState.BusyLocal, label: TranslationBase.of(context).save.toUpperCase(), textColor: Colors.white, - color: isButtonDisabled ? Colors.grey[900] : Colors.grey, + color: isButtonDisabled + ? Colors.grey[900] + : Colors.grey, onTap: () async { - if (_bloodSystolicValueController.text.isNotEmpty && _bloodDiastolicValueController.text.isNotEmpty) { + if (_bloodSystolicValueController.text.isNotEmpty && + _bloodDiastolicValueController.text.isNotEmpty) { GifLoaderDialogUtils.showMyDialog(context); widget.model .addORUpdateDiabtecResult( isUpdate: widget.isUpdate, bloodPressureDate: - '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00', - diastolicPressure: _bloodDiastolicValueController.text.toString(), - systolicePressure: _bloodSystolicValueController.text.toString(), + '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00', + diastolicPressure: + _bloodDiastolicValueController.text.toString(), + systolicePressure: + _bloodSystolicValueController.text.toString(), measuredArm: measuredArm, ) .then((value) { @@ -290,7 +315,7 @@ class _AddBloodPressurePageState extends State { } void validateForm() { - print("_bloodSystolicValueController " + _bloodSystolicValueController.text.length.toString()); + print("_bloodSystolicValueController "+_bloodSystolicValueController.text.length.toString()); if (measureTimeSelectedType != 'Left Arm' && _bloodSystolicValueController.text.length > 0 && _bloodDiastolicValueController.text.length > 0) { @@ -320,4 +345,5 @@ class _AddBloodPressurePageState extends State { // }); // } } + } diff --git a/lib/pages/medical/my_trackers/blood_pressure/BloodPressureMonthly.dart b/lib/pages/medical/my_trackers/blood_pressure/BloodPressureMonthly.dart index 04853689..6d4f02d8 100644 --- a/lib/pages/medical/my_trackers/blood_pressure/BloodPressureMonthly.dart +++ b/lib/pages/medical/my_trackers/blood_pressure/BloodPressureMonthly.dart @@ -3,6 +3,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/MonthCurvedChartBloodPressure.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.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/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; @@ -21,7 +22,7 @@ class BloodPressureMonthlyPage extends StatelessWidget { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( - body: model.weighMonthTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),):ListView( + body: ListView( children: [ Container( margin: EdgeInsets.only(top: 12, left: 8, right: 8), @@ -29,8 +30,8 @@ class BloodPressureMonthlyPage extends StatelessWidget { child: MonthCurvedChartBloodPressure( horizontalInterval: 20.0, title: TranslationBase.of(context).bloodPressure, - timeSeries1: model.weighMonthTimeSeriesDataTop, - timeSeries2: model.weighMonthTimeSeriesDataLow, + timeSeries1: model.weighMonthTimeSeriesDataTop.isEmpty?[TimeSeriesSales3(0,0.0)]:model.weighMonthTimeSeriesDataTop, + timeSeries2: model.weighMonthTimeSeriesDataLow.isEmpty?[TimeSeriesSales3(0,0.0)]:model.weighMonthTimeSeriesDataLow, indexes: model.weightWeekTimeSeriesDataLow.length ~/ 5.5, ), ), @@ -47,7 +48,7 @@ class BloodPressureMonthlyPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Table( + model.weighMonthTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),):Table( border: TableBorder.symmetric( inside: BorderSide(width: 2.0, color: Colors.grey[300]), ), diff --git a/lib/pages/medical/my_trackers/blood_pressure/BloodPressureYeaPage.dart b/lib/pages/medical/my_trackers/blood_pressure/BloodPressureYeaPage.dart index b5b01f06..68172354 100644 --- a/lib/pages/medical/my_trackers/blood_pressure/BloodPressureYeaPage.dart +++ b/lib/pages/medical/my_trackers/blood_pressure/BloodPressureYeaPage.dart @@ -3,6 +3,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/CurvedChartBloodPressure.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.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/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; @@ -18,7 +19,7 @@ class BloodPressureYearPage extends StatelessWidget { Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( - body: model.weightYearTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),):ListView( + body:ListView( children: [ Container( margin: EdgeInsets.only(top: 12, left: 8, right: 8), @@ -26,8 +27,8 @@ class BloodPressureYearPage extends StatelessWidget { child: CurvedChartBloodPressure( horizontalInterval: 3.0,// model.weightWeekTimeSeriesDataLow.length==1 ?1 :20.0, title: TranslationBase.of(context).bloodPressure, - timeSeries1: model.weightYearTimeSeriesDataTop, - timeSeries2: model.weightYearTimeSeriesDataLow, + timeSeries1: model.weightYearTimeSeriesDataTop.isEmpty?[TimeSeriesSales2(DateTime.now(),0.0)]:model.weightYearTimeSeriesDataTop, + timeSeries2: model.weightYearTimeSeriesDataLow.isEmpty?[TimeSeriesSales2(DateTime.now(),0.0)]:model.weightYearTimeSeriesDataLow, indexes: model.weightWeekTimeSeriesDataLow.length ~/ 5.5, ), ), @@ -44,7 +45,7 @@ class BloodPressureYearPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Table( + model.weightYearTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),):Table( border: TableBorder.symmetric( inside: BorderSide(width: 2.0, color: Colors.grey[300]), ), diff --git a/lib/pages/medical/my_trackers/blood_pressure/bloodPressureWeeklyPage.dart b/lib/pages/medical/my_trackers/blood_pressure/bloodPressureWeeklyPage.dart index e4ff7332..1929d836 100644 --- a/lib/pages/medical/my_trackers/blood_pressure/bloodPressureWeeklyPage.dart +++ b/lib/pages/medical/my_trackers/blood_pressure/bloodPressureWeeklyPage.dart @@ -3,6 +3,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/widget/CurvedChartBloodPressure.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.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/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; @@ -21,7 +22,7 @@ class BloodPressureWeeklyPage extends StatelessWidget { Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( - body: model.weightWeekTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),): ListView( + body: ListView( children: [ Container( margin: EdgeInsets.only(top: 12, left: 8, right: 8), @@ -29,8 +30,8 @@ class BloodPressureWeeklyPage extends StatelessWidget { child: CurvedChartBloodPressure( horizontalInterval:3.0, title: TranslationBase.of(context).bloodPressure, - timeSeries1: model.weightWeekTimeSeriesDataTop, - timeSeries2: model.weightWeekTimeSeriesDataLow, + timeSeries1: model.weightWeekTimeSeriesDataTop.isEmpty?[TimeSeriesSales2(DateTime.now(),0.0)]:model.weightWeekTimeSeriesDataTop, + timeSeries2: model.weightWeekTimeSeriesDataLow.isEmpty?[TimeSeriesSales2(DateTime.now(),0.0)]:model.weightWeekTimeSeriesDataLow, indexes: model.weightWeekTimeSeriesDataLow.length ~/ 5.5, ), ), @@ -47,7 +48,7 @@ class BloodPressureWeeklyPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Table( + model.weightWeekTimeSeriesDataTop.isEmpty? Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),): Table( border: TableBorder.symmetric( inside: BorderSide(width: 2.0, color: Colors.grey[300]), ), diff --git a/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart b/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart index 6f186104..6d4755dc 100644 --- a/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart +++ b/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart @@ -282,11 +282,11 @@ class _AddBloodSugarPageState extends State { label: TranslationBase.of(context).save.toUpperCase(), textColor: Colors.white, color: isButtonDisabled ? Colors.grey[900] : Colors.grey, - onTap: () { + onTap: () async { if (_bloodSugarValueController.text.isNotEmpty) { if (widget.isUpdate) { GifLoaderDialogUtils.showMyDialog(context); - widget.bloodSugarViewMode + await widget.bloodSugarViewMode .updateDiabtecResult( month: bloodSugarDate, hour: timeSugarDate, @@ -294,8 +294,8 @@ class _AddBloodSugarPageState extends State { measuredTime: measuredTime, lineItemNo: widget.lineItemNo, bloodSugerResult: - _bloodSugarValueController.text.toString()) - .then((value) { + _bloodSugarValueController.text.toString()); + GifLoaderDialogUtils.hideDialog(context); if (widget.bloodSugarViewMode.state == ViewState.ErrorLocal) @@ -303,9 +303,10 @@ class _AddBloodSugarPageState extends State { message: widget.bloodSugarViewMode.error); else Navigator.pop(context); - }); - } else - widget.bloodSugarViewMode + + } else { + GifLoaderDialogUtils.showMyDialog(context); + await widget.bloodSugarViewMode .addDiabtecResult( diabtecUnit: measureUnitSelectedType, measuredTime: measuredTime, @@ -313,15 +314,17 @@ class _AddBloodSugarPageState extends State { _bloodSugarValueController.text.toString(), bloodSugerDateChart: '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00', - ) - .then((value) { + ); + GifLoaderDialogUtils.hideDialog(context); if (widget.bloodSugarViewMode.state == ViewState.Error) AppToast.showErrorToast( message: widget.bloodSugarViewMode.error); else Navigator.pop(context); - }); + + } + } }), ), diff --git a/lib/pages/medical/my_trackers/blood_suger/BloodMonthly.dart b/lib/pages/medical/my_trackers/blood_suger/BloodMonthly.dart index 1294c5dd..a0f37c83 100644 --- a/lib/pages/medical/my_trackers/blood_suger/BloodMonthly.dart +++ b/lib/pages/medical/my_trackers/blood_suger/BloodMonthly.dart @@ -1,6 +1,7 @@ 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/viewModels/medical/blood_sugar_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'; @@ -17,25 +18,32 @@ import 'package:provider/provider.dart'; class BloodMonthlyPage extends StatelessWidget { final List diabtecPatientResult; - final List timeSeriesData ; + final List timeSeriesData; + final BloodSugarViewMode bloodSugarViewMode; - const BloodMonthlyPage({Key key, this.diabtecPatientResult, this.timeSeriesData}) + + const BloodMonthlyPage( + {Key key, this.diabtecPatientResult, this.timeSeriesData, this.bloodSugarViewMode}) : super(key: key); + @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( - body: timeSeriesData.isEmpty?Container(child: Center(child: Texts(TranslationBase.of(context).noDataAvailable),),): ListView( + baseViewModel: bloodSugarViewMode, + body: ListView( children: [ Container( + margin: EdgeInsets.only(top: 12, left: 8, right: 8), width: double.maxFinite, color: Colors.white, child: MonthLineChartCurved( - title: 'Sugar', - timeSeries: timeSeriesData, + title: '${TranslationBase.of(context).bloodSugar}', + timeSeries: timeSeriesData.isEmpty + ? [TimeSeriesSales3(0, 0.0)] + : timeSeriesData, indexes: timeSeriesData.length ~/ 5.5, - ) - ), + )), SizedBox( height: 12, ), @@ -49,12 +57,20 @@ class BloodMonthlyPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Table( - border: TableBorder.symmetric( - inside: BorderSide(width: 2.0, color: Colors.grey[300]), - ), - children: fullData(context,projectViewModel), - ), + timeSeriesData.isEmpty + ? Container( + child: Center( + child: Texts( + TranslationBase.of(context).noDataAvailable), + ), + ) + : Table( + border: TableBorder.symmetric( + inside: + BorderSide(width: 2.0, color: Colors.grey[300]), + ), + children: fullData(context, projectViewModel), + ), ], ), ) @@ -63,7 +79,8 @@ class BloodMonthlyPage extends StatelessWidget { ); } - List fullData(BuildContext context,ProjectViewModel projectViewModel) { + List fullData( + BuildContext context, ProjectViewModel projectViewModel) { List tableRow = []; tableRow.add( TableRow( @@ -73,8 +90,12 @@ class BloodMonthlyPage extends StatelessWidget { decoration: BoxDecoration( color: Theme.of(context).primaryColor, borderRadius: BorderRadius.only( - topLeft: projectViewModel.isArabic? Radius.circular(0.0):Radius.circular(10.0), - topRight: projectViewModel.isArabic? Radius.circular(10.0):Radius.circular(0.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( @@ -120,8 +141,12 @@ class BloodMonthlyPage extends StatelessWidget { decoration: BoxDecoration( 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), + topLeft: projectViewModel.isArabic + ? Radius.circular(10.0) + : Radius.circular(0.0), + topRight: projectViewModel.isArabic + ? Radius.circular(0.0) + : Radius.circular(10.0), ), ), child: Center( @@ -133,7 +158,6 @@ class BloodMonthlyPage extends StatelessWidget { ), height: 40), ), - ], ), ); @@ -149,7 +173,7 @@ class BloodMonthlyPage extends StatelessWidget { color: Colors.white, child: Center( child: Texts( - '${projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(diabtec.dateChart):DateUtil.getMonthDayYearDateFormatted(diabtec.dateChart)} ', + '${projectViewModel.isArabic ? DateUtil.getMonthDayYearDateFormattedAr(diabtec.dateChart) : DateUtil.getMonthDayYearDateFormatted(diabtec.dateChart)} ', textAlign: TextAlign.center, fontSize: 12, ), diff --git a/lib/pages/medical/my_trackers/blood_suger/BloodYeaPage.dart b/lib/pages/medical/my_trackers/blood_suger/BloodYeaPage.dart index 2f654526..a11b3b14 100644 --- a/lib/pages/medical/my_trackers/blood_suger/BloodYeaPage.dart +++ b/lib/pages/medical/my_trackers/blood_suger/BloodYeaPage.dart @@ -1,5 +1,6 @@ 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/viewModels/medical/blood_sugar_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'; @@ -16,27 +17,24 @@ import 'package:provider/provider.dart'; class BloodYearPage extends StatelessWidget { final List diabtecPatientResult; final List timeSeriesData; + final BloodSugarViewMode bloodSugarViewMode; - const BloodYearPage({Key key, this.diabtecPatientResult, this.timeSeriesData}) : super(key: key); + const BloodYearPage({Key key, this.diabtecPatientResult, this.timeSeriesData, this.bloodSugarViewMode}) : super(key: key); @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( - body: timeSeriesData.isEmpty - ? Container( - child: Center( - child: Texts(TranslationBase.of(context).noDataAvailable), - ), - ) - : ListView( + baseViewModel: bloodSugarViewMode, + body: ListView( children: [ Container( + margin: EdgeInsets.only(top: 12, left: 8, right: 8), width: double.maxFinite, color: Colors.white, child: LineChartCurved( - title: 'Sugar', - timeSeries: timeSeriesData, + title: '${TranslationBase.of(context).bloodSugar}', + timeSeries: timeSeriesData.isEmpty?[TimeSeriesSales2(DateTime.now(),0.0)]:timeSeriesData, indexes: timeSeriesData.length ~/ 5.5 ?? 0, )), SizedBox( @@ -52,7 +50,13 @@ class BloodYearPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Table( + timeSeriesData.isEmpty + ? Container( + child: Center( + child: Texts(TranslationBase.of(context).noDataAvailable), + ), + ) + :Table( border: TableBorder.symmetric( inside: BorderSide(width: 2.0, color: Colors.grey[300]), ), diff --git a/lib/pages/medical/my_trackers/blood_suger/blood_sugar_home_page.dart b/lib/pages/medical/my_trackers/blood_suger/blood_sugar_home_page.dart index 7abbcceb..29989e53 100644 --- a/lib/pages/medical/my_trackers/blood_suger/blood_sugar_home_page.dart +++ b/lib/pages/medical/my_trackers/blood_suger/blood_sugar_home_page.dart @@ -75,7 +75,7 @@ class _BloodSugarHomePageState extends State ),], isShowAppBar: true, appBarTitle: TranslationBase.of(context).bloodSugar, - baseViewModel: model, + // baseViewModel: model, body: Scaffold( extendBodyBehindAppBar: true, appBar: TabBarWidget(tabController: _tabController,), @@ -93,11 +93,12 @@ class _BloodSugarHomePageState extends State ), BloodMonthlyPage( timeSeriesData: model.monthTimeSeriesData, - diabtecPatientResult: model.monthDiabtecPatientResult, + diabtecPatientResult: model.monthDiabtecPatientResult, bloodSugarViewMode: model, ), BloodYearPage( timeSeriesData: model.yearTimeSeriesData, diabtecPatientResult: model.yearDiabtecPatientResult, + bloodSugarViewMode: model, ) ], ), diff --git a/lib/pages/medical/my_trackers/blood_suger/blood_sugar_weekly_page.dart b/lib/pages/medical/my_trackers/blood_suger/blood_sugar_weekly_page.dart index 328ac246..6e1ff71b 100644 --- a/lib/pages/medical/my_trackers/blood_suger/blood_sugar_weekly_page.dart +++ b/lib/pages/medical/my_trackers/blood_suger/blood_sugar_weekly_page.dart @@ -31,20 +31,15 @@ class BloodSugarWeeklyPage extends StatelessWidget { Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( - body: timeSeriesData.isEmpty - ? Container( - child: Center( - child: Texts(TranslationBase.of(context).noDataAvailable), - ), - ) - : ListView( + baseViewModel: bloodSugarViewMode, + body: ListView( children: [ Container( margin: EdgeInsets.only(top: 12, left: 8, right: 8), color: Colors.white, child: LineChartCurved( - title: 'Sugar', - timeSeries: timeSeriesData, + title: '${TranslationBase.of(context).bloodSugar}', + timeSeries: timeSeriesData.isEmpty?[TimeSeriesSales2(DateTime.now(),0.0)]:timeSeriesData, indexes: timeSeriesData.length ~/ 5.5, ), ), @@ -61,7 +56,13 @@ class BloodSugarWeeklyPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Table( + timeSeriesData.isEmpty + ? Container( + child: Center( + child: Texts(TranslationBase.of(context).noDataAvailable), + ), + ) + :Table( border: TableBorder.symmetric( inside: BorderSide(width: 2.0, color: Colors.grey[300]), ), diff --git a/lib/pages/medical/my_trackers/widget/LineChartCurved.dart b/lib/pages/medical/my_trackers/widget/LineChartCurved.dart index 1182602f..4456b37c 100644 --- a/lib/pages/medical/my_trackers/widget/LineChartCurved.dart +++ b/lib/pages/medical/my_trackers/widget/LineChartCurved.dart @@ -20,7 +20,7 @@ class LineChartCurved extends StatelessWidget { getXaxix(); getYaxix(); return AspectRatio( - aspectRatio: 1.1, + aspectRatio: 1.0, child: Container( decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(18)), @@ -128,12 +128,19 @@ class LineChartCurved extends StatelessWidget { fontSize: 10, ), getTitles: (value) { - if (value.toInt() == 0) - return '${value.toInt()}'; - else if (value.toInt() % horizontalInterval == 0) - return '${value.toInt()}'; - else - return ''; + // if (value.toInt() == 0) + // return '${value.toInt()}'; + // else if (value.toInt() % horizontalInterval == 0) + // return '${value.toInt()}'; + // else + // return ''; + + // if (value.toInt() == 0) + // return '${value.toInt()}'; + // else if (value.toInt() % horizontalInterval == 0) + // return '${value.toInt()}'; + // else + return '${value.toInt()}';//'${(value.toInt() +(horizontalInterval - value.toInt() % horizontalInterval) )}'; }, margin: 12, ), diff --git a/lib/pages/medical/my_trackers/widget/MonthCurvedChartBloodPressure.dart b/lib/pages/medical/my_trackers/widget/MonthCurvedChartBloodPressure.dart index 135d0a95..dd432d3b 100644 --- a/lib/pages/medical/my_trackers/widget/MonthCurvedChartBloodPressure.dart +++ b/lib/pages/medical/my_trackers/widget/MonthCurvedChartBloodPressure.dart @@ -21,7 +21,7 @@ class MonthCurvedChartBloodPressure extends StatelessWidget { Widget build(BuildContext context) { getXaxix(); return AspectRatio( - aspectRatio: 1.1, + aspectRatio: 1.0, child: Container( decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(18)), @@ -143,12 +143,12 @@ class MonthCurvedChartBloodPressure extends StatelessWidget { fontSize: 10, ), getTitles: (value) { - if (value.toInt() == 0) + // if (value.toInt() == 0) + // return '${value.toInt()}'; + // else if (value.toInt() % horizontalInterval == 0) + // return '${value.toInt()}'; + // else return '${value.toInt()}'; - else if (value.toInt() % horizontalInterval == 0) - return '${value.toInt()}'; - else - return ''; }, margin: 12, ), diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 4677302e..c3875466 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -1644,6 +1644,7 @@ class TranslationBase { localizedValues["upcoming-pay-options"][locale.languageCode]; String get pleaseAcceptTerms => localizedValues["please-accept-terms"][locale.languageCode]; + } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/uitl/utils.dart b/lib/uitl/utils.dart index 62aefaaf..139aa093 100644 --- a/lib/uitl/utils.dart +++ b/lib/uitl/utils.dart @@ -193,24 +193,19 @@ class Utils { static List myMedicalList({ProjectViewModel projectViewModel, BuildContext context, bool isLogin, count}) { List medical = List(); - if (projectViewModel.havePrivilege(5)) { - medical.add(InkWell( - onTap: () { - Navigator.push( - context, - FadePage( - page: MyAppointments(), - ), - ); - }, - child: isLogin - ? Stack(children: [ - MedicalProfileItem( + + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(5) + ? Navigator.push(context, FadePage(page: MyAppointments())) + : null, + child: isLogin + ? Stack(children: [ + MedicalProfileItem( title: TranslationBase.of(context).myAppointments, imagePath: 'my_appointment_icon.png', subTitle: TranslationBase.of(context).myAppointmentsList, hasBadge: true, - ), + isEnable: projectViewModel.havePrivilege(5)), Positioned( right: 0.0, child: Badge( @@ -230,10 +225,9 @@ class Utils { title: TranslationBase.of(context).myAppointments, imagePath: 'my_appointment_icon.png', subTitle: TranslationBase.of(context).myAppointmentsList, - hasBadge: true, - ), - )); - } + hasBadge: true,isEnable: projectViewModel.havePrivilege(5), + ), + )); if (projectViewModel.havePrivilege(10)) { medical.add(InkWell( onTap: () => Navigator.push(context, FadePage(page: LabsHomePage())), @@ -245,104 +239,99 @@ class Utils { )); } - if (projectViewModel.havePrivilege(7)) { - medical.add(InkWell( - onTap: () => Navigator.push(context, FadePage(page: RadiologyHomePage())), - child: MedicalProfileItem( - title: TranslationBase.of(context).radiology, - imagePath: 'radiology_icon.png', - subTitle: TranslationBase.of(context).radiologySubtitle, - ), - )); - } - if (projectViewModel.havePrivilege(12)) { medical.add(InkWell( - onTap: () { - Navigator.push( - context, - FadePage( - page: HomePrescriptionsPage(), - ), - ); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).medicines, - imagePath: 'prescription_icon.png', - subTitle: TranslationBase.of(context).medicinesSubtitle, - ), - )); - } + onTap: () =>projectViewModel.havePrivilege(7) + ? Navigator.push(context, FadePage(page: RadiologyHomePage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).radiology, + imagePath: 'radiology_icon.png', + subTitle: TranslationBase.of(context).radiologySubtitle, + isEnable: projectViewModel.havePrivilege(7), + ), + )); - if (projectViewModel.havePrivilege(25)) { - medical.add(InkWell( - onTap: () => Navigator.push( - context, - FadePage( - page: VitalSignDetailsScreen(), - ), - ), - child: MedicalProfileItem( - title: TranslationBase.of(context).vitalSigns, - imagePath: 'vital_signs.png', - subTitle: TranslationBase.of(context).vitalSignsSubtitle, - ), - )); - } + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(12) + ? Navigator.push(context, FadePage(page: HomePrescriptionsPage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).medicines, + imagePath: 'prescription_icon.png', + subTitle: TranslationBase.of(context).medicinesSubtitle, + isEnable: projectViewModel.havePrivilege(12), + ), + )); + + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(25) + ? Navigator.push( + context, + FadePage(page: VitalSignDetailsScreen()), + ) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).vitalSigns, + imagePath: 'vital_signs.png', + subTitle: TranslationBase.of(context).vitalSignsSubtitle, + isEnable: projectViewModel.havePrivilege(25), + ), + )); - if (projectViewModel.havePrivilege(48)) { - medical.add(InkWell( - onTap: () => Navigator.push(context, FadePage(page: ActiveMedicationsPage())), - child: MedicalProfileItem( - title: TranslationBase.of(context).myMedical, - imagePath: 'active_medications.png', - subTitle: TranslationBase.of(context).myMedicalSubtitle, - ), - )); - } - if (projectViewModel.havePrivilege(6)) { medical.add(InkWell( - onTap: () { - Navigator.push( - context, - FadePage( - page: DoctorHomePage(), - ), - ); - }, - child: MedicalProfileItem( + onTap: () =>projectViewModel.havePrivilege(48) + ? Navigator.push(context, FadePage(page: ActiveMedicationsPage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).myMedical, + imagePath: 'active_medications.png', + subTitle: TranslationBase.of(context).myMedicalSubtitle, + isEnable: false, + ), + )); + + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(6) + ? Navigator.push( + context, + FadePage( + page: DoctorHomePage(), + ), + ) + : null, + child: MedicalProfileItem( title: TranslationBase.of(context).myDoctor, imagePath: 'doctor_icon.png', subTitle: TranslationBase.of(context).myDoctorSubtitle, - ), - )); - } + isEnable: projectViewModel.havePrivilege(6)), + )); + + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(14) + ? Navigator.push(context, FadePage(page: EyeMeasurementsPage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).eye, + imagePath: 'eye_measurement_icon.png', + subTitle: TranslationBase.of(context).eyeSubtitle, + isEnable: projectViewModel.havePrivilege(14), + ), + )); + + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(22) + ? Navigator.push(context, FadePage(page: InsuranceCard())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).insurance, + imagePath: 'insurance_card_icon.png', + subTitle: TranslationBase.of(context).insuranceSubtitle, + isEnable: projectViewModel.havePrivilege(22), + ), + )); - if (projectViewModel.havePrivilege(14)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: EyeMeasurementsPage())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).eye, - imagePath: 'eye_measurement_icon.png', - subTitle: TranslationBase.of(context).eyeSubtitle, - ), - )); - } - if (projectViewModel.havePrivilege(22)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: InsuranceCard())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).insurance, - imagePath: 'insurance_card_icon.png', - subTitle: TranslationBase.of(context).insuranceSubtitle, - ), - )); - } medical.add(InkWell( onTap: () { Navigator.push(context, FadePage(page: InsuranceUpdate())); @@ -354,137 +343,133 @@ class Utils { ), )); - if (projectViewModel.havePrivilege(18)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: InsuranceApproval())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).insuranceApproval, - imagePath: 'insurance_approvals_icon.png', - subTitle: TranslationBase.of(context).insuranceApprovalSubtitle, - ), - )); - } + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(18) + ? Navigator.push(context, FadePage(page: InsuranceApproval())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).insuranceApproval, + imagePath: 'insurance_approvals_icon.png', + subTitle: TranslationBase.of(context).insuranceApprovalSubtitle, + isEnable: projectViewModel.havePrivilege(18), + ), + )); - if (projectViewModel.havePrivilege(23)) { - medical.add(InkWell( - onTap: () => Navigator.push(context, FadePage(page: AllergiesPage())), - child: MedicalProfileItem( - title: TranslationBase.of(context).allergies, - imagePath: 'my_allergies_icon.png', - subTitle: TranslationBase.of(context).allergiesSubtitle, - ), - )); - } + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(23) + ? Navigator.push(context, FadePage(page: AllergiesPage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).allergies, + imagePath: 'my_allergies_icon.png', + subTitle: TranslationBase.of(context).allergiesSubtitle, + isEnable: projectViewModel.havePrivilege(23), + ), + )); - if (projectViewModel.havePrivilege(26)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: MyVaccines())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).myVaccines, - imagePath: 'my_vaccines_icon.png', - subTitle: TranslationBase.of(context).myVaccinesSubtitle, - ), - )); - } - if (projectViewModel.havePrivilege(20)) - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: HomeReportPage())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).medical, - imagePath: 'medical_reports_icon.png', - subTitle: TranslationBase.of(context).medicalSubtitle, - ), - )); + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(26) + ? Navigator.push(context, FadePage(page: MyVaccines())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).myVaccines, + imagePath: 'my_vaccines_icon.png', + subTitle: TranslationBase.of(context).myVaccinesSubtitle, + isEnable: projectViewModel.havePrivilege(26), + ), + )); - if (projectViewModel.havePrivilege(19)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: MonthlyReportsPage())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).monthly, - imagePath: 'monthly_reports_icon.png', - subTitle: TranslationBase.of(context).monthlySubtitle, - ), - )); - } + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(20) + ? Navigator.push(context, FadePage(page: HomeReportPage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).medical, + imagePath: 'medical_reports_icon.png', + subTitle: TranslationBase.of(context).medicalSubtitle, + isEnable: projectViewModel.havePrivilege(20), + ), + )); - if (projectViewModel.havePrivilege(16)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: PatientSickLeavePage())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).sick, - imagePath: 'sick_leaves_icons.png', - subTitle: TranslationBase.of(context).sickSubtitle, - ), - )); - } + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(19) + ? Navigator.push(context, FadePage(page: MonthlyReportsPage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).monthly, + imagePath: 'monthly_reports_icon.png', + subTitle: TranslationBase.of(context).monthlySubtitle, + isEnable: projectViewModel.havePrivilege(19), + ), + )); - if (projectViewModel.havePrivilege(47)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: MyBalancePage())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).myBalance, - imagePath: 'check-in.png', - subTitle: TranslationBase.of(context).myBalanceSubtitle, - ), - )); - } + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(16) + ? Navigator.push(context, FadePage(page: PatientSickLeavePage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).sick, + imagePath: 'sick_leaves_icons.png', + subTitle: TranslationBase.of(context).sickSubtitle, + isEnable: projectViewModel.havePrivilege(16), + ), + )); - if (projectViewModel.havePrivilege(61)) { - medical.add(MedicalProfileItem( - title: TranslationBase.of(context).patientCall, - imagePath: 'medical_history_icon.png', - subTitle: TranslationBase.of(context).patientCallSubtitle, - )); - } + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(47) + ? Navigator.push(context, FadePage(page: MyBalancePage())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).myBalance, + imagePath: 'check-in.png', + subTitle: TranslationBase.of(context).myBalanceSubtitle, + isEnable: projectViewModel.havePrivilege(47), + ), + )); - if (projectViewModel.havePrivilege(24)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: MyTrackers())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).myTrackers, - imagePath: 'my_tracker_icon.png', - subTitle: TranslationBase.of(context).myTrackersSubtitle, - ), - )); - } - if (projectViewModel.havePrivilege(30)) - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: SmartWatchInstructions())); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).smartWatches, - imagePath: 'smartwatch_icon.png', - subTitle: TranslationBase.of(context).smartWatchesSubtitle, - ), - )); + // TODO mosa check it + medical.add(MedicalProfileItem( + title: TranslationBase.of(context).patientCall, + imagePath: 'medical_history_icon.png', + subTitle: TranslationBase.of(context).patientCallSubtitle, + isEnable: projectViewModel.havePrivilege(61), + )); - if (projectViewModel.havePrivilege(28)) { - medical.add(InkWell( - onTap: () { - Navigator.push(context, FadePage(page: AskDoctorHomPage())); - }, - child: MedicalProfileItem( + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(24) + ? Navigator.push(context, FadePage(page: MyTrackers())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).myTrackers, + imagePath: 'my_tracker_icon.png', + subTitle: TranslationBase.of(context).myTrackersSubtitle, + isEnable: projectViewModel.havePrivilege(24), + ), + )); + + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(30) + ? Navigator.push(context, FadePage(page: SmartWatchInstructions())) + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).smartWatches, + imagePath: 'smartwatch_icon.png', + subTitle: TranslationBase.of(context).smartWatchesSubtitle, + isEnable: projectViewModel.havePrivilege(30), + ), + )); + + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(28) + ? Navigator.push(context, FadePage(page: AskDoctorHomPage())) + : null, + child: MedicalProfileItem( title: TranslationBase.of(context).askYour, imagePath: 'ask_doctor_icon.png', subTitle: TranslationBase.of(context).askYourSubtitle, - ), - )); - } + isEnable: projectViewModel.havePrivilege(28)), + )); + if (projectViewModel.havePrivilege(32) || true) { medical.add(InkWell( onTap: () { @@ -515,23 +500,23 @@ class Utils { )); } - if (projectViewModel.havePrivilege(40)) { - medical.add(InkWell( - onTap: () { - launch('whatsapp://send?phone=18885521858&text='); - }, - child: MedicalProfileItem( - title: TranslationBase.of(context).chatbot, - imagePath: 'insurance_approvals_icon.png', - subTitle: TranslationBase.of(context).chatbotSubtitle, - ), - )); - } + medical.add(InkWell( + onTap: () => projectViewModel.havePrivilege(40) + ? launch('whatsapp://send?phone=18885521858&text=') + : null, + child: MedicalProfileItem( + title: TranslationBase.of(context).chatbot, + imagePath: 'insurance_approvals_icon.png', + subTitle: TranslationBase.of(context).chatbotSubtitle, + isEnable: projectViewModel.havePrivilege(40), + ), + )); return medical; } - static Widget loadNetworkImage({@required String url, BoxFit fitting = BoxFit.cover}) { + static Widget loadNetworkImage( + {@required String url, BoxFit fitting = BoxFit.cover}) { return CachedNetworkImage( placeholderFadeInDuration: Duration(milliseconds: 250), fit: fitting, @@ -584,7 +569,8 @@ extension IndexedIterable on Iterable { openAppStore({String androidPackageName, String iOSAppID}) async { if (Platform.isAndroid) { - assert(!(androidPackageName == null), "Should have valid value in androidPackageName parameter"); + assert(!(androidPackageName == null), + "Should have valid value in androidPackageName parameter"); if ((await FlutterHmsGmsAvailability.isGmsAvailable)) launch("market://details?id=com.ejada.hmg"); if ((await FlutterHmsGmsAvailability.isHmsAvailable)) launch("appmarket://details?id=com.ejada.hmg"); } else if (Platform.isIOS) { diff --git a/lib/widgets/bottom_navigation/bottom_nav_bar.dart b/lib/widgets/bottom_navigation/bottom_nav_bar.dart index efca856b..76819533 100644 --- a/lib/widgets/bottom_navigation/bottom_nav_bar.dart +++ b/lib/widgets/bottom_navigation/bottom_nav_bar.dart @@ -97,14 +97,22 @@ class _BottomNavBarState extends State { ), if (widget.index != 0 && projectViewModel.havePrivilege(34)) BottomNavigationItem( - icon: EvaIcons.calendar, - activeIcon: EvaIcons.calendar, + icon: Icons.home_outlined, + activeIcon: Icons.home_outlined, changeIndex: _changeIndex, - index: _index, - currentIndex: 2, - name: TranslationBase.of(context).bookAppo, + index: widget.index, + currentIndex: 0, + name: TranslationBase.of(context).home, ), - if (widget.index == 0 && projectViewModel.havePrivilege(34)) + // BottomNavigationItem( + // icon: EvaIcons.calendar, + // activeIcon: EvaIcons.calendar, + // changeIndex: _changeIndex, + // index: _index, + // currentIndex: 2, + // name: TranslationBase.of(context).bookAppo, + // ), + if (/*widget.index == 0 && */projectViewModel.havePrivilege(34)) BottomNavigationItem( icon: EvaIcons.calendar, activeIcon: EvaIcons.calendar, diff --git a/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart b/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart index 09306441..7b49559c 100644 --- a/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart +++ b/lib/widgets/data_display/medical/LabResult/laboratory_result_widget.dart @@ -103,7 +103,7 @@ class _LaboratoryResultWidgetState extends State { color: Colors.white, ), Texts( - TranslationBase.of(context).sendCopy, + TranslationBase.of(context).sendEmail, color: Colors.white, ) ], diff --git a/lib/widgets/data_display/medical/medical_profile_item.dart b/lib/widgets/data_display/medical/medical_profile_item.dart index c7e47dd9..bbc92db1 100644 --- a/lib/widgets/data_display/medical/medical_profile_item.dart +++ b/lib/widgets/data_display/medical/medical_profile_item.dart @@ -8,16 +8,19 @@ import '../../../Constants.dart'; import '../text.dart'; class MedicalProfileItem extends StatelessWidget { - MedicalProfileItem( - {@required this.imagePath, - @required this.title, - @required this.subTitle, - hasBadge}); - final String imagePath; final String title; final String subTitle; final bool hasBadge = false; + bool isEnable; + + MedicalProfileItem({ + @required this.imagePath, + @required this.title, + @required this.subTitle, + hasBadge, + this.isEnable = true, + }); @override Widget build(BuildContext context) { @@ -26,27 +29,48 @@ class MedicalProfileItem extends StatelessWidget { height: MediaQuery.of(context).size.height * 0.14, margin: EdgeInsets.all(5), decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: Colors.white - ), - padding: EdgeInsets.all(10), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Texts(title, - fontSize: 1.5 * SizeConfig.textMultiplier, - color: secondaryColor, - fontWeight: FontWeight.bold), - Texts(subTitle,fontSize: 1.4 * SizeConfig.textMultiplier,), - Align( - alignment:projectViewModel.isArabic ? Alignment.bottomLeft : Alignment.bottomRight, - child: Image.asset( - "assets/images/medical/$imagePath", - height: SizeConfig.heightMultiplier * 5, - width: SizeConfig.heightMultiplier * 5, + borderRadius: BorderRadius.circular(10), color: Colors.white), + clipBehavior: Clip.antiAlias, + child: Stack( + children: [ + Padding( + padding: EdgeInsets.all(10), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts(title, + fontSize: 1.5 * SizeConfig.textMultiplier, + color: secondaryColor, + fontWeight: FontWeight.bold), + Texts( + subTitle, + fontSize: 1.4 * SizeConfig.textMultiplier, + ), + Align( + alignment: projectViewModel.isArabic + ? Alignment.bottomLeft + : Alignment.bottomRight, + child: Image.asset( + "assets/images/medical/$imagePath", + height: SizeConfig.heightMultiplier * 5, + width: SizeConfig.heightMultiplier * 5, + ), + ) + ], ), - ) + ), + isEnable + ? Container() + : Container( + width: double.infinity, + height: double.infinity, + color: Colors.grey.withOpacity(0.7), + child: Icon( + Icons.lock_outline, + size: 40, + ), + ) ], ), ); diff --git a/pubspec.yaml b/pubspec.yaml index c109bd0a..f06257a9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -217,6 +217,7 @@ flutter: - assets/images/svg/ - assets/tracker/ - assets/images/AlHabibMedicalService/ + - assets/images/AlHabibMedicalService/health_calculator/ - assets/images/pharmacy_module/ - assets/images/gif/ - assets/images/pharmacy_module/payment/