From c1ce3a0489cb67194f011297362e176b5c050051 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 27 Oct 2021 15:44:49 +0300 Subject: [PATCH 01/13] blood sugar dialog improvement. --- lib/pages/Blood/blood_donation.dart | 23 +- .../blood_suger/AddBloodSugarPage.dart | 417 +++++++++--------- 2 files changed, 219 insertions(+), 221 deletions(-) diff --git a/lib/pages/Blood/blood_donation.dart b/lib/pages/Blood/blood_donation.dart index be58b644..8fb12f33 100644 --- a/lib/pages/Blood/blood_donation.dart +++ b/lib/pages/Blood/blood_donation.dart @@ -227,17 +227,18 @@ class _BloodDonationPageState extends State { child: InkWell( onTap: () { showDialog( - context: context, - builder: (_) => AssetGiffyDialog( - title: Text( - "", - style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600), - ), - image: Image.asset('assets/images/BloodChrt_EN.png'), - buttonCancelText: Text(TranslationBase.of(context).cancel), - buttonCancelColor: Colors.grey, - onlyCancelButton: true, - )); + context: context, + builder: (_) => AssetGiffyDialog( + title: Text( + "", + style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600), + ), + image: Image.asset('assets/images/BloodChrt_EN.png'), + buttonCancelText: Text(TranslationBase.of(context).cancel), + buttonCancelColor: Colors.grey, + onlyCancelButton: true, + ), + ); }, child: Container(width: 250, height: 200, child: Image.asset('assets/images/BloodChrt_EN.png'), color: Colors.white), ), diff --git a/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart b/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart index 82375322..8e47e4e8 100644 --- a/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart +++ b/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart @@ -8,8 +8,8 @@ import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; -import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart'; -import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/ConfirmWithMessageDialog.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/radio_selection_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -41,6 +41,8 @@ class _AddBloodSugarPageState extends State { String measureUnitSelectedType = 'mg/dlt'; int measuredTime = 1; bool isButtonDisabled = true; + + int _selectedMeasureUnitIndex = 0; final List measureUnitList = ['mg/dlt', 'mol/L']; final List measureTimeEnList = [ 'Before Breakfast', @@ -66,6 +68,7 @@ class _AddBloodSugarPageState extends State { "صائم", "آخر", ]; + int _selectedMeasureTimeIndex; String measureTimeSelectedType; @override @@ -88,212 +91,198 @@ class _AddBloodSugarPageState extends State { Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( - isShowAppBar: true, - showNewAppBar: true, - showNewAppBarTitle: true, - appBarTitle: widget.isUpdate ? TranslationBase.of(context).update : TranslationBase.of(context).add, - body: SingleChildScrollView( - physics: BouncingScrollPhysics(), - child: Container( - margin: EdgeInsets.all(15), - child: Column( - children: [ - SizedBox( - height: 15, - ), - NewTextFields( - hintText: TranslationBase.of(context).sugarAdd, - controller: _bloodSugarValueController, - keyboardType: TextInputType.number, - onChanged: (value) => validateForm(), - fontWeight: FontWeight.normal, - fontSize: 14, - ), - SizedBox( - height: 8, - ), - InkWell( - onTap: () { - confirmSelectMeasureUnitDialog(); - }, - 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(measureUnitSelectedType), - Icon( - Icons.arrow_drop_down, - color: Colors.grey, - ) - ], + isShowAppBar: true, + showNewAppBar: true, + showNewAppBarTitle: true, + appBarTitle: widget.isUpdate ? TranslationBase.of(context).update : TranslationBase.of(context).add, + body: Column( + children: [ + Expanded( + child: SingleChildScrollView( + physics: BouncingScrollPhysics(), + padding: EdgeInsets.all(21), + child: Column( + children: [ + NewTextFields( + hintText: TranslationBase.of(context).sugarAdd, + controller: _bloodSugarValueController, + keyboardType: TextInputType.number, + onChanged: (value) => validateForm(), + fontWeight: FontWeight.normal, + fontSize: 14, + ), + SizedBox(height: 12), + InkWell( + onTap: () { + confirmSelectMeasureUnitDialog(); + }, + 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(measureUnitSelectedType), + Icon( + Icons.arrow_drop_down, + color: Colors.grey, + ) + ], + ), ), ), - ), - SizedBox( - height: 8, - ), - InkWell( - onTap: () { - DatePicker.showDatePicker(context, showTitleActions: true, minTime: DateTime(DateTime.now().year - 1, 1, 1), maxTime: DateTime.now(), onConfirm: (date) { - setState(() { - bloodSugarDate = date; - }); - }, 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), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Texts(TranslationBase.of(context).date), - Texts(getDate()), - ], + SizedBox(height: 12), + InkWell( + onTap: () { + DatePicker.showDatePicker(context, showTitleActions: true, minTime: DateTime(DateTime.now().year - 1, 1, 1), maxTime: DateTime.now(), onConfirm: (date) { + setState(() { + bloodSugarDate = date; + }); + }, 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), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts(TranslationBase.of(context).date), + Texts(getDate()), + ], + ), ), ), - ), - SizedBox( - height: 8, - ), - InkWell( - onTap: () { - DatePicker.showTimePicker(context, showTitleActions: true, onConfirm: (date) { - setState(() { - timeSugarDate = date; - }); - }, 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), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [Texts(TranslationBase.of(context).time), Texts(getTime())], + SizedBox(height: 12), + InkWell( + onTap: () { + DatePicker.showTimePicker(context, showTitleActions: true, onConfirm: (date) { + setState(() { + timeSugarDate = date; + }); + }, 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), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [Texts(TranslationBase.of(context).time), Texts(getTime())], + ), ), ), - ), - SizedBox( - height: 8, - ), - InkWell( - onTap: () { - 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), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Texts(measureTimeSelectedType ?? TranslationBase.of(context).other), - Icon( - Icons.arrow_drop_down, - color: Colors.grey, - ) - ], + SizedBox(height: 12), + InkWell( + onTap: () { + 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), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts(measureTimeSelectedType ?? TranslationBase.of(context).other), + Icon( + Icons.arrow_drop_down, + color: Colors.grey, + ) + ], + ), ), ), - ), - widget.isUpdate - ? Container( - padding: EdgeInsets.all(10), - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - InkWell( - child: Texts( - TranslationBase.of(context).delete, - decoration: TextDecoration.underline, - fontWeight: FontWeight.bold, - color: Colors.red[900], - ), - onTap: () { - ConfirmDialog dialog = new ConfirmDialog( + widget.isUpdate + ? Container( + padding: EdgeInsets.all(10), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + InkWell( + child: Texts( + TranslationBase.of(context).delete, + decoration: TextDecoration.underline, + fontWeight: FontWeight.bold, + color: Colors.red[900], + ), + onTap: () { + showDialog( context: context, - confirmMessage: TranslationBase.of(context).removeMeasure, - 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) + child: ConfirmWithMessageDialog( + message: TranslationBase.of(context).removeMeasure, + onTap: () async { + 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); - else - Navigator.pop(context); - }).catchError((e) { - GifLoaderDialogUtils.hideDialog(context); - AppToast.showErrorToast(message: widget.bloodSugarViewMode.error); - }); - }, - cancelFunction: () => {}); - dialog.showAlertDialog(context); - }, - ) - ], - )) - : Container() - ], + }); + }, + ), + ); + }, + ) + ], + ), + ) + : Container() + ], + ), ), ), - ), - bottomSheet: Container( - color: Theme.of(context).scaffoldBackgroundColor, - child: Padding( - padding: const EdgeInsets.all(20.0), - child: DefaultButton( - TranslationBase.of(context).save.toUpperCase(), - isButtonDisabled - ? null - : () async { - if (_bloodSugarValueController.text.isNotEmpty) { - GifLoaderDialogUtils.showMyDialog(context); - if (widget.isUpdate) { - await widget.bloodSugarViewMode.updateDiabtecResult( - month: bloodSugarDate, - hour: timeSugarDate, - diabtecUnit: measureUnitSelectedType, - measuredTime: measuredTime, - lineItemNo: widget.lineItemNo, - bloodSugerResult: _bloodSugarValueController.text.toString()); - - GifLoaderDialogUtils.hideDialog(context); - if (widget.bloodSugarViewMode.state == ViewState.ErrorLocal) - AppToast.showErrorToast(message: widget.bloodSugarViewMode.error); - else - Navigator.pop(context); - } else { - await widget.bloodSugarViewMode.addDiabtecResult( + DefaultButton( + TranslationBase.of(context).save, + isButtonDisabled + ? null + : () async { + if (_bloodSugarValueController.text.isNotEmpty) { + GifLoaderDialogUtils.showMyDialog(context); + if (widget.isUpdate) { + await widget.bloodSugarViewMode.updateDiabtecResult( + month: bloodSugarDate, + hour: timeSugarDate, diabtecUnit: measureUnitSelectedType, measuredTime: measuredTime, - bloodSugerResult: _bloodSugarValueController.text.toString(), - bloodSugerDateChart: '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00', - ); + lineItemNo: widget.lineItemNo, + bloodSugerResult: _bloodSugarValueController.text.toString()); - GifLoaderDialogUtils.hideDialog(context); - if (widget.bloodSugarViewMode.state == ViewState.Error) - AppToast.showErrorToast(message: widget.bloodSugarViewMode.error); - else - Navigator.pop(context); - } + GifLoaderDialogUtils.hideDialog(context); + if (widget.bloodSugarViewMode.state == ViewState.ErrorLocal) + AppToast.showErrorToast(message: widget.bloodSugarViewMode.error); + else + Navigator.pop(context); + } else { + await widget.bloodSugarViewMode.addDiabtecResult( + diabtecUnit: measureUnitSelectedType, + measuredTime: measuredTime, + bloodSugerResult: _bloodSugarValueController.text.toString(), + bloodSugerDateChart: '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00', + ); + + GifLoaderDialogUtils.hideDialog(context); + if (widget.bloodSugarViewMode.state == ViewState.Error) + AppToast.showErrorToast(message: widget.bloodSugarViewMode.error); + else + Navigator.pop(context); } - }, - disabledColor: Colors.grey, - ), - ), - )); + } + }, + disabledColor: Colors.grey, + ).insideContainer, + ], + ), + ); } String getDate() { @@ -305,33 +294,41 @@ class _AddBloodSugarPageState extends State { } void confirmSelectMeasureUnitDialog() { + List list = [ + RadioSelectionDialogModel("mg/dlt", 0), + RadioSelectionDialogModel("mol/L", 1), + ]; + showDialog( context: context, - child: RadioStringDialog( - radioList: measureUnitList, - title: TranslationBase.of(context).measureUnit, - selectedValue: measureUnitSelectedType, - onValueSelected: (value) { - setState(() { - measureUnitSelectedType = value; - }); + child: RadioSelectionDialog( + listData: list, + selectedIndex: _selectedMeasureUnitIndex, + onValueSelected: (index) { + _selectedMeasureUnitIndex = index; + measureUnitSelectedType = list[index].title; + setState(() {}); }, ), ); } - void confirmSelectMeasureTimeDialog(List list) { + void confirmSelectMeasureTimeDialog(List dataList) { + List list = [ + for (int i = 0; i < dataList.length; i++) RadioSelectionDialogModel(dataList[i], i), + ]; + showDialog( context: context, - child: RadioStringDialog( - radioList: list, - title: TranslationBase.of(context).measureTime, - selectedValue: measureTimeSelectedType, - onValueSelected: (value) { - setState(() { - measureTimeSelectedType = value; - measuredTime = list.indexOf(value); - }); + child: RadioSelectionDialog( + listData: list, + selectedIndex: _selectedMeasureTimeIndex, + isScrollable: true, + onValueSelected: (index) { + _selectedMeasureTimeIndex = index; + measureTimeSelectedType = list[index].title; + measuredTime = index; + setState(() {}); }, ), ); From b08dfb117cdb45857fd87527d52b01f22da101d4 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 27 Oct 2021 16:36:14 +0300 Subject: [PATCH 02/13] Updates & fixes --- assets/images/pharmacy/offers_banner.png | Bin 0 -> 60027 bytes assets/images/pharmacy/offers_banner_ar.png | Bin 0 -> 57673 bytes .../images/pharmacy_module/offers_banner.png | Bin 0 -> 60027 bytes .../pharmacy_module/offers_banner_ar.png | Bin 0 -> 57673 bytes lib/config/config.dart | 9 +- lib/config/localized_values.dart | 2 +- .../service/PrescriptionDeliveryService.dart | 33 +- .../PrescriptionDeliveryViewModel.dart | 36 +- .../medical/prescriptions_view_model.dart | 1 - .../pharmacy_module_view_model.dart | 28 +- .../PrescriptionOrderOverveiw.dart | 2 +- .../heartrate/heartrateTracker.dart | 12 +- .../smart_watch_instructions.dart | 1007 ++++++++--------- .../screens/pharmacy_module_page.dart | 2 - .../pharmacies/widgets/home/BannerPager.dart | 64 +- .../widgets/home/GridViewButtons.dart | 76 +- 16 files changed, 596 insertions(+), 676 deletions(-) create mode 100644 assets/images/pharmacy/offers_banner.png create mode 100644 assets/images/pharmacy/offers_banner_ar.png create mode 100644 assets/images/pharmacy_module/offers_banner.png create mode 100644 assets/images/pharmacy_module/offers_banner_ar.png diff --git a/assets/images/pharmacy/offers_banner.png b/assets/images/pharmacy/offers_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..6eab63fb59432fe9b38fb8af682ec42378512fe1 GIT binary patch literal 60027 zcmV*FKx)5o?cMF;=h%^EXJ_Bc-hK1td*6#9 zwuipDZ9e{X%<+KZ0mlQ52OJML9&kM1c);<1;{p46;H4|x9v?-u6!qkf57gLqn7)my zwzihatIDXRHf$f!HwQ())roOQ6de^E0Z(fF5i6?7sj8;RdH58(SA-}~WewNzXC%!RK;hdqFo zCa|0VO0@$}!gW1sK35b)QBr(zL_WLdLpxt=qMkC=E+#sL5@HjLT@)s*5jd%?sScB; zvG-%d#l%ruOuW4ZX@k*~RhBxzJR8h|KZg**L6d|q51K?AfX9NV^9l#~(De-pU9tqO&gaeku*NLw!lj4#oDk{p?Zo>L{eD?zbI2OJhh>wk@*yyPk>052_7C%HBBURqyA9M8#Kv7Gefn6d|;(tr)FW7c>88%As#Bgq`fLSSaw zQP|SA;IDODDNi#7p7R#?ekzpG&8( zlXdGn5>-N+B2Lz=AEln00ED)G9p1Zt*IzJtN3v=nC#yOM+YW$NU4Kq;YcO8T;N3G4 z`N<;Qb_zR*cuA~HBqka<07`6am~9n_v@B6yq53a2kdB3q2b>M7=Uh4wc%8NFB)5jo z%dhn$k*w3LH^UAH)ANwn?<4Wc2MRP$qH)Z64>+G$>OOUN@7AxkVD}iw$*O9;cL2P= zs&tZD1)LNHO(LQ6vYBae3Okwcn)fx42)LXa3TxJmQZJF7z^CO|hxhKkbr+1Dowcs) zbqBx;u0|)hRnSo(-po0YR-Qm7l4{Muj#(m~> zg_GQBffH@oMI-?(ktuL^rXpTaZxcz}&a%off&{5!)_EY3lAuMr20;nrq%n{YY3{VK zp$D8~Rr8bL0C@Ah^SaVWZne;vHtNcW40uk4Q`pJ;;*6vOX@`?+ew`>r-=kv*6a&W^ zJm7rihW2WRq=1G$X37EZ7JJp97+CC38*~TN2k_w$DR7L)IkGmt3L;5C#L1U1zfP2{ zOmck&MO)ix2>0gXScLH8@z9;qZQtk50r0;2(5nYWeZdb-4RV)Gq`-3moan0g1sN$x zhz@`^zeeO&I-ftD9&u_6Shu!<(UX&`YK_+&0B?;Sy?Sw?lzwt-5W96gbQ+xRY*NiH z#7KywIsnW3`cS&kQN)r55K5eaiqZ8| zm#9}uEBH&)Ngfk*SADxk$f1XH>IKnJF-+l0w64Pt@5#x*3C#&~l2xsrHwVC5 z?^CZHoe!JP$J(oHhR6P$V|2`5J z_XLVz`AElzN-G`Sd#J60NH}c_=A1YHKEU30xS;`dxSwtpNpgT%E_4bz8DC(LaGdNE zaWcLx_~E z3OP9*#uis3&?4+yV5gww6qVJMQX&6WQd3g*@7e;Y;{RGlXHws|{>CQMPpzHkWu0RI z+yUSn3k?t8^9|pNPR#=U&zA$>{qJMdJ2=26h|ag@*7%@`^doNPRLR(4iiFb}JLg8M ztXxicH78Xkt!Y#`4Tv8^aTL5f7bp5&H$Bb?pRv!DV7HEh)5T!>*!}(vfDiI)I9$;n zPk;rtPl`*9_$sYVVJBk?Dcp-W*%`pEtz1RfH77JDEG;UHhQtpK8iNw3?ULI5qj=%*07$3Jbxd~^#ts$7P7l)C+)7@ zsXJk@6iY+mhEt>H#=32-ZV>JpJQ0712DiFY7tz7!Br0dUe8+<00f+7t9KSmNJ~)2& zx@%2sH6iiKvC#BDd~7_$M#qKb;4K=pQ`kw|k>RZEZFfplNo^hPUCYv<(}Ea%cVucs z*HEL{O1iClADxJfr=Me6^56b1cm)NrvwL1hM@}82Rr{BTzw}|+(n(eg-o!cpK6t+O zx-q1Eh|z6ZjYY&awwn^DA>dU`(e!pg2fxs10N(E$`yhYDC)ay$>Y|rvcg_x*d(`^jImxQl`_xR2 z4uCh~wE$cr%Kr<%P@G#B@IWLK>CtkBQ`kvtv4rzFaWuQd)__tgz36+p#>eQ|esk$~ zaTD5jyfbY)){)Ap6U^VxW>*?H#cNShM%Psw^mu}0vFWrlwwdKmr3Bt_6HsWrSpB}` z_p@_{dYeo;k3HPR<^Xsb&!}@0ZR5$&7+N^U{s zCHl75O&4@uUVmv>RU9oj(2rIg?qTkxHoD4a^7E*wTpC&BDF^yde3oB$@DEIQf&k)` z?1>-lcTs*K!NQsP7mD-e0C=0vnv>jW^9fQIUZiU{I}|YeH5<-!D_Ymyg;%2;$3rT z*47^)0>C@Ts=`YqU=1ArA23&&zmb#NYTkFjx-y(2ta?5bRglo@C!BvD&c&SUtO0M= zH6{9aae2>$)GgzX;$whT^XdADAqnEmoZ18ez&GV&)yF6QpQ67(orwe$8YfxRuAdrQ z=#00#&s_LwbQJ$9>d7A;hzR);RL?{b8NO&jN%6&rY^uLVQuHcVQihO_#FsGUNU~rZ zH)1SU<47nC*7~+<6c+TRxR^L9Dz8(n2&RRj*0+<$Y;Hw~MBmZ#wS8w(yC&*IsP>;~ zL7#4zWNr{ax~i(Ck}9ey4BtHv0A4Nn{{4n83DNg(H_?q{xckAb&leE@zDx7&)V*bI z>Xgxqnk1*QUUzK$d;n-1IdzD3WpAU6hu2U+*(ss9x^mFK*lpA((RX>R?Z-FM-0d^!`%O(qqw9y?A?ybvIp&q* z(#hf+*Por)+j%2ZBz!#@;>&Ji$8nU|B#WA*G^b{%&Fhr`ctN{1W=BsQCir&iu?=*h z@R*_gMH>(6Fq-*;4kaZ%m98Fgqu@|$UC)|Va?;g5o_SyH z?t1Arwfqf#twXgzcWc>;dbjRRU0d{E|77qctM1*euBoC^rTLU!dXnG!wY2)ca$N-- zwXx6GGL81;=obdUeetf~oqC z03q0+5s(B9e79zYRHN{C{FR5h)0{m+Lc$ZitQU6x5A~Vs=mh#AUYVzE))`9N_dTpS z^B-2933qdnRqa2+9svHaY4_G3Iu$O4FUkx1UP(P#^$~g`L{ER-^1bWJT+beu@Mmh0 zl&;rI_xG#zFQp$gepTPjs(zR6T|{56{iMF%$M_f!0MA!jeP9`VzUuw@Zm=Qx)8uDO zcMG2*lCf~dY!?So%MxRgXiV1$G^Wc04=FFbo3A^xihkPkHRUtdw8C02V83ec_0&GS zlV*1SxZke(l)>|MD{kx22LO8iwnJ!K*GZI~k|Eqbw2P;2`j!sn?en^(aZ*$I11D>l zwc~|HY3{b^uFVTf=`_S&>rg)CG~TRUK5z3!? z>Bu_W`(!q0NB5ugC)IY?e7-X0X`vv3)?7XN^Phso$#v*cy34?;ftjTD#tDUVd9Ov( zGBw|;zd5@H(aIw|jSnOUSKyRTBp{_UG^o(Dttq8LT!qzN1)LBpLXc)?`%$g{AS@E3 zBYinNuHvGU1vU9}s+#}QoO1oUhW|S=d14S&Sa{!(1ERIhUGhd9h327eZm&T^4^<@* zISgeR&~_+I?tQT#peH@=9*(9>TmLyn=kiotU=`4gbO0|o7*Y6t&VSYwl~*!s#sGc* zT+A4bX}?_kp$nw>VxXq{Vd7K5n;`(he=mHAPL?P?mzl8uyk9%~HtO2kyz&G#cr!MC z=W%;q0ld`NjuTty(-r?^AY4Ises>E5fFIm$BwgJ9DpT+Nq5S>y&M*H`q}cch;4kQV zg=@p5We6a+pUA1TwJU(Hs%AQbY|hQB@kqG_-?spXX6=G*OQ~8;&c;WKHRA@W|LJ57_6@7D!1Jnfq$Q)v{rq1ftPtk=kcbWLAnr>v2XZn*DoNYfbg=mf! zEydpeetfsdbY7oJeew$~F+1d8rb#=+AiKa2%l9Gj#Q>~t# zF)8I-N{LSO-vdNI&p53@fCLm!7$`J~0ABJ1qVY(I3l(d^5!!pteAJbwre=lZ1yod4 zK+V%ydGO)o?bkE)0su$J8~|VE6)gZ?EaSFgPU2&Xa#&A}FPVRXfy z>pZ%{3-`pd-&10|`AD18Vb>Nt30!P7!;v(`f#?=aEt(`ZRrNVGsQ`<}Nq}jALb@5%3KnYHFLRnS46op6h}Bd;##C z`S=}G97XIkK8eC6Ld)z5;6p8{Dl#AbYGak$EUL4HQZXl|R)oJ+l=*&*$URx`t*kA_Z1O5XFXTuGMdb+^ouZ z2Ymux%7v#BRq;F>nsp{bRl%86vUisLi$O@;5v9AS0eH|fwjKA@=~a6g?5Nz8Ld^DC z!AI9PzLpFhlJ5Pgfsc=WeTz16!mFss`&9$*h{QcU?LMz=vBU3|IfyRoccmi50m*>> zUi6a3bpT~8c(WxpaN0j!@ir%B?(z6lGACmW%o;)ydt6YTFo*^K`T+0J{EI%b)DB6& zPn`FH*JS{~h_XxeAX98wHEQG0?%A1-ySUBZ7W!hKVStY*H-Ka$Kq9K{KJWNoMgsTP zE|aKrVRjK^(uGS#SU z)AnBP!GayL2)@%YBXi};dNX=$I4EVIV9yYK$3Sm{z=7Yaycs2@HK8hc zl*7FA?eWSvSEU>{!1st__V9qORiP_uD`|G|bgHOrpiAQWp&5hrHgRn!GbWP~q7&`$ zupu}Ke4isQqV&!P0eI<|k(CVjMZ3~!w4##>cg}Kw2_*w~zh%_Du85r6jujknC9Pl= z>27L3`}0-rvGR#HfS2FTmwvU5C4B)OT5H}YfS39j)NVLovn4k~g;Ci~GL#no>xHj) zaq951)jE^}}y>QE!kS`v%irV7KUy>3<@8R!u?$Uus`d+kiE(;qh zv-GyL)p4}q^_M8E)nRHkY%w+OwvoSA#funOIv5K(%cw4)D~orydR&#zl2#_P_UOHW zfr$HwoQ1b`x-#JbUy@a&+ifggOS>y}xxS;D$F!t2v6(L59v`KC5^7?o5qAlKy9gj@ zy)T9UyyQVECfy&iaqX~MsauO)UR@)a26YES9o1}byAgCzzpE5~4WKBG^7;a_wVvJA ze$^_sngt(v^JEsl1AzRQIl)Ty_Zg45qUEqo8C~hFu@5P>dwa=0X~&5znnT0};NCMI zq3@Xcj)&+YQ4f87d85&t&*G%lt6l0dYY(iTWeoU1wUV3JvG;1-k8T=yk5_;HnEMRN ze|Duy`d{PqJJ62+9@Wh3T25vLnR-sPoUgcCNLa9I_R&)qzZwoji@@9o4! zdDL$BBFY@FoMPgGBLV8;)VnUfxOf+}scw)3o|)W%_QuwIUOEazR(RODKFlVox{si^ zrieC`Z=lw(ZKxIhaX`B@^CKz-U<$xvh;?c;_Mz1P7(F)m@2&`^+~zTD#$6L#$;CKb zK;%@ZxQf#Cz5;EvX||$Y?A&maEkdCYmB3RQuUP;O{q{%C`I}<5fBos9`s86PppRUJ z?^*V5(~-5ByHw1rRZ$=4c*~>BP|$gK&NBqg|IG~4pgrzxpRRnzL;VH{Px$aOV^HEz zIw`{DbpH0AU6Dd95QXSJzDSkKEGUFjBV;w@2FlRObN=f3u~gW}EC|-}72f@)FZ_q1 zng>qZW^Dde)79X^V@}twd@PPC)y(YJujQPD0WA6H@x{k$sV$PG#~ z$Olm~vvXx;&52$UE=8PBc~j{fgCDG_zPb6c$LQ3d4qmQ}O)8--XU?FugMJZpyKUNa zugImd$~-rn&}aW7wHKA~XC6*x91Fe&d`(sj{u6}n2!PpeN+nu=(KLXUT<9x*%Brbo zp4!S4X;rd!ID(F3Iz7V|Z8uI5lpCVFpRg>RyIBFWmBwRbzarEH@Pc<7*N$RioRC3O zT2y8M{8*OLyO8uxD7e$vKl8qu(R+t$8kECtTXXJ^sD8UXe zh|`$6$3EEPpven6R^`+9(u0&BJLv|MW^r^AVNhc7 z_ReJ*9>`*9(A$jz;6 z(~)`3H;%kpvCDtV{aZaHL+hSMtQ^7`(sILb`ddppKh)KLw!6fS*1f>TMg&=IR`-kX zU{Uz0{_(dNe{@x@l$#cSe`fk0J(@#>2J{m|JI8jNsJLE0bCLV{N>+72)l*ReSOka% za6?fps|q+t_g5>gEg#>CeM{)8H6N>jup}3i#+WWHz&k*^r~v>TXWl<*8*DzZo}hEC zW=26F-ghMXq27XgLxX!PVp%i$acNvzrvmnCdcFGF|Nin?eI-xHH%OemlL1=0^p1vKUpzY!JOLy{Bhh*{!84;`DfsnD z1|^-JHhoi{Hvw=91sIG4AP32;*bJF1;sRMsHRTt*u_M76GMza^-he<06oQXkQ*&B5 zB8n(EE`=H;HCC0F#e0W>NbVJ1ak}ylD+*b?4za1Zj+2#@?6L3evFtR)41mAojQglZ zOV3KsnE$7K_=8K&7c|5yR-(CcjJL!jHlN^KE14YuyeMx|Z;jgJ_n^^SGvvnl3Y_wB zVQ!2T^}(sz#?S7jy#2;%T4W7bOr4op6Pw^a)tW|$#r&O=;Qc|(wy5M=hC|yQrq?Q7B=?1}|)%0yM&`We1$%v5qLAN1po_F ze3T5*kT-LpV*B(?X1aFq!cmw@3Al=O2pYtM9_Q1TE@!#anAB|grf)rD0Ku_->ih<2 zOl%~c{NVxDPzV!*bv~f2ueOmk#D`{!8`Hw+K)MRV4X)(D+@U(CDr1X5Q;BW z19((jMgqIs@SKl+d$-WLuje!T-Y9^FYSELN&@8WNjZG91-n9m>!G=t!yJ4NY zFzZQ0>VX{re7F{I8q$6wA^BU$kcey~u{9y8G0lI$TZ&d>{lzlC?mFQoSE8#wY*Ocy zbg-ZWZOd-&Q}<~#<@DPkPr-m)G08M7&RadpryGUH#g)a4=+LrrspG^i{5s+mHDz>V z#UV4kF**_ql?)0XN^})@+w*!~ z>ZR3;HpdDM(|=e>(%t+8wC&ojKLI?VwJZ1iqDeQAd=IJ6i43BlPGi)L@;tsa?^#y_ z+^9hc@a8k_Ra7}r>dQUZEhDuB{qgK)>YITtkIjT+X4L@DFRBiMl4P_-0~A-l4|m_t zSOwsBa~=Zf3n=AGs3qZw&WF-Eg!0sFqkpg11!!CaW!}^;(fhf#GYa6Lk&hY^a{Fq{ zNAxSxt6-oZAquai?~ep%XxPimjsQNKi#Q<~kBw)WCRwhNw>C}MQs<2BRKlAq$jFKq zz6*;F_o6i)dn*!&Tragr@3@`%T=Fr+Cl?#JOtaiO8Mpv+uXzF!r* zqcaD<8*-^%8v8<*Q5uln0K9ZFs9pfb8|C^M^&XN7L9#Jwt&g$Xm)S(EZ{F*q!E}Hf}^~-HX~t?R=%sWEUN0u=lp6 zWS-KPny0p;E?j^I8#h$BM3h^^ph%)t4?ydB@Xkkc9P7~p$+Mu!fDcQ zg)Zl4Ln-ES)<>7j*NTjY^g@mhn;PVTq^D$vxPo&8w$n$yzFFVaR{)O+r}J6$1<$Nz zY9~Ryti#ME?FbtKCBsHZsSulxgJg}20{DBzJ?yGMAU710lazum_W*WS&q|w8BtZl4 z%gvquzD$U!XvX(;y#_q_G6wPZj?gpk>njS=Y0u)b>Bzbfdd)R|AD3K6eHp~3ciiby zKkgT|Nz0)d2Gq&Rt~t_`e%?Kl|HXVc6V{?4pHet+vVh{~AV=RL(aH;((5BBGqViMC zsq@(%QOo{yn|6QM$Lq}c#mGY6;Zq1*EYx)?Hd%Xl{8+bYW(2@vV~futGZZKH`-3MB8jXDOY)1ee4n>@F7mCRS@>2Dc zr73iH-Eca%`V0nmO-=Sn)M3Ot>N4R+)7QIS7#CAT4~=S|d2Bk~k$%|WUG-V-X5pYl zr1y+^zb`LH=Uj(}sG^{*IAq@`FHl;hazeUZUq*iK4&qS_cU5A`dL4cv{Wxu{^ME8I zVqK37Jp~NF+k!WT9D*R^>M`mIVLoYFCNpn5j1vP-1M7N0-n)#|td+n-R5tcIKa4n(=Z2fES^hC9-nKCA=Ae^dkDx zGJxC52L47>QNul%IuM}H9{?WDuNLh_(W)0u7tvDl6HYDe=4d(Q32SlNu}v=8ihNUP z1i+8)Hkr=j%C}b7SDde~@$edtt^zSvM#mlwMVyR2vuJxn-<4=?wKdTUjf2P-5fl@cTYv|eQyN=$^ig$sa}7a20T z(2M|hfY?Wv3$7GtcIO4l#{j84_#4HaP>|~)9TcY&*WmrLy8~SU=0_l>bmt6HoOQ(J@NxF6ptD zdN%j0LcH`qZ(6v2fKXTXEK(~JC)7cRH^Mw_{PbZe$22jRg<@Z|ES^x#G-~$~YkxgQPyoF2Fp>g;RS$>bYET(a-B4~QaPz~4|9Moz zL>mC6t63@xQ8*<-lvC-;KU@GjBKup8Zt$wyDmo`d06h9si%cR?{o?GW6s0w%484U0 zW(}(!66hS$)_+ki(15MeZljhkLPMPo;A85-RN$R07V2| zPPqUdAJTzJ$}+eH(SM~}0;zAkFZ;pmM$kq5uBsmjHY77QPou3ohgjosLw}H0Rm$za zQTN|xJXW978wgP7F945sAAKumq&LhtNP+SYp)Ho5?4?GJX}{ts{wVu zlV5DstRrylt^M{RJ(ISrG8!;pzf}$a}P0XhUrN=!Pxp7hxSLA!p zrC_+PL-<2&o+MwPpw~ezWR+W#?W*kCxp_BNVKF6xN{l>tR20BZ=F^`E3iTwQzyI@= z@4as44)AUod5>2$UtA#1ML^b?h zT680k#|U_v+S(}E_RZatx2K=iy_@%0N?p%2U%6N7VZdexRAtrj!p0O8Q_bo}-t^Ca zJKSbB#HkacAw}?$l|v6YfR`SoPOZioS`CsVp$+YeVIrn3dc`Fnsbt{-;LZ5xX)cUa zc)AFcQ2>wo^=j3RZemS$CHs(7QQY~yH;=kkF?wuf+|X-AE`%QCMBXBtB1rxxV zc_#ODC|!@jJA)OfDI4h@ryBp7{~Rah=6YNv3g90*hpWvhC;_1uoRS(Ac&k#Ps1ghRn;jv8Gw`@FBl%~?)DV}P4h6Wsl zjX{?Iy*gO5G1~xmX>P5c)qrD-D40^hq{tdVMD>S_|5N46qYnqb*Hw`<1K@Gpt!Mm> zx^tvlZrB(g=}@YgiirIbPJTtTOCs9`_Ch0FP)kC`Q9NoMCEea592~YNdi-A^;wF z5ci(>N3VOM-@naxRB=r13SG$a_}%!&yxJk40JSD*M{9iYCCwTp{GubFQxm2f1`R$1=B=6UVke9Cdq*GIzx+(fKiG*AaLZ`aUC&ZNs<%v~NMGUDrn0(HlMWk*XSN-H z$3p|W0EEjc7#ej5lK1ds-h@?2L~Z@y)ii@EX-WW6?K%g*`v%~ld;K6&Y2?z3@Hc2C zU#@OAa>N(mAm)Bg?tKx@rLk(V06s`w{*H4QPRb&xqH98G2T*uP|7(ORr|vwljgxL? zF{Ng*VmWq1RFQw6W>S$K`R_p!JE!MG1Z5thcD&#SA(3_u({1Dy4gg+yCKPwNV$g57 z`f#0$n}{9A+e@EtO#-!bA_CyCKF;Vo-s^UdqD4N9lF8@!zB3N27}u_b_)29M}#T@fgA#U#)VXgOoLoJHMPAH1c4tRUK8GH^tV zYM?t5lFXEx=>T}&06ct(>XYN#^wHh@{MM3xaKhg<57z_eAej}sZY^#%E`oZ{ro(G# z(XKg!0z+0AiYATeGJ&Nf$Fjbvm1@JMi!>=llv zqB^XWX(hlx`V@SBaJdn=RWq#b{keNw;72+ zmto1Sd8$d#l7I97JowH}ocDra&H?HH>^QMSaf;+TRul$P+5~{xF3GLh4Z!=0LSfZ= z>yLiQ`S?76=UmCGioVPH29;sgybBFIPS5kcq|AZ(bx@>E?-=qur6*}eTJxAr@&4L# z=wzvP;=G~3=`^mct)jUV4V0d?Orz;#5sjvzI)U+l`Miyy<5{%n(?_VLDqiy`dSCrA zHEyS0=u6&7|5gX+lAdenryc!h)!~jV8B%;7_=1PD26}RDH>PWyOQ()_28J4E?xmqO zdMd72Ime;W7XUlHOM^w1QSy_m0lYNe_*jl)u&$}E2Ji*SM@oE(D~gJwxnlm4!_`3j z!QblXLB%Ob zV`@ihey>||v_0{3B-RQlsM>f>?(0Guzqx^+H!fy1)SuO9L=#)D={uJ?Hqj4y9LP_n zch-#N?@smTv)K5wTP>|vOhvVI8;W@TZ*2T{pHJtDD;m>`t#@%g))MNHvC=S*uPACv z>)(HZ=Rm&#_`qA9q@?uYhFo!exAin4YcEw*N7Hjl&SR=Zg5Q!=OY)l0*6CMK-oCDi zV;pw#E7Yjz0j`Rlo!nNXJ$URo7PTeDl!HvY3U+gn!Hs{0pkgm_j( z9!cBq^r%?s7?Vgnnd%p>L96if{$&M?Y26pMQqc+JlO=ioQPEX2@HcN!dIx=p$+J7J zpuugtDRxR@UURe^eY<6luaBd7{g$eYbg24ZeH$xiG+U01rY*-upMLjF(a^R(QS&rU z{d=`R)z(C@*83w=bW~Z9M}FPV`|hW>#8M$2#j?uFHGNi4_l!EgzmaJy-)~N=&e^|wJndd|4%JpE2S}Uu*g*X+f8R*AVbvB|?w|+Sfi9!u*pP_8yARw7T1{B3 zumC=cBNZ1wXUlFCh@_?9JsnXbQZU^89m)XSPDPv~0PpVGy&Pejv7@iwBJ;;{nRc@ZL^#DUHgJizX>swbkm?;2)uX6zS%N@w&#k?uh30SH!3>O ziZ*?Jtq0HD>-wk~8hOX_l+rBQNY`P}wvH|Xbs6mw@?bw~$N_lCVOAyx1$z=g>HeS^ zl~#CFiZ)2u^_DkTJ46)uhGa`L!wW+R*b4B9w_KN}NghqKZ^0pT# zHnB|e)=d)&SWfb1E_CQwfn4dL8s52lv~DErI@!|K$5Fh#h&AAsRxYalUEf&FX^9a# zc~I(b-^sqT>frevzXFYBK;~TC@#pR4q}6ZK>&&=!5SMa_2Hf~G#R=%9r?Se+ErXVD zeUt``_3D~vdS%&_OtUmznOEyUQ1N%qqRG0?iUx_iUecI8)2J2yX?>8IWbI)^8vQjP z)VWO?g_0z0$O3rGJ?J!uOgglhz`hCCor1UQ(vJ!#$H3A8K6vrf#pJ^#ZwM0LUpYF2)#8LfTqNvf$7d&Yj({U4>a z+OPY7jT1}gwn2+oS;~`Uvn#g^&Db@P$5l#+F`nxxj}?Fl%8ace6k^)=?R73$NM8&f zKE2ZpYCmj2Sb=$0aMDGWsqw`<0lhY)0lefXNOi^WhofGiUqC$@0XGXo@?iwH(a5$^vC;$ZM++O#yPSAgrlTBU=5?v$bIDm1`Bccfcr9zf-&KPX zno|2%-!$5S;*t5BojqNYnW{41)?8F#WgvV^>hM_{2QSxC}0C+qY)H>o^YBl1E+RlqARK^y`petB&6v}i9EuYzmOC9LB z4dsoQKMVPonFnyUdo@2wBeQmM-H3*$ra!@Z6@&LfTp(>%bt&a&MB&|^r&)A74dRG= zmPJ6mx+0!de|#4e2-1Z5U%|>W-5a>&YQ7%Zem$MhZj;bd%wV1Rr3b|5JVG6wZiIqP zd#ZP`0?kpcsqiO^>btvH(wEWBK=YuE2v4p=~)Cn?u_aPJ@~wu0^$ zx{#VBi{%<&WXkQ!~Dbuk@WInK~E^2VS6wHvmWvY6%*D?2IhspBAD z9O~4~umSMWI&f$;fqx^M zf%k(oTtkHEgokU*^MYGNC(=-s#BCn!`}|jyCDN)7en-VQt#p@CEK@f|-u^r#r0G}J zyr}zp>fPdqZl6`G&@y%9nRJ|G7OgZCbUIdZ#Aglo?80`maL*Kvp$*CUi8`dKZ)8ex zTe4*2lT<6fMNe(Dm-=4&JVoiyjuPW4>E?lpsdZX`kedoPa{lF(@swRGE|FSQox2=&Z3LVNQwEThd-aI}3lN7{FC(Y6xSg15># za3p?IVlzsNit(w-ijq`X`QGoTG+)08anp`FXz-M&n)j17XtxhpNLh{ZbjNnQD2-nK zb%Jg?BMnf{shs~yjxxskmfu4Oz>n+nsj7rzEhmz$|L{*#lHFE!xS~m`(X8%r%izV- zPQaJAX+Cq^KU#k_=NE|6UrJ6gU;pzvsFZ04rVgX#QEY;C!n2wFgLMr~ zc`Ny(43YP6u&@R2m>h>z6WAq+m!piMQK6Is5?BvedpAUE0p!EY>>Sbcm#;%PLD?=v zocuL6@_s8Bv>#@g%%Q3ZI$Fz>87;gq*Bz&kNzJIUkBT+Lxy@A z^eLarh@B3IJck|HxUXe9jK_*Ggf)Pd98_0=I3a8$_^en6R`wBz0L)7N8R;vDwWh-@ zc{@@IJB6wid?c#}f%|@()lm*sSJA#|F)p*n`<)e=M57ZkD9MLte9o?3E{RDI8+qrm zUV7h3r(wNY9HwhHiBZoWE&0Z;XVD1;pms8M01xf=iQV5*Ri7y@Xi97T`wZ1q>sNu# z8vPw*jhvzTsH58LqI0{7|Hv6cF*_JJXd<}nsU^2@U@;)8Z~Ov zrM=eBpw{|TOOLQ@;nWpp@)pN>RT{IOuI>PSWczO@v&jzCuC{!2ALZ}uqkF5=)_a)u z{(`P7XXo@2bp3#(EPJinB>}vDx?v)fSBod?p4i^c1>VhAv(8(o*9BitLTY$L-En$^ z$a}b2L;-kABBGTj0u_$b1G_C!C%H8+GZODoU($~f1!gqX+$Gf20nB(I6xD?yHD^JZ zU$qVNvFb9~QeJ3DRK90i8jWObyjffG=^b=(Z+G3x`&{}Vwd%Fb)lN%UC@#8+?qw=X zx`6cIoZUTW;l3Wa_YPD83BWf`Il$DJPgQSwa#ugv_U%2o!-{6E_`sW=A{5BdvPK-; z{@sYV%mmN}lP8KB)5pwtHv-O*afE4QOY4`4xgP6^BY+nl-Y=3l?^t(LD1tw|r;jvhMkp3@iu6soo_;?f z@f#~n(XPrO=E|G@3`}Rq$q5{dPcyMmuP9ETWpDkFDml4T%i=luddA&oQw}*L{eg+jVFEtVv@q;9!_$re`gZl4ljXM?HZ>YO;`F1*f#SrI<$JU?#IKRTmMXnO|x~| z5l5D9=E6Q5o961a{b=0?+L5cTO|RRL1r3TT8mlI*;*?_5)aP^)S7Q>2Y0#}t5(*q? zS;wY%bko3veA2Hy@Cq){^#0m&DYsNyKR^Fa2U^30yJ`fIY^A$LG5x9Ur5{m?9{L5m zEO2!|y1*$QK8GUll-~jHZc7XRK0XF&H3C^C0a=>icaunqss?%nLy?A|<)cU{>=cUH z{*k&VHxhkUTHpDsMZK&nmyR-5-i)Dw>wtLiqCU6>3i~Xb`WRIdX)D8|cUw(8E`CdB zSd9`(>HZOOC@w}@Of#n>h5os0l2D()Y_xO6^_0Cy|FodTrEgGrmkpXjO^J`9yNCWv zjksWzo_(?DEZURTTCZ9C?+cH&p;aH=Ye*^*g}Vk`^A!5S3}|ytAnvRqtI%$3u^|7FGeLXo73rRmDJ zSd0A}L7{0R*h|P%^t0aq^cht@@7GT3JXd%1)Z%$0NCQ zL_)fufYY%p18CE?*Xz2a-*v2M-b!E79374Au$?Bciiw`hV2Q(}2fOMu3)=5Xa$3{6 z_nzYWYX|U}c3w|CFZ;LVI3ZhoLHE@(pw%wj=b5`_Fs(Q&p6FY`#hF&V|2y5B2KO5$ zHOZwxQ{JScra8Lf355nuAh2$h!V185Z`qqBbU#;U{Q(%{m*&yQ;vCB5KSxd-q@$-A ziYwHq)p*isx-{=WW4lfi>K~0tD@!Q9!d$)i2FJ88%9EwugkW})$+&#Q;rsM!|2`EI>F zAF^3WG@WyFB~AOaPm)P8@x&8nVrOF8HYT=hb271QJ14en+qP|d=lQMg{rjA?x>r}- z-BtJA*DlA_=C6e`Z`w_kWS1|DatoKp2R zH!8N*vF6qKETa2u z6%V~#wZAKD@*`HbMCGkfyse9I-p5SZpAJoH4UiD6aI}JrG}LKF*8CXBOlYb~KO{9z zZ7aD-zzk~h)|Jjk0(eVZA>%ylK5CfKoxfxj$P&vQN~$fd#!fg>0V5rGzc! zy#GSmx9W>J!!+!yLUYW7I+3tW93K>|60hngXyeB^VUY%de8c|-XXHajHmFWuK#4Q4 zd5ej`Auh2w7B9e?aV5~aQXBB{yhMCqt>Y#(jS7XGYyH_nLT$PQ)j?B)j z>mah~0d+vx=kFbu2~+=Xb5eC*f+94*MaHI1_;RLC^Rll!q5!|Ojr|dzd1&Oxt-q4i zwo?C(%uoBhrTa6T1FC>zq<7lLV|LL3YLF zgImphHXRZ#Y0TE{ysxWW-<7ZU`npGg_#LH>k7~sHlXu=^_m9sjCVXc+O{za2vlDaY zo6+fVMfjzo6aws+>`aFBocYGDhuzuRsWiiA$-DA`J!2L?TlQ9U4SUY`T`rbjR{ItbF7{?x*@=UxI9r!Te;)r|eVj;Md2sUL* z%mnkw?IREQpRq|msQ}HOAO8$JRITT9X#+g-G5WbfD+52S7wv75IIm)SmXSF>#O)}-eil=&vk0aePRRNRRV3Rjqqr<+CogOMFmFq zV_!fj4!hE3^Q@nzZw_#LhOl{sBQ?cE_gEifb34DAl%7@IoaD%_(<_EAx1XuFj<35ocR)x&z;@CX%c;q(sh7^JmY*;d@r{b8GFU+ zm$Ii*Un@0$?}{H~*t>)Ic1{E?HTy33a|$_2-+L$boB1dm=i!1d$Qo34x7z-tl%WZd zUl|PQN|U@ok0t1iAP7wfQ`zX;@M+VAG0Qi}!*QvT<7JHT|%KQ5qy1C@pBe zl|66uGESy5Qm}ClRx%(+Du0dJ>0+mwYVnILWfZn(XxwWGYEQn1yNSr0*9WmoHRMmZ zfTr)~tq*5ISMed!AQ}2>3>QJ6*&k9BlJZtH=dR`9=+^W(@WkOkjs0&Jbjzbkl>a-;mGv#V>;0sx=fbGt>Xwl(4y z4g}8Xghods)79ByfRH~1XY1Ve+fUOOsd{o#(+>Ite&jeNKGhJ#K&ZeHo;b=xtDVU| zI?9=gAX*&H5MMsR1pJ$K+oRG_N`a9&poFO{6A1h4dUS3l!g5dqwLN1ioluP5iBZyO zGAx77{6jwG8eCE$eAasb@D3uMqopJDYi87@_u3k(8XaLbelS$+=5(aAb9}UeGux~NapN&5h-(? z1P{GD5d^&5z}RYO!%ZBTDD^`|}(s!W)VYPlumiYn9r zzPYcv&_x>}M~h7m3Ahs`gmH+h&ba(m4p2=zn1MRP!KsO@ke*}G(WFATGWw%H1oXM% zC@WR0!b3(^k`TJ|_`4f-U-*MzusMb5^&_O3r+s6QS1dGAdAe$e*!OC+uD%UzdPCsdV$XU!^z^+dK`=ld$IG6V;7qC% zVcE!KYZsM}@hY!`z4lQ!p&Ol!;h;Ub+9PJ5tY>Rvu#UDZIunY8ihWEa+C>GjBExNy z7WX@tp9Yihh{!9(;_x5Qw;i1Yu<)e8#G%DjP&8Q&vCWuLZ#_KUfGnd^l1vvJtAf@C z8--sElt&aRDRii22GMuuzE1-dQ5K`~Qu6?AK(3ci-RCsbt4XHoE@D(X0nd@`d+x?H zBp?WtB6_$GJ`uoudAFwDL>YypXLE=FTFGZ{uJc^}8sOmS9m%hn{79FNyCxvxl>p)x zdu$L8YD7QLYa5|;Zw(bANWOrJOMX1{Cbzr2&w5Yp?oT^<>XsdsBl&vAv*PRQ-EhTz z=ce;RJLx*)J4!^OhTX0K!(W-v1d2u*Mte%RBR!*NIbN%!HGaZPOx1~RYXvJZ6vIw7 z^t^_mS>mG#S#yL|390asHkXEi4et+l1ZS#f@=*-|{TyD7{3&?G3J_5d!P*TunMF4*rZupx~!7$@MWh?X{x zCI}iQ1a!T~QGLpgCiMFz+fx}ce3i3Pg@#$gm;61-Df#>&S29-y_r)w36SR3dq~mPS z)MWlex%V5P{p95JC^k;z;K88sk|~*!<$)K$*|mT1+~t0Q)m}g7qbn*u(~%A%?RB}| z0NZ8GG9iOb@vl^e6wh^3$XjD`QIfw)M1StscbOWs{1E8t>+kcNIjg_eO47X=9`{}e z%KeD|H%LhzLy$&^Vf+uKq^V<2I%f-f`=q*=Pff4cO*^PyAp4yaCpqnBt8M5h4KdMm z_g_A0MY>1ES%dJkItqBs*Dp*DBQO693rN3yP`r~|A%ELI77j*$+ylh zjT^f1`oBCcHMK7$&o=DnEK~khtYPh@7=e$m3*?mLqFrP{93pd#&rYj9w=!V!fqSC_ zB~-Z_D;!t?bR^AtXCSg(s*~3+P{Mw%+HT}Fk75qznF|j(@%vj zk}psA)1T@Me(Ok5vcON~KVNBl_I>dsenshzi0T6W@v%u!#0v2G@qFPWYCQ#idDC<; zO}te-ofN)j@z8y+VOnckz1FN!N}J?cwRV2dOzarUF*+{{C@cRG4Wa~zRX*NFNUiR$ z&TK&ahE!jrIhV}@t$beYawk4pML0L1Q;x~{RagzIty#rw9kFBqhN5AZZ$C4UfRBiN zrdK8QameUS(J_`_&#pc%$zxOEb`DFlLsL)j zhj62~^mQ5eX(lMjV+b}HE#Q#o;=5^u>EvL$tCk&>P2m?=)42(7+jXV)X}=j zGwE`P#f9irIfe%Oml($j%}ChRQON@Z=6=5gpH5chVuSOXMz(1nRKQ);EQUJ+8``(?#XVeV#*`YsGb^ z(?@GqGJ;iE8~tq7lb(aJNO8`6-RYEFBh!cC6iavuY~In}T^D{jcPwNw%%crdgq6b& z{p4t+Xd$A3#dN9P{lqkJYrux3-kT|fZ0*tCW7lNq3<8JqjpUmZsJOpPzCn+D<#VlR zAbW{J1uPP#V*7m=4fv++&iD^j)8w>KmL765pU_u0uXQ(YPlhIk_3Jub7ao7K=he=hN+v>qpVoW@f4sjX$S@)^3!*e4&p z_r$+xz2JCYKYE~IPIfbZN^Zvp5xL&3{{OQQQFE`4Ucsrv?~aOMRIb#bN8w$F_7~wR zg+oDNi5Tco$&4Y<2UjF4qe?fS(i&eq@o9Y)Gs*FP$bE&|7b>G;+K7&d^N&iUoh6_; zf{2f96mVsX7bP`K76(`!l=^HGis1=X>OVd}#SNR`aLy=}vKX`YG zqjFJ-P7;Lu+xvV|%9KzheDA)Zm#h01 z-y?FFZ6}m^y7{n;|rMixUey#4q)@H!Ku8jXyw9SaCEV?vQhgdg$0To7uAQ|EJl z*gb}Gu$xfQY>h*TJuWu7E#LttqV>h%5T(Yv&oOaNfq3$=Wq66k%c(r5?Vc~Fsn1CU z-|J&B*(U+U!;Ac@Co?ABA!&_vM>-z&PFF}i4nMIPf@%7MbAoaG!%@uj;H~(-Ks?k3Z_jSwPrSX_A0*0Q96@zd^2C)<9^Nnh zuLdlw^u?lq87acAyrtpBg!oR_W&`0iw4D89bL_HKkY?B4Hv{*( znckEvs#;0Ef!?%*u4=`HIag(I8k`lA@DBqQX-kt@?rh#I&-7{5aj3T^3tXO#J9HP4 zGZP$`d@YHr9$5|6gutoGK^!pegVen9#rk((a8MRr7*n6Ecj~TF+`k~sJ4fPRI>U}Y zkP;B+0ZxiN@&ijw%4%PcF}A!=+`7B(pBGV?_o+V-(;WC}-`Mz_OLCL2Fm|kYODSd0 z@Y)VD*!G{3)XqO|FhIWb81(|EZG{6z5KB5<>>EIM1M&$M{8eSM5`1zruaMS;hW-7b zC4C}y#5x^NaCQJ%93x1ky~@|Po4gW-t-E>w{9LK+Z({4qg*m{D_gb* zp0o$(=F~k}+_&znZu?_tQ)8pe^CtC=%ha%zC&#s|Hlz8wFXMSp!B=62ZF$edU*2ii zUFVs>CD-ane%Y2<4zZC;NZ;!bY~rbkZcY{a0=asp+dYK=Zuv?OKSIB8Cjed96pWEN z-g13~xi-KsEB&(?44jd9dFXTZ>^*v{vmIZg$hO*s5tSZ*!m}JxwVlfdok$;mPCt&~h{ zqSp7sQKIPp2HzINHa~a(a0|kMNC6LtO-Bdd$3CTI7`244OdhzLVRhwK6yde|AW8@U ze0Y=~rkW8)nlI7dSOD~3-r{(hAPyy3Q__M}QaO`U>%o~-&0FL_9iY-O!uBIG-L)8$ zinlPElMSso<>$Y6=` zvdYNN${e=K6Tut%U5SpIPt&M__G)BXhyh70aWAmjVAY*EcMN0V=&eMF zm+0$ud<#ZuiGm8Z3;|j8Pwd8*xUy*72+7h&-GP;0qtM;0MgZ5T&v$mr?UO6TOM5m- z302UCK`$}Gl>Q-j9ioB5uIp$a(Dt4R>hD%LI$PWusA4{g6rSX(RI>)cf0I>kNeqae z8GcWD_*oa%QF9GRr?-%Uk_){(0}V^L!F-Efb*Xy!74&#?slfef2K-u4EJkTSw9rr# zQ*8&R%5B3^mi9K0+k1CD&IcoAX-5*CzhYM>PjQF_1B-G~a}!pqExLr0z*8Y^#;DU zJ!v_iB3$O_Rt$H!D94u^U57_3VnNJON9!ZTOkDrv97)9pZ5;RUp!bq{Q zyNoG}nQeY}%eM+>Xy)DPa7whMgGlU;fAd1y%kt--g?sL|KJ501V}xGTB3KV;4(S*B}!?gh#sO9AiUX2#{CFqK-Xi)M+n=QAR zz4hu$ISgw|PDgXP_&59u&4LC8kq1Mg&>HuQ2>2kZmQt{1P>1us-gACa-nMG0eCN9UftH*@;o z<4yQ=AeMlV;n*x1SQ?!9HzAKLU#={oT9>Btzdrn32(U_4Hm>M8lc1ay50l8NJB7+~ zIg4REpOt&+oWjmJ7qp0TNT?PPr!|zua8QyqB4|U4L}56J3J8%znhHf=OtGC~3onTE zg=|avXimq$uAy)#VYg=rv3bBy+_p`nEa+x01pWy0A0bspAUWfJSn*+w}b|iisbamiDXiIOap`!>CUjiD_w_ZeSQCBX4M2(BY zeHzdm{R#s`WT8-ONW*j^o!LQUf+8{0Ho=>pDddZc6_M#G+*>}n$;l;Oep!438S0Z) z*uHR?Y#UM$%JlsSCqS&PLz$lL=V4|rE-$>(lE;&K!3FYV&7~dEx1>JeT}VR9Iu*@2 z*k<077fa_M02)tS&! zO1#`}L3_01y#hWWKG119$Q3k_SpE2_OOjwm=YE!uH}iYKD>KtQ|6@9=!_`NG`1?o95xcxSBCH?}q?Iac@^aok2R1H9bfX>`j@6H*}8;hwvW+ zV*=j>+rGqp%Lz`4bRvj&3P$+K2gT#Ltz+v}s3En)<`7pI>Dm*K#DN4s&>GIL_XHA_ zlM;*loMJghCZw(B3-l)edmjaolYRN$w!L=FmNN^?@*ybZ^isThJfN*l&? zHdw~ZfPMP#yx>9yKg>+vyF65PmG@-gwn!Jdb=0enJ@cXVUidkLB2pYi{E~wakfx-q zEh7`GqR_F76Wtc~a84bb_dPE5*@KQYq$sUc1L`!-;^Q#eO?w@%in2E31x;4zbj(PW zaTqKGO3Usp6$RsF-XO@>myzqHEe3uCB%Nm!ySd8iw>ECmb_V>a!%0XXeuvg;k%^~~ zk!4^%lf+)j1K{KQAXzF~p`sJ~mP4D042ZT&n73KKf}|SSc@Meyrud9SAQf#3ocJ!T6_dh-=aH@W`SwxUj9kyQ$POGi59w9m?yleqaL%Wd<$&Z*!~skOZj-*L``~1_+Z`oJqjeKwKMXl$DL_u#A_Rccp_&ts z7m=dxXj>PNh(!31=4}6MN~<4rE>CIUfWgd~(5}OBt+b>lv18iT z)@>EKLNEqL7fczMFHQp#ox6Gcsj%Km>S=PCnW6k)-hFoyd+g>XMU^$pX(JEsTAF6o z_;~goZsM|B{;n3-=8qq)ndwbo&9@$4NLEl5vTu6*4f{xO`-LuiVmXxVjc>IKwr*d0 zkQMPD_}G6v z0A`y3gXvDQTSd7`zYyaoPe!tn0b+Y*Dw6n$XuK(nlC;L4lkA>7`_%+-pS_b|;JZ~P z#zh)&MpMoM{$EsJA1KqeSLFyRuCdcbScI?G+uGH2&V8PpvtLfY4MH(pUPb|M7y9mM zfUq#AreN&?E^_dO@#FfMUMzy(bxKpYC)P=vsTII=R@$Vm{ZQ~N6BSICoC>hyo9ITW zVwYFJ2cMul?`1chg>MIF_jhN2+qMtiiu9GP8KvSM3a`t)mDF+~z(6yZ+z!is)|ANv zABo_KvbFdBB|P{r4noycd1R3bghfhi-JR9m*Fk}mXM2VyX41)ZC7$KHe|wcBp|ML`YF-!u4c7bFdZ2= zeO+v$o8Kj(mK`f8j@ng~z~}5xI9^yLRTzc2_~jM;$OL6@YpC~x7SJTZYZ|at+i%aj;H;Oya8)5}yc# z$6SM63a1*UnK|0qLs6DP$qb1L{qpwCxa2KM)i&M;19nc&$}r?flKdTw87U=uW3+;o zt6oKu(x$MHDp0M`9Akn3WJf6^5_z0&X%e_G0B;p!Ko27fd+1FJ;cx7H1AWV)ct zbFJ}_$<{Y?Qu_qg64~E`EFFIp8ShX2x;!?_z9l*mCQh2w#?zfO5871e@(=9+-10tD ztj&xs2+Pd&wciz-80{DlG|D#Sjj`*v%{8pGFE#X)X)+C3V+{YBzFt3p->32URRGrx z(pwM~BfwWRQQ2_$d<;F4bNJsPYKU?E0(`akD+;xB?Bt=U-V5P~wq_>>wX(#B3Tt5G zCDvVrVVCuez17UyA7_kaTWKcsj^>$K+XedR=BI`P%l7WytfUeB$T{oj{~=zL$KTLe z%>0woFjmwzfzIUs=z(AfDrkx0BF;#S-v}1+D)`Qoba}#mkShWeBW!P~5%Dh3QmnWBqG+mhzu6 zyj;t)Km37}>yor>Ec2Vyo(pUFYiZNHPpwJ{mBmzJel~9>XGdGpzV3a^K@i)aF1F#h z8HQQT>{O`nlvSFxGK98GS3H0xChA(sa@DVXD|0JO+Hh-(L2AwS8PEwRm*p`Qp@#YZ z`e4<3K5G{_n+0F+uO{&@h(t0c3XSQZrnT7WnLo9L4CHO-_N%;I#K6yNhXo53U(-h} zS>mcK{+p4+$|-R!D6UZ{1M{7>jT3;_W+F}9fP}{Vp`&QBvU-CnfP1D9L7JB1B<|>@ z_Et3VWI2bago?88)72$^jKpE~JOq@pu9azPW^EHCk)LY+Nv~sUCNE%i4tOSH=ZR^m zuS*jl{K#>oCvQ<%6UrS#ZPffLVf#V(u^CnS&t>(T?yH*M;?L${ge4_iY24sO%RkP0 zIwt21KKj)z);`EhYRLs^+#zALxg`28;Tnd)h30pTNB+kP&@78A-z_N+=c!i28{_z; z?WyGRM%P#{mZ4-Hp)sEp|GbWsDOmTjKRHNVZ{+l;5A0gibN=6lzZ?!Gj_sIueCGNA zNt4BtD6SL^(GZdHxQ#MWzE2%7+Zv)sMz^c({h{6{*SYq_YDu)176^Egu8)ozNxR~j zPPxdQ5;n zzVR+VGFRUI#hltW2EeknIBR&}aPAZfs)`Pw9)m_3K+#u)o-|>2fiK)u?=x<$F)A0yKp=uSnVJ7`8{y1ck-0NA^NX}J~>xs zaSzRI{Y`P@U%t<37YGL}Lf&5-*Eqa>Pbc(`#p{8k|M0C(^9iO4cG3~FQDq~E@w$@} ze*kr3^~@v#5q8Pd@bfnpg8mKCtp03&hOD6_3R48VHD(r&O)hde{UoC)e(r(J5jyXG zYM8@aX&H`Lm&?_18jeEA>bWhZ_i~+aE&ij5ocVP9>KEWvw~aS-f27%2oKB}s^y;R+ zL^liOCE$Z*t!7zQl_>6=?J#=>dJ zU_D`F5UJ((WhOgd^O6ZI=O#!az`$>Pw>2_;z3kkYYZR9%lKE%OT-bxTSgT?VC=pEG zc{P3yXjg1U;19Uz3~=QhKQIO6VP3u|KDYD&^$Q@}o`_^k4q4@$()a^hN010e>%&9( zRiV4n|GemXL<*J9WT}(4EX?tN&Q(eHNuDK)Ua>TYI7(@fydLxbgtH)Z1bY&dpj?Z%XXjB6{`2{ibdRhvWd<`74y#Te#PmBhG;k3 zv57Lte15)O3I&~2bir2y&c_d6k|zNin0i+ zQ6x3+pk)f{_Cp^z_SFXeI35PO2A2(+C!2nUY8YgYLt-BRW_^B#G#`=Qa9bH^>QR4k z{LJn+^K&d4-PBz*@-T!IijNAQ$O#F9^y~@Pc!*v;D_d?GTXnv$UTSPjS{Q(B#ZaZm zL4y-9pDlnNhoAG5_{hFv#A0Nkd?KSCNgruT)BU%SHKie9Cv1lNA& zRe{l_I8LdcnFsMKFOp$2DWa|Ot5Hd>TqE+XoxpUfFo{zH>B#G7S0jwqoGkwU?mWk!NVW8XHdQ*&nLs?#3 zF{OkP;LCi#&B%&cR5G8_9E%$I(tkGAkcbxw@{%=UtC7cmr!&VJ$U#j~?A=B139Xq< zj$kF4Elq>(8bakbU5kR(ZRzgH%*-a&h@Gjr*GB4LcV=U0#$f8c6fGx5b6!x`rgzgE zesdsZsBn6%g{!gVcQ^SZ@vLdT^pE%X_=2Y z^-RvZ<+M_Gok}FFMV(l$5mi=?qNT7DNmmpFo2}W-RaINBm4+0f_|C#Ti^IglSR_piab#_WM`3M@bF1~c<1|9&W|@#`fC?JroVSQI6ghDIbtTaWb-Rfyl6FLXjv2Bzz7drP< zFFl&E>Ghh?YCoa&QFB@j*2}-SV2GbYvu2y1t-5HoSU#|K8EhX8M|Y z1-FZxdV9^K-WK=r*##p;gT8&@X)ENnj3A~g)mJC*>n1NJNb5|UYEkO+{0H~r`m{+d zv}i&;U?wsxn5=K(iFr_Fz4CZz5aV<+C8|utTGGSIvkewxK?B#+TlYVuNgYb=NRrVK zD8_;lb`%7ef;_8?EA-QJ;oCd+mgZ8|Dfr=sSc2&z9LRl)C5 zofPD!5vIcdu2%(7(pzD~jNIL%Ga5t?&lCSXpBLTuhiRv1H+C?G(`BGqiH!st;;>BW zV!K_AxRij1n1_)VM==CC4KOPz2bqV41?Aw2>B4@zJPTn7`a0{O`SU&&va+YYU`+j^u>#2$0Bga-auagy>zw6UYdJwSf7ZnRRF zg-Zf@LhMP-dM7pFEP-xqf%a6~@V5)?fEiSmZ!DJ82I|`WUWR9?^(%s&b>z75{|xEM zVOlcpbVqw`-DQ3qR4jIiOX1|n8wXCXYHt37?CuG}{wu@ytn9%Ej-udU+he@$So^ms;*pCW^7+uCT0H2S7ltFGF z07032Z=5UQCnw!+cHJ&^^la`PzAB=q->766F;O2=t5`8qsAiu+aTa!<%@=w`*#5d` zn=NSg3I}V{t$)&4?+ThlL%jou&c2+@*_Um@?Tj*P(X zKPVyhs&`m^GPH6XKQ>{Gbq#mtJ;|8az{A%@w+u_(CvOBfVRWR6c!PVAC^0EAyx@{Q za+_ezSPGIy=v{vOYY-{1kj||j^x22e0(KmlgWrZGgHeO3G;9E4*=mDcOIws!qt;Pg zE>VRV8WH0)Y{a6Zrx~w{cn$5D8zX(L#_O0D?-kY>f!%EF)Xy}9XHWAETF<>mUDo}v z7Kx}kOIbUzu@#CvbAyrteihW>R?uPxs8H^{>;y$j3k4B@UvIKFnt&svEK#!Z+~W#6 zuZ{~e{G^4EDVLbvR{eu5q>N;Md2lmqi9h*TZ%3X_zEPvz<^>3AIzTy=5yjbRK2Ceh zyd5c4>TKw3S3T$I#1(-ERI7bIO~ieFjm+d1agDLcvtmr<>8g@~QTN#NNl_&$gzC?b(&k464hp-@N?!~R2((Nf+)RDp zBbuV&H~fBdZQd-G2k!RR+GWEnLb;xxq!Fx30z z)Kzb4^g8qeA+a>@y5-C+C2mzu0w|{FVY&)8RU3$* z1Zpx{L#W7K$o?|yzMPyC)K+B;a|}ZvqAfTciliLP_%mk4+(N*8@TayF2WnD~xQs9c zx7gf}aLP}|wiU7+LyypuL5V+Aj{Y7a5QJ&LjK|&-{MJaA>6y8T zmG>SLYvshi$2kE8}W{#OITPD$1*G+<)FK-E6j4#h0TEG*=oZ!}y)XXMoEqj7%O}q| zdXr7jW;{jF4hd zCah4T#rw$G>PJypzkT_|?YDbcDNtoI%3BA63OzBn9Z_}M>kPfYbL_>C5f=-lrooA8 zPDybU9~>9aj_*d4&u9EeyUi{nyEGojbN!V4Uhe?_<+kZmaR+*IoM7m|9oJ(MA_rtVo-Yo>yC%l37s2D=1`1W{WW` zV_ix<`k4l9_{}G%?njmI_w1z0H`x(}eep_|jJ1wD^7umj+q~g9UA!Nl13zcMft{Z1 z_uC-0uyLGo%@4=Ll`Sx;moMW1*QI5yIyGXqh|{l<@bB3bL;-s#$WT?U(}>Mj5k=y% z$!z{EhGrdY=EGCtmiVUAm z{BGviPL=Zv&qtzKdmK1iEln78V$N#W?+J$g=qA^N=BfX3vfFgGw7!^inS>n}EeICOPzbm6Er9xjbv6H_** zUuzOq$UT0i1MDODmF>1JIg#y`k^BC(8*$-Dv@2$X@c6Wv4%3oVEvuZK*qJBaGU6q4 zRdLp_5(HDhMQF!r_3cEn@SCi?5d7_07i3E55hBTcrqkHXZ51sJJ8fP2-q}seU+uj( zV!N68!Kh+*oUlPJe~_;ZW{q)b^6SIGg#X0Gr%HlCc88_wh%)hG>jxX1 z=2;K&8aXgo?zNWU!nF~CmS>hRxzbMp{J>jj%@L{#=KJDgr-Zk5e8~%E93>&fOA+qh zP&qG2;yB6{lH)N_WR#7lzZw1_1I=cIamYuguCfMoZMms>{=7L04{$f-JENOq6jS9H zjX7|31QS$RG)G11?Imj~=pFdRlN}QNGcx{562N44hJRB!Kl_)ayEfR#{q|DZZ4WVz zxG<&}^$7o%D%8V@8JYZ4cc-yt<1MEzpM6FtpN&1cP+R=@zC9Ymk0NFq8t=43F~zK> zQ~>N(+g<~PI)(M2!b4=U8Kx&4YB?#D-CQBa9Pj|6V=|E2rs)=@xX!5{i74`KeGU67fX8 z2<9GTBy7wT;Njb4{Lgz&UBhZQU(MOmV_5+!^X>Bz{b?JQi)-$FNk}vxD6*9d9A8>7bUvT+<2Qd$II90qk8x zZoM5>)P(DM3`a}r0RUF)EeNgXX@&H>X@zrPsT!5|Cq;L%FxZcYsvA#4kL9xCmMl6} z?fXn4HYz>dxWNY{c&D{3t!a2m0phsZP_*gbX;uNLs6EuR-;v{_Uy0FGgi+&gnyz#nM zAP8@b=K0MO><{D8*d)U_H$0S7NaYgV@_y^TTNU5{yCVZX?9|Krw5bU#?udB!#iFsC ze+Bsrf9@LS?V}C$dVWxB>R7AAseYxw-BTj$PLw9i{!Cs8*lhb=v~aAVYv|40z?KzM zw;+#PB5VajlTM{Tk5)pXifp7?)UcXJqf^A3GLY>Q$r$#HA_&J&Dhg9>O^*vBfwQ*; ziZ&}9b8)A#-^T7}wM6r}PhUJp;LGc5e3p>@&^dtIKG9vaK_Pc z^51oub;U!EtV4a6ShNt-%!drteu83z?WfCI!OFQ_g}D+=Gtfi@Y%cxN35!&clfVMj zm6~^WiHz!KMAggIFDlJqi?-5hY&*GX2QJQ$4A!M6sg*6|y+iINTxLB+`ligvoQO9R z^hv&})g`t|s^;YuREz1HLvPKb?1Sxvk$bTLp4>)wHtjuSxcJGd5z(7ZJ}2ua0~NO^ zozSb))}@TiznXR_i^W{v+L!Wd!0)X|Q+c`HtPZX)cGsIOBr%_M=QiM>ZWetI#EZge zRjV+>zy9Y1fO@&F0C;&s_H@yslP88zch=W1&qf!#7tGG{OHQ0$DTJ6jqkvV znLA1ZwDc?w&Ya@&UlMAtd1tPCkKsz2P-Y($+}85aLPd|@I_W7EH@&`MA7swbn-?$T zZ==oQ09>{GVN?Nyb2BlxAIBc2|M{Cha{QcMNDIApy^l6_MhG5rgwp8>w7l)%S;&uS3Cq^2}vp|5<9u3`!$}YuXILe2_6!D zIodTcD!-}fXh5uNU|LO4tlM5cUKKGN$K6;t_MO639J(`X_{uT=)_LZ!-24Bd>8%3d z>YAp}!4ovNLqbS!cMtCF?kUzqi$EdU{7kE##=3^Zb$M2o%^||-=f_*q?10p>nM0yswVU4q?zCAPguNqTf@Jub( zGf2oZi&~o=et{b_-y5t>c^!7zk*|0>#iI|5IN^TV;Xs4bm>J!$Q5yW!GW`Hj8)0VPj@T|1OcvEh_dUZXalKshn_6KLy0tqyfv_7)ltX%9Im zt+?Flrw|A{I<}*}U{a%=?^(U2^tlXwv1Y%$j1om+Yb=%3j=A8IeU}KKGj$1i7FRZ> zk{(PIB|%|hA;rGteQVU454F4zY@HbVg~OAb-G(z6j1z37Os6GSBGKJ}C-7E6rfbky z$F@jXo*+iHs|Ly-7$zdEvOz#9PIZXIfs;E@+3XeY&4(NAyesa-gGa8@+Ej{70o4S5 zfA^bk)>HINM@(pBgidH?VBVYG5jUVCr3p2dlA$gq=$*#bep%LD@Iv*!*BLOJTR_2R zMK*nk41bn5!k%RKY!k3CqOrYZ_+nUBgD$vV*2dqcj#(E`0Gm730V?$DJvWc8nthTYhA)Cs-F<7n^? zFL|K1A8xxY-Q8o12IG|RP3VU4?354=i2{MZ4tpj~mU3U+KC>C|WeIO={&k8R7;rW9{-vj%z z<)?ChGjV{^(~1L7)YdjtEj~tuRFbnVoF{kYs=zKGyMC5z^(Nh>j|P!*B0eq zP~{UD)8FwyywLfmGf(S7lM&FN&qN`s>Tcq*#~WLQMy>joRAQ_Bm+VWU-h&>zb*08fHTowE9} zMzQ14s*HbH^_5r&M=OYNIgx}S_ig?#b32T!9sAEIgGlHHh^8Gc*2IKQ)Pb5irMZ&A zHO`iQDz(z8bl1jMN<8K_dR%t%HBO-@HALdctFJ#of^H=YLmIn|otDZ1*pFR^wIhfN9Y^ujg_f5p{$Tn3I# zDPykg4>~+Z>!jc7xqSD`;b~XdrCi*i8+NVMB29*CPI*^boivA53U*3E!_(09RI^p< z#iM0c+VO_Sa28$e(*v?)N)5HB0+9+$^8CC>V2^~l4(_l_I8sbQP|^s`$;Y4rt@l0g z%Cb*z)cEN)0%z?zGgk8AabDP%oql!Ryl>a1q{8<-f9Ay=M?&2toUqHr;QI+~k?!#obH|GA7`5p4Qum1P{oV}xeVx{dZ_X`LeeH{h-3ykcNq zNdJ3%Q2ddbru6||tI2RS6^H#h$mz)UTn58&|D+?Q*4^J#h=b4UzM?m@VPrzTjOPGq zvn_k%<%%Mu^_c`PaRhd8wB=_jb6w+Qz;h3igrVP{P%t1?CLn5OdePXb1>xI298j~r zfQ#d!BHo`-2@Cuf<_0nyZCr?K=(b%(bSpZqSLY?9U>Og&$NY9Stg6ZM$RSN&Fcw04UOqiFA zbuj61IL4>-*sx+9`6=@kdGG!#zX8mg4jh9x&5LSHq0e41dT0oT!XmDV_wjuME^=nB z-BNqGa1TKq7N%9&sF*AG&P$TaEw9kb-Ip2nJi1Sx5BHNHPBaMfNe5w1MgKfLf z5)I~)Z3(j+>GTfS zW=cV2CiOR>yJK9kq;We#bTQx@?@HYTVY&FN@;o(Ne9JdfWw!}YM=lHG6{}5Ij2yp! zyCUIk6yz_-&?sEqPg1I^dq^p?rVlBTUP(9v@;l-6qsOBtRM?L9LqBrSyfU(`B0t;Y zMXnow{BHh`)D7hq5T*{mKj9y4>R5iZK3lqHCc|JIcKoMSV{yo?+J9!RzuM`qYC#E~ zx&>TbEPa;ipG{6nc|>=8uL`yMT$a=r(8fmI(*w4<63aKu(7V8ATA*iG`J`w8{7v~~ zpk!vxLu@SWV%TCMi&~5opuLHKbV2YvCq774hVB5&?%KsplShlP;d_-%Fb9NQwwhjk zYjmlHl5<7EA|F!Y?6|M1l8o7#=hW!(WRWgZ_NIf}Pzp_9IAHiEes_HjWI*RVL5nP6 zAKHsg)~LI-di@3{dWtLe}>bY>FIDg$@f0a+ZT{2O6X;p9(^5FzF7T=Ne&!$ zIbF4m)>5p+Ra?Jko&ChL{)QNplKV=Vt`d$+kp_L#MsJ+Ar$iF_++0_DmFh3;d-krC0X)U!xw3rm`~l8<3Dm<&hB?)N)4WmJRx)ZiOuC&T0iUo=jki<-+#-5WXJi&98A@SW21Fetg{j-`rK5{<|o7_V)^60M@Z9XN^p-l)c!hz{PnQ>HwDwW%vb!UJ-D8?bn%jnHLj)-G{v19xz(Vo{#PVg zy{7(z%e(nW!2E5Arm4~7DspXpdU4(#zn$vb5Zv-KsT*S)X>WaG1><3$0z`I*l!RC; zz~v-#D{wlp~EETVk5d1Q-8piRO( z8W;=N>U(S`WDmTU?d5}uM2GaOG!))BV`V<(M>7fg*rv0N?|hMj{0S@%KT2+sevDpe zACL{_Pw>2+dES~*ZNA=t;uy#60eles^QCnK1y`M-+}J01zy!*nJoH2x^g9C+)S8WG z;kh6uh8B!1ip*(g{_7+0WwzRVP3oyvDgR@#0dfeMBJzEbId8AG2TkwBu;piZrgV|C zAS*u)3b5)sPJf}h9F;$px;-4~4n>6QGqw|D(m&SBCMLw6_z%T1%u&sEGZ}jE(tmH7 zxM{GB9!T9VBt0&o-Tr3D`IRS!5PQPF|0V02Q%WF6DP06R;Bn*#w3XM_0(3EOhSU+n zw1vd}T)tU8c?RyKk1%7!8N=Bbbf2P^ZCyjWr z+^N2iTL!bOH@$zuwal_thrYjgIQQjQLc9YNhIe^B*VQeZLTtu{CEY|Pl90jYwFyI{ zh81BsXQ+9XbKSHL&y#_pDu2p|gx`#Kdkd~AaN~DcwwIPFjrK2LKG2yffP53P@pYy| z89K1aipRKO#&Q0EP=tv5*$Z#}^hrMU_O|*udT-2yQPe)XVD{d)C#owbZp$T)rZ$H9 z!)fVC6j(5IN%}fh0R2`r#Y9mko z(iOeGU6WvmaIpV#WmoM-)5zK?LK@rWhN)xt-q2GBEJDppM<9nwHC)n*DC3}pm$0$> zB#d`*@U{E1>+SQy1J{K8$m%RVKj*1=Gl%Vm;shEJxj17Yga+N{W(+W1)agMFf|>8y zBZ?EG=J2+SLpg<2giYElv+cz&`TluT!G{|ilEU^Dgd^*SUWpEQO>O3aZ|JX)Dbau` zURl3)Zq^36Y=+k_ed}}lU?$8;*<@V*XPx{$V0-(k_#B<{|Dk;-(8G3Ml|M*J#FtwMPGlTl%hW_ zQ`R-JKLVaMd_LnJHT3zn^(|yefNFxrb8-oM_MNHuF9Xn#Zaf*+x1WJye_A~W9rCr- zL0uKWA*H1y8*(Zs^g9+IC(!2A=GE`=tlH1ZH)i_kvO(1l`Qy{qG>hoNGh(<-o{D>7 z*H4Ld+W$uV`e8IphA*~%mWv}@1dPqh1nO>M_8!{GGb}PCLIqRM*`%)Bf)&)_k@6%L zrnim+dt_g4*W$qoBT^X`Eo$U`-3)ya$%`ljReR3LQC=Y*%R1zK96y_YTzrx$chXms zVzSer>P`0Z;Cy!23%+cgU-_;hcureGNr{;LTviyJHP?S&KpUlH9yf~4YAgl|s_z11 z;q%d9LvN_5YSB3rvwJ*H#EL8l0UB-uZh$A$KE~PZIDYw@xv(kfIF_vvwS2V zXWMUhYHjF{KwU#wn3T;lZ0vMk$r6#m!tZCRtV&h-a2^EOEu6s^p;>ifUDKS(^fle* zu7`8gpj~Zd>wYRJo|^^-R}z|Ul&h^hs5Nvi0KKWp)n9q~3SR@9zmnMB*m2RkyVom! zVCWcsuV=9;SUA}5mds3bn(>v=;Z%1`MsHGl^F-?3vEky@^b!{4rNr{bDEN(?T5h+X z;f%glWbNM3{DA%q*X?3b1BZ;~av-5Y7pE8*+@CU@{jzq(Vk!PLOy=^!Go#dr)qWmq zX(WFMNMZb9HY8xi3^qe0E6xwNQVXCkzZ3G|>sOqEX$|W?E2Ulcgy6qkGQ2h2Xq&4X z&ZF|XJsr#ZDDKc$*9u+{YAW6?3sLli2_k&u4HbNuOJCHgQt&)Ixy0XkXnT1dygWVS z5!-mQUco4IC_kDsW+s?Qa#bL8K}08G&5LtDbYv511)x4a2m6B=6$rsm8%@ri51Cf* z>CSH_h<-g62ySaenQP6jJVc2Y=m={)zrJ)!R(gjNER(prW8~BGFZeLSm7zaT{JZOv zp2#w^fMArPLqt>C3XmFD{VhL}NB83bmwYd6szxK3WLtEOt@?rE-x<;5I%aMv5h0V7yHA3AuYWmm1Sw`%=m|%M=bWE9x4MCU;-TlaV0)^5pEb) z!IM}3+}Wi2m}+g+`wetiyt>Tjknc@`(j2D(rDz7N~BySrUYJ(o$_pg>Q;YtGua?fz&+#2G7se*!*F zwou~WAI z4$&JuxVqS}KH(0caQBza5Br0qQ55v|pO3h!Mg0a*#I3lX%qgCAd9m|6CWEl$y;65( zg^Vlr^ClRwN(Uv9!Xx-Vx#tn4LE@dq@<|d;WG_M_qKk z8r1~xFL8XhFl`wMg1s1(ZwtRsx8R-V9=kpiJ#3<|zz_sq zwMD|2WolnQ2YYaBX(OYX|2tXnHgB!S6nKN3<|te7<|*Js+H*#s{AyycvFQI1?)&E7 z9tX{4C#U>@j!QM8QJL{B?1DBT=1NVZ3yQ>b25ew-^{O36miQ2bcd7b0n_W*}^9DsN zot;F#+Q)@ki@E`lh1O4>8caj_*Q)SZ8h zEpn9_JW8sJ3eTZdMxo>RhS5KF?}xAiJ^;>$F`bcy5L3CiSEG6K5gFJZqZ2=>0 zS*3<1ol!$I^zZJEbt9xBcRUrpOBCm#u5O$Rej5P??nBwb^_k36ajx5JL&)?Gny;4p z_i#LbopVMhCfW#eUVn@ptG8xH87T#{p-9y>r~Y`#X4pIXJ`P=$V-$=^j70TsIR5YF ze=#nmD&942nE$4MP zN44<_?v6WmM(_Q08)aA=pc*&nvw=ijt@!gt#W9CZZJPs#T z)~gXe^cu@*Fz)VzOXzqM*~#Z|?OXGW{d9sJf)3ebm{6l1=boO?`NKoQs2;XWD)}kg zL}Alx%_%nI+($PLN6c{@gow&<*ey9B;DznDtl52)1wUhJS6F<7GZwD9%_seRVvSN1 zj7&K52is_!*}z7o{3lkL`xu>vb17$AkV-h_Ck5#G4zD_S+{S%`)wpC*;a>G`-ZD16 z*DTp~;6+i^{Cxx-6{K@~R5p|(A~rRQ zHl;NlB!o%${d;�J`G(IGKv`FITcy3{kA=lZYs#%6+W+Cn=Wu@ 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 N6$MTCDp~8u{{w*XM}7bR literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy/offers_banner_ar.png b/assets/images/pharmacy/offers_banner_ar.png new file mode 100644 index 0000000000000000000000000000000000000000..d987d3c630da14832433e118426dff2b1a06b4c6 GIT binary patch literal 57673 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 Welb$px*zC%1C$`@;Br}u&;JL~@vCtF literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy_module/offers_banner.png b/assets/images/pharmacy_module/offers_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..6eab63fb59432fe9b38fb8af682ec42378512fe1 GIT binary patch literal 60027 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�J`G(IGKv`FITcy3{kA=lZYs#%6+W+Cn=Wu@ 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 N6$MTCDp~8u{{w*XM}7bR literal 0 HcmV?d00001 diff --git a/assets/images/pharmacy_module/offers_banner_ar.png b/assets/images/pharmacy_module/offers_banner_ar.png new file mode 100644 index 0000000000000000000000000000000000000000..d987d3c630da14832433e118426dff2b1a06b4c6 GIT binary patch literal 57673 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 Welb$px*zC%1C$`@;Br}u&;JL~@vCtF literal 0 HcmV?d00001 diff --git a/lib/config/config.dart b/lib/config/config.dart index bbbacaa4..fe92ba99 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -14,8 +14,8 @@ const PACKAGES_PRODUCTS = '/api/products'; const PACKAGES_CUSTOMER = '/api/customers'; const PACKAGES_SHOPPING_CART = '/api/shopping_cart_items'; const PACKAGES_ORDERS = '/api/orders'; -const BASE_URL = 'https://uat.hmgwebservices.com/'; -// const BASE_URL = 'https://hmgwebservices.com/'; +// const BASE_URL = 'https://uat.hmgwebservices.com/'; +const BASE_URL = 'https://hmgwebservices.com/'; // Pharmacy UAT URLs // const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; @@ -457,6 +457,11 @@ const ADD_RRT_ORDER_RC = "rc/api/rrt/add"; const GET_ALL_RRT_ORDERS_RC = "rc/api/rrt/list"; const UPDATE_RRT_ORDER_RC = 'rc/api/rrt/update'; +// PRESCRIPTION RC SERVICES +const ADD_PRESCRIPTION_ORDER_RC = "rc/api/prescription/add"; +const GET_ALL_PRESCRIPTION_ORDERS_RC = "rc/api/prescription/list"; +const UPDATE_PRESCRIPTION_ORDER_RC = 'rc/api/prescription/update'; + //Pharmacy wishlist const GET_WISHLIST = "shopping_cart_items/"; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 4e085e46..f26dccf5 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1596,7 +1596,7 @@ const Map localizedValues = { "ios-instructions-2": { "en": "Make sure that your Apple Watch is connected with the Watch & Health Apps.", "ar": "تأكد من اتصال Apple Watch بتطبيقات Watch & Health." }, "ios-instructions-3": { "en": "Make sure that data like heart rate, steps, distance etc. are being shown on your health app.", "ar": "تأكد من عرض بيانات مثل معدل ضربات القلب والخطوات والمسافة وما إلى ذلك على تطبيق صحتك." }, "supportedWatches": { "en": "Supported SmartWatches", "ar": "الساعات الذكية المدعومة" }, - "watchInstructions": { "en": "Watch Instructions:", "ar": "تعليمات الساعة:" }, + "watchInstructions": { "en": "View watch instructions", "ar": "عرض تعليمات الساعة" }, "monthlyTab": {"en": "Monthly", "ar": "شهري"}, "moreSupportedWatches": {"en": "More Supported Smartwatches...", "ar": "المزيد من الساعات الذكية المدعومة..."}, "android-instructions-1": { "en": "Make sure that you have installed 'WearOS' & 'Google Fit' apps from Google PlayStore.", "ar": "تأكد من تثبيت تطبيقات 'WearOS' و 'Google Fit' من متجر Google PlayStore." }, diff --git a/lib/core/service/PrescriptionDeliveryService.dart b/lib/core/service/PrescriptionDeliveryService.dart index c36efe89..104b390d 100644 --- a/lib/core/service/PrescriptionDeliveryService.dart +++ b/lib/core/service/PrescriptionDeliveryService.dart @@ -2,13 +2,7 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart'; class PrescriptionDeliveryService extends BaseService { - Future insertDeliveryOrder( - {int lineItemNo, - double latitude, - double longitude, - int appointmentNo, - int createdBy, - int dischargeID}) async { + Future insertDeliveryOrder({int lineItemNo, double latitude, double longitude, int appointmentNo, int createdBy, int dischargeID}) async { hasError = false; Map body = Map(); body['LineItemNo'] = lineItemNo; @@ -17,11 +11,26 @@ class PrescriptionDeliveryService extends BaseService { body['AppointmentNo'] = appointmentNo; body['CreatedBy'] = createdBy; body['DischargeID'] = dischargeID; - await baseAppClient.post(INSERT_ER_INERT_PRES_ORDER, - onSuccess: (dynamic response, int statusCode) { - var asd=""; - }, - onFailure: (String error, int statusCode) { + await baseAppClient.post(INSERT_ER_INERT_PRES_ORDER, onSuccess: (dynamic response, int statusCode) { + var asd = ""; + }, onFailure: (String error, int statusCode) { + hasError = true; + print(error); + super.error = error; + }, body: body); + } + + Future insertDeliveryOrderRC({double latitude, double longitude, int appointmentNo, int createdBy, int dischargeID}) async { + hasError = false; + Map body = Map(); + body['latitude'] = latitude; + body['longitude'] = longitude; + body['AppointmentNo'] = appointmentNo; + body['CreatedBy'] = createdBy; + body['DischargeID'] = dischargeID; + await baseAppClient.post(ADD_PRESCRIPTION_ORDER_RC, onSuccess: (dynamic response, int statusCode) { + var asd = ""; + }, onFailure: (String error, int statusCode) { hasError = true; print(error); super.error = error; diff --git a/lib/core/viewModels/medical/PrescriptionDeliveryViewModel.dart b/lib/core/viewModels/medical/PrescriptionDeliveryViewModel.dart index 424a4b20..ada4da78 100644 --- a/lib/core/viewModels/medical/PrescriptionDeliveryViewModel.dart +++ b/lib/core/viewModels/medical/PrescriptionDeliveryViewModel.dart @@ -7,15 +7,11 @@ import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import '../../../locator.dart'; class PrescriptionDeliveryViewModel extends BaseViewModel { - CustomerAddressesService _customerAddressesService = - locator(); - PharmacyModuleService _pharmacyModuleService = - locator(); - PrescriptionDeliveryService _prescriptionDeliveryService = - locator(); + CustomerAddressesService _customerAddressesService = locator(); + PharmacyModuleService _pharmacyModuleService = locator(); + PrescriptionDeliveryService _prescriptionDeliveryService = locator(); - List get addressesList => - _customerAddressesService.addressesList; + List get addressesList => _customerAddressesService.addressesList; Future getCustomerInfo() async { setState(ViewState.Busy); @@ -27,28 +23,16 @@ class PrescriptionDeliveryViewModel extends BaseViewModel { if (_customerAddressesService.hasError) { error = _customerAddressesService.error; setState(ViewState.ErrorLocal); - } else { - } + } else {} await getCustomerAddresses(); } - Future insertDeliveryOrder( - {int lineItemNo, - double latitude, - double longitude, - int appointmentNo, - int createdBy, - int dischargeID}) async { - + Future insertDeliveryOrder({int lineItemNo, double latitude, double longitude, int appointmentNo, int createdBy, int dischargeID}) async { setState(ViewState.BusyLocal); - await _prescriptionDeliveryService.insertDeliveryOrder( - lineItemNo: lineItemNo, - latitude: latitude, - longitude: longitude, - appointmentNo: appointmentNo, - createdBy: createdBy, - dischargeID: dischargeID - ); + // await _prescriptionDeliveryService.insertDeliveryOrder( + // lineItemNo: lineItemNo, latitude: latitude, longitude: longitude, appointmentNo: appointmentNo, createdBy: createdBy, dischargeID: dischargeID); + await _prescriptionDeliveryService.insertDeliveryOrderRC( + latitude: latitude, longitude: longitude, appointmentNo: appointmentNo, createdBy: createdBy, dischargeID: dischargeID); if (_prescriptionDeliveryService.hasError) { error = _prescriptionDeliveryService.error; setState(ViewState.ErrorLocal); diff --git a/lib/core/viewModels/medical/prescriptions_view_model.dart b/lib/core/viewModels/medical/prescriptions_view_model.dart index 0c1fafdf..03018878 100644 --- a/lib/core/viewModels/medical/prescriptions_view_model.dart +++ b/lib/core/viewModels/medical/prescriptions_view_model.dart @@ -77,7 +77,6 @@ class PrescriptionsViewModel extends BaseViewModel { } getPrescriptionsOrders({bool showLoading = false}) async { - // print(showLoading); setState(ViewState.Busy); Future.delayed(new Duration(milliseconds: 300)).then((value) async { await _prescriptionsService.getPrescriptionsOrders(); diff --git a/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart b/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart index facccf1e..27fe3234 100644 --- a/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart +++ b/lib/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart @@ -1,16 +1,12 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; -import 'package:diplomaticquarterapp/core/model/pharmacies/Manufacturer.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyImageObject.dart'; -import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; -import 'package:diplomaticquarterapp/core/model/pharmacies/Prescriptions.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/recommendedProduct_model.dart'; -import 'package:diplomaticquarterapp/core/service/medical/prescriptions_service.dart'; //import 'package:diplomaticquarterapp/core/model/prescriptions/perscription_pharmacy.dart'; import 'package:diplomaticquarterapp/core/service/parmacyModule/parmacy_module_service.dart'; -import 'package:diplomaticquarterapp/core/service/parmacyModule/prescription_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/services/pharmacy_services/recommendedProduct_service.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/navigation_service.dart'; @@ -20,13 +16,11 @@ import '../../../locator.dart'; class PharmacyModuleViewModel extends BaseViewModel { PharmacyModuleService _pharmacyService = locator(); - RecommendedProductService _recommendedProductService = - locator(); + RecommendedProductService _recommendedProductService = locator(); List get bannerList => _pharmacyService.bannerItems; - List get recommendedProductList => - _recommendedProductService.recommendedList; + List get recommendedProductList => _recommendedProductService.recommendedList; Future generatePharmacyToken() async { setState(ViewState.Busy); @@ -40,8 +34,6 @@ class PharmacyModuleViewModel extends BaseViewModel { } Future verifyCustomer() async { - // if (authenticatedUserObject.isLogin) await generatePharmacyToken(); - var data = await sharedPref.getObject(USER_PROFILE); var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID); @@ -70,11 +62,9 @@ class PharmacyModuleViewModel extends BaseViewModel { Future getBannerList() async { if (bannerList.isEmpty) { - GifLoaderDialogUtils.showMyDialog( - locator().navigatorKey.currentContext); + GifLoaderDialogUtils.showMyDialog(locator().navigatorKey.currentContext); await _pharmacyService.getBannerListList(); - GifLoaderDialogUtils.hideDialog( - locator().navigatorKey.currentContext); + GifLoaderDialogUtils.hideDialog(locator().navigatorKey.currentContext); if (_pharmacyService.hasError) { error = _pharmacyService.error; setState(ViewState.Error); @@ -83,9 +73,15 @@ class PharmacyModuleViewModel extends BaseViewModel { } } - List getBannerImagesUrl() { + List getBannerImagesUrl(ProjectViewModel projectViewModel) { List images = List(); images.add('assets/images/pharmacy_module/pharmacy_logo_green.png'); + + if (projectViewModel.isArabic) + images.add('assets/images/pharmacy_module/offers_banner_ar.png'); + else + images.add('assets/images/pharmacy_module/offers_banner.png'); + _pharmacyService.bannerItems.forEach((element) { images.add(element.src); }); diff --git a/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart b/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart index d4dd6efe..986fb848 100644 --- a/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart +++ b/lib/pages/medical/prescriptions/PrescriptionOrderOverveiw.dart @@ -171,7 +171,7 @@ class PrescriptionOrderOverview extends StatelessWidget { GifLoaderDialogUtils.showMyDialog(context); await model .insertDeliveryOrder( - lineItemNo: 0, + lineItemNo: 1, longitude: longitude, latitude: latitude, appointmentNo: prescriptions.appointmentNo, diff --git a/lib/pages/medical/smart_watch_health_data/heartrate/heartrateTracker.dart b/lib/pages/medical/smart_watch_health_data/heartrate/heartrateTracker.dart index da82d540..077ed4bf 100644 --- a/lib/pages/medical/smart_watch_health_data/heartrate/heartrateTracker.dart +++ b/lib/pages/medical/smart_watch_health_data/heartrate/heartrateTracker.dart @@ -107,7 +107,11 @@ class _HeartRateTrackerState extends State with SingleTickerPr child: new TabBarView( physics: NeverScrollableScrollPhysics(), children: [ - isWeeklyDataLoaded ? getWeeklyHeartRateDetails() : Container(), + isWeeklyDataLoaded + ? avgWeeklyHearRateValue != 0 + ? getWeeklyHeartRateDetails() + : getNoDataWidget(context) + : Container(), isMonthlyDataLoaded ? getMonthlyHeartRateDetails() : Container(), isYearlyDataLoaded ? getYearlyHeartRateDetails() : Container() ], @@ -135,9 +139,11 @@ class _HeartRateTrackerState extends State with SingleTickerPr weeklyDataLength++; } }); - generateWeekData(); + if (weekyHearRateList.isNotEmpty) generateWeekData(); setState(() { - weeklyStatsAvgValue = avgWeeklyHearRateValue ~/ weeklyDataLength; + if (avgWeeklyHearRateValue != 0) { + weeklyStatsAvgValue = avgWeeklyHearRateValue ~/ weeklyDataLength; + } isWeeklyDataLoaded = true; }); }).catchError((err) { diff --git a/lib/pages/medical/smart_watch_health_data/smart_watch_instructions.dart b/lib/pages/medical/smart_watch_health_data/smart_watch_instructions.dart index 4fc233db..17d9d8a8 100644 --- a/lib/pages/medical/smart_watch_health_data/smart_watch_instructions.dart +++ b/lib/pages/medical/smart_watch_health_data/smart_watch_instructions.dart @@ -9,7 +9,6 @@ import 'package:diplomaticquarterapp/services/smartwatch_integration/SmartWatchI import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; @@ -40,19 +39,31 @@ class _SmartWatchInstructionsState extends State { @override Widget build(BuildContext context) { return AppScaffold( - appBarTitle: TranslationBase.of(context).smartWatches, - isShowAppBar: true, - isShowDecPage: true, - showNewAppBar: true, - showNewAppBarTitle: true, - description: TranslationBase.of(context).infoHealthData, - imagesInfo: [ - ImagesInfo(imageEn: 'https://hmgwebservices.com/Images/MobileApp/imges-info/health-data/en/0.png', imageAr: 'https://hmgwebservices.com/Images/MobileApp/imges-info/health-data/ar/0.png'), - ImagesInfo(imageEn: 'https://hmgwebservices.com/Images/MobileApp/imges-info/health-data/en/1.png', imageAr: 'https://hmgwebservices.com/Images/MobileApp/imges-info/health-data/ar/1.png') - ], - body: Container( - child: Platform.isIOS ? _getAppleWatchInstructions() : _getGoogleWatchInstructions(), - )); + appBarTitle: TranslationBase.of(context).smartWatches, + isShowAppBar: true, + isShowDecPage: true, + showNewAppBar: true, + showNewAppBarTitle: true, + description: TranslationBase.of(context).infoHealthData, + imagesInfo: [ + ImagesInfo(imageEn: 'https://hmgwebservices.com/Images/MobileApp/imges-info/health-data/en/0.png', imageAr: 'https://hmgwebservices.com/Images/MobileApp/imges-info/health-data/ar/0.png'), + ImagesInfo(imageEn: 'https://hmgwebservices.com/Images/MobileApp/imges-info/health-data/en/1.png', imageAr: 'https://hmgwebservices.com/Images/MobileApp/imges-info/health-data/ar/1.png') + ], + body: Container( + child: Platform.isIOS ? _getAppleWatchInstructions() : _getGoogleWatchInstructions(), + ), + bottomSheet: Container( + color: Theme.of(context).scaffoldBackgroundColor, + padding: EdgeInsets.fromLTRB(15.0, 0.0, 15.0, 30.0), + child: DefaultButton( + TranslationBase.of(context).continues, + () { + _openHealthDataList(); + }, + color: Color(0xff359846), + ), + ), + ); } _getAppleWatchInstructions() { @@ -61,250 +72,200 @@ class _SmartWatchInstructionsState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Flexible( - child: CarouselSlider( - carouselController: buttonCarouselController, - options: CarouselOptions(enableInfiniteScroll: false, viewportFraction: 0.95, height: MediaQuery.of(context).size.height * 0.9), - items: [1, 2].map((i) { - return Builder( - builder: (BuildContext context) { - return Container( - width: MediaQuery.of(context).size.width, - margin: EdgeInsets.symmetric(horizontal: 5.0), - child: Card( - margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), - color: Colors.white.withOpacity(1.0), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), + Container( + width: double.infinity, + margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + margin: EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Text(TranslationBase.of(context).supportedWatches, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600)), + ), + Container( + child: Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/apple-watch-1.jpeg", width: 70.0, height: 70.0), + Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8.0), + child: Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Apple Watch Series 1", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ), + ) + ], ), - child: i == 1 - ? Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - margin: EdgeInsets.only(top: 10.0, left: 15.0, right: 15.0), - child: Text(TranslationBase.of(context).supportedWatches, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold)), - ), - Container( - child: Row( - children: [ - Expanded( - child: Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/apple-watch-1.jpeg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Apple Watch Series 1", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/apple-watch-2.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Apple Watch Series 2", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - ], - ), - ), - Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/apple-watch-3.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Apple Watch Series 3", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/apple-watch-4.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Apple Watch Series 4", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - ], - ), - ), - Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/apple-watch-5.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Apple Watch Series 5", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/Apple-Watch-6.png", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Apple Watch Series 6", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - ], - ), - ), - Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/miBand3.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Mi Band 3", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/miBand4.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Mi Band 4", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - ], - ), - ), - Container( - margin: EdgeInsets.fromLTRB(10.0, 30.0, 10.0, 10.0), - child: Text(TranslationBase.of(context).syncInstructionsIntro1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), - ), - Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).syncInstructionsIntro2, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), - ), - Container( - margin: EdgeInsets.fromLTRB(15.0, 40.0, 15.0, 0.0), - child: DefaultButton( - TranslationBase.of(context).continues, - () { - buttonCarouselController.nextPage(); - }, - color: Color(0xff359846), - ), - ), - ], - ) - : Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), - child: Text(TranslationBase.of(context).watchInstructions, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold)), - ), - Container( - margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), - child: Text(TranslationBase.of(context).syncInstructionsIntro1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), - ), - Container( - margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), - child: Text(TranslationBase.of(context).syncInstructionsIntro3, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), - ), - Container( - margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), - child: Text(TranslationBase.of(context).iosInstructions1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), - ), - Container( - margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), - child: Text(TranslationBase.of(context).iosInstructions2, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), - ), - Container( - margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), - child: Text(TranslationBase.of(context).iosInstructions3, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), - ), - Padding( - padding: const EdgeInsets.fromLTRB(12.0, 50.0, 12.0, 20.0), - child: Row( - children: [ - Expanded( - child: DefaultButton( - TranslationBase.of(context).syncHealthData, - () {}, - color: Color(0xFFD02127), - disabledColor: Color(0xff28323A).withOpacity(0.3), - ), - ), - mWidth(12), - if (hasAlreadySynced) - Expanded( - child: DefaultButton( - TranslationBase.of(context).alreadySynced, - () { - _openHealthDataList(); - }, - color: Color(0xff359846), - ), - ), - ], - ), - ), - ], + ), + ), + Expanded( + child: Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/apple-watch-2.jpg", width: 70.0, height: 70.0), + Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8.0), + child: Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Apple Watch Series 2", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ), + ) + ], + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/apple-watch-3.jpg", width: 70.0, height: 70.0), + Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8.0), + child: Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Apple Watch Series 3", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ), + ) + ], + ), + ), + ), + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/apple-watch-4.jpg", width: 70.0, height: 70.0), + Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8.0), + child: Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Apple Watch Series 4", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ), + ) + ], + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/apple-watch-5.jpg", width: 70.0, height: 70.0), + Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8.0), + child: Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Apple Watch Series 5", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ), + ) + ], + ), + ), + ), + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/Apple-Watch-6.png", width: 70.0, height: 70.0), + Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8.0), + child: Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Apple Watch Series 6", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ), + ) + ], + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/miBand3.jpg", width: 70.0, height: 70.0), + Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8.0), + child: Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Mi Band 3", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ), + ) + ], + ), + ), + ), + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/miBand4.jpg", width: 70.0, height: 70.0), + Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8.0), + child: Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Mi Band 4", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), ), - )); + ) + ], + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.fromLTRB(10.0, 30.0, 10.0, 10.0), + child: Text(TranslationBase.of(context).syncInstructionsIntro1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), + ), + Container( + margin: EdgeInsets.all(10.0), + child: Text(TranslationBase.of(context).syncInstructionsIntro2, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), + ), + InkWell( + onTap: () { + showInstructionsDialog(); }, - ); - }).toList(), + child: Padding( + padding: const EdgeInsets.only(left: 10.0, right: 10.0), + child: Text(TranslationBase.of(context).watchInstructions, + style: TextStyle(color: CustomColors.accentColor, fontWeight: FontWeight.w600, letterSpacing: -0.64, decoration: TextDecoration.underline)), + ), + ), + ], ), - ) + ), ], ), ); @@ -312,204 +273,245 @@ class _SmartWatchInstructionsState extends State { _getGoogleWatchInstructions() { return SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - margin: EdgeInsets.only(top: 10.0), - child: CarouselSlider( - carouselController: buttonCarouselController, - options: CarouselOptions( - // enableInfiniteScroll: true, - viewportFraction: 0.99, - height: MediaQuery.of(context).size.height * 0.9), - items: [1, 2].map((i) { - return Builder( - builder: (BuildContext context) { - return Container( - width: MediaQuery.of(context).size.width, - margin: EdgeInsets.symmetric(horizontal: 5.0), - child: Card( - margin: EdgeInsets.only(top: 16.0, bottom: 8.0), - // fromLTRB(8.0, 16.0, 8.0, 8.0), - color: Colors.white.withOpacity(1.0), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), + child: Container( + width: double.infinity, + margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + child: Text(TranslationBase.of(context).supportedWatches, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600)), + ), + Container( + child: Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/huawei-watch-2.png", width: 70.0, height: 70.0), + Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Huawei Watch 2", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + Expanded( + child: Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/ticwatche2.png", width: 70.0, height: 70.0), + Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Mobovi TicWatch E2", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/huawei-watch-2-classic.png", width: 70.0, height: 70.0), + Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Huawei Watch", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/ticwatche2.png", width: 70.0, height: 70.0), + Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Fossil Sport", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/misfit-vapor-2.jpg", width: 70.0, height: 70.0), + Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("MisFit Vapor 2", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/lg-watch-sport.jpg", width: 70.0, height: 70.0), + Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("LG Watch Sport", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/miBand3.jpg", width: 70.0, height: 70.0), + Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Mi Band 3", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + Expanded( + child: Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + Image.asset("assets/images/SmartWatches/miBand4.jpg", width: 70.0, height: 70.0), + Container( + width: MediaQuery.of(context).size.width * 0.22, + child: Text("Mi Band 4", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + ], + ), + ), + InkWell( + onTap: () { + launch("https://wearos.google.com/#find-your-watch"); + }, + child: Container( + margin: EdgeInsets.only(top: 20.0), + child: Text(TranslationBase.of(context).moreSupportedWatches, style: TextStyle(fontSize: 14.0, color: Colors.blue, decoration: TextDecoration.underline, letterSpacing: -0.36)), + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Text(TranslationBase.of(context).syncInstructionsIntro1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), + ), + Container( + margin: EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Text(TranslationBase.of(context).syncInstructionsIntro2, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), + ), + InkWell( + onTap: () { + showInstructionsDialog(); + }, + child: Padding( + padding: const EdgeInsets.only(top: 10.0, bottom: 10.0), + child: Text(TranslationBase.of(context).watchInstructions, + style: TextStyle(color: CustomColors.accentColor, fontWeight: FontWeight.w600, letterSpacing: -0.64, decoration: TextDecoration.underline)), + ), + ), + ], + ), + ), + ); + } + + showInstructionsDialog() { + showGeneralDialog( + barrierColor: Colors.black.withOpacity(0.5), + transitionBuilder: (context, a1, a2, widget) { + final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0; + return Transform( + transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0), + child: Opacity( + opacity: a1.value, + child: Dialog( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: 350.0, + color: Colors.white, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: MediaQuery.of(context).size.width, + padding: EdgeInsets.all(20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(TranslationBase.of(context).smartWatches, style: TextStyle(fontSize: 22.0, color: Colors.black, fontWeight: FontWeight.w600, letterSpacing: -0.64)), + IconButton( + icon: Icon( + Icons.close, + color: Colors.black, + ), + onPressed: () { + Navigator.pop(context); + }, + ), + ], + ), ), - child: i == 1 + Container( + margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 10.0), + child: Text(TranslationBase.of(context).syncInstructionsIntro3, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), + ), + Platform.isIOS ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - margin: EdgeInsets.only(top: 10.0, left: 15.0, right: 15.0), - child: Text(TranslationBase.of(context).supportedWatches, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold)), - ), - Container( - child: Row( - children: [ - Expanded( - child: Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/huawei-watch-2.png", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Huawei Watch 2", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/ticwatche2.png", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Mobovi TicWatch E2", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - ], - ), - ), - Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/huawei-watch-2-classic.png", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Huawei Watch", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/ticwatche2.png", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Fossil Sport", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - ], - ), - ), - Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/misfit-vapor-2.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("MisFit Vapor 2", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/lg-watch-sport.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("LG Watch Sport", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - ], - ), - ), - Container( - margin: EdgeInsets.only(top: 10.0), - child: Row( - children: [ - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/miBand3.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Mi Band 3", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - Expanded( - child: Container( - margin: EdgeInsets.only(top: 15.0), - child: Row( - children: [ - Image.asset("assets/images/SmartWatches/miBand4.jpg", width: 70.0, height: 70.0), - Container( - width: MediaQuery.of(context).size.width * 0.22, - child: Text("Mi Band 4", overflow: TextOverflow.clip, style: TextStyle(fontSize: 12.0)), - ) - ], - ), - ), - ), - ], - ), - ), - InkWell( - onTap: () { - launch("https://wearos.google.com/#find-your-watch"); - }, - child: Container( - margin: EdgeInsets.only(top: 20.0, left: 15.0, right: 15.0), - child: Text(TranslationBase.of(context).moreSupportedWatches, - textAlign: TextAlign.center, style: TextStyle(fontSize: 14.0, color: Colors.blue, decoration: TextDecoration.underline, letterSpacing: -0.36)), - ), - ), - Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).syncInstructionsIntro1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 10.0), + child: Text(TranslationBase.of(context).iosInstructions1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), ), Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).syncInstructionsIntro2, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 10.0), + child: Text(TranslationBase.of(context).iosInstructions2, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), ), Container( - margin: EdgeInsets.all(15.0), - child: DefaultButton( - TranslationBase.of(context).continues, - () { - buttonCarouselController.nextPage(); - }, - color: CustomColors.green, - ), + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 21.0), + child: Text(TranslationBase.of(context).iosInstructions3, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), ), ], ) @@ -517,114 +519,37 @@ class _SmartWatchInstructionsState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - margin: EdgeInsets.only(top: 10.0, left: 15.0, right: 15.0), - child: Text(TranslationBase.of(context).watchInstructions, style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold)), - ), - Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).syncInstructionsIntro1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.34)), + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 10.0), + child: Text(TranslationBase.of(context).androidInstructions1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), ), Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).syncInstructionsIntro3, style: TextStyle(fontSize: 14.0, letterSpacing: -0.34)), + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 10.0), + child: Text(TranslationBase.of(context).androidInstructions2, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), ), Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).androidInstructions1, style: TextStyle(fontSize: 14.0, letterSpacing: -0.34)), + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 10.0), + child: Text(TranslationBase.of(context).androidInstructions3, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), ), Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).androidInstructions2, style: TextStyle(fontSize: 14.0, letterSpacing: -0.34)), + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 10.0), + child: Text(TranslationBase.of(context).androidInstructions4, style: TextStyle(fontSize: 14.0, letterSpacing: -0.36)), ), - Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).androidInstructions3, style: TextStyle(fontSize: 14.0, letterSpacing: -0.34)), - ), - Container( - margin: EdgeInsets.all(10.0), - child: Text(TranslationBase.of(context).androidInstructions4, style: TextStyle(fontSize: 14.0, letterSpacing: -0.34)), - ), - Padding( - padding: const EdgeInsets.fromLTRB(12.0, 50.0, 12.0, 20.0), - child: Row( - children: [ - Expanded( - child: DefaultButton( - TranslationBase.of(context).syncHealthData, - () {}, - color: Color(0xFFD02127), - disabledColor: Color(0xff28323A).withOpacity(0.3), - ), - ), - mWidth(12), - if (hasAlreadySynced) - Expanded( - child: DefaultButton( - TranslationBase.of(context).alreadySynced, - () { - _openHealthDataList(); - }, - color: Color(0xff359846), - ), - ), - ], - ), - ), - // Container( - // margin: EdgeInsets.fromLTRB(15.0, 75.0, 15.0, 15.0), - // child: ButtonTheme( - // shape: RoundedRectangleBorder( - // borderRadius: BorderRadius.circular(10.0), - // ), - // minWidth: MediaQuery.of(context).size.width, - // height: 45.0, - // child: RaisedButton( - // color: new Color(0xFF60686b), - // textColor: Colors.white, - // elevation: 0, - // disabledTextColor: Colors.white, - // disabledColor: new Color(0xFFbcc2c4), - // onPressed: () { - // buttonCarouselController.nextPage(); - // }, - // child: Text("SYNC HEALTH DATA", style: TextStyle(fontSize: 18.0)), - // ), - // ), - // ), - // hasAlreadySynced - // ? Container( - // margin: EdgeInsets.fromLTRB(15.0, 0.0, 15.0, 15.0), - // child: ButtonTheme( - // shape: RoundedRectangleBorder( - // borderRadius: BorderRadius.circular(10.0), - // ), - // minWidth: MediaQuery.of(context).size.width, - // height: 45.0, - // child: RaisedButton( - // color: new Color(0xFF60686b), - // textColor: Colors.white, - // elevation: 0, - // disabledTextColor: Colors.white, - // disabledColor: new Color(0xFFbcc2c4), - // onPressed: () { - // _openHealthDataList(); - // }, - // child: Text("ALREADY SYNCED", style: TextStyle(fontSize: 18.0)), - // ), - // ), - // ) - // : Container(), ], ), - )); - }, - ); - }).toList(), + ], + ), + ), + ], + ), + ), ), - ) - ], - ), - ); + ); + }, + transitionDuration: Duration(milliseconds: 500), + barrierDismissible: true, + barrierLabel: '', + context: context, + pageBuilder: (context, animation1, animation2) {}); } getLastPatientRecord(BuildContext context) { diff --git a/lib/pages/pharmacies/screens/pharmacy_module_page.dart b/lib/pages/pharmacies/screens/pharmacy_module_page.dart index 454b391c..c805144c 100644 --- a/lib/pages/pharmacies/screens/pharmacy_module_page.dart +++ b/lib/pages/pharmacies/screens/pharmacy_module_page.dart @@ -50,10 +50,8 @@ class _PharmacyPageState extends State { width: double.infinity, child: SingleChildScrollView( child: Column( - //crossAxisAlignment: CrossAxisAlignment.start, children: [ BannerPager(model), - GridViewButtons(model), PrescriptionsWidget(), ShopByBrandWidget(), RecentlyViewedWidget(), diff --git a/lib/pages/pharmacies/widgets/home/BannerPager.dart b/lib/pages/pharmacies/widgets/home/BannerPager.dart index 6f1155dd..6302f263 100644 --- a/lib/pages/pharmacies/widgets/home/BannerPager.dart +++ b/lib/pages/pharmacies/widgets/home/BannerPager.dart @@ -1,10 +1,15 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:carousel_slider/carousel_slider.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/pages/landing/home_page.dart'; import 'package:diplomaticquarterapp/pages/offers_categorise_page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/widgets/home/GridViewCard.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; class BannerPager extends StatefulWidget { final PharmacyModuleViewModel _model; @@ -20,14 +25,16 @@ class _BannerPagerState extends State { @override Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); return Container( child: Column( children: [ CarouselSlider( options: CarouselOptions( - aspectRatio: 7 / 2, + aspectRatio: 5 / 2, enlargeCenterPage: true, enableInfiniteScroll: false, + viewportFraction: 1.0, initialPage: 0, autoPlay: true, autoPlayInterval: Duration(seconds: 3), @@ -39,53 +46,44 @@ class _BannerPagerState extends State { }); }, ), - items: widget._model - .getBannerImagesUrl() - .mapIndexed( - (item, index) => InkWell( - onTap: () { - Navigator.push( - context, FadePage(page: OffersCategorisePage())); - }, - child: Container( - margin: EdgeInsets.symmetric(horizontal: 1.0), - child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(5.0)), - child: Center( - child: index == 0 - ? Image.asset( - item, - fit: BoxFit.cover, - ) - : CachedNetworkImage( - imageUrl: item, - fit: BoxFit.fitWidth, - errorWidget: (context, url, error) => - SizedBox()), - ), + items: widget._model.getBannerImagesUrl(projectViewModel).mapIndexed( + (item, index) { + return InkWell( + onTap: () { + Navigator.push(context, FadePage(page: OffersCategorisePage())); + }, + child: Container( + margin: EdgeInsets.symmetric(horizontal: 1.0), + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(5.0)), + child: Center( + child: index == 0 || index == 1 + ? Image.asset( + item, + fit: BoxFit.cover, + ) + : CachedNetworkImage(imageUrl: item, fit: BoxFit.fitWidth, errorWidget: (context, url, error) => SizedBox()), ), ), ), - ) - .toList(), + ); + }, + ).toList(), ), Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: widget._model - .getBannerImagesUrl() + .getBannerImagesUrl(projectViewModel) .mapIndexed( (item, index) => Container( width: 12.0, height: 4.0, - margin: - EdgeInsets.symmetric(vertical: 0.0, horizontal: 2.0), + margin: EdgeInsets.symmetric(vertical: 0.0, horizontal: 2.0), decoration: BoxDecoration( shape: BoxShape.rectangle, - color: _current == index - ? Color.fromRGBO(0, 250, 0, 0.9) - : Color.fromRGBO(0, 0, 0, 0.4), + color: _current == index ? Color.fromRGBO(0, 250, 0, 0.9) : Color.fromRGBO(0, 0, 0, 0.4), ), ), ) diff --git a/lib/pages/pharmacies/widgets/home/GridViewButtons.dart b/lib/pages/pharmacies/widgets/home/GridViewButtons.dart index 1a33ce74..8a549b48 100644 --- a/lib/pages/pharmacies/widgets/home/GridViewButtons.dart +++ b/lib/pages/pharmacies/widgets/home/GridViewButtons.dart @@ -39,44 +39,44 @@ class GridViewButtons extends StatelessWidget { Navigator.push(context, FadePage(page: OffersCategorisePage())); }), ), - DashboardItem( - imageName: 'pharmacy_module/bg_2.png', - opacity: 0, - hasColorFilter: false, - child: GridViewCard(TranslationBase.of(context).medicationRefill, - 'assets/images/pharmacy_module/medication_icon.png', () { - Navigator.push( - context, FadePage(page: HomePrescriptionsPage())); - - // model.checkUserIsActivated().then((isActivated) { - // if (isActivated) { - // Navigator.push(context, FadePage(page: LakumMainPage())); - // } else { - // Navigator.push( - // context, FadePage(page: LakumActivationVidaPage())); - // } - // }); - }), - ), - DashboardItem( - imageName: 'pharmacy_module/bg_3.png', - opacity: 0, - hasColorFilter: false, - child: GridViewCard(TranslationBase.of(context).myPrescriptions, - 'assets/images/pharmacy_module/prescription_icon.png', () { - Navigator.push( - context, FadePage(page: HomePrescriptionsPage())); - }), - ), - DashboardItem( - imageName: 'pharmacy_module/bg_4.png', - opacity: 0, - hasColorFilter: false, - child: GridViewCard( - TranslationBase.of(context).searchAndScanMedication, - 'assets/images/pharmacy_module/search_scan_icon.png', - () {Navigator.push(context, FadePage(page: SearchProductsPage()));}), - ), + // DashboardItem( + // imageName: 'pharmacy_module/bg_2.png', + // opacity: 0, + // hasColorFilter: false, + // child: GridViewCard(TranslationBase.of(context).medicationRefill, + // 'assets/images/pharmacy_module/medication_icon.png', () { + // Navigator.push( + // context, FadePage(page: HomePrescriptionsPage())); + // + // // model.checkUserIsActivated().then((isActivated) { + // // if (isActivated) { + // // Navigator.push(context, FadePage(page: LakumMainPage())); + // // } else { + // // Navigator.push( + // // context, FadePage(page: LakumActivationVidaPage())); + // // } + // // }); + // }), + // ), + // DashboardItem( + // imageName: 'pharmacy_module/bg_3.png', + // opacity: 0, + // hasColorFilter: false, + // child: GridViewCard(TranslationBase.of(context).myPrescriptions, + // 'assets/images/pharmacy_module/prescription_icon.png', () { + // Navigator.push( + // context, FadePage(page: HomePrescriptionsPage())); + // }), + // ), + // DashboardItem( + // imageName: 'pharmacy_module/bg_4.png', + // opacity: 0, + // hasColorFilter: false, + // child: GridViewCard( + // TranslationBase.of(context).searchAndScanMedication, + // 'assets/images/pharmacy_module/search_scan_icon.png', + // () {Navigator.push(context, FadePage(page: SearchProductsPage()));}), + // ), ], ), ), From fd26a59b2d6d3d4516bd95e0093728f4d533f2dd Mon Sep 17 00:00:00 2001 From: "Mirza.Shafique" Date: Wed, 27 Oct 2021 17:23:53 +0300 Subject: [PATCH 03/13] live care design 1.0 --- assets/images/new-design/ic_schedule.svg | 12 + lib/config/localized_values.dart | 2 +- .../livecare/widgets/LiveCareHistoryCard.dart | 249 +++++++++++------- lib/pages/livecare/widgets/clinic_card.dart | 135 ++++++++-- lib/pages/livecare/widgets/clinic_list.dart | 123 ++++----- lib/pages/livecare/widgets/livecare_logs.dart | 7 +- 6 files changed, 344 insertions(+), 184 deletions(-) create mode 100644 assets/images/new-design/ic_schedule.svg diff --git a/assets/images/new-design/ic_schedule.svg b/assets/images/new-design/ic_schedule.svg new file mode 100644 index 00000000..c6fe44a1 --- /dev/null +++ b/assets/images/new-design/ic_schedule.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 7f77d115..e7a23f3b 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1494,7 +1494,7 @@ const Map localizedValues = { "RRTRequestSuccess": {"en": "Request has been sent successfully, you will be contacted soon.", "ar": "تم إرسال الطلب بنجاح ، وسيتم الاتصال بك باسرع وقت ممكن"}, "rateDoctorAppo": {"en": "Rate DR & Appointment", "ar": "تقييم الطبيب والموعد"}, "invoice": {"en": "Invoice", "ar": "الفاتورة"}, - "requestedDate": {"en": "Reqeusted Date", "ar": "التاريخ "}, + "requestedDate": {"en": "Req Date", "ar": "التاريخ "}, "callDuration": {"en": "Call Duration", "ar": "مدة الاتصال"}, "alreadyRated": {"en": "This appointment has been previously evaluated.", "ar": "تم تقييم هذا الموعد مسبقاً"}, "insuranceCompany": {"en": "Insurance Company", "ar": "شركة تأمين"}, diff --git a/lib/pages/livecare/widgets/LiveCareHistoryCard.dart b/lib/pages/livecare/widgets/LiveCareHistoryCard.dart index d3029f86..da9ad863 100644 --- a/lib/pages/livecare/widgets/LiveCareHistoryCard.dart +++ b/lib/pages/livecare/widgets/LiveCareHistoryCard.dart @@ -1,24 +1,29 @@ +import 'package:auto_size_text/auto_size_text.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/models/FamilyFiles/PatientERVirtualHistoryResponse.dart'; import 'package:diplomaticquarterapp/pages/feedback/feedback_home_page.dart'; import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_send_email_dialog.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; class LiveCareHistoryCard extends StatefulWidget { ErRequestHistoryList erRequestHistoryList; + int isFirstOrLast; - LiveCareHistoryCard({this.erRequestHistoryList}); + LiveCareHistoryCard({this.erRequestHistoryList, this.isFirstOrLast}); @override _LiveCareHistoryCardState createState() => _LiveCareHistoryCardState(); @@ -40,122 +45,178 @@ class _LiveCareHistoryCardState extends State { Widget build(BuildContext context) { projectViewModel = Provider.of(context); return Container( - margin: EdgeInsets.all(10.0), - child: Card( - margin: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0), - color: Colors.white, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), + margin: EdgeInsets.only(left: 12, right: 12, top: widget.isFirstOrLast == 0 ? 12 : 6, bottom: widget.isFirstOrLast == 1 ? 12 : 6), + decoration: BoxDecoration( + color: CustomColors.accentColor, + borderRadius: BorderRadius.all( + Radius.circular(10.0), ), - child: Container( - width: MediaQuery.of(context).size.width, - // height: MediaQuery.of(context).size.height * 0.22, - padding: EdgeInsets.all(10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text(TranslationBase.of(context).requestedDate, style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold)), - Container( - margin: EdgeInsets.only(top: 0.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(DateUtil.getDayMonthYearHourMinuteDateFormatted(DateUtil.convertStringToDate(widget.erRequestHistoryList.arrivalTime)), style: TextStyle(fontSize: 14.0)), - Text(TranslationBase.of(context).callDuration + "\n" + getCallTime(widget.erRequestHistoryList.callDuration), textAlign: TextAlign.center, style: TextStyle(fontSize: 14.0, color: Colors.grey[600])), - ], - ), - ), - Container( - padding: EdgeInsets.all(7.0), - decoration: BoxDecoration( - shape: BoxShape.rectangle, - borderRadius: BorderRadius.all(Radius.circular(5)), - color: Colors.green, - ), - margin: EdgeInsets.only(top: 5.0, bottom: 5.0), - child: Text(widget.erRequestHistoryList.stringCallStatus, style: TextStyle(fontSize: 14.0, color: Colors.white)), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), + ), + ], + ), + child: Container( + margin: EdgeInsets.only(left: projectViewModel.isArabic ? 0 : 6, right: projectViewModel.isArabic ? 6 : 0), + padding: EdgeInsets.symmetric(vertical: 10, horizontal: 12), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.white, width: 1), + borderRadius: BorderRadius.only( + bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), + topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), + bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), + topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), + ), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + widget.erRequestHistoryList.stringCallStatus == "Completed" ? widget.erRequestHistoryList.stringCallStatus : "Pending", + style: TextStyle( + fontSize: 10.0, + fontWeight: FontWeight.w600, + letterSpacing: -0.4, + color: widget.erRequestHistoryList.stringCallStatus == "Completed" ? CustomColors.green : CustomColors.orange, ), - Divider( - color: Colors.grey[500], + ), + mHeight(12), + Text( + TranslationBase.of(context).requestedDate + ": " + DateUtil.getDayMonthYearHourMinuteDateFormatted(DateUtil.convertStringToDate(widget.erRequestHistoryList.arrivalTime)), + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, ), - Container( - margin: EdgeInsets.all(5.0), - child: Flex( - direction: Axis.horizontal, - children: [ - Expanded( - child: InkWell( - onTap: () { - openInvoice(); - }, - child: Container( - child: Row( - children: [ - Icon(Icons.content_paste, color: Colors.red), - Container( - margin: EdgeInsets.only(left: 10.0), - child: Text(TranslationBase.of(context).invoice, textAlign: TextAlign.center, style: TextStyle(fontSize: 12.0)), + ), + mHeight(4), + Row( + children: [ + Text( + TranslationBase.of(context).callDuration + ": ", + style: TextStyle(fontSize: 10.0, fontWeight: FontWeight.w600, letterSpacing: -0.4, color: CustomColors.textColor), + ), + Text( + getCallTime(widget.erRequestHistoryList.callDuration), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12.0, + letterSpacing: -0.4, + fontWeight: FontWeight.w600, + ), + ), + ], + ),mHeight(12), + Container( + width: double.infinity, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + flex: 1, + child: InkWell( + onTap: () { + openInvoice(); + }, + child: Container( + padding: EdgeInsets.only(left: 12, right: 12, top: 6, bottom: 6), + decoration: containerRadius(CustomColors.devider, 100), + child: Row( + children: [ + SvgPicture.asset("assets/images/new/services/invoice_list.svg",width: 18,height: 18,), + mWidth(10), + Text( + TranslationBase.of(context).invoice, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 11.0, + letterSpacing: -0.46, + fontWeight: FontWeight.w600, ), - ], - ), + ), + ], ), ), ), - Expanded( - child: InkWell( - onTap: () { - openComplaint(); - }, - child: Container( - child: Row( - children: [ - Icon(Icons.add, size: 24.0, color: Colors.red), - Container( - margin: EdgeInsets.only(left: 10.0), - child: Text(TranslationBase.of(context).complaint, textAlign: TextAlign.center, style: TextStyle(fontSize: 12.0)), + ), + mWidth(12), + Expanded( + flex: 1, + child: InkWell( + onTap: () { + openComplaint(); + }, + child: Container( + padding: EdgeInsets.only(left: 12, right: 12, top: 7, bottom: 7), + decoration: containerRadius(CustomColors.devider, 100), + child: Row( + children: [ + SvgPicture.asset("assets/images/new/services/raise_comp.svg",width: 16,height: 16,), + mWidth(10), + Expanded( + child: AutoSizeText( + TranslationBase.of(context).complaint, + textAlign: TextAlign.center, + maxLines: 1,minFontSize: 8, + style: TextStyle( + fontSize: 11.0, + letterSpacing: -0.46, + fontWeight: FontWeight.w600, + ), ), - ], - ), + ), + ], ), ), ), - Expanded( - child: InkWell( - onTap: () { - rateLiveCareAppo(); - }, - child: Container( - child: Row( - children: [ - Icon(Icons.star, size: 24.0, color: Colors.yellow[700]), - Container( - width: MediaQuery.of(context).size.width * 0.2, - margin: EdgeInsets.only(left: 9.0), - child: Text(TranslationBase.of(context).rateDoctorAppo, overflow: TextOverflow.clip, textAlign: TextAlign.center, style: TextStyle(fontSize: 11.0)), + ), + mWidth(12), + Expanded( + flex: 1, + child: InkWell( + onTap: () { + rateLiveCareAppo(); + }, + child: Container( + padding: EdgeInsets.only(left: 12, right: 12, top: 6, bottom: 6), + decoration: containerRadius(CustomColors.devider, 100), + child: Row( + children: [ + Icon( Icons.star,size: 18,), + mWidth(10), + Text( + TranslationBase.of(context).rate, + overflow: TextOverflow.clip, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 11.0, + letterSpacing: -0.46, + fontWeight: FontWeight.w600, ), - ], - ), + ), + ], ), ), ), - ], - ), + ), + ], ), - ], - ), + ), + ], ), ), ); } - rateLiveCareAppo() { - if(widget.erRequestHistoryList.isAppointmentHaveRating) { + if (widget.erRequestHistoryList.isAppointmentHaveRating) { AppToast.showErrorToast(message: TranslationBase.of(context).alreadyRated); - } else { - - } + } else {} } openInvoice() { diff --git a/lib/pages/livecare/widgets/clinic_card.dart b/lib/pages/livecare/widgets/clinic_card.dart index 49337ee4..f6d687d2 100644 --- a/lib/pages/livecare/widgets/clinic_card.dart +++ b/lib/pages/livecare/widgets/clinic_card.dart @@ -1,10 +1,14 @@ +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/LiveCare/ClinicsServiceTimingsResponse.dart'; import 'package:diplomaticquarterapp/models/LiveCare/LiveCareClinicsListResponse.dart'; import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart'; import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:provider/provider.dart'; import 'ClinicTimingsDialog.dart'; @@ -32,43 +36,118 @@ class _State extends State { @override Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); return Container( width: double.infinity, margin: EdgeInsets.fromLTRB(15.0, 0.0, 15.0, 8.0), + clipBehavior: Clip.antiAlias, decoration: BoxDecoration( - borderRadius: BorderRadius.all( - Radius.circular(10.0), + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + border: Border.all(width: widget.isSelected ? 3 : 0, color: widget.isSelected ? CustomColors.green : Colors.transparent), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), ), - border: Border.all(width: 2, color: widget.isSelected ? CustomColors.green : Color(0xffEFEFEF)), - boxShadow: [ - BoxShadow( - color: Color(0xff000000).withOpacity(.05), - blurRadius: 27, - offset: Offset(0, -3), - ), - ], - color: Colors.white), + ], + color: Colors.transparent, + ), child: Container( - padding: EdgeInsets.fromLTRB(12.0, 25.0, 12.0, 25.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - Container( - child: Text(widget.languageID == 'ar' ? widget.patientERGetClinicsList.serviceNameN : widget.patientERGetClinicsList.serviceName, - style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48, height: 20 / 16)), + decoration: BoxDecoration( + color: widget.patientERGetClinicsList.isOnline == 1 ? CustomColors.green : CustomColors.accentColor, + borderRadius: BorderRadius.all( + Radius.circular(6.0), + ), + ), + child: Container( + margin: EdgeInsets.only( + left: projectViewModel.isArabic + ? 0 + : widget.isSelected + ? 4 + : 6, + right: projectViewModel.isArabic ? widget.isSelected + ? 4 + : 6: 0), + padding: EdgeInsets.symmetric(vertical: 10, horizontal: 12), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.white, width: 1), + borderRadius: BorderRadius.only( + bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), + topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), + bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), + topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), ), - Row( - children: [ - Container( - child: Text(".", style: TextStyle(fontSize: 30.0)), + ), + child: Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.languageID == 'ar' ? widget.patientERGetClinicsList.serviceNameN : widget.patientERGetClinicsList.serviceName, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.48, + ), + ), + Row( + children: [ + Container( + width: 4, + height: 4, + decoration: containerRadius( + widget.patientERGetClinicsList.isOnline == 1 ? CustomColors.green : CustomColors.accentColor, + 100, + ), + ), + mWidth(4), + Text( + widget.patientERGetClinicsList.isOnline == 1 ? "Online" : "Offline", + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w600, + color: widget.patientERGetClinicsList.isOnline == 1 ? CustomColors.green : CustomColors.accentColor, + letterSpacing: -0.48, + ), + ), + ], + ), + ], ), - Container( - child: Text("Online"), + ), + Container( + padding: EdgeInsets.only(left: 8,right: 8,top: 4,bottom: 4), + decoration: containerRadius(CustomColors.devider, 100), + child: Row( + children: [ + SvgPicture.asset( + "assets/images/new-design/ic_schedule.svg", + width: 16, + height: 16, + color: Colors.black, + ), + mWidth(4), + Text( + "Schedule", + style: TextStyle( + fontSize: 11, + letterSpacing: -0.44, + fontWeight: FontWeight.w600, + ), + ) + ], ), - ], - ), - ], + ), + ], + ), ), ), ); diff --git a/lib/pages/livecare/widgets/clinic_list.dart b/lib/pages/livecare/widgets/clinic_list.dart index 9a463150..2127cd57 100644 --- a/lib/pages/livecare/widgets/clinic_list.dart +++ b/lib/pages/livecare/widgets/clinic_list.dart @@ -89,7 +89,9 @@ class _clinic_listState extends State { @override Widget build(BuildContext context) { - return SingleChildScrollView(child: currentSelectedLiveCareType == "immediate" ? getLiveCareImmediateClinicList() : getLiveCareScheduleClinicList()); + return Container( + child: currentSelectedLiveCareType == "immediate" ? getLiveCareImmediateClinicList() : getLiveCareScheduleClinicList(), + ); } void startLiveCare() { @@ -502,69 +504,70 @@ class _clinic_listState extends State { return Column( children: [ isDataLoaded - ? Container( - height: MediaQuery.of(context).size.height * 0.75, - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - padding: const EdgeInsets.only(top: 16.0), - itemCount: liveCareOnlineClinicsListResponse.length, - itemBuilder: (context, index) { - return InkWell( - onTap: () { - updateSelectedIndex(liveCareOnlineClinicsListResponse[index]); - }, - child: ClinicCard( - isSelected: selectedClinicID == liveCareOnlineClinicsListResponse[index].serviceID ? true : false, - patientERGetClinicsList: liveCareOnlineClinicsListResponse[index], + ? Expanded( + child: Container( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + padding: const EdgeInsets.only(top: 16.0), + itemCount: liveCareOnlineClinicsListResponse.length, + itemBuilder: (context, index) { + return InkWell( + onTap: () { + updateSelectedIndex(liveCareOnlineClinicsListResponse[index]); + }, + child: ClinicCard( + isSelected: selectedClinicID == liveCareOnlineClinicsListResponse[index].serviceID ? true : false, + patientERGetClinicsList: liveCareOnlineClinicsListResponse[index], + languageID: languageID, + ), + ); + }, + ), + // Container( + // margin: EdgeInsets.all(15.0), + // child: Text(TranslationBase.of(context).offlineClinics, style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)), + // ), + ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + padding: EdgeInsets.all(0.0), + itemCount: liveCareOfflineClinicsListResponse.length, + itemBuilder: (context, index) { + return ClinicCard( + isSelected: selectedClinicID == liveCareOfflineClinicsListResponse[index].serviceID ? true : false, + patientERGetClinicsList: liveCareOfflineClinicsListResponse[index], languageID: languageID, - ), - ); - }, - ), - // Container( - // margin: EdgeInsets.all(15.0), - // child: Text(TranslationBase.of(context).offlineClinics, style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)), - // ), - ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - padding: EdgeInsets.all(0.0), - itemCount: liveCareOfflineClinicsListResponse.length, - itemBuilder: (context, index) { - return ClinicCard( - isSelected: selectedClinicID == liveCareOfflineClinicsListResponse[index].serviceID ? true : false, - patientERGetClinicsList: liveCareOfflineClinicsListResponse[index], - languageID: languageID, - ); - }, - ), - Container( - height: 50.0, - ), - ], - )), + ); + }, + ), + Container( + height: 50.0, + ), + ], + )), + ), ) : Container(), isDataLoaded - ? Align( - alignment: FractionalOffset.bottomCenter, - child: Container( - margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 0.0), - color: Colors.grey[100], - width: MediaQuery.of(context).size.width, - height: 50.0, - child: DefaultButton(TranslationBase.of(context).start, () { - startLiveCare(); - }), - ), - ) + ? Container( + + color: Colors.white, + width: double.infinity, + padding: EdgeInsets.all(16), + child: DefaultButton( + TranslationBase.of(context).start, + () { + startLiveCare(); + }, + ), + ) : Container(), ], ); diff --git a/lib/pages/livecare/widgets/livecare_logs.dart b/lib/pages/livecare/widgets/livecare_logs.dart index 7b85afc2..8898faa6 100644 --- a/lib/pages/livecare/widgets/livecare_logs.dart +++ b/lib/pages/livecare/widgets/livecare_logs.dart @@ -30,7 +30,12 @@ class _LiveCareLogsState extends State { padding: EdgeInsets.all(0.0), itemCount: widget.erRequestHistoryList.length, itemBuilder: (context, index) { - return widget.erRequestHistoryList[index].callStatus < 4 ? Container() : LiveCareHistoryCard(erRequestHistoryList: widget.erRequestHistoryList[index]); + return widget.erRequestHistoryList[index].callStatus < 4 + ? Container() + : LiveCareHistoryCard( + erRequestHistoryList: widget.erRequestHistoryList[index], + isFirstOrLast: index==0?0:(index==widget.erRequestHistoryList.length-1)?1:2, + ); }, ), ) From cb69684bb864398847fbccb67ef812d06a2d0766 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 27 Oct 2021 17:35:00 +0300 Subject: [PATCH 04/13] SessionID update --- lib/core/service/client/base_app_client.dart | 54 +++++++++----------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index 5abbe81e..584ed67d 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -10,7 +10,6 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel.dart'; import 'package:diplomaticquarterapp/pages/appUpdatePage/app_update_page.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; @@ -31,8 +30,7 @@ AppSharedPreferences sharedPref = new AppSharedPreferences(); /// onFailure: (String error, int statusCode) {}, /// body: Map(); /// -AuthenticatedUserObject authenticatedUserObject = - locator(); +AuthenticatedUserObject authenticatedUserObject = locator(); VitalSignService _vitalSignService = locator(); class BaseAppClient { @@ -102,7 +100,7 @@ class BaseAppClient { ? body['PatientOutSA'] : PATIENT_OUT_SA : PATIENT_OUT_SA; - body['SessionID'] = SESSION_ID; //getSe + body['SessionID'] = getSessionId(body['TokenID']); //getSe headers = { 'Content-Type': 'application/json', @@ -162,8 +160,8 @@ class BaseAppClient { // if (parsed != null) { // onSuccess(parsed, statusCode); // } else { - onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); - // logout(); + onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); + // logout(); // } } } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { @@ -466,7 +464,8 @@ class BaseAppClient { simplePost( String fullUrl, { - Map body, Map headers, + Map body, + Map headers, Function(dynamic response, int statusCode) onSuccess, Function(String error, int statusCode) onFailure, }) async { @@ -483,8 +482,7 @@ class BaseAppClient { final int statusCode = response.statusCode; print("statusCode :$statusCode"); - if(await handleUnauthorized(statusCode, forUrl: fullUrl)) - simplePost(fullUrl, onFailure: onFailure, onSuccess: onSuccess, body: body, headers: headers); + if (await handleUnauthorized(statusCode, forUrl: fullUrl)) simplePost(fullUrl, onFailure: onFailure, onSuccess: onSuccess, body: body, headers: headers); if (statusCode < 200 || statusCode >= 400 || json == null) { onFailure('Error While Fetching data', statusCode); @@ -496,7 +494,8 @@ class BaseAppClient { } } - simpleGet(String fullUrl, {Function(dynamic response, int statusCode) onSuccess, Function(String error, int statusCode) onFailure, Map queryParams, Map headers}) async { + simpleGet(String fullUrl, + {Function(dynamic response, int statusCode) onSuccess, Function(String error, int statusCode) onFailure, Map queryParams, Map headers}) async { String url = fullUrl; print("URL Query String: $url"); @@ -516,8 +515,7 @@ class BaseAppClient { final int statusCode = response.statusCode; print("statusCode :$statusCode"); - if(await handleUnauthorized(statusCode, forUrl: fullUrl)) - simpleGet(fullUrl, onFailure: onFailure, onSuccess: onSuccess, headers: headers, queryParams: queryParams); + if (await handleUnauthorized(statusCode, forUrl: fullUrl)) simpleGet(fullUrl, onFailure: onFailure, onSuccess: onSuccess, headers: headers, queryParams: queryParams); if (statusCode < 200 || statusCode >= 400 || json == null) { onFailure('Error While Fetching data', statusCode); @@ -543,8 +541,7 @@ class BaseAppClient { final int statusCode = response.statusCode; print("statusCode :$statusCode"); - if(await handleUnauthorized(statusCode, forUrl: fullUrl)) - simplePut(fullUrl, onFailure: onFailure, onSuccess: onSuccess, headers: headers, body: body); + if (await handleUnauthorized(statusCode, forUrl: fullUrl)) simplePut(fullUrl, onFailure: onFailure, onSuccess: onSuccess, headers: headers, body: body); if (statusCode < 200 || statusCode >= 400 || json == null) { onFailure('Error While Fetching data', statusCode); @@ -556,7 +553,8 @@ class BaseAppClient { } } - simpleDelete(String fullUrl, {Function(dynamic response, int statusCode) onSuccess, Function(String error, int statusCode) onFailure, Map queryParams, Map headers}) async { + simpleDelete(String fullUrl, + {Function(dynamic response, int statusCode) onSuccess, Function(String error, int statusCode) onFailure, Map queryParams, Map headers}) async { String url = fullUrl; print("URL Query String: $url"); @@ -576,8 +574,7 @@ class BaseAppClient { final int statusCode = response.statusCode; print("statusCode :$statusCode"); - if(await handleUnauthorized(statusCode, forUrl: fullUrl)) - simpleDelete(fullUrl, onFailure: onFailure, onSuccess: onSuccess, queryParams: queryParams, headers: headers); + if (await handleUnauthorized(statusCode, forUrl: fullUrl)) simpleDelete(fullUrl, onFailure: onFailure, onSuccess: onSuccess, queryParams: queryParams, headers: headers); if (statusCode < 200 || statusCode >= 400 || json == null) { onFailure('Error While Fetching data', statusCode); @@ -589,13 +586,13 @@ class BaseAppClient { } } - Future handleUnauthorized(int statusCode, {String forUrl}) async{ - if(forUrl.startsWith(EXA_CART_API_BASE_URL) && statusCode == 401) { - final token = await generatePackagesToken(); - packagesAuthHeader['Authorization'] = 'Bearer $token'; - return token != null && (token is String); - } - return false; + Future handleUnauthorized(int statusCode, {String forUrl}) async { + if (forUrl.startsWith(EXA_CART_API_BASE_URL) && statusCode == 401) { + final token = await generatePackagesToken(); + packagesAuthHeader['Authorization'] = 'Bearer $token'; + return token != null && (token is String); + } + return false; } logout() async { @@ -726,7 +723,7 @@ class BaseAppClient { print("statusCode :$statusCode"); if (statusCode < 200 || statusCode >= 400 || json == null) { var parsed = json.decode(utf8.decode(response.bodyBytes)); - onFailure(parsed['error']['ErrorEndUserMsg'] ??'Error While Fetching data', statusCode); + onFailure(parsed['error']['ErrorEndUserMsg'] ?? 'Error While Fetching data', statusCode); } else { // var parsed = json.decode(response.body.toString()); var parsed = json.decode(utf8.decode(response.bodyBytes)); @@ -791,15 +788,10 @@ class BaseAppClient { } } - - Future generatePackagesToken() async { var url = EXA_CART_API_BASE_URL + PACKAGES_TOKEN; var body = { - "api_client": { - "client_id": "a4ab6be4-424f-4836-b032-46caed88e184", - "client_secret": "3c1a3e07-4a40-4510-9fb0-ee5f0a72752c" - } + "api_client": {"client_id": "a4ab6be4-424f-4836-b032-46caed88e184", "client_secret": "3c1a3e07-4a40-4510-9fb0-ee5f0a72752c"} }; String token; final completer = Completer(); From 7123ed34ab70547792d266b5c037e49c8ed31a0a Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 27 Oct 2021 17:43:49 +0300 Subject: [PATCH 05/13] Translation updates --- lib/config/localized_values.dart | 2 ++ lib/pages/livecare/widgets/clinic_card.dart | 5 +++-- lib/uitl/translations_delegate_base.dart | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 0b74ff3c..4eafcd23 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1603,4 +1603,6 @@ const Map localizedValues = { "android-instructions-2": { "en": "Make sure that you have installed your watch related apps from Google PlayStore.", "ar": "تأكد من أنك قمت بتثبيت التطبيقات المتعلقة بالساعات من Google PlayStore." }, "android-instructions-3": { "en": "Make sure that your Smart Watch is connected with the WearOS app & your watch apps.", "ar": "تأكد من أن ساعتك الذكية متصلة بتطبيق WearOS وتطبيقات ساعتك." }, "android-instructions-4": { "en": "Make sure that your smart watch apps are linked/associated with Google Fit App.", "ar": "تأكد من أن تطبيقات ساعتك الذكية مرتبطة / مرتبطة بتطبيق Google Fit." }, "android-instructions-5": { "en": "Make sure that data like heart rate, steps, distance etc. are being shown on your watch app & on Google Fit app & both are in sync.", "ar": "تأكد من عرض بيانات مثل معدل ضربات القلب والخطوات والمسافة وما إلى ذلك على تطبيق الساعة وعلى تطبيق Google Fit وكلاهما في حالة مزامنة." }, + "onlineTag": {"en": "Online", "ar": "متصل"}, + "offlineTag": {"en": "Offline", "ar": "غير متصل"}, }; diff --git a/lib/pages/livecare/widgets/clinic_card.dart b/lib/pages/livecare/widgets/clinic_card.dart index f6d687d2..e788a5cd 100644 --- a/lib/pages/livecare/widgets/clinic_card.dart +++ b/lib/pages/livecare/widgets/clinic_card.dart @@ -5,6 +5,7 @@ import 'package:diplomaticquarterapp/services/livecare_services/livecare_provide import 'package:diplomaticquarterapp/theme/colors.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/utils_new.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; @@ -110,7 +111,7 @@ class _State extends State { ), mWidth(4), Text( - widget.patientERGetClinicsList.isOnline == 1 ? "Online" : "Offline", + widget.patientERGetClinicsList.isOnline == 1 ? TranslationBase.of(context).onlineTag : TranslationBase.of(context).offlineTag, style: TextStyle( fontSize: 10, fontWeight: FontWeight.w600, @@ -136,7 +137,7 @@ class _State extends State { ), mWidth(4), Text( - "Schedule", + TranslationBase.of(context).schedule, style: TextStyle( fontSize: 11, letterSpacing: -0.44, diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 396afd00..cefeeec2 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2563,6 +2563,10 @@ class TranslationBase { String get androidInstructions3 => localizedValues["android-instructions-3"][locale.languageCode]; String get androidInstructions4 => localizedValues["android-instructions-4"][locale.languageCode]; + + String get onlineTag => localizedValues["onlineTag"][locale.languageCode]; + + String get offlineTag => localizedValues["offlineTag"][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { From 73822300f949f5034573f50a2c8843f4c0db5bc4 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Thu, 28 Oct 2021 10:46:09 +0300 Subject: [PATCH 06/13] Health Calculators APIs updated --- lib/config/localized_values.dart | 2 + .../health-calculator/bariatrics-service.dart | 11 +++ .../bmi_calculator/bariatrics-screen.dart | 92 ++++++++++++++++--- .../bmr_calculator/bmr_calculator.dart | 5 +- .../bmr_calculator/bmr_result_page.dart | 72 +++++++++++++-- .../health_calculator/body_fat/body_fat.dart | 7 +- .../body_fat/body_fat_result_page.dart | 73 +++++++++++++-- .../calorie_result_page.dart | 69 ++++++++++++-- .../health_calculator/carbs/carbs.dart | 7 +- .../carbs/carbs_result_page.dart | 82 +++++++++++++---- .../ideal_body/ideal_body.dart | 6 +- .../ideal_body/ideal_body_result_page.dart | 82 ++++++++++++++--- lib/uitl/translations_delegate_base.dart | 4 + 13 files changed, 442 insertions(+), 70 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 4eafcd23..810c4156 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1605,4 +1605,6 @@ const Map localizedValues = { "android-instructions-4": { "en": "Make sure that your smart watch apps are linked/associated with Google Fit App.", "ar": "تأكد من أن تطبيقات ساعتك الذكية مرتبطة / مرتبطة بتطبيق Google Fit." }, "android-instructions-5": { "en": "Make sure that data like heart rate, steps, distance etc. are being shown on your watch app & on Google Fit app & both are in sync.", "ar": "تأكد من عرض بيانات مثل معدل ضربات القلب والخطوات والمسافة وما إلى ذلك على تطبيق الساعة وعلى تطبيق Google Fit وكلاهما في حالة مزامنة." }, "onlineTag": {"en": "Online", "ar": "متصل"}, "offlineTag": {"en": "Offline", "ar": "غير متصل"}, + "viewDocList": {"en": "View List of Doctors", "ar": "عرض قائمة الأطباء"}, + "bodyFatTitle": {"en": "Body Fat", "ar": " الدهون في الجسم"}, }; diff --git a/lib/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart b/lib/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart index c952a88f..139c251b 100644 --- a/lib/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart +++ b/lib/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart @@ -13,6 +13,9 @@ class BariatricsService extends BaseService { List doctorList = []; List doctorListByTime = []; + double lat; + double long; + Future getClinicCategory() async { hasError = false; Map body = Map(); @@ -104,12 +107,20 @@ class BariatricsService extends BaseService { } Future getCalculationDoctors({@required int calculationID}) async { + + if (await this.sharedPref.getDouble(USER_LAT) != null && await this.sharedPref.getDouble(USER_LONG) != null) { + lat = await this.sharedPref.getDouble(USER_LAT); + long = await this.sharedPref.getDouble(USER_LONG); + } + hasError = false; var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); Map body = Map(); body['CalculationID'] = calculationID; // hint: it is static depend on IONIC project body['LanguageID'] = languageID == 'ar' ? 1 : 2; + body['Latitude'] = lat != null ? lat.toString() : 0; + body['Longitude'] = long != null ? long.toString() : 0; dynamic localRes; diff --git a/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bariatrics-screen.dart b/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bariatrics-screen.dart index ae7a35a7..13de0140 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bariatrics-screen.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bariatrics-screen.dart @@ -1,9 +1,15 @@ +import 'dart:collection'; + import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HealthCalculator/DiseasesByClinic.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/health-calculator/Bariatrics-viewmodel.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; -import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/doctor_list.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/SearchResults.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.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/buttons/borderedButton.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; @@ -61,9 +67,7 @@ class _BariatricsPageState extends State { activeColor: Colors.blue.shade700, value: item.diseasesID, groupValue: _selectedDisease != null ? _selectedDisease.diseasesID : -1, - selected: _selectedDisease != null - ? item.diseasesID == _selectedDisease.diseasesID - : false, + selected: _selectedDisease != null ? item.diseasesID == _selectedDisease.diseasesID : false, onChanged: (val) { setState(() { _selectedDisease = item; @@ -95,10 +99,14 @@ class _BariatricsPageState extends State { radius: 8, fontWeight: FontWeight.bold, handler: () async { - Navigator.push( - context, - FadePage(page: DoctorList(diseaseByClinic: _selectedDisease,)), - ); + callDoctorsSearchAPI(); + // Navigator.push( + // context, + // FadePage( + // page: DoctorList( + // diseaseByClinic: _selectedDisease, + // )), + // ); }, ), ), @@ -116,10 +124,11 @@ class _BariatricsPageState extends State { borderColor: Color(0x00000000), fontWeight: FontWeight.bold, handler: () async { - Navigator.push( - context, - FadePage(page: DoctorList()), - ); + callDoctorsSearchAPI(); + // Navigator.push( + // context, + // FadePage(page: DoctorList()), + // ); }, ), ), @@ -129,6 +138,65 @@ class _BariatricsPageState extends State { ); } + callDoctorsSearchAPI() { + GifLoaderDialogUtils.showMyDialog(context); + List doctorsList = []; + List arr = []; + List arrDistance = []; + List result; + int numAll; + List _patientDoctorAppointmentListHospital = List(); + + DoctorsListService service = new DoctorsListService(); + service.getDoctorsList(108, 0, false, context).then((res) { + GifLoaderDialogUtils.hideDialog(context); + if (res['MessageStatus'] == 1) { + setState(() { + if (res['DoctorList'].length != 0) { + doctorsList.clear(); + res['DoctorList'].forEach((v) { + doctorsList.add(new DoctorList.fromJson(v)); + }); + doctorsList.forEach((element) { + List doctorByHospital = _patientDoctorAppointmentListHospital + .where( + (elementClinic) => elementClinic.filterName == element.projectName, + ) + .toList(); + + if (doctorByHospital.length != 0) { + _patientDoctorAppointmentListHospital[_patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])].patientDoctorAppointmentList.add(element); + } else { + _patientDoctorAppointmentListHospital + .add(PatientDoctorAppointmentList(filterName: element.projectName, distanceInKMs: element.projectDistanceInKiloMeters.toString(), patientDoctorAppointment: element)); + } + }); + } else {} + }); + + result = LinkedHashSet.from(arr).toList(); + numAll = result.length; + navigateToSearchResults(context, doctorsList, _patientDoctorAppointmentListHospital); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + } + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + AppToast.showErrorToast(message: err); + }); + } + + Future navigateToSearchResults(context, List docList, List patientDoctorAppointmentListHospital) async { + Navigator.push(context, FadePage(page: SearchResults(isLiveCareAppointment: false, doctorsList: docList, patientDoctorAppointmentListHospital: patientDoctorAppointmentListHospital))) + .then((value) { + setState(() { + // dropdownValue = null; + }); + // getProjectsList(); + }); + } + _getImageName(int gender, double obeseResult, bool isArabic) { String path = "assets/images/BMI/"; double result = obeseResult; diff --git a/lib/pages/AlHabibMedicalService/health_calculator/bmr_calculator/bmr_calculator.dart b/lib/pages/AlHabibMedicalService/health_calculator/bmr_calculator/bmr_calculator.dart index 0e22c7ae..ad35c61d 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/bmr_calculator/bmr_calculator.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/bmr_calculator/bmr_calculator.dart @@ -1,4 +1,5 @@ +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -123,7 +124,9 @@ class _BmrCalculatorState extends State { return AppScaffold( isShowAppBar: true, isShowDecPage: false, - appBarTitle: 'Bmr Calculator', + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).bmr, showHomeAppBarIcon: false, appBarIcons: [ Padding( diff --git a/lib/pages/AlHabibMedicalService/health_calculator/bmr_calculator/bmr_result_page.dart b/lib/pages/AlHabibMedicalService/health_calculator/bmr_calculator/bmr_result_page.dart index 6e7d6279..e1409ee5 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/bmr_calculator/bmr_result_page.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/bmr_calculator/bmr_result_page.dart @@ -1,4 +1,8 @@ -import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/doctor_list.dart'; +import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/SearchResults.dart'; +import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -9,13 +13,17 @@ import 'package:percent_indicator/circular_percent_indicator.dart'; class BmrResultPage extends StatelessWidget { final double bmrResult; final double calories; + BmrResultPage({this.bmrResult, this.calories}); + @override Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, isShowDecPage: false, - appBarTitle: 'BMR Calculator', + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).bmr, body: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ @@ -58,16 +66,66 @@ class BmrResultPage extends StatelessWidget { Container( width: 350, child: Button( - label: 'See List Of Doctors', + label: TranslationBase.of(context).viewDocList, onTap: () { - Navigator.push( - context, - FadePage(page: DoctorList()), - ); + getDoctorsList(context); }), ), ], ), ); } + + getDoctorsList(BuildContext context) { + GifLoaderDialogUtils.showMyDialog(context); + BariatricsService service = new BariatricsService(); + + List doctorsList = []; + List _patientDoctorAppointmentListHospital = List(); + + service.getCalculationDoctors(calculationID: 3).then((res) { + GifLoaderDialogUtils.hideDialog(context); + print(res['List_CalculationTable'].length); + if (res['MessageStatus'] == 1) { + if (res['List_CalculationTable'].length != 0) { + res['List_CalculationTable'].forEach((item) { + DoctorList docList = new DoctorList(); + docList.clinicID = item['ClinicID']; + docList.clinicName = item['ClinicName']; + docList.doctorID = item['DoctorID']; + docList.doctorImageURL = item['DoctorImageURL']; + docList.name = item['DoctorName']; + docList.doctorTitle = item['DoctorTitle']; + docList.gender = item['Gender']; + docList.genderDescription = item['GenderDescription']; + docList.nationalityName = item['Nationality']; + docList.nationalityFlagURL = item['NationalityFlagURL']; + docList.projectID = item['ProjectID']; + docList.projectName = item['ProjectName']; + docList.actualDoctorRate = 0; + doctorsList.add(docList); + }); + + doctorsList.forEach((element) { + List doctorByHospital = _patientDoctorAppointmentListHospital + .where( + (elementClinic) => elementClinic.filterName == element.projectName, + ) + .toList(); + + if (doctorByHospital.length != 0) { + _patientDoctorAppointmentListHospital[_patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])].patientDoctorAppointmentList.add(element); + } else { + _patientDoctorAppointmentListHospital.add(PatientDoctorAppointmentList(filterName: element.projectName, distanceInKMs: "0", patientDoctorAppointment: element)); + } + }); + + Navigator.push(context, FadePage(page: SearchResults(isLiveCareAppointment: false, doctorsList: doctorsList, patientDoctorAppointmentListHospital: _patientDoctorAppointmentListHospital))); + } + } + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + }); + } } diff --git a/lib/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat.dart b/lib/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat.dart index afbc9f1c..7b32c840 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -210,8 +211,10 @@ class _BodyFatState extends State { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: 'Body Fat', - showHomeAppBarIcon: false, + isShowDecPage: false, + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).bodyFatTitle, appBarIcons: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0, vertical: 7.0), diff --git a/lib/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat_result_page.dart b/lib/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat_result_page.dart index f41f9598..9ba23a1e 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat_result_page.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat_result_page.dart @@ -1,4 +1,8 @@ -import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/doctor_list.dart'; +import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/SearchResults.dart'; +import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -12,7 +16,9 @@ class FatResult extends StatelessWidget { final String textResult; FatResult({this.bodyFat, this.fat, this.textResult = ''}); + Color inductorColor; + Color colorInductor() { if (bodyFat >= 17) { inductorColor = Color(0xffC70D00); @@ -30,7 +36,10 @@ class FatResult extends StatelessWidget { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: 'Body Fat', + isShowDecPage: false, + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).bodyFatTitle, body: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ @@ -69,12 +78,9 @@ class FatResult extends StatelessWidget { Container( width: 350, child: Button( - label: 'See List Of Doctors', + label: TranslationBase.of(context).viewDocList, onTap: () { - Navigator.push( - context, - FadePage(page: DoctorList()), - ); + getDoctorsList(context); }, ), ), @@ -82,4 +88,57 @@ class FatResult extends StatelessWidget { ), ); } + + getDoctorsList(BuildContext context) { + GifLoaderDialogUtils.showMyDialog(context); + BariatricsService service = new BariatricsService(); + + List doctorsList = []; + List _patientDoctorAppointmentListHospital = List(); + + service.getCalculationDoctors(calculationID: 5).then((res) { + GifLoaderDialogUtils.hideDialog(context); + print(res['List_CalculationTable'].length); + if (res['MessageStatus'] == 1) { + if (res['List_CalculationTable'].length != 0) { + res['List_CalculationTable'].forEach((item) { + DoctorList docList = new DoctorList(); + docList.clinicID = item['ClinicID']; + docList.clinicName = item['ClinicName']; + docList.doctorID = item['DoctorID']; + docList.doctorImageURL = item['DoctorImageURL']; + docList.name = item['DoctorName']; + docList.doctorTitle = item['DoctorTitle']; + docList.gender = item['Gender']; + docList.genderDescription = item['GenderDescription']; + docList.nationalityName = item['Nationality']; + docList.nationalityFlagURL = item['NationalityFlagURL']; + docList.projectID = item['ProjectID']; + docList.projectName = item['ProjectName']; + docList.actualDoctorRate = 0; + doctorsList.add(docList); + }); + + doctorsList.forEach((element) { + List doctorByHospital = _patientDoctorAppointmentListHospital + .where( + (elementClinic) => elementClinic.filterName == element.projectName, + ) + .toList(); + + if (doctorByHospital.length != 0) { + _patientDoctorAppointmentListHospital[_patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])].patientDoctorAppointmentList.add(element); + } else { + _patientDoctorAppointmentListHospital.add(PatientDoctorAppointmentList(filterName: element.projectName, distanceInKMs: "0", patientDoctorAppointment: element)); + } + }); + + Navigator.push(context, FadePage(page: SearchResults(isLiveCareAppointment: false, doctorsList: doctorsList, patientDoctorAppointmentListHospital: _patientDoctorAppointmentListHospital))); + } + } + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + }); + } } diff --git a/lib/pages/AlHabibMedicalService/health_calculator/calorie_calculator/calorie_result_page.dart b/lib/pages/AlHabibMedicalService/health_calculator/calorie_calculator/calorie_result_page.dart index ed3dd8f8..749bf241 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/calorie_calculator/calorie_result_page.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/calorie_calculator/calorie_result_page.dart @@ -1,4 +1,7 @@ -import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/doctor_list.dart'; +import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/SearchResults.dart'; +import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; @@ -15,9 +18,11 @@ class CalorieResultPage extends StatelessWidget { @override Widget build(BuildContext context) { return AppScaffold( - isShowDecPage: false, appBarTitle: "${TranslationBase.of(context).calories} ${TranslationBase.of(context).calculators}", isShowAppBar: true, + isShowDecPage: false, + showNewAppBarTitle: true, + showNewAppBar: true, body: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ @@ -52,12 +57,9 @@ class CalorieResultPage extends StatelessWidget { Container( width: 350, child: Button( - label: 'See List Of Doctors', + label: TranslationBase.of(context).viewDocList, onTap: () { - Navigator.push( - context, - FadePage(page: DoctorList()), - ); + getDoctorsList(context); }, ), ), @@ -65,4 +67,57 @@ class CalorieResultPage extends StatelessWidget { ), ); } + + getDoctorsList(BuildContext context) { + GifLoaderDialogUtils.showMyDialog(context); + BariatricsService service = new BariatricsService(); + + List doctorsList = []; + List _patientDoctorAppointmentListHospital = List(); + + service.getCalculationDoctors(calculationID: 2).then((res) { + GifLoaderDialogUtils.hideDialog(context); + print(res['List_CalculationTable'].length); + if (res['MessageStatus'] == 1) { + if (res['List_CalculationTable'].length != 0) { + res['List_CalculationTable'].forEach((item) { + DoctorList docList = new DoctorList(); + docList.clinicID = item['ClinicID']; + docList.clinicName = item['ClinicName']; + docList.doctorID = item['DoctorID']; + docList.doctorImageURL = item['DoctorImageURL']; + docList.name = item['DoctorName']; + docList.doctorTitle = item['DoctorTitle']; + docList.gender = item['Gender']; + docList.genderDescription = item['GenderDescription']; + docList.nationalityName = item['Nationality']; + docList.nationalityFlagURL = item['NationalityFlagURL']; + docList.projectID = item['ProjectID']; + docList.projectName = item['ProjectName']; + docList.actualDoctorRate = 0; + doctorsList.add(docList); + }); + + doctorsList.forEach((element) { + List doctorByHospital = _patientDoctorAppointmentListHospital + .where( + (elementClinic) => elementClinic.filterName == element.projectName, + ) + .toList(); + + if (doctorByHospital.length != 0) { + _patientDoctorAppointmentListHospital[_patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])].patientDoctorAppointmentList.add(element); + } else { + _patientDoctorAppointmentListHospital.add(PatientDoctorAppointmentList(filterName: element.projectName, distanceInKMs: "0", patientDoctorAppointment: element)); + } + }); + + Navigator.push(context, FadePage(page: SearchResults(isLiveCareAppointment: false, doctorsList: doctorsList, patientDoctorAppointmentListHospital: _patientDoctorAppointmentListHospital))); + } + } + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + }); + } } diff --git a/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart b/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart index 7d8f4655..4b68687a 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart @@ -1,4 +1,5 @@ import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/calorie_calculator/calorie_calculator.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; @@ -81,8 +82,10 @@ class _CarbsState extends State { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: 'Carb Protein Fat', - showHomeAppBarIcon: false, + isShowDecPage: false, + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).carbohydrate, appBarIcons: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0, vertical: 7.0), diff --git a/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs_result_page.dart b/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs_result_page.dart index 71055d7b..46c14ee0 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs_result_page.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs_result_page.dart @@ -1,5 +1,9 @@ -import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/doctor_list.dart'; +import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/SearchResults.dart'; +import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -32,7 +36,10 @@ class CarbsResult extends StatelessWidget { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: 'Carb Protein Fat', + isShowDecPage: false, + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).carbohydrate, body: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -156,27 +163,68 @@ class CarbsResult extends StatelessWidget { Container( width: 350, child: Button( - label: 'See List Of Doctors', + label: TranslationBase.of(context).viewDocList, onTap: () { - Navigator.push( - context, - FadePage(page: DoctorList()), - ); + getDoctorsList(context); }, ), ), ], ), - - // Texts(pCal.ceil().toString()), - // Texts(cCal.ceil().toString()), - // Texts(fCal.ceil().toString()), - // Texts(pCalGram.ceil().toString()), - // Texts(cCalGram.ceil().toString()), - // Texts(fCalGram.ceil().toString()), - // Texts(pCalMeal.ceil().toString()), - // Texts(cCalMeal.ceil().toString()), - // Texts(fCalMeal.ceil().toString()), ); } + + getDoctorsList(BuildContext context) { + GifLoaderDialogUtils.showMyDialog(context); + BariatricsService service = new BariatricsService(); + + List doctorsList = []; + List _patientDoctorAppointmentListHospital = List(); + + service.getCalculationDoctors(calculationID: 11).then((res) { + GifLoaderDialogUtils.hideDialog(context); + print(res['List_CalculationTable'].length); + if (res['MessageStatus'] == 1) { + if (res['List_CalculationTable'].length != 0) { + res['List_CalculationTable'].forEach((item) { + DoctorList docList = new DoctorList(); + docList.clinicID = item['ClinicID']; + docList.clinicName = item['ClinicName']; + docList.doctorID = item['DoctorID']; + docList.doctorImageURL = item['DoctorImageURL']; + docList.name = item['DoctorName']; + docList.doctorTitle = item['DoctorTitle']; + docList.gender = item['Gender']; + docList.genderDescription = item['GenderDescription']; + docList.nationalityName = item['Nationality']; + docList.nationalityFlagURL = item['NationalityFlagURL']; + docList.projectID = item['ProjectID']; + docList.projectName = item['ProjectName']; + docList.actualDoctorRate = 0; + doctorsList.add(docList); + }); + + doctorsList.forEach((element) { + List doctorByHospital = _patientDoctorAppointmentListHospital + .where( + (elementClinic) => elementClinic.filterName == element.projectName, + ) + .toList(); + + if (doctorByHospital.length != 0) { + _patientDoctorAppointmentListHospital[_patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])].patientDoctorAppointmentList.add(element); + } else { + _patientDoctorAppointmentListHospital.add(PatientDoctorAppointmentList(filterName: element.projectName, distanceInKMs: "0", patientDoctorAppointment: element)); + } + }); + + Navigator.push(context, FadePage(page: SearchResults(isLiveCareAppointment: false, doctorsList: doctorsList, patientDoctorAppointmentListHospital: _patientDoctorAppointmentListHospital))); + } + } + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + }); + } + } diff --git a/lib/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body.dart b/lib/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body.dart index 84f76153..e8d89b13 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body.dart @@ -1,4 +1,5 @@ +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -100,7 +101,10 @@ class _IdealBodyState extends State { Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: 'Ideal Body Weight', + isShowDecPage: false, + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).idealBody, showHomeAppBarIcon: false, appBarIcons: [ Padding( diff --git a/lib/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body_result_page.dart b/lib/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body_result_page.dart index 311b423a..6a40bee7 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body_result_page.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body_result_page.dart @@ -1,5 +1,8 @@ - -import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/doctor_list.dart'; +import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/health-calculator/bariatrics-service.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/SearchResults.dart'; +import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -14,11 +17,15 @@ class IdealBodyResult extends StatelessWidget { final String textResult; IdealBodyResult({this.idealBodyWeight, this.minRange, this.mixRange, this.overWeightBy, this.textResult}); + @override Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: 'Ideal Body Weight', + isShowDecPage: false, + showNewAppBarTitle: true, + showNewAppBar: true, + appBarTitle: TranslationBase.of(context).idealBody, body: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceEvenly, @@ -81,8 +88,7 @@ class IdealBodyResult extends StatelessWidget { children: [ Texts('This means that the weight is a little bit more than ideal weight by'), Texts(overWeightBy.toStringAsFixed(1)), - Texts( - 'May wish to consult with the doctor for medical help. Click to view our list of Doctors'), + Texts('May wish to consult with the doctor for medical help. Click to view our list of Doctors'), ], ) : overWeightBy >= 18 @@ -104,8 +110,7 @@ class IdealBodyResult extends StatelessWidget { SizedBox( height: 25.0, ), - Texts( - 'May wish to consult with the doctor for\n medical help. Click to view our list of\n Doctors'), + Texts('May wish to consult with the doctor for\n medical help. Click to view our list of\n Doctors'), ], ), ) @@ -148,20 +153,16 @@ class IdealBodyResult extends StatelessWidget { SizedBox( height: 25.0, ), - Texts( - 'May wish to consult with the doctor for\n medical help. Click to view our list of\n Doctors'), + Texts('May wish to consult with the doctor for\n medical help. Click to view our list of\n Doctors'), ], ), ), Container( width: 350, child: Button( - label: 'See List Of Doctors', + label: TranslationBase.of(context).viewDocList, onTap: () { - Navigator.push( - context, - FadePage(page: DoctorList()), - ); + getDoctorsList(context); }, ), ), @@ -169,4 +170,57 @@ class IdealBodyResult extends StatelessWidget { ), ); } + + getDoctorsList(BuildContext context) { + GifLoaderDialogUtils.showMyDialog(context); + BariatricsService service = new BariatricsService(); + + List doctorsList = []; + List _patientDoctorAppointmentListHospital = List(); + + service.getCalculationDoctors(calculationID: 4).then((res) { + GifLoaderDialogUtils.hideDialog(context); + print(res['List_CalculationTable'].length); + if (res['MessageStatus'] == 1) { + if (res['List_CalculationTable'].length != 0) { + res['List_CalculationTable'].forEach((item) { + DoctorList docList = new DoctorList(); + docList.clinicID = item['ClinicID']; + docList.clinicName = item['ClinicName']; + docList.doctorID = item['DoctorID']; + docList.doctorImageURL = item['DoctorImageURL']; + docList.name = item['DoctorName']; + docList.doctorTitle = item['DoctorTitle']; + docList.gender = item['Gender']; + docList.genderDescription = item['GenderDescription']; + docList.nationalityName = item['Nationality']; + docList.nationalityFlagURL = item['NationalityFlagURL']; + docList.projectID = item['ProjectID']; + docList.projectName = item['ProjectName']; + docList.actualDoctorRate = 0; + doctorsList.add(docList); + }); + + doctorsList.forEach((element) { + List doctorByHospital = _patientDoctorAppointmentListHospital + .where( + (elementClinic) => elementClinic.filterName == element.projectName, + ) + .toList(); + + if (doctorByHospital.length != 0) { + _patientDoctorAppointmentListHospital[_patientDoctorAppointmentListHospital.indexOf(doctorByHospital[0])].patientDoctorAppointmentList.add(element); + } else { + _patientDoctorAppointmentListHospital.add(PatientDoctorAppointmentList(filterName: element.projectName, distanceInKMs: "0", patientDoctorAppointment: element)); + } + }); + + Navigator.push(context, FadePage(page: SearchResults(isLiveCareAppointment: false, doctorsList: doctorsList, patientDoctorAppointmentListHospital: _patientDoctorAppointmentListHospital))); + } + } + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + }); + } } diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index cefeeec2..50a90f39 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2567,6 +2567,10 @@ class TranslationBase { String get onlineTag => localizedValues["onlineTag"][locale.languageCode]; String get offlineTag => localizedValues["offlineTag"][locale.languageCode]; + + String get viewDocList => localizedValues["viewDocList"][locale.languageCode]; + + String get bodyFatTitle => localizedValues["bodyFatTitle"][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { From 2a212149ed069c2c29e48b5f15fa287a6a3bbf60 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Thu, 28 Oct 2021 13:50:40 +0300 Subject: [PATCH 07/13] Health converters UI done --- lib/config/localized_values.dart | 3 +- .../health_converter.dart | 18 +- .../health_converter/blood_cholesterol.dart | 393 +++++++++-------- .../health_converter/blood_sugar.dart | 367 ++++++++-------- .../health_converter/triglycerides.dart | 397 ++++++++++-------- .../​ health_calculators.dart | 4 +- .../components/SearchByDoctor.dart | 10 - lib/uitl/translations_delegate_base.dart | 3 + 8 files changed, 622 insertions(+), 573 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 810c4156..05bc4b52 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1144,7 +1144,7 @@ const Map localizedValues = { "ar": "تحويل مستوى السكر في الدم من مليمول/ لتر (مقياس المملكة المتحدة) الى ملغ/ ديسيلتر (مقياس الولايات المتحدة) والعكس" }, "convertCholesterolStatement": { - "en": "Convert blood cholesterol from\n mmol/l to mg/dlt and vice versa.", + "en": "Convert blood cholesterol from mmol/l to mg/dlt and vice versa.", "ar": "تحويل مستوى الكولسترول في الدم من مليمول/ لتر (مقياس المملكة المتحدة) الى ملغ/ ديسيلتر (مقياس الولايات المتحدة) والعكس" }, "triglyceridesConvertStatement": { @@ -1607,4 +1607,5 @@ const Map localizedValues = { "offlineTag": {"en": "Offline", "ar": "غير متصل"}, "viewDocList": {"en": "View List of Doctors", "ar": "عرض قائمة الأطباء"}, "bodyFatTitle": {"en": "Body Fat", "ar": " الدهون في الجسم"}, + "cholesTitle": {"en": "Blood Cholesterol", "ar": " الكولسترول في الدم"}, }; diff --git a/lib/pages/AlHabibMedicalService/health_converter.dart b/lib/pages/AlHabibMedicalService/health_converter.dart index 27c2a05c..c4ad7760 100644 --- a/lib/pages/AlHabibMedicalService/health_converter.dart +++ b/lib/pages/AlHabibMedicalService/health_converter.dart @@ -26,12 +26,8 @@ class _HealthConverterState extends State { appBarTitle: TranslationBase.of(context).converters, body: Column( children: [ - Container( - width: double.infinity, - height: 30, - ), Padding( - padding: EdgeInsets.only(left: 12, right: 12), + padding: EdgeInsets.only(left: 12, right: 12, top: 20.0), child: GridView.builder( shrinkWrap: true, primary: false, @@ -59,9 +55,9 @@ class _HealthConverterState extends State { ), child: MedicalProfileItem( title: TranslationBase.of(context).bloodSugar, - imagePath: 'assets/images/new-design/blood_sugar_icon.png', + imagePath: 'sugar-blood-level.svg', subTitle: TranslationBase.of(context).sugar, - isPngImage: true, + isPngImage: false, ), )); @@ -72,9 +68,9 @@ class _HealthConverterState extends State { ), child: MedicalProfileItem( title: TranslationBase.of(context).bloodCholesterol, - imagePath: 'assets/images/new-design/blood_cholesterol_icon.png', + imagePath: 'cholesterol.svg', subTitle: TranslationBase.of(context).cholesterol, - isPngImage: true, + isPngImage: false, ), )); @@ -85,9 +81,9 @@ class _HealthConverterState extends State { ), child: MedicalProfileItem( title: TranslationBase.of(context).triglycerides, - imagePath: 'assets/images/new-design/triglycerides_blood_icon.png', + imagePath: 'fat.svg', subTitle: TranslationBase.of(context).fatInBlood, - isPngImage: true, + isPngImage: false, ), )); return medical; diff --git a/lib/pages/AlHabibMedicalService/health_converter/blood_cholesterol.dart b/lib/pages/AlHabibMedicalService/health_converter/blood_cholesterol.dart index 5e584602..af93afa4 100644 --- a/lib/pages/AlHabibMedicalService/health_converter/blood_cholesterol.dart +++ b/lib/pages/AlHabibMedicalService/health_converter/blood_cholesterol.dart @@ -1,12 +1,13 @@ +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -const activeCardColor = Color(0xffD02127); -const inactiveCardColor = Color(0xffFAFAFd); +const activeCardColor = CustomColors.green; +const inactiveCardColor = CustomColors.white; class BloodCholesterol extends StatefulWidget { @override @@ -18,7 +19,6 @@ class _BloodCholesterolState extends State { Color cardMMOLColor = inactiveCardColor; void updateColor(int type) { - //MG/DLT card if (type == 1) { if (cardMGColor == inactiveCardColor) { cardMGColor = activeCardColor; @@ -51,225 +51,246 @@ class _BloodCholesterolState extends State { bool _visible = false; TextEditingController textController = new TextEditingController(); + TextEditingController resultTextController = new TextEditingController(); String finalValue; double inputValue = 0.0; String unit; double conversionConst = 38.67; + @override + void initState() { + updateColor(1); + unit = 'mmol/l'; + super.initState(); + } + @override Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, - appBarTitle: TranslationBase.of(context).bloodCholesterol, + appBarTitle: TranslationBase.of(context).cholesTitle, isShowDecPage: false, showNewAppBar: true, showNewAppBarTitle: true, body: Padding( padding: const EdgeInsets.all(16.0), - child: SingleChildScrollView( - child: Container( - height: MediaQuery.of(context).size.height * 0.7, - child: Column( - //crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: 350.0, - child: Text( - TranslationBase.of(context).convertCholesterolStatement, - style: TextStyle(fontSize: 20.0), - ), - ), - SizedBox( - height: 15.0, - ), - Container( - color: Colors.white, - height: 120.0, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( + child: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container(child: Text(TranslationBase.of(context).cholesTitle, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20.0, letterSpacing: -0.64, color: CustomColors.darkGrey))), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Text(TranslationBase.of(context).convertCholesterolStatement, style: TextStyle(fontWeight: FontWeight.w600, fontSize: 14.0, letterSpacing: -0.64, color: CustomColors.darkGrey)), + ), + SizedBox( + height: 13.0, + ), + Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top: 12.0), + child: Text(TranslationBase.of(context).convertFrom, style: TextStyle(fontWeight: FontWeight.w600, fontSize: 16.0, letterSpacing: -0.64, color: CustomColors.darkGrey)), + ), + SizedBox( + height: 9.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.center, children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 15.0), - child: Row( - children: [ - Texts( - TranslationBase.of(context).convertFrom, + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + updateColor(1); + inputValue = double.parse(textController.text); + inputValue = inputValue / conversionConst; + unit = 'mmol/l'; + }); + }, + child: Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.0), + ), + border: Border.all(width: 2, color: cardMGColor), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), + ), + ], + color: Colors.white, ), - ], + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text('MG/DLt to MMOL/L', + textAlign: TextAlign.center, style: TextStyle(fontWeight: FontWeight.w600, fontSize: 13.0, letterSpacing: -0.64, color: CustomColors.darkGrey)), + ), + ), ), ), SizedBox( - height: 9.0, + width: 12.0, ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - GestureDetector( - onTap: () { - setState(() { - updateColor(1); - inputValue = - double.parse(textController.text); - inputValue = inputValue / conversionConst; - unit = 'mmol/l'; - }); - }, - child: Container( - height: 65.0, - width: 150.0, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 3, - blurRadius: 7, - offset: Offset( - 0, 3), // changes position of shadow - ), - ], - color: cardMGColor, - borderRadius: BorderRadius.circular(3.0), - ), - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 0.0, horizontal: 18.0), - child: Texts('MG/DLt TO \nMMOL/L'), + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + updateColor(2); + inputValue = double.parse(textController.text); + inputValue = inputValue * conversionConst; + unit = 'mg/dlt'; + }); + }, + child: Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.0), ), + border: Border.all(width: 2, color: cardMMOLColor), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), + ), + ], + color: Colors.white, ), - ), - GestureDetector( - onTap: () { - setState(() { - updateColor(2); - inputValue = - double.parse(textController.text); - inputValue = inputValue * conversionConst; - unit = 'mg/dlt'; - }); - }, - child: Container( - height: 65.0, - width: 150.0, - decoration: BoxDecoration( - color: cardMMOLColor, - borderRadius: BorderRadius.circular(3.0), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 3, - blurRadius: 7, - offset: Offset( - 0, 3), // changes position of shadow - ), - ], - ), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0), - child: Texts('MG/DLt TO\n MMOL/L'), - ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text('MMOL/L to MG/DLt', + textAlign: TextAlign.center, style: TextStyle(fontWeight: FontWeight.w600, fontSize: 13.0, letterSpacing: -0.64, color: CustomColors.darkGrey)), ), ), - ], + ), ), ], ), - ), + ], ), - SizedBox( - height: 25.0, - ), - Container( - height: 65.0, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(6.0), - color: Colors.white, + ), + SizedBox( + height: 12.0, + ), + inputWidget(TranslationBase.of(context).enterReadingValue, '0.0', textController), + SizedBox( + height: 12.0, + ), + Visibility( + visible: _visible, + child: inputWidget(TranslationBase.of(context).result, inputValue.toStringAsFixed(2) + " " + unit.toString(), resultTextController, isEnable: false), + ), + SizedBox( + height: 15.0, + ), + ], + ), + ), + ), + bottomSheet: Container( + color: CustomColors.white, + padding: EdgeInsets.fromLTRB(12.0, 1.0, 12.0, 25.0), + child: DefaultButton( + TranslationBase.of(context).calculate, + () { + setState(() { + _visible == false ? _visible = !_visible : _visible = _visible; + calculateBloodCholesterol(); + }); + }, + color: CustomColors.green, + ), + ), + ); + } + + Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String prefix, bool isEnable = true, bool hasSelection = false}) { + return Container( + padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: isEnable ? Colors.white : CustomColors.grey2.withOpacity(0.4), + border: Border.all( + color: Color(0xffefefef), + width: 1, + ), + ), + child: InkWell( + onTap: hasSelection ? () {} : null, + child: Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + _labelText, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), ), - child: TextFormField( - controller: textController, - inputFormatters: [ -// FilteringTextInputFormatter.digitsOnly - ], + TextField( + enabled: isEnable, + scrollPadding: EdgeInsets.zero, keyboardType: TextInputType.number, + controller: _controller, + onChanged: (value) => {}, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), decoration: InputDecoration( - border: OutlineInputBorder( - borderSide: BorderSide(color: Colors.black45)), - labelText: TranslationBase.of(context).enterReadingValue, - labelStyle: TextStyle( - color: Colors.black87, + isDense: true, + hintText: _hintText, + fillColor: CustomColors.accentColor, + hintStyle: TextStyle( + fontSize: isEnable ? 14 : 24, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: isEnable ? Color(0xff575757) : CustomColors.black, + letterSpacing: -0.56, ), - ), - ), - ), - SizedBox( - height: 25.0, - ), - Visibility( - visible: _visible, - child: Container( - height: 115.0, - width: 350.0, - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.black), - borderRadius: BorderRadius.circular(15.0), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Texts(TranslationBase.of(context).result + ":"), - Row( - children: [ - Text( - inputValue.toStringAsFixed(3).toString(), - style: TextStyle(fontSize: 35.0), + prefixIconConstraints: BoxConstraints(minWidth: 50), + prefixIcon: prefix == null + ? null + : Text( + "+" + prefix, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w500, + color: Color(0xff2E303A), + letterSpacing: -0.56, ), - Padding( - padding: EdgeInsets.only(left: 4.0, top: 10.0), - child: Text( - unit.toString(), - style: TextStyle( - color: Color(0xffC5273A), - fontSize: 15.0, - fontWeight: FontWeight.w500, - ), - ), - ), - ], - ), - ], - ), - ), - ), - ), - SizedBox( - height: 15.0, - ), - Flexible( - child: Container( - height: 60.0, - width: 150.0, - child: SecondaryButton( - label: TranslationBase.of(context).calculate, - onTap: () { - setState(() { - _visible == false - ? _visible = !_visible - : _visible = _visible; - calculateBloodCholesterol(); - }); - }, + ), + contentPadding: EdgeInsets.zero, + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, ), ), - ), - ], + ], + ), ), - ), + if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined), + ], ), ), ); diff --git a/lib/pages/AlHabibMedicalService/health_converter/blood_sugar.dart b/lib/pages/AlHabibMedicalService/health_converter/blood_sugar.dart index ebc41150..4604c3df 100644 --- a/lib/pages/AlHabibMedicalService/health_converter/blood_sugar.dart +++ b/lib/pages/AlHabibMedicalService/health_converter/blood_sugar.dart @@ -1,15 +1,15 @@ +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -const activeCardColor = Color(0xffD02127); -const activeTextColor = Color(0xffFAFAFA); -const inactiveCardColor = Color(0xffFAFAFA); -const inactiveTextColor = Color(0xff60686B); +const activeCardColor = CustomColors.green; +const activeTextColor = CustomColors.black; +const inactiveCardColor = CustomColors.white; +const inactiveTextColor = CustomColors.black; class BloodSugar extends StatefulWidget { @override @@ -25,7 +25,6 @@ class _BloodSugarState extends State { Color textMMOLColor = inactiveTextColor; void updateColor(int type) { - //MG/DLT card if (type == 1) { if (cardMGColor == inactiveCardColor) { cardMGColor = activeCardColor; @@ -59,10 +58,12 @@ class _BloodSugarState extends State { inputValue = inputValue * 18; unit = 'mg/dlt'; } + setState(() {}); } bool _visible = false; TextEditingController textController = new TextEditingController(); + TextEditingController resultTextController = new TextEditingController(); String finalValue; double inputValue = 0; @@ -90,210 +91,222 @@ class _BloodSugarState extends State { Expanded( child: SingleChildScrollView( child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ + Container(child: Text(TranslationBase.of(context).bloodSugar, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20.0, letterSpacing: -0.64, color: CustomColors.darkGrey))), Container( - margin: EdgeInsets.symmetric(horizontal: 8), - child: Text( - TranslationBase.of(context).convertBloodSugarStatement, - style: TextStyle(fontSize: 20.0), - ), + margin: EdgeInsets.only(top: 10.0), + child: Text(TranslationBase.of(context).convertBloodSugarStatement, + style: TextStyle(fontWeight: FontWeight.w600, fontSize: 14.0, letterSpacing: -0.64, color: CustomColors.darkGrey)), ), SizedBox( height: 12.0, ), Container( - color: Colors.white, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 8), - child: Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: Row( - children: [ - Texts( - TranslationBase.of(context).convertFrom, - ) - ], - ), - ), - SizedBox( - height: 8.0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox( - width: 16.0, - ), - Expanded( - child: GestureDetector( - onTap: () { - setState(() { - updateColor(1); - calculateBloodSugar(); - }); - }, - child: Container( - height: 65.0, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 1, - blurRadius: 7, - offset: Offset(0, 3), // changes position of shadow - ), - ], - color: cardMGColor, - borderRadius: BorderRadius.circular(3.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top: 12.0), + child: Text(TranslationBase.of(context).convertFrom, style: TextStyle(fontWeight: FontWeight.w600, fontSize: 16.0, letterSpacing: -0.64, color: CustomColors.darkGrey)), + ), + SizedBox( + height: 8.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + updateColor(1); + calculateBloodSugar(); + }); + }, + child: Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.0), ), - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 0.0, horizontal: 18.0), - child: Texts( - 'MG/DLt TO \nMMOL/L', - color: textMGColor, + border: Border.all(width: 2, color: cardMGColor), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), ), + ], + color: Colors.white, + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'MG/DLt to MMOL/L', + textAlign: TextAlign.center, + style: TextStyle(fontWeight: FontWeight.w600, fontSize: 13.0, letterSpacing: -0.64, color: CustomColors.darkGrey), ), ), ), ), - SizedBox( - width: 12.0, - ), - Expanded( - child: GestureDetector( - onTap: () { - setState(() { - updateColor(2); - calculateBloodSugar(); - }); - }, - child: Container( - height: 65.0, - decoration: BoxDecoration( - color: cardMMOLColor, - borderRadius: BorderRadius.circular(3.0), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 3, - blurRadius: 7, - offset: Offset(0, 3), // changes position of shadow - ), - ], + ), + SizedBox( + width: 12.0, + ), + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + updateColor(2); + calculateBloodSugar(); + }); + }, + child: Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.0), ), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: Texts( - 'MMOL/L TO MG/DLt ', - color: textMMOLColor, + border: Border.all(width: 2, color: cardMMOLColor), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), ), + ], + color: Colors.white, + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'MMOL/L to MG/DLt', + textAlign: TextAlign.center, + style: TextStyle(fontWeight: FontWeight.w600, fontSize: 13.0, letterSpacing: -0.64, color: CustomColors.darkGrey), ), ), ), ), - SizedBox( - width: 16.0, - ), - ], - ), - ], - ), + ), + ], + ), + ], ), ), SizedBox( - height: 24.0, - ), - Container( - height: 65.0, - padding: EdgeInsets.symmetric(horizontal: 8), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(6.0), - color: Colors.white, - ), - child: TextFormField( - controller: textController, - inputFormatters: [ -// FilteringTextInputFormatter.digitsOnly - ], - keyboardType: TextInputType.number, - decoration: InputDecoration( - labelText: TranslationBase.of(context).enterReadingValue, - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white), - ), - disabledBorder: UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white), - ), - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white), - ), - border: UnderlineInputBorder(borderSide: BorderSide(color: Colors.white)), - labelStyle: TextStyle( - color: Colors.black87, - ), - ), - ), + height: 12.0, ), + inputWidget(TranslationBase.of(context).enterReadingValue, '0.0', textController), SizedBox( - height: 24.0, + height: 12.0, ), Visibility( visible: _visible, - child: Container( - height: 115.0, - width: 350.0, - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.black), - borderRadius: BorderRadius.circular(15.0), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Texts(TranslationBase.of(context).result + ": "), - Row( - children: [ - Text( - inputValue.toStringAsFixed(2), - style: TextStyle(fontSize: 35.0), - ), - Padding( - padding: EdgeInsets.only(left: 4.0, top: 10.0), - child: Text( - unit.toString(), - style: TextStyle( - color: Color(0xffC5273A), - fontSize: 15.0, - fontWeight: FontWeight.w500, - ), - ), - ), - ], - ), - ], - ), - ), - ), + child: inputWidget(TranslationBase.of(context).result, inputValue.toStringAsFixed(2) + " " + unit.toString(), resultTextController, isEnable: false), ), ], ), ), ), - Container( - margin: EdgeInsets.symmetric(horizontal: 16), - child: DefaultButton(TranslationBase.of(context).calculate, () { - setState(() { - _visible == false ? _visible = !_visible : _visible = _visible; - calculateBloodSugar(); - }); - }), + ], + ), + ), + bottomSheet: Container( + color: CustomColors.white, + padding: EdgeInsets.fromLTRB(12.0, 1.0, 12.0, 25.0), + child: DefaultButton( + TranslationBase.of(context).calculate, + () { + setState(() { + _visible == false ? _visible = !_visible : _visible = _visible; + calculateBloodSugar(); + }); + }, + color: CustomColors.green, + ), + ), + ); + } + + Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String prefix, bool isEnable = true, bool hasSelection = false}) { + return Container( + padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: isEnable ? Colors.white : CustomColors.grey2.withOpacity(0.4), + border: Border.all( + color: Color(0xffefefef), + width: 1, + ), + ), + child: InkWell( + onTap: hasSelection ? () {} : null, + child: Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + _labelText, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), + ), + TextField( + enabled: isEnable, + scrollPadding: EdgeInsets.zero, + keyboardType: TextInputType.number, + controller: _controller, + onChanged: (value) => {}, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), + decoration: InputDecoration( + isDense: true, + hintText: _hintText, + fillColor: CustomColors.accentColor, + hintStyle: TextStyle( + fontSize: isEnable ? 14 : 24, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: isEnable ? Color(0xff575757) : CustomColors.black, + letterSpacing: -0.56, + ), + prefixIconConstraints: BoxConstraints(minWidth: 50), + prefixIcon: prefix == null + ? null + : Text( + "+" + prefix, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w500, + color: Color(0xff2E303A), + letterSpacing: -0.56, + ), + ), + contentPadding: EdgeInsets.zero, + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + ), + ], + ), ), + if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined), ], ), ), diff --git a/lib/pages/AlHabibMedicalService/health_converter/triglycerides.dart b/lib/pages/AlHabibMedicalService/health_converter/triglycerides.dart index b9571d2b..e441d935 100644 --- a/lib/pages/AlHabibMedicalService/health_converter/triglycerides.dart +++ b/lib/pages/AlHabibMedicalService/health_converter/triglycerides.dart @@ -1,13 +1,13 @@ +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -const activeCardColor = Color(0xff70777A); -const inactiveCardColor = Color(0xffFAFAFd); +const activeCardColor = CustomColors.green; +const inactiveCardColor = CustomColors.white; class Triglycerides extends StatefulWidget { @override @@ -18,6 +18,7 @@ class _TriglyceridesState extends State { Color cardMGColor = inactiveCardColor; Color cardMMOLColor = inactiveCardColor; int type; + void updateColor(type) { //MG/DLT card if (type == 1) { @@ -52,12 +53,20 @@ class _TriglyceridesState extends State { bool _visible = false; TextEditingController textController = new TextEditingController(); + TextEditingController resultTextController = new TextEditingController(); String finalValue; double inputValue = 0.0; String unit; double conversionConst = 88.57; + @override + void initState() { + updateColor(1); + unit = 'mmol/l'; + super.initState(); + } + @override Widget build(BuildContext context) { return AppScaffold( @@ -68,210 +77,226 @@ class _TriglyceridesState extends State { showNewAppBarTitle: true, body: Padding( padding: const EdgeInsets.all(16.0), - child: SingleChildScrollView( - child: Container( - height: MediaQuery.of(context).size.height * 0.7, - child: Column( - //crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: 350.0, - child: Text( - TranslationBase.of(context).triglyceridesConvertStatement, - //textAlign: TextAlign.center, - style: TextStyle(fontSize: 20.0), - ), - ), - SizedBox( - height: 15.0, - ), - Container( - color: Colors.white, - height: 120.0, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - //crossAxisAlignment: CrossAxisAlignment.end, + child: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container(child: Text(TranslationBase.of(context).triglycerides, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20.0, letterSpacing: -0.64, color: CustomColors.darkGrey))), + Container( + margin: EdgeInsets.only(top: 10.0), + child: + Text(TranslationBase.of(context).triglyceridesConvertStatement, style: TextStyle(fontWeight: FontWeight.w600, fontSize: 14.0, letterSpacing: -0.64, color: CustomColors.darkGrey)), + ), + SizedBox( + height: 12.0, + ), + Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top: 12.0), + child: Text(TranslationBase.of(context).convertFrom, style: TextStyle(fontWeight: FontWeight.w600, fontSize: 16.0, letterSpacing: -0.64, color: CustomColors.darkGrey)), + ), + SizedBox( + height: 9.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.center, children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 15.0), - child: Row( - children: [ - Texts(TranslationBase.of(context).convertFrom) - ], + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + updateColor(1); + inputValue = double.parse(textController.text); + inputValue = inputValue / conversionConst; + unit = 'mmol/l'; + }); + }, + child: Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.0), + ), + border: Border.all(width: 2, color: cardMGColor), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), + ), + ], + color: Colors.white, + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'MG/DLt to MMOL/L', + textAlign: TextAlign.center, + style: TextStyle(fontWeight: FontWeight.w600, fontSize: 13.0, letterSpacing: -0.64, color: CustomColors.darkGrey), + ), + ), + ), ), ), SizedBox( - height: 9.0, + width: 12.0, ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - GestureDetector( - onTap: () { - setState(() { - updateColor(1); - inputValue = - double.parse(textController.text); - inputValue = inputValue / conversionConst; - unit = 'mmol/l'; - }); - }, - child: Container( - height: 65.0, - width: 150.0, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 3, - blurRadius: 7, - offset: Offset( - 0, 3), // changes position of shadow - ), - ], - color: cardMGColor, - borderRadius: BorderRadius.circular(3.0), - ), - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 0.0, horizontal: 18.0), - child: Texts('MG/DLt TO \nMMOL/L'), + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + updateColor(2); + inputValue = double.parse(textController.text); + inputValue = inputValue * conversionConst; + unit = 'mg/dlt'; + }); + }, + child: Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.0), ), + border: Border.all(width: 2, color: cardMMOLColor), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), + ), + ], + color: Colors.white, ), - ), - GestureDetector( - onTap: () { - setState(() { - updateColor(2); - inputValue = - double.parse(textController.text); - inputValue = inputValue * conversionConst; - unit = 'mg/dlt'; - }); - }, - child: Container( - height: 65.0, - width: 150.0, - decoration: BoxDecoration( - color: cardMMOLColor, - borderRadius: BorderRadius.circular(3.0), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.5), - spreadRadius: 3, - blurRadius: 7, - offset: Offset( - 0, 3), // changes position of shadow - ), - ], - ), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0), - child: Texts('MG/DLt TO\n MMOL/L'), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'MMOL/L to MG/DLt', + textAlign: TextAlign.center, + style: TextStyle(fontWeight: FontWeight.w600, fontSize: 13.0, letterSpacing: -0.64, color: CustomColors.darkGrey), ), ), ), - ], + ), ), ], ), - ), - ), - SizedBox( - height: 25.0, + ], ), - Container( - height: 65.0, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(6.0), - color: Colors.white, + ), + SizedBox( + height: 12.0, + ), + inputWidget(TranslationBase.of(context).enterReadingValue, "0.0", textController), + SizedBox( + height: 12.0, + ), + Visibility( + visible: _visible, + child: inputWidget(TranslationBase.of(context).result, inputValue.toStringAsFixed(2) + " " + unit.toString(), resultTextController, isEnable: false), + ), + ], + ), + ), + ), + bottomSheet: Container( + color: CustomColors.white, + padding: EdgeInsets.fromLTRB(12.0, 1.0, 12.0, 25.0), + child: DefaultButton( + TranslationBase.of(context).calculate.toUpperCase(), + () { + setState(() { + _visible == false ? _visible = !_visible : _visible = _visible; + calculateTriglycerides(); + }); + }, + color: CustomColors.green, + ), + ), + ); + } + + Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String prefix, bool isEnable = true, bool hasSelection = false}) { + return Container( + padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: isEnable ? Colors.white : CustomColors.grey2.withOpacity(0.4), + border: Border.all( + color: Color(0xffefefef), + width: 1, + ), + ), + child: InkWell( + onTap: hasSelection ? () {} : null, + child: Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + _labelText, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), ), - child: TextFormField( - controller: textController, - inputFormatters: [ -// FilteringTextInputFormatter.digitsOnly - ], + TextField( + enabled: isEnable, + scrollPadding: EdgeInsets.zero, keyboardType: TextInputType.number, + controller: _controller, + onChanged: (value) => {}, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), decoration: InputDecoration( - border: OutlineInputBorder( - borderSide: BorderSide(color: Colors.black45)), - labelText: TranslationBase.of(context).enterReadingValue, - labelStyle: TextStyle( - color: Colors.black87, + isDense: true, + hintText: _hintText, + fillColor: CustomColors.accentColor, + hintStyle: TextStyle( + fontSize: isEnable ? 14 : 24, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: isEnable ? Color(0xff575757) : CustomColors.black, + letterSpacing: -0.56, ), - ), - ), - ), - SizedBox( - height: 25.0, - ), - Visibility( - visible: _visible, - child: Container( - height: 115.0, - width: 350.0, - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.black), - borderRadius: BorderRadius.circular(15.0), - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Texts(TranslationBase.of(context).result + ":"), - Row( - children: [ - Text( - inputValue.toStringAsFixed(2), - style: TextStyle(fontSize: 35.0), + prefixIconConstraints: BoxConstraints(minWidth: 50), + prefixIcon: prefix == null + ? null + : Text( + "+" + prefix, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w500, + color: Color(0xff2E303A), + letterSpacing: -0.56, ), - Padding( - padding: EdgeInsets.only(left: 4.0, top: 10.0), - child: Text( - unit.toString(), - style: TextStyle( - color: Color(0xffC5273A), - fontSize: 15.0, - fontWeight: FontWeight.w500, - ), - ), - ), - ], - ), - ], - ), - ), - ), - ), - SizedBox( - height: 10.0, - ), - Flexible( - child: Container( - height: 60.0, - width: 250.0, - child: SecondaryButton( - label: - TranslationBase.of(context).calculate.toUpperCase(), - onTap: () { - setState(() { - _visible == false - ? _visible = !_visible - : _visible = _visible; - calculateTriglycerides(); - }); - }, + ), + contentPadding: EdgeInsets.zero, + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, ), ), - ), - ], + ], + ), ), - ), + if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined), + ], ), ), ); diff --git a/lib/pages/AlHabibMedicalService/​ health_calculators.dart b/lib/pages/AlHabibMedicalService/​ health_calculators.dart index de4e3a48..341a298d 100644 --- a/lib/pages/AlHabibMedicalService/​ health_calculators.dart +++ b/lib/pages/AlHabibMedicalService/​ health_calculators.dart @@ -88,11 +88,11 @@ class _HealthCalculatorsState extends State with SingleTicker controller: _tabController, children: [ Container( - margin: EdgeInsets.all(20.0), + // margin: EdgeInsets.all(20.0), child: Column( children: [ Padding( - padding: EdgeInsets.only(left: 12, right: 12), + padding: EdgeInsets.only(left: 12, right: 12, top: 20.0), child: GridView.builder( shrinkWrap: true, primary: false, diff --git a/lib/pages/BookAppointment/components/SearchByDoctor.dart b/lib/pages/BookAppointment/components/SearchByDoctor.dart index 829ac0e2..6bfac9a7 100644 --- a/lib/pages/BookAppointment/components/SearchByDoctor.dart +++ b/lib/pages/BookAppointment/components/SearchByDoctor.dart @@ -46,17 +46,7 @@ class _SearchByDoctorState extends State { ), ), ), - // Container( - // decoration: BoxDecoration(color: Colors.white), - // child: TextField( - // controller: doctorNameController, - // onChanged: (content) { - // _onDocTextChanged(content); - // }, - // decoration: InputDecoration(labelText: TranslationBase.of(context).enterDocName, fillColor: Colors.white, prefixIcon: Icon(Icons.search), border: OutlineInputBorder())), - // ), inputWidget(TranslationBase.of(context).enterDocName, '', doctorNameController), - ], ), ), diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 50a90f39..eb1c1961 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -2571,6 +2571,9 @@ class TranslationBase { String get viewDocList => localizedValues["viewDocList"][locale.languageCode]; String get bodyFatTitle => localizedValues["bodyFatTitle"][locale.languageCode]; + + String get cholesTitle => localizedValues["cholesTitle"][locale.languageCode]; + } class TranslationBaseDelegate extends LocalizationsDelegate { From 4a8fc386263a4124dd244f194df84224aa04d7e1 Mon Sep 17 00:00:00 2001 From: "Mirza.Shafique" Date: Thu, 28 Oct 2021 15:11:52 +0300 Subject: [PATCH 08/13] live care design 2.0 --- lib/config/config.dart | 4 +- lib/pages/livecare/clinic_timings_page.dart | 118 +++++++ .../livecare/live_care_payment_page.dart | 316 ++++++++++++++++++ .../livecare/widgets/LiveCareHistoryCard.dart | 15 +- .../widgets/LiveCarePaymentDialog.dart | 1 + lib/pages/livecare/widgets/clinic_card.dart | 88 ++--- lib/pages/livecare/widgets/clinic_list.dart | 86 +++-- 7 files changed, 542 insertions(+), 86 deletions(-) create mode 100644 lib/pages/livecare/clinic_timings_page.dart create mode 100644 lib/pages/livecare/live_care_payment_page.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index 6f05a414..bca5db17 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -15,8 +15,8 @@ const PACKAGES_CUSTOMER = '/api/customers'; const PACKAGES_SHOPPING_CART = '/api/shopping_cart_items'; const PACKAGES_ORDERS = '/api/orders'; const PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; -// const BASE_URL = 'https://uat.hmgwebservices.com/'; -const BASE_URL = 'https://hmgwebservices.com/'; +const BASE_URL = 'https://uat.hmgwebservices.com/'; +// const BASE_URL = 'https://hmgwebservices.com/'; // Pharmacy UAT URLs // const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; diff --git a/lib/pages/livecare/clinic_timings_page.dart b/lib/pages/livecare/clinic_timings_page.dart new file mode 100644 index 00000000..7e92a3c4 --- /dev/null +++ b/lib/pages/livecare/clinic_timings_page.dart @@ -0,0 +1,118 @@ +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/models/LiveCare/ClinicsServiceTimingsResponse.dart'; +import 'package:diplomaticquarterapp/models/LiveCare/ERAppointmentFeesResponse.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; + +class ClinicTimingsPage extends StatefulWidget { + final clinicName; + final List patientERGetClinicsServiceTimingsList; + + ClinicTimingsPage({@required this.clinicName, @required this.patientERGetClinicsServiceTimingsList}); + + @override + _LiveCarePatmentPageState createState() => _LiveCarePatmentPageState(); +} + +class _LiveCarePatmentPageState extends State { + ProjectViewModel projectViewModel; + + @override + Widget build(BuildContext context) { + projectViewModel = Provider.of(context); + return AppScaffold( + appBarTitle: TranslationBase.of(context).clinicSchedule, + isShowAppBar: true, + showNewAppBarTitle: true, + showNewAppBar: true, + description: TranslationBase.of(context).erConsultation, + body: Container( + width: double.infinity, + height: double.infinity, + child: Column( + children: [ + Expanded( + child: ListView.separated( + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.only(top: index == 0 ? 12 : 0, bottom: (index == widget.patientERGetClinicsServiceTimingsList.length - 1) ? 12 : 0), + child: showItem(widget.patientERGetClinicsServiceTimingsList[index]), + ); + }, + separatorBuilder: (context, index) { + return mHeight(12); + }, + itemCount: widget.patientERGetClinicsServiceTimingsList.length, + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.all(12), + color: Colors.white, + child: DefaultButton( + TranslationBase.of(context).back, + () { + Navigator.pop(context); + }, + ), + ), + ], + ), + ), + ); + } + + Widget showItem(PatientERGetClinicsServiceTimingsList item) { + return Container( + width: double.infinity, + padding: EdgeInsets.only(left: 12, right: 12), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + flex: 1, + child: Text( + item.dayOfWeekStr, + style: TextStyle( + fontSize: 13, + letterSpacing: -0.42, + fontWeight: FontWeight.w600, + ), + ), + ), + Expanded( + flex: 3, + child: Container( + width: double.infinity, + decoration: cardRadius(12), + padding: EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + for (int i = 0; i < item.shiftTimings.length; i++) + Text( + TranslationBase.of(context).from + " " + item.shiftTimings[i].startTime + " " + TranslationBase.of(context).to + " " + item.shiftTimings[i].endTime, + style: TextStyle( + fontSize: 13, + letterSpacing: -0.42, + fontWeight: FontWeight.w600, + ), + ) + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/pages/livecare/live_care_payment_page.dart b/lib/pages/livecare/live_care_payment_page.dart new file mode 100644 index 00000000..3980c5a7 --- /dev/null +++ b/lib/pages/livecare/live_care_payment_page.dart @@ -0,0 +1,316 @@ +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/models/LiveCare/ERAppointmentFeesResponse.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; + +class LiveCarePatmentPage extends StatefulWidget { + GetERAppointmentFeesList getERAppointmentFeesList; + int waitingTime; + String clinicName; + + LiveCarePatmentPage({@required this.getERAppointmentFeesList, @required this.waitingTime, @required this.clinicName}); + + @override + _LiveCarePatmentPageState createState() => _LiveCarePatmentPageState(); +} + +class _LiveCarePatmentPageState extends State { + int _selected = 0; + + ProjectViewModel projectViewModel; + + @override + Widget build(BuildContext context) { + var size = MediaQuery.of(context).size; + final double itemHeight = ((size.height - kToolbarHeight - 24) * 0.42) / 2; + final double itemWidth = size.width / 2; + projectViewModel = Provider.of(context); + return AppScaffold( + appBarTitle: TranslationBase.of(context).livecare, + isShowAppBar: true, + showNewAppBarTitle: true, + showNewAppBar: true, + description: TranslationBase.of(context).erConsultation, + body: Container( + width: double.infinity, + + height: double.infinity, + child: Column( + children: [ + Expanded( + child: Padding( + padding: EdgeInsets.all(21), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Text( + widget.clinicName, + style: TextStyle( + fontSize: 19.0, + fontWeight: FontWeight.bold, + letterSpacing: -1.44, + ), + ), + mHeight(8), + Text( + TranslationBase.of(context).expectedWaiting, + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 14.0, + fontWeight: FontWeight.w600, + letterSpacing: -0.56, + color: CustomColors.textColor, + ), + ), + Text( + widget.waitingTime.toString() + " " + TranslationBase.of(context).minute, + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + color: CustomColors.accentColor, + letterSpacing: -0.66, + ), + ), + mHeight(16), + Container( + decoration: cardRadius(12), + padding: EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + TranslationBase.of(context).erConsultFee, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + letterSpacing: -0.64, + ), + ), + mHeight(10), + Row( + children: [ + Expanded( + child: Text( + TranslationBase.of(context).patientShareToDo, + style: TextStyle( + fontSize: 10, + letterSpacing: -0.4, + color: CustomColors.textColor, + fontWeight: FontWeight.w600, + ), + ), + ), + Expanded( + child: Text( + widget.getERAppointmentFeesList.amount + " " + widget.getERAppointmentFeesList.currency, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + mHeight(4), + mDivider(CustomColors.lightGreyColor), + mHeight(4), + Row( + children: [ + Expanded( + child: Text( + TranslationBase.of(context).patientTaxToDo, + style: TextStyle( + fontSize: 10, + letterSpacing: -0.4, + color: CustomColors.textColor, + fontWeight: FontWeight.w600, + ), + ), + ), + Expanded( + child: Text( + widget.getERAppointmentFeesList.tax + " " + widget.getERAppointmentFeesList.currency, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + mHeight(4), + mDivider(CustomColors.lightGreyColor), + mHeight(4), + Row( + children: [ + Expanded( + child: Text( + TranslationBase.of(context).patientShareTotalToDo, + style: TextStyle( + fontSize: 10, + letterSpacing: -0.4, + color: CustomColors.textColor, + fontWeight: FontWeight.w600, + ), + ), + ), + Expanded( + child: Text( + widget.getERAppointmentFeesList.total + " " + widget.getERAppointmentFeesList.currency, + style: TextStyle( + fontSize: 12, + letterSpacing: -0.48, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + ], + ), + ), + mHeight(12), + Container( + padding: EdgeInsets.all(12), + decoration: cardRadius(12), + child: Row( + children: [ + SvgPicture.asset( + "assets/images/new/services/raise_comp.svg", + color: CustomColors.green, + width: 18, + height: 18, + ), + mWidth(10), + Expanded( + child: Text( + TranslationBase.of(context).insuredPatient, + style: TextStyle( + fontSize: 10.0, + letterSpacing: -0.4, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Row( + children: [ + Radio( + value: 1, + groupValue: _selected, + onChanged: onRadioChanged, + ), + Text( + TranslationBase.of(context).agreeTo, + style: new TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + color: CustomColors.textColor, + ), + ), + mWidth(4), + Text( + TranslationBase.of(context).termsConditoins, + style: new TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.w600, + letterSpacing: -0.48, + color: CustomColors.accentColor, + ), + ), + ], + ), + ), + mFlex(1), + Text( + TranslationBase.of(context).upComingPayOption, + style: new TextStyle( + fontSize: 12.0, + letterSpacing: -0.36, + fontWeight: FontWeight.w600, + ), + ), + Container( + margin: EdgeInsets.fromLTRB(10.0, 5.0, 10.0, 5.0), + child: getPaymentMethods(), + ), + + + ], + ), + ), + ), + Container( + padding: EdgeInsets.all(12), + color: Colors.white, + child: Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: DefaultButton( + TranslationBase.of(context).cancel, + () { + Navigator.pop(context, false); + }, + ), + ), + mWidth(12), + Expanded( + child: DefaultButton( + TranslationBase.of(context).next, + () { + if (_selected == 0) { + AppToast.showErrorToast(message: TranslationBase.of(context).pleaseAcceptTerms); + } else { + Navigator.pop(context, true); + } + }, + color: CustomColors.green, + ), + ), + ], + ), + ), + ], + ), + ), + ); + } + + void onRadioChanged(int value) { + setState(() { + _selected = value; + }); + } + + _getNormalText(text) { + return Container( + margin: EdgeInsets.only(top: 10.0, right: 10.0), + child: Text(text, textAlign: TextAlign.start, style: TextStyle(fontSize: 14, letterSpacing: 0.5, color: Colors.black)), + ); + } + + _getMarginText(text) { + return Container( + margin: EdgeInsets.only(top: 10.0, right: 10.0, bottom: 10.0), + child: Text(text, textAlign: TextAlign.start, style: TextStyle(fontSize: 14, letterSpacing: 0.5, fontWeight: FontWeight.bold, color: Colors.black)), + ); + } +} diff --git a/lib/pages/livecare/widgets/LiveCareHistoryCard.dart b/lib/pages/livecare/widgets/LiveCareHistoryCard.dart index da9ad863..91659278 100644 --- a/lib/pages/livecare/widgets/LiveCareHistoryCard.dart +++ b/lib/pages/livecare/widgets/LiveCareHistoryCard.dart @@ -60,16 +60,16 @@ class _LiveCareHistoryCardState extends State { ], ), child: Container( - margin: EdgeInsets.only(left: projectViewModel.isArabic ? 0 : 6, right: projectViewModel.isArabic ? 6 : 0), + margin: EdgeInsets.only(left: projectViewModel.isArabic ? 0 : 0, right: projectViewModel.isArabic ? 0 : 0), padding: EdgeInsets.symmetric(vertical: 10, horizontal: 12), decoration: BoxDecoration( color: Colors.white, border: Border.all(color: Colors.white, width: 1), borderRadius: BorderRadius.only( - bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), - topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), - bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), - topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), + bottomRight: projectViewModel.isArabic ? Radius.circular(10) : Radius.circular(10.0), + topRight: projectViewModel.isArabic ? Radius.circular(10) : Radius.circular(10.0), + bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(10), + topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(10), ), ), child: Column( @@ -77,12 +77,13 @@ class _LiveCareHistoryCardState extends State { mainAxisSize: MainAxisSize.min, children: [ Text( - widget.erRequestHistoryList.stringCallStatus == "Completed" ? widget.erRequestHistoryList.stringCallStatus : "Pending", + widget.erRequestHistoryList.stringCallStatus , style: TextStyle( fontSize: 10.0, fontWeight: FontWeight.w600, letterSpacing: -0.4, - color: widget.erRequestHistoryList.stringCallStatus == "Completed" ? CustomColors.green : CustomColors.orange, + color: CustomColors.green, + //color: widget.erRequestHistoryList.stringCallStatus == "Completed" ? CustomColors.green : CustomColors.orange, ), ), mHeight(12), diff --git a/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart b/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart index a8950e5d..1e2eaa1b 100644 --- a/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart +++ b/lib/pages/livecare/widgets/LiveCarePaymentDialog.dart @@ -40,6 +40,7 @@ class _LiveCarePaymentDialogState extends State { height: 600.0, margin: EdgeInsets.all(20.0), width: 500.0, + color: Colors.red, child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/pages/livecare/widgets/clinic_card.dart b/lib/pages/livecare/widgets/clinic_card.dart index e788a5cd..0f534d98 100644 --- a/lib/pages/livecare/widgets/clinic_card.dart +++ b/lib/pages/livecare/widgets/clinic_card.dart @@ -11,6 +11,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; +import '../clinic_timings_page.dart'; import 'ClinicTimingsDialog.dart'; // ignore: must_be_immutable @@ -124,27 +125,30 @@ class _State extends State { ], ), ), - Container( - padding: EdgeInsets.only(left: 8,right: 8,top: 4,bottom: 4), - decoration: containerRadius(CustomColors.devider, 100), - child: Row( - children: [ - SvgPicture.asset( - "assets/images/new-design/ic_schedule.svg", - width: 16, - height: 16, - color: Colors.black, - ), - mWidth(4), - Text( - TranslationBase.of(context).schedule, - style: TextStyle( - fontSize: 11, - letterSpacing: -0.44, - fontWeight: FontWeight.w600, + InkWell( + onTap: (){ getClinicTimings(widget.patientERGetClinicsList);}, + child: Container( + padding: EdgeInsets.only(left: 8,right: 8,top: 4,bottom: 4), + decoration: containerRadius(CustomColors.devider, 100), + child: Row( + children: [ + SvgPicture.asset( + "assets/images/new-design/ic_schedule.svg", + width: 16, + height: 16, + color: Colors.black, ), - ) - ], + mWidth(4), + Text( + TranslationBase.of(context).schedule, + style: TextStyle( + fontSize: 11, + letterSpacing: -0.44, + fontWeight: FontWeight.w600, + ), + ) + ], + ), ), ), ], @@ -164,26 +168,30 @@ class _State extends State { clinicsServiceTimingsResponse = ClinicsServiceTimingsResponse.fromJson(res); print(clinicsServiceTimingsResponse.patientERGetClinicsServiceTimingsList.length); - showGeneralDialog( - barrierColor: Colors.black.withOpacity(0.5), - transitionBuilder: (context, a1, a2, widget) { - final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0; - return Transform( - transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0), - child: Opacity( - opacity: a1.value, - child: ClinicTimingsDialog( - clinicName: patientERGetClinicsList.serviceName, - patientERGetClinicsServiceTimingsList: clinicsServiceTimingsResponse.patientERGetClinicsServiceTimingsList, - ), - ), - ); - }, - transitionDuration: Duration(milliseconds: 500), - barrierDismissible: true, - barrierLabel: '', - context: context, - pageBuilder: (context, animation1, animation2) {}); + navigateTo(context, ClinicTimingsPage( + clinicName: patientERGetClinicsList.serviceName, + patientERGetClinicsServiceTimingsList: clinicsServiceTimingsResponse.patientERGetClinicsServiceTimingsList, + )); + // showGeneralDialog( + // barrierColor: Colors.black.withOpacity(0.5), + // transitionBuilder: (context, a1, a2, widget) { + // final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0; + // return Transform( + // transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0), + // child: Opacity( + // opacity: a1.value, + // child: ClinicTimingsDialog( + // clinicName: patientERGetClinicsList.serviceName, + // patientERGetClinicsServiceTimingsList: clinicsServiceTimingsResponse.patientERGetClinicsServiceTimingsList, + // ), + // ), + // ); + // }, + // transitionDuration: Duration(milliseconds: 500), + // barrierDismissible: true, + // barrierLabel: '', + // context: context, + // pageBuilder: (context, animation1, animation2) {}); }); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); diff --git a/lib/pages/livecare/widgets/clinic_list.dart b/lib/pages/livecare/widgets/clinic_list.dart index 2127cd57..df3c83cb 100644 --- a/lib/pages/livecare/widgets/clinic_list.dart +++ b/lib/pages/livecare/widgets/clinic_list.dart @@ -29,6 +29,8 @@ import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import '../live_care_payment_page.dart'; + class ClinicList extends StatefulWidget { final Function getLiveCareHistory; @@ -174,32 +176,43 @@ class _clinic_listState extends State { } showLiveCarePaymentDialog(GetERAppointmentFeesList getERAppointmentFeesList, int waitingTime) { - showGeneralDialog( - barrierColor: Colors.black.withOpacity(0.5), - transitionBuilder: (context, a1, a2, widget) { - final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0; - return Transform( - transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0), - child: Opacity( - opacity: a1.value, - child: LiveCarePaymentDialog(getERAppointmentFeesList: getERAppointmentFeesList, waitingTime: waitingTime, clinicName: selectedClinicName), - ), - ); - }, - transitionDuration: Duration(milliseconds: 500), - barrierDismissible: true, - barrierLabel: '', - context: context, - pageBuilder: (context, animation1, animation2) {}) - .then((value) { - if (value) { - if (getERAppointmentFeesList.total == "0" || getERAppointmentFeesList.total == "0.0") { - showLiveCareInfoDialog(getERAppointmentFeesList); - } else { - navigateToPaymentMethod(getERAppointmentFeesList, context); + navigateTo(context, LiveCarePatmentPage(getERAppointmentFeesList: getERAppointmentFeesList, waitingTime: waitingTime, clinicName: selectedClinicName)).then( + (value) { + if (value) { + if (getERAppointmentFeesList.total == "0" || getERAppointmentFeesList.total == "0.0") { + showLiveCareInfoDialog(getERAppointmentFeesList); + } else { + navigateToPaymentMethod(getERAppointmentFeesList, context); + } } - } - }); + }, + ); + // showGeneralDialog( + // barrierColor: Colors.black.withOpacity(0.5), + // transitionBuilder: (context, a1, a2, widget) { + // final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0; + // return Transform( + // transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0), + // child: Opacity( + // opacity: a1.value, + // child: LiveCarePaymentDialog(getERAppointmentFeesList: getERAppointmentFeesList, waitingTime: waitingTime, clinicName: selectedClinicName), + // ), + // ); + // }, + // transitionDuration: Duration(milliseconds: 500), + // barrierDismissible: true, + // barrierLabel: '', + // context: context, + // pageBuilder: (context, animation1, animation2) {}) + // .then((value) { + // if (value) { + // if (getERAppointmentFeesList.total == "0" || getERAppointmentFeesList.total == "0.0") { + // showLiveCareInfoDialog(getERAppointmentFeesList); + // } else { + // navigateToPaymentMethod(getERAppointmentFeesList, context); + // } + // } + // }); } showLiveCareInfoDialog(GetERAppointmentFeesList getERAppointmentFeesList) async { @@ -548,7 +561,7 @@ class _clinic_listState extends State { }, ), Container( - height: 50.0, + height: 10.0, ), ], )), @@ -557,17 +570,16 @@ class _clinic_listState extends State { : Container(), isDataLoaded ? Container( - - color: Colors.white, - width: double.infinity, - padding: EdgeInsets.all(16), - child: DefaultButton( - TranslationBase.of(context).start, - () { - startLiveCare(); - }, - ), - ) + color: Colors.white, + width: double.infinity, + padding: EdgeInsets.all(16), + child: DefaultButton( + TranslationBase.of(context).start, + () { + startLiveCare(); + }, + ), + ) : Container(), ], ); From 853ca033d2fffad6dbea302b0abae2ee9adc10ea Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Thu, 28 Oct 2021 16:15:42 +0300 Subject: [PATCH 09/13] LiveCare Schedule API fix --- .../livecare_services/livecare_provider.dart | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/services/livecare_services/livecare_provider.dart b/lib/services/livecare_services/livecare_provider.dart index a71bd5c9..fa40bd57 100644 --- a/lib/services/livecare_services/livecare_provider.dart +++ b/lib/services/livecare_services/livecare_provider.dart @@ -63,15 +63,15 @@ class LiveCareService extends BaseService { var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); Request req = appGlobal.getPublicRequest(); request = { - "LanguageID": languageID == 'ar' ? 1 : 2, - "IPAdress": "10.20.10.20", - "VersionID": req.VersionID, - "Channel": req.Channel, - "generalid": 'Cs2020@2016\$2958', - "PatientOutSA": 0, - "TokenID": "", - "DeviceTypeID": req.DeviceTypeID, - "SessionID": "YckwoXhUmWBsnHKEKig", + // "LanguageID": languageID == 'ar' ? 1 : 2, + // "IPAdress": "10.20.10.20", + // "VersionID": req.VersionID, + // "Channel": req.Channel, + // "generalid": 'Cs2020@2016\$2958', + // "PatientOutSA": 0, + // "TokenID": "", + // "DeviceTypeID": req.DeviceTypeID, + // "SessionID": "YckwoXhUmWBsnHKEKig", "Age": authUser.age != null ? authUser.age : 0, "PatientID": authUser.patientID != null ? authUser.patientID : 0, "Gender": authUser.gender != null ? authUser.gender : 0 From 40c63ae53bb9e10aac6846a47848349c5966f012 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 28 Oct 2021 16:55:14 +0300 Subject: [PATCH 10/13] dialog ui changes in wallet & improvements. --- lib/config/localized_values.dart | 3 +- .../dialogs/select_country_ingo_Dialog.dart | 2 + .../select_search_criteria_dialog.dart | 139 -------- .../E-Referral/search_for_referrals_page.dart | 227 ++++-------- .../Blood/dialogs/SelectBloodDialog.dart | 328 ------------------ lib/pages/DrawerPages/family/my-family.dart | 18 +- .../medical/balance/advance_payment_page.dart | 165 ++++----- .../dialogs/SelectBeneficiaryDialog.dart | 204 ----------- .../balance/dialogs/SelectCiteisDialog.dart | 1 + .../balance/dialogs/SelectHospitalDialog.dart | 145 -------- .../dialogs/SelectPatientFamilyDialog.dart | 152 -------- .../dialogs/SelectPatientInfoDialog.dart | 146 -------- .../medical/balance/my_balance_page.dart | 242 +++++++------ .../my_trackers/Weight/AddWeightPage.dart | 20 +- .../blood_pressure/AddBloodPressurePage.dart | 23 -- lib/uitl/translations_delegate_base.dart | 2 + lib/widgets/dialogs/RadioStringDialog.dart | 139 -------- 17 files changed, 323 insertions(+), 1633 deletions(-) delete mode 100644 lib/pages/AlHabibMedicalService/E-Referral/dialogs/select_search_criteria_dialog.dart delete mode 100644 lib/pages/Blood/dialogs/SelectBloodDialog.dart delete mode 100644 lib/pages/medical/balance/dialogs/SelectBeneficiaryDialog.dart delete mode 100644 lib/pages/medical/balance/dialogs/SelectHospitalDialog.dart delete mode 100644 lib/pages/medical/balance/dialogs/SelectPatientFamilyDialog.dart delete mode 100644 lib/pages/medical/balance/dialogs/SelectPatientInfoDialog.dart delete mode 100644 lib/widgets/dialogs/RadioStringDialog.dart diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 4e085e46..34ef5e4f 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -396,8 +396,9 @@ const Map localizedValues = { "PaymentOnline": {"en": "Service", "ar": "الالكتروني"}, "OnlineCheckIn": {"en": "Online Check-In", "ar": "مدفوعات معلقة"}, "MyBalances": {"en": "My Balances", "ar": "رصيدي"}, + "MyWallet": {"en": "My Wallet", "ar": "محفظتى"}, "BalanceAmount": {"en": "Wallet Amount", "ar": "مبلغ المحفظة"}, - "TotalBalance": {"en": "Total Amount", "ar": "المبلغ الإجمالي"}, + "TotalBalance": {"en": "Total Balance", "ar": "إجمالي الرصيد"}, "CreateAdvancedPayment": {"en": "Recharge Wallet", "ar": "شحن المحفظة"}, "AdvancePayment": {"en": "Advance Payment", "ar": "الدفع مقدما"}, "AdvancePaymentLabel": {"en": "You can create and add an Advanced Payment for your account or other accounts.", "ar": "يمكنك تحويل مبلغ لحسابك لدى المجموعة أو لحساب احد المراجعين"}, diff --git a/lib/pages/AlHabibMedicalService/E-Referral/dialogs/select_country_ingo_Dialog.dart b/lib/pages/AlHabibMedicalService/E-Referral/dialogs/select_country_ingo_Dialog.dart index d58fd29f..8046346f 100644 --- a/lib/pages/AlHabibMedicalService/E-Referral/dialogs/select_country_ingo_Dialog.dart +++ b/lib/pages/AlHabibMedicalService/E-Referral/dialogs/select_country_ingo_Dialog.dart @@ -4,6 +4,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; // ignore: must_be_immutable + +// todo 'sikander' remove this file when usage known class SelectCountryDialog extends StatefulWidget { final Function(dynamic) onValueSelected; dynamic selectedCountry; diff --git a/lib/pages/AlHabibMedicalService/E-Referral/dialogs/select_search_criteria_dialog.dart b/lib/pages/AlHabibMedicalService/E-Referral/dialogs/select_search_criteria_dialog.dart deleted file mode 100644 index e970f208..00000000 --- a/lib/pages/AlHabibMedicalService/E-Referral/dialogs/select_search_criteria_dialog.dart +++ /dev/null @@ -1,139 +0,0 @@ -import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_criteria_model.dart'; -import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; -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'; - -// ignore: must_be_immutable -class SelectSearchCriteriaDialog extends StatefulWidget { - List searchCriteria = [ - SearchCriteriaModel(name: "Identification Number",nameAr:"رقم الهوية",value: 1), - SearchCriteriaModel(name: "Referral Number",nameAr:"رقم الإحالة",value: 2), - ]; - final Function(SearchCriteriaModel) onValueSelected; - SearchCriteriaModel selectedCriteria; - ProjectViewModel projectViewModel; - - SelectSearchCriteriaDialog( - {Key key, this.onValueSelected, this.selectedCriteria, this.projectViewModel}); - - @override - _SelectSearchCriteriaDialogState createState() => _SelectSearchCriteriaDialogState(); -} - -class _SelectSearchCriteriaDialogState extends State { - @override - void initState() { - super.initState(); - widget.selectedCriteria = widget.selectedCriteria ?? widget.searchCriteria[0]; - } - - @override - Widget build(BuildContext context) { - return SimpleDialog( - children: [ - Column( - children: [ - Text(TranslationBase.of(context).searchCriteria), - Divider(), - ...List.generate( - widget.searchCriteria.length, - (index) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 2, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - widget.selectedCriteria = widget.searchCriteria[index]; - }); - }, - child: ListTile( - title: Text(widget.projectViewModel.isArabic ? widget.searchCriteria[index].nameAr : widget.searchCriteria[index].name), - leading: Radio( - value: widget.searchCriteria[index], - groupValue: widget.selectedCriteria, - activeColor: Colors.red[800], - onChanged: (value) { - setState(() { - widget.selectedCriteria = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - ], - ), - ), - SizedBox( - height: 5.0, - ), - Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Texts( - TranslationBase.of(context).cancel.toUpperCase(), - color: Colors.red, - ), - ), - ), - ), - ), - ), - Container( - width: 1, - height: 30, - color: Colors.grey[500], - ), - Expanded( - flex: 1, - child: InkWell( - onTap: () { - widget.onValueSelected(widget.selectedCriteria); - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Texts( - TranslationBase.of(context).ok, - fontWeight: FontWeight.w400, - )), - ), - ), - ), - ], - ) - ], - ) - ], - ); - } -} - - - - diff --git a/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart b/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart index b3fffa4b..5751dcfe 100644 --- a/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart +++ b/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart @@ -4,17 +4,17 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/ import 'package:diplomaticquarterapp/core/viewModels/all_habib_medical_services/e_referral_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/E-Referral/referral_details.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/h2o/h20_setting.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/medical/doctor_card.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/radio_selection_dialog.dart'; import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart'; -import 'package:diplomaticquarterapp/widgets/my_rich_text.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart'; +import 'package:diplomaticquarterapp/widgets/my_rich_text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; @@ -23,7 +23,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'dialogs/select_country_ingo_Dialog.dart'; -import 'dialogs/select_search_criteria_dialog.dart'; class SearchForReferralsPage extends StatefulWidget { SearchForReferralsPage({Key key}); @@ -79,74 +78,31 @@ class _SearchForReferralsPageState extends State { SizedBox( height: 10, ), - // InkWell( - // onTap: () => selectSearchCriteriaDialog(), - // 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(getSearchCriteriaName()), Icon(Icons.arrow_drop_down)], - // ), - // ), - // ), - Container( - padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15), - color: Colors.white, - border: Border.all( - color: Color(0xffefefef), - width: 1, - ), - ), - child: InkWell( - onTap: () => selectSearchCriteriaDialog(projectViewModel), - child: Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - TranslationBase.of(context).selectSearchCriteria, - style: TextStyle( - fontSize: 11, - fontWeight: FontWeight.w600, - color: Color(0xff2B353E), - letterSpacing: -0.44, - ), - ), - Text( - getSearchCriteriaName(projectViewModel), - style: TextStyle( - fontSize: 14, - height: 21 / 14, - fontWeight: FontWeight.w400, - color: Color(0xff2B353E), - letterSpacing: -0.44, - ), - ), - ], - ), - ), - Icon(Icons.arrow_drop_down), - ], + CommonDropDownView(TranslationBase.of(context).selectSearchCriteria, getSearchCriteriaName(projectViewModel), () { + List searchCriteria = [ + SearchCriteriaModel(name: "Identification Number", nameAr: "رقم الهوية", value: 1), + SearchCriteriaModel(name: "Referral Number", nameAr: "رقم الإحالة", value: 2), + ]; + List list = []; + for (int i = 0; i < searchCriteria.length; i++) { + list.add(RadioSelectionDialogModel(projectViewModel.isArabic ? searchCriteria[i].nameAr : searchCriteria[i].name, searchCriteria[i].value)); + } + showDialog( + context: context, + child: RadioSelectionDialog( + listData: list, + selectedIndex: selectedCriteria.value, + onValueSelected: (index) { + selectedCriteria = searchCriteria[index - 1]; + setState(() {}); + }, ), - ), - ), - SizedBox( - height: 12, - ), - - inputWidget(selectedCriteria.value == 1 ? TranslationBase.of(context).enterIdentificationNumber : TranslationBase.of(context).referralNumber, "", _searchTextController, isInputTypeNum: true), - - SizedBox( - height: 12, - ), + ); + }).withBorderedContainer, + SizedBox(height: 12), + inputWidget(selectedCriteria.value == 1 ? TranslationBase.of(context).enterIdentificationNumber : TranslationBase.of(context).referralNumber, "", _searchTextController, + isInputTypeNum: true), + SizedBox(height: 12), PhoneNumberSelectorWidget(onNumberChange: (value) { setState(() { mobileNo = value; @@ -179,9 +135,7 @@ class _SearchForReferralsPageState extends State { // }, // code: _selectedCountry == null ? "11" : _selectedCountry["code"], // ), - SizedBox( - height: 12, - ), + SizedBox(height: 12), if ((model.state == ViewState.Idle && model.allReferral.length == 0)) Center(child: Text(TranslationBase.of(context).noSearchResult)), if ((model.state == ViewState.ErrorLocal)) AppEmbeddedError(error: model.error), model.allReferral.length > 0 @@ -293,92 +247,65 @@ class _SearchForReferralsPageState extends State { return "Country"; } - void selectSearchCriteriaDialog(ProjectViewModel projectViewModel) { - showDialog( - context: context, - child: SelectSearchCriteriaDialog( - selectedCriteria: selectedCriteria, - projectViewModel: projectViewModel, - onValueSelected: (value) { - setState(() { - selectedCriteria = value; - }); - }, - ), - ); - } - Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {VoidCallback suffixTap, bool isEnable = true, bool hasSelection = false, int lines, bool isInputTypeNum = false}) { - return Container( - padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15), - color: Colors.white, - border: Border.all( - color: Color(0xffefefef), - width: 1, - ), - ), - child: InkWell( - onTap: hasSelection ? () {} : null, - child: Row( - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - _labelText, - style: TextStyle( - fontSize: 11, - fontWeight: FontWeight.w600, - color: Color(0xff2B353E), - letterSpacing: -0.44, - ), + return InkWell( + onTap: hasSelection ? () {} : null, + child: Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + _labelText, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.44, + ), + ), + TextField( + enabled: isEnable, + scrollPadding: EdgeInsets.zero, + keyboardType: isInputTypeNum ? TextInputType.number : TextInputType.text, + controller: _controller, + maxLines: lines, + onChanged: (value) => {setState(() {})}, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w400, + color: Color(0xff2B353E), + letterSpacing: -0.44, ), - TextField( - enabled: isEnable, - scrollPadding: EdgeInsets.zero, - keyboardType: isInputTypeNum ? TextInputType.number : TextInputType.text, - controller: _controller, - maxLines: lines, - onChanged: (value) => {setState(() {})}, - style: TextStyle( + decoration: InputDecoration( + isDense: true, + hintText: _hintText, + hintStyle: TextStyle( fontSize: 14, height: 21 / 14, fontWeight: FontWeight.w400, - color: Color(0xff2B353E), - letterSpacing: -0.44, - ), - decoration: InputDecoration( - isDense: true, - hintText: _hintText, - hintStyle: TextStyle( - fontSize: 14, - height: 21 / 14, - fontWeight: FontWeight.w400, - color: Color(0xff575757), - letterSpacing: -0.56, - ), - suffixIconConstraints: BoxConstraints(minWidth: 50), - suffixIcon: suffixTap == null ? null : IconButton(icon: Icon(Icons.mic, color: Color(0xff2E303A)), onPressed: suffixTap), - contentPadding: EdgeInsets.zero, - border: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, + color: Color(0xff575757), + letterSpacing: -0.56, ), + suffixIconConstraints: BoxConstraints(minWidth: 50), + suffixIcon: suffixTap == null ? null : IconButton(icon: Icon(Icons.mic, color: Color(0xff2E303A)), onPressed: suffixTap), + contentPadding: EdgeInsets.zero, + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, ), - ], - ), + ), + ], ), - if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined), - ], - ), + ), + if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined), + ], ), - ); + ).withBorderedContainer; } String getSearchCriteriaName(ProjectViewModel projectViewModel) { diff --git a/lib/pages/Blood/dialogs/SelectBloodDialog.dart b/lib/pages/Blood/dialogs/SelectBloodDialog.dart deleted file mode 100644 index 23e9e753..00000000 --- a/lib/pages/Blood/dialogs/SelectBloodDialog.dart +++ /dev/null @@ -1,328 +0,0 @@ -import 'package:diplomaticquarterapp/pages/Blood/blood_donation.dart'; -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 SelectBloodDialog extends StatefulWidget { - - final Blood bloodType; - final Function(Blood) onValueSelected; - - SelectBloodDialog({Key key, this.bloodType, this.onValueSelected}); - - - - @override - _SelectBloodDialogState createState() => _SelectBloodDialogState(this.bloodType); -} - -class _SelectBloodDialogState extends State { - _SelectBloodDialogState(this.bloodType); - Blood bloodType; - @override - Widget build(BuildContext context) { - return SimpleDialog( - children: [ - Container( - child: Column( - children: [ - Divider(), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - bloodType = Blood.Oplus; - }); - }, - child: ListTile( - title: Text("O+"), - leading: Radio( - value: Blood.Oplus, - groupValue: bloodType, - activeColor: Colors.red[800], - onChanged: (Blood value) { - setState(() { - bloodType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - bloodType = Blood.Ominus; - }); - }, - child: ListTile( - title: Text("O-"), - leading: Radio( - value: Blood.Ominus, - groupValue: bloodType, - activeColor: Colors.red[800], - onChanged: (Blood value) { - setState(() { - bloodType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - bloodType = Blood.ABminus; - }); - }, - child: ListTile( - title: Text("AB-"), - leading: Radio( - value: Blood.ABminus, - groupValue: bloodType, - activeColor: Colors.red[800], - onChanged: (Blood value) { - setState(() { - bloodType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - bloodType = Blood.ABplus; - }); - }, - child: ListTile( - title: Text("AB+"), - leading: Radio( - value: Blood.ABplus, - groupValue: bloodType, - activeColor: Colors.red[800], - onChanged: (Blood value) { - setState(() { - bloodType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - bloodType = Blood.Aplus; - }); - }, - child: ListTile( - title: Text("A+"), - leading: Radio( - value: Blood.Aplus, - groupValue: bloodType, - activeColor: Colors.red[800], - onChanged: (Blood value) { - setState(() { - bloodType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - bloodType = Blood.Aminus; - }); - }, - child: ListTile( - title: Text("A-"), - leading: Radio( - value: Blood.Aminus, - groupValue: bloodType, - activeColor: Colors.red[800], - onChanged: (Blood value) { - setState(() { - bloodType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - bloodType = Blood.Bplus; - }); - }, - child: ListTile( - title: Text("B+"), - leading: Radio( - value: Blood.Bplus, - groupValue: bloodType, - activeColor: Colors.red[800], - onChanged: (Blood value) { - setState(() { - bloodType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - bloodType = Blood.Bminus; - }); - }, - child: ListTile( - title: Text("B-"), - leading: Radio( - value: Blood.Bminus, - groupValue: bloodType, - activeColor: Colors.red[800], - onChanged: (Blood value) { - setState(() { - bloodType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - SizedBox( - height: 5.0, - ), - Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Texts( - TranslationBase.of(context).cancel.toUpperCase(), - color: Colors.red, - ), - ), - ), - ), - ), - ), - Container( - width: 1, - height: 30, - color: Colors.grey[500], - ), - Expanded( - flex: 1, - child: InkWell( - onTap: () { - widget.onValueSelected(bloodType); - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Texts( - TranslationBase.of(context).ok, - fontWeight: FontWeight.w400, - ), - ), - ), - ), - ), - ], - ) - ], - ), - ) - ], - ); - } -} diff --git a/lib/pages/DrawerPages/family/my-family.dart b/lib/pages/DrawerPages/family/my-family.dart index 18450954..1d2b470b 100644 --- a/lib/pages/DrawerPages/family/my-family.dart +++ b/lib/pages/DrawerPages/family/my-family.dart @@ -26,6 +26,7 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/ConfirmWithMessageDialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -666,14 +667,15 @@ class _MyFamily extends State with TickerProviderStateMixin { } deleteFamily(family, context) { - ConfirmDialog dialog = new ConfirmDialog( - context: context, - confirmMessage: TranslationBase.of(context).removeFamilyMember, - okText: TranslationBase.of(context).confirm, - cancelText: TranslationBase.of(context).cancel_nocaps, - okFunction: () => {ConfirmDialog.closeAlertDialog(context), removeFamily(family, context)}, - cancelFunction: () => {}); - dialog.showAlertDialog(context); + showDialog( + context: context, + child: ConfirmWithMessageDialog( + message: TranslationBase.of(context).removeFamilyMember, + onTap: () { + removeFamily(family, context); + }, + ), + ); } removeFamily(GetAllSharedRecordsByStatusList family, context) { diff --git a/lib/pages/medical/balance/advance_payment_page.dart b/lib/pages/medical/balance/advance_payment_page.dart index 338aff23..6ade52bd 100644 --- a/lib/pages/medical/balance/advance_payment_page.dart +++ b/lib/pages/medical/balance/advance_payment_page.dart @@ -8,7 +8,6 @@ import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.da import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart'; import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; -import 'package:diplomaticquarterapp/pages/medical/balance/dialogs/SelectHospitalDialog.dart'; import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; @@ -16,7 +15,7 @@ import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; -import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/radio_selection_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; @@ -24,9 +23,6 @@ import 'package:flutter/material.dart'; import '../../../core/model/my_balance/AdvanceModel.dart'; import 'confirm_payment_page.dart'; -import 'dialogs/SelectBeneficiaryDialog.dart'; -import 'dialogs/SelectPatientFamilyDialog.dart'; -import 'dialogs/SelectPatientInfoDialog.dart'; import 'new_text_Field.dart'; enum BeneficiaryType { MyAccount, MyFamilyFiles, OtherAccount, NON } @@ -87,16 +83,48 @@ class _AdvancePaymentPageState extends State { Text( TranslationBase.of(context).advancePaymentLabel, style: TextStyle( - fontSize: 14, + fontSize: 16, fontWeight: FontWeight.w600, - letterSpacing: -0.46, + letterSpacing: -0.64, ), ), - SizedBox( - height: 12, - ), + SizedBox(height: 12), InkWell( - onTap: () => confirmSelectBeneficiaryDialog(model), + onTap: () { + List list = [ + RadioSelectionDialogModel(TranslationBase.of(context).myAccount, 0), + RadioSelectionDialogModel(TranslationBase.of(context).myFamilyFiles, 1), + RadioSelectionDialogModel(TranslationBase.of(context).otherAccount, 2), + ]; + showDialog( + context: context, + child: RadioSelectionDialog( + listData: list, + selectedIndex: + beneficiaryType == BeneficiaryType.MyAccount ? 0 : (beneficiaryType == BeneficiaryType.MyFamilyFiles ? 1 : (beneficiaryType == BeneficiaryType.OtherAccount ? 2 : -1)), + onValueSelected: (index) { + var type; + if (index == 0) { + type = BeneficiaryType.MyAccount; + } else if (index == 1) { + type = BeneficiaryType.MyFamilyFiles; + } else { + type = BeneficiaryType.OtherAccount; + } + + setState(() { + if (type == BeneficiaryType.MyAccount) { + _fileTextController.text = model.user.patientID.toString(); + advanceModel.depositorName = model.user.firstName + " " + model.user.lastName; + } else + _fileTextController.text = ""; + + beneficiaryType = type; + }); + }, + ), + ); + }, child: Container( padding: EdgeInsets.all(8), width: double.infinity, @@ -118,10 +146,7 @@ class _AdvancePaymentPageState extends State { ), ), ), - if (beneficiaryType == BeneficiaryType.MyFamilyFiles) - SizedBox( - height: 12, - ), + if (beneficiaryType == BeneficiaryType.MyFamilyFiles) SizedBox(height: 12), if (beneficiaryType == BeneficiaryType.MyFamilyFiles) InkWell( onTap: () { @@ -152,18 +177,13 @@ class _AdvancePaymentPageState extends State { ), ), ), - SizedBox( - height: 12, - ), + SizedBox(height: 12), NewTextFields( hintText: TranslationBase.of(context).fileNumber, controller: _fileTextController, readOnly: beneficiaryType == BeneficiaryType.OtherAccount ? false : true, ), - if (beneficiaryType == BeneficiaryType.OtherAccount) - SizedBox( - height: 12, - ), + if (beneficiaryType == BeneficiaryType.OtherAccount) SizedBox(height: 12), if (beneficiaryType == BeneficiaryType.OtherAccount) InkWell( onTap: () { @@ -197,9 +217,7 @@ class _AdvancePaymentPageState extends State { ), ), ), - SizedBox( - height: 12, - ), + SizedBox(height: 12), InkWell( onTap: () => confirmSelectHospitalDialog(model.hospitals), child: Container( @@ -223,9 +241,7 @@ class _AdvancePaymentPageState extends State { ), ), ), - SizedBox( - height: 12, - ), + SizedBox(height: 12), NewTextFields( hintText: TranslationBase.of(context).amount, keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), @@ -235,9 +251,7 @@ class _AdvancePaymentPageState extends State { }); }, ), - SizedBox( - height: 12, - ), + SizedBox(height: 12), if (model.user != null) NewTextFields( hintText: TranslationBase.of(context).depositorEmail, @@ -246,9 +260,7 @@ class _AdvancePaymentPageState extends State { email = value; }, ), - SizedBox( - height: 12, - ), + SizedBox(height: 12), NewTextFields( hintText: TranslationBase.of(context).notes, controller: _notesTextController, @@ -334,73 +346,70 @@ class _AdvancePaymentPageState extends State { ); } - void confirmSelectBeneficiaryDialog(MyBalanceViewModel model) { - showDialog( - context: context, - child: SelectBeneficiaryDialog( - beneficiaryType: beneficiaryType, - onValueSelected: (value) { - setState(() { - if (value == BeneficiaryType.MyAccount) { - _fileTextController.text = model.user.patientID.toString(); - advanceModel.depositorName = model.user.firstName + " " + model.user.lastName; - } else - _fileTextController.text = ""; - - beneficiaryType = value; - }); - }, - ), - ); - } + int _selectedHospitalIndex = -1; void confirmSelectHospitalDialog(List hospitals) { + List list = [ + for (int i = 0; i < hospitals.length; i++) RadioSelectionDialogModel(hospitals[i].name + ' ${hospitals[i].distanceInKilometers} ' + TranslationBase.of(context).km, i), + ]; showDialog( context: context, - child: SelectHospitalDialog( - hospitals: hospitals, - selectedHospital: _selectedHospital, - onValueSelected: (value) { - setState(() { - _selectedHospital = value; - }); + child: RadioSelectionDialog( + listData: list, + selectedIndex: _selectedHospitalIndex, + isScrollable: true, + onValueSelected: (index) { + _selectedHospitalIndex = index; + _selectedHospital = hospitals[index]; + setState(() {}); }, ), ); } + int _selectedPatientIndex = -1; + void confirmSelectPatientDialog(List patientInfoList) { + List list = [ + for (int i = 0; i < patientInfoList.length; i++) RadioSelectionDialogModel(patientInfoList[i].fullName, i), + ]; showDialog( context: context, - child: SelectPatientInfoDialog( - patientInfoList: patientInfoList, - selectedPatientInfo: _selectedPatientInfo, - onValueSelected: (value) { - setState(() { - advanceModel.depositorName = value.fullName; - _selectedPatientInfo = value; - }); + child: RadioSelectionDialog( + listData: list, + isScrollable: true, + selectedIndex: _selectedPatientIndex, + onValueSelected: (index) { + _selectedPatientIndex = index; + _selectedPatientInfo = patientInfoList[index]; + advanceModel.depositorName = _selectedPatientInfo.fullName; + setState(() {}); }, ), ); } + int _selectedFamilyMemberIndex = -1; + void confirmSelectFamilyDialog(List getAllSharedRecordsByStatusList) { - if (getAllSharedRecordsByStatusList.isNotEmpty) + if (getAllSharedRecordsByStatusList.isNotEmpty) { + List list = [ + for (int i = 0; i < getAllSharedRecordsByStatusList.length; i++) RadioSelectionDialogModel(getAllSharedRecordsByStatusList[i].patientName, i), + ]; showDialog( context: context, - child: SelectPatientFamilyDialog( - getAllSharedRecordsByStatusList: getAllSharedRecordsByStatusList, - selectedPatientFamily: selectedPatientFamily, - onValueSelected: (value) { - setState(() { - selectedPatientFamily = value; - _fileTextController.text = selectedPatientFamily.responseID.toString(); - advanceModel.depositorName = value.patientName; - }); + child: RadioSelectionDialog( + listData: list, + isScrollable: true, + selectedIndex: _selectedFamilyMemberIndex, + onValueSelected: (index) { + _selectedFamilyMemberIndex = index; + selectedPatientFamily = getAllSharedRecordsByStatusList[index]; + setState(() {}); }, ), ); + } } String getBeneficiaryType() { diff --git a/lib/pages/medical/balance/dialogs/SelectBeneficiaryDialog.dart b/lib/pages/medical/balance/dialogs/SelectBeneficiaryDialog.dart deleted file mode 100644 index 526ffaf6..00000000 --- a/lib/pages/medical/balance/dialogs/SelectBeneficiaryDialog.dart +++ /dev/null @@ -1,204 +0,0 @@ -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import '../../../../Constants.dart'; -import '../advance_payment_page.dart'; - -class SelectBeneficiaryDialog extends StatefulWidget { - final BeneficiaryType beneficiaryType; - final Function(BeneficiaryType) onValueSelected; - - SelectBeneficiaryDialog({Key key, this.beneficiaryType, this.onValueSelected}); - - @override - _SelectBeneficiaryDialogState createState() => _SelectBeneficiaryDialogState(this.beneficiaryType); -} - -class _SelectBeneficiaryDialogState extends State { - _SelectBeneficiaryDialogState(this.beneficiaryType); - - BeneficiaryType beneficiaryType; - - @override - Widget build(BuildContext context) { - return SimpleDialog( - children: [ - Container( - child: Column( - children: [ - Divider(), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - beneficiaryType = BeneficiaryType.MyAccount; - }); - }, - child: ListTile( - title: Text( - TranslationBase.of(context).myAccount, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - leading: Radio( - value: BeneficiaryType.MyAccount, - groupValue: beneficiaryType, - activeColor: secondaryColor, - onChanged: (BeneficiaryType value) { - setState(() { - beneficiaryType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - beneficiaryType = BeneficiaryType.MyFamilyFiles; - }); - }, - child: ListTile( - title: Text( - TranslationBase.of(context).myFamilyFiles, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - leading: Radio( - value: BeneficiaryType.MyFamilyFiles, - groupValue: beneficiaryType, - activeColor: Color(0xffC5272D), - onChanged: (BeneficiaryType value) { - setState(() { - beneficiaryType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - beneficiaryType = BeneficiaryType.OtherAccount; - }); - }, - child: ListTile( - title: Text( - TranslationBase.of(context).otherAccount, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - leading: Radio( - value: BeneficiaryType.OtherAccount, - groupValue: beneficiaryType, - activeColor: Color(0xffC5272D), - onChanged: (BeneficiaryType value) { - setState(() { - beneficiaryType = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Text( - TranslationBase.of(context).cancel.toUpperCase(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - color: Color(0xffC5272D), - ), - ), - ), - ), - ), - ), - ), - Container( - width: 1, - height: 30, - color: Colors.grey[500], - ), - Expanded( - flex: 1, - child: InkWell( - onTap: () { - widget.onValueSelected(beneficiaryType); - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Text( - TranslationBase.of(context).ok.toUpperCase(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - ), - ), - ), - ), - ], - ) - ], - ), - ) - ], - ); - } -} diff --git a/lib/pages/medical/balance/dialogs/SelectCiteisDialog.dart b/lib/pages/medical/balance/dialogs/SelectCiteisDialog.dart index 19e4fea4..d0f991ac 100644 --- a/lib/pages/medical/balance/dialogs/SelectCiteisDialog.dart +++ b/lib/pages/medical/balance/dialogs/SelectCiteisDialog.dart @@ -7,6 +7,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +// todo 'sikander' remove this file when usage known class SelectCiteisDialog extends StatefulWidget { final List hospitals; final Function(CitiesModel) onValueSelected; diff --git a/lib/pages/medical/balance/dialogs/SelectHospitalDialog.dart b/lib/pages/medical/balance/dialogs/SelectHospitalDialog.dart deleted file mode 100644 index fd47ea1b..00000000 --- a/lib/pages/medical/balance/dialogs/SelectHospitalDialog.dart +++ /dev/null @@ -1,145 +0,0 @@ -import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import '../../../../Constants.dart'; - -class SelectHospitalDialog extends StatefulWidget { - final List hospitals; - final Function(HospitalsModel) onValueSelected; - HospitalsModel selectedHospital; - - SelectHospitalDialog({Key key, this.hospitals, this.onValueSelected, this.selectedHospital}); - - @override - _SelectHospitalDialogState createState() => _SelectHospitalDialogState(); -} - -class _SelectHospitalDialogState extends State { - @override - void initState() { - super.initState(); - widget.selectedHospital = widget.selectedHospital ?? widget.hospitals[0]; - } - - @override - Widget build(BuildContext context) { - return SimpleDialog( - children: [ - Column( - children: [ - Divider(), - ...List.generate( - widget.hospitals.length, - (index) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 2, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - widget.selectedHospital = widget.hospitals[index]; - }); - }, - child: ListTile( - title: Text( - widget.hospitals[index].name + ' ${widget.hospitals[index].distanceInKilometers} ' + TranslationBase.of(context).km, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - leading: Radio( - value: widget.hospitals[index], - groupValue: widget.selectedHospital, - activeColor: secondaryColor, - onChanged: (value) { - setState(() { - widget.selectedHospital = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - ], - ), - ), - SizedBox( - height: 5.0, - ), - Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Text( - TranslationBase.of(context).cancel.toUpperCase(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - color: Colors.red - ), - ), - ), - ), - ), - ), - ), - Container( - width: 1, - height: 30, - color: Colors.grey[500], - ), - Expanded( - flex: 1, - child: InkWell( - onTap: () { - widget.onValueSelected(widget.selectedHospital); - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Text( - TranslationBase.of(context).ok, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - ), - ), - ), - ), - ], - ) - ], - ) - ], - ); - } -} diff --git a/lib/pages/medical/balance/dialogs/SelectPatientFamilyDialog.dart b/lib/pages/medical/balance/dialogs/SelectPatientFamilyDialog.dart deleted file mode 100644 index d4b2e8fb..00000000 --- a/lib/pages/medical/balance/dialogs/SelectPatientFamilyDialog.dart +++ /dev/null @@ -1,152 +0,0 @@ -import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import '../../../../Constants.dart'; - -class SelectPatientFamilyDialog extends StatefulWidget { - final List getAllSharedRecordsByStatusList; - final Function(GetAllSharedRecordsByStatusList) onValueSelected; - GetAllSharedRecordsByStatusList selectedPatientFamily; - - List getAllSharedRecordsByStatusApprovedList = new List(); - - SelectPatientFamilyDialog({Key key, this.getAllSharedRecordsByStatusList, this.onValueSelected, this.selectedPatientFamily}); - - @override - _SelectPatientFamilyDialogState createState() => _SelectPatientFamilyDialogState(); -} - -class _SelectPatientFamilyDialogState extends State { - @override - void initState() { - super.initState(); - widget.selectedPatientFamily = widget.selectedPatientFamily ?? widget.getAllSharedRecordsByStatusList[0]; - - if (widget.getAllSharedRecordsByStatusList.isNotEmpty) - widget.getAllSharedRecordsByStatusList.forEach((element) { - if (element.status == 3) widget.getAllSharedRecordsByStatusApprovedList.add(element); - }); - } - - @override - Widget build(BuildContext context) { - return SimpleDialog( - children: [ - Column( - children: [ - Divider(), - ...List.generate( - widget.getAllSharedRecordsByStatusApprovedList.length, - (index) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 2, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - widget.selectedPatientFamily = widget.getAllSharedRecordsByStatusApprovedList[index]; - }); - }, - child: ListTile( - title: Text( - widget.getAllSharedRecordsByStatusApprovedList[index].patientName, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - leading: Radio( - value: widget.getAllSharedRecordsByStatusApprovedList[index], - groupValue: widget.selectedPatientFamily, - activeColor: secondaryColor, - onChanged: (value) { - setState(() { - widget.selectedPatientFamily = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - ], - ), - ), - SizedBox( - height: 5.0, - ), - Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Text( - TranslationBase.of(context).cancel.toUpperCase(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - color: Colors.red, - ), - ), - ), - ), - ), - ), - ), - Container( - width: 1, - height: 30, - color: Colors.grey[500], - ), - Expanded( - flex: 1, - child: InkWell( - onTap: () { - widget.onValueSelected(widget.selectedPatientFamily); - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Text( - TranslationBase.of(context).ok, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - ), - ), - ), - ), - ], - ) - ], - ) - ], - ); - } -} diff --git a/lib/pages/medical/balance/dialogs/SelectPatientInfoDialog.dart b/lib/pages/medical/balance/dialogs/SelectPatientInfoDialog.dart deleted file mode 100644 index 759a6874..00000000 --- a/lib/pages/medical/balance/dialogs/SelectPatientInfoDialog.dart +++ /dev/null @@ -1,146 +0,0 @@ -import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import '../../../../Constants.dart'; - -class SelectPatientInfoDialog extends StatefulWidget { - final List patientInfoList; - - final Function(PatientInfo) onValueSelected; - PatientInfo selectedPatientInfo; - - SelectPatientInfoDialog({Key key, this.patientInfoList, this.onValueSelected, this.selectedPatientInfo}); - - @override - _SelectPatientInfoDialogState createState() => _SelectPatientInfoDialogState(); -} - -class _SelectPatientInfoDialogState extends State { - @override - void initState() { - super.initState(); - widget.selectedPatientInfo = widget.selectedPatientInfo ?? widget.patientInfoList[0]; - } - - @override - Widget build(BuildContext context) { - return SimpleDialog( - children: [ - Column( - children: [ - Divider(), - ...List.generate( - widget.patientInfoList.length, - (index) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 2, - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - widget.selectedPatientInfo = widget.patientInfoList[index]; - }); - }, - child: ListTile( - title: Text( - widget.patientInfoList[index].fullName, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - leading: Radio( - value: widget.patientInfoList[index], - groupValue: widget.selectedPatientInfo, - activeColor: secondaryColor, - onChanged: (value) { - setState(() { - widget.selectedPatientInfo = value; - }); - }, - ), - ), - ), - ) - ], - ), - SizedBox( - height: 5.0, - ), - ], - ), - ), - SizedBox( - height: 5.0, - ), - Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Text( - TranslationBase.of(context).cancel.toUpperCase(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - color: Colors.red, - ), - ), - ), - ), - ), - ), - ), - Container( - width: 1, - height: 30, - color: Colors.grey[500], - ), - Expanded( - flex: 1, - child: InkWell( - onTap: () { - widget.onValueSelected(widget.selectedPatientInfo); - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Text( - TranslationBase.of(context).ok.toUpperCase(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - ), - ), - ), - ), - ], - ) - ], - ) - ], - ); - } -} diff --git a/lib/pages/medical/balance/my_balance_page.dart b/lib/pages/medical/balance/my_balance_page.dart index 8c98ebc8..640b18f9 100644 --- a/lib/pages/medical/balance/my_balance_page.dart +++ b/lib/pages/medical/balance/my_balance_page.dart @@ -1,14 +1,16 @@ import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart'; +import 'package:diplomaticquarterapp/core/model/my_balance/patient_advance_balance_amount.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; -import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.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/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_svg/svg.dart'; import 'advance_payment_page.dart'; @@ -24,118 +26,156 @@ class MyBalancePage extends StatelessWidget { builder: (_, model, w) => AppScaffold( baseViewModel: model, isShowAppBar: true, - appBarTitle: TranslationBase.of(context).myBalances, + appBarTitle: TranslationBase.of(context).myWallet, imagesInfo: imagesInfo, description: TranslationBase.of(context).infoMyBalance, showNewAppBar: true, showNewAppBarTitle: true, backgroundColor: CustomColors.appBackgroudGreyColor, - body: SingleChildScrollView( - child: Container( - margin: EdgeInsets.all(12), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - TranslationBase.of(context).balanceAmount, - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - ), - ), - SizedBox( - height: 15, - ), - Container( - padding: EdgeInsets.all(8), - width: double.infinity, - height: 65, - decoration: BoxDecoration( - color: Colors.red[700], - shape: BoxShape.rectangle, - borderRadius: BorderRadius.circular(7), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '${model.totalAdvanceBalanceAmount ?? 0} ' + TranslationBase.of(context).sar, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, - color: Colors.white, - ), - ), - Text( - TranslationBase.of(context).totalBalance, - style: TextStyle( - fontSize: 14, - letterSpacing: -0.46, - color: Colors.white, + body: Column( + children: [ + Expanded( + child: SingleChildScrollView( + physics: BouncingScrollPhysics(), + padding: EdgeInsets.all(21), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.fromLTRB(14, 12, 10, 12), + decoration: BoxDecoration( + color: Color(0xff2B353E), + borderRadius: BorderRadius.all( + Radius.circular(10.0), ), ), - ], - ), - ), - SizedBox( - height: 9, - ), - ...List.generate( - model.patientAdvanceBalanceAmountList.length, - (index) => Container( - padding: EdgeInsets.all(8), - height: 65, - margin: EdgeInsets.only(top: 8), - decoration: BoxDecoration( - color: Colors.white, - shape: BoxShape.rectangle, - borderRadius: BorderRadius.circular(12), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '${model.patientAdvanceBalanceAmountList[index].patientAdvanceBalanceAmount} ' + TranslationBase.of(context).sar, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - letterSpacing: -0.46, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SvgPicture.asset( + "assets/images/new/services/balance_credit.svg", + height: 40, + width: 40, + color: Colors.white, + ), + SizedBox(height: 6), + Text( + TranslationBase.of(context).totalBalance, + style: TextStyle( + fontSize: 16, + letterSpacing: -0.96, + fontWeight: FontWeight.bold, + color: Colors.white, + //height: 16/22 + ), + ), + ], + ), ), - ), - Text( - model.patientAdvanceBalanceAmountList[index].projectDescription, - style: TextStyle( - fontSize: 14, - letterSpacing: -0.46, + Container( + padding: EdgeInsets.fromLTRB(14, 10, 12, 10), + decoration: BoxDecoration( + color: Color(0xff3f4850), + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + double.parse(model.totalAdvanceBalanceAmount?.toString() ?? "0").toStringAsFixed(2), + style: TextStyle( + fontSize: 28, + fontWeight: FontWeight.bold, + letterSpacing: -3.2, + height: 40 / 35, + color: Colors.white, + ), + ), + Text( + TranslationBase.of(context).sar, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + letterSpacing: -0.96, + color: Colors.white, + ), + ), + ], + ), ), - ), - ], + ], + ), ), - ), + SizedBox(height: 12), + ListView.separated( + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (cxt, index) { + PatientAdvanceBalanceAmount balanceAmount = model.patientAdvanceBalanceAmountList[index]; + double amount = double.parse(balanceAmount.patientAdvanceBalanceAmount?.toString() ?? "0"); + return Container( + padding: EdgeInsets.fromLTRB(14, 18, 14, 18), + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + //spreadRadius: 5, + blurRadius: 27, + offset: Offset(0, -3), + ), + ], + color: Colors.white), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + balanceAmount.projectDescription, + style: TextStyle( + fontSize: 16, + letterSpacing: -0.64, + fontWeight: amount > 0 ? FontWeight.bold : FontWeight.w500, + color: Color(0xff2E303A), + ), + ), + ), + Text( + amount.toStringAsFixed(2) + " " + TranslationBase.of(context).sar, + style: TextStyle( + fontSize: 16, + letterSpacing: -0.64, + fontWeight: amount > 0 ? FontWeight.bold : FontWeight.w500, + color: Color(0xff2E303A), + ), + ), + ], + ), + ); + }, + separatorBuilder: (cxt, index) => SizedBox(height: 12), + itemCount: model.patientAdvanceBalanceAmountList.length), + ], ), - SizedBox( - height: MediaQuery.of(context).size.height * 0.13, - ) - ], + ), ), - ), - ), - bottomSheet: Container( - // height: MediaQuery.of(context).size.height * 0.12, - height: 70.0, - color: Colors.white, - width: double.infinity, - padding: EdgeInsets.all(12), - child: DefaultButton( - // textColor: Colors.white, - // color: CustomColors.accentColor, - TranslationBase.of(context).createAdvancedPayment, - () { - Navigator.push(context, FadePage(page: AdvancePaymentPage())); - }, - ), + DefaultButton( + TranslationBase.of(context).createAdvancedPayment, + () { + Navigator.push(context, FadePage(page: AdvancePaymentPage())); + }, + ).insideContainer, + ], ), ), ); diff --git a/lib/pages/medical/my_trackers/Weight/AddWeightPage.dart b/lib/pages/medical/my_trackers/Weight/AddWeightPage.dart index 9eb3e1a5..5ef8c69c 100644 --- a/lib/pages/medical/my_trackers/Weight/AddWeightPage.dart +++ b/lib/pages/medical/my_trackers/Weight/AddWeightPage.dart @@ -9,7 +9,7 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/ConfirmWithMessageDialog.dart'; -import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart'; + import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/radio_selection_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -280,24 +280,6 @@ class _AddWeightPageState extends State { return " ${timeWeightDate.hour}:${timeWeightDate.minute}"; } - void confirmSelectMeasureTimeDialog(List list) { - showDialog( - context: context, - child: RadioStringDialog( - radioList: list, - title: TranslationBase.of(context).measureUnit, - selectedValue: measureTimeSelectedType, - onValueSelected: (value) { - setState(() { - measureTimeSelectedType = value; - weightUnit = list.indexOf(value); - validateForm(); - }); - }, - ), - ); - } - void validateForm() { if (_weightValueController.text.length > 0 && measureTimeSelectedType != null) { setState(() { diff --git a/lib/pages/medical/my_trackers/blood_pressure/AddBloodPressurePage.dart b/lib/pages/medical/my_trackers/blood_pressure/AddBloodPressurePage.dart index 77bb45b7..a4c0b943 100644 --- a/lib/pages/medical/my_trackers/blood_pressure/AddBloodPressurePage.dart +++ b/lib/pages/medical/my_trackers/blood_pressure/AddBloodPressurePage.dart @@ -6,10 +6,8 @@ import 'package:diplomaticquarterapp/uitl/app_toast.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/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; -import 'package:diplomaticquarterapp/widgets/dialogs/RadioStringDialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/radio_selection_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -119,9 +117,6 @@ class _AddBloodPressurePageState extends State { }, ), ); - return; - - confirmSelectMeasureTimeDialog(projectViewModel.isArabic ? measureTimeArList : measureTimeEnList); }, child: Container( padding: EdgeInsets.all(12), @@ -277,24 +272,6 @@ class _AddBloodPressurePageState extends State { return " ${timeSugarDate.hour}:${timeSugarDate.minute}"; } - void confirmSelectMeasureTimeDialog(List list) { - showDialog( - context: context, - child: RadioStringDialog( - radioList: list, - title: TranslationBase.of(context).selectArm, - selectedValue: measureTimeSelectedType, - onValueSelected: (value) { - setState(() { - measureTimeSelectedType = value; - measuredArm = list.indexOf(value); - validateForm(); - }); - }, - ), - ); - } - void validateForm() { print("_bloodSystolicValueController " + _bloodSystolicValueController.text.length.toString()); if (_bloodSystolicValueController.text.length > 0 && _bloodDiastolicValueController.text.length > 0) { diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 396afd00..89773321 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -795,6 +795,8 @@ class TranslationBase { String get myBalances => localizedValues['MyBalances'][locale.languageCode]; + String get myWallet => localizedValues['MyWallet'][locale.languageCode]; + String get balanceAmount => localizedValues['BalanceAmount'][locale.languageCode]; String get totalBalance => localizedValues['TotalBalance'][locale.languageCode]; diff --git a/lib/widgets/dialogs/RadioStringDialog.dart b/lib/widgets/dialogs/RadioStringDialog.dart deleted file mode 100644 index 49a16142..00000000 --- a/lib/widgets/dialogs/RadioStringDialog.dart +++ /dev/null @@ -1,139 +0,0 @@ -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 RadioStringDialog extends StatefulWidget { - final List radioList; - final Function(String) onValueSelected; - final String title; - String selectedValue; - - RadioStringDialog({Key key, this.radioList, this.onValueSelected, this.selectedValue, this.title}); - - @override - _RadioStringDialogState createState() => _RadioStringDialogState(); -} - -class _RadioStringDialogState extends State { - @override - void initState() { - super.initState(); - widget.selectedValue = widget.selectedValue ?? widget.radioList[0]; - } - - @override - Widget build(BuildContext context) { - return SimpleDialog( - title: Container( - width: double.infinity, - child: Center( - child: Texts( - widget.title, - textAlign: TextAlign.center, - ))), - children: [ - Container( - height: widget.radioList.length > 3 ? MediaQuery.of(context).size.height * 0.6 : null, - child: SingleChildScrollView( - child: Column( - children: [ - Divider(), - ...List.generate( - widget.radioList.length, - (index) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // SizedBox( - // height: 2, - // ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - setState(() { - widget.selectedValue = widget.radioList[index]; - }); - }, - child: ListTile( - title: Texts( - widget.radioList[index], - fontSize: 14, - ), - leading: Radio( - value: widget.radioList[index], - groupValue: widget.selectedValue, - activeColor: Colors.red[800], - onChanged: (value) { - setState(() { - widget.selectedValue = value; - }); - }, - ), - ), - ), - ) - ], - ), - ], - ), - ), - SizedBox( - height: 5.0, - ), - ], - ), - ), - ), - Row( - children: [ - Expanded( - flex: 1, - child: InkWell( - onTap: () { - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Texts( - TranslationBase.of(context).cancel.toUpperCase(), - color: Colors.red, - ), - ), - ), - ), - ), - ), - Container( - width: 1, - height: 30, - color: Colors.grey[500], - ), - Expanded( - flex: 1, - child: InkWell( - onTap: () { - widget.onValueSelected(widget.selectedValue); - Navigator.pop(context); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Texts( - TranslationBase.of(context).ok, - fontWeight: FontWeight.w400, - ), - ), - ), - ), - ), - ], - ) - ], - ); - } -} From 6af1747f121b067e07db5dbdc211127b4dbfe5f5 Mon Sep 17 00:00:00 2001 From: "Mirza.Shafique" Date: Thu, 28 Oct 2021 16:56:47 +0300 Subject: [PATCH 11/13] live care design 3.0 --- lib/config/config.dart | 4 +- .../schedule_clinic_card.dart | 79 ++++++++++--- lib/pages/livecare/widgets/clinic_list.dart | 110 +++++++++--------- 3 files changed, 118 insertions(+), 75 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index bca5db17..6f05a414 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -15,8 +15,8 @@ const PACKAGES_CUSTOMER = '/api/customers'; const PACKAGES_SHOPPING_CART = '/api/shopping_cart_items'; const PACKAGES_ORDERS = '/api/orders'; const PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; -const BASE_URL = 'https://uat.hmgwebservices.com/'; -// const BASE_URL = 'https://hmgwebservices.com/'; +// const BASE_URL = 'https://uat.hmgwebservices.com/'; +const BASE_URL = 'https://hmgwebservices.com/'; // Pharmacy UAT URLs // const BASE_PHARMACY_URL = 'https://uat.hmgwebservices.com/epharmacy/api/'; diff --git a/lib/pages/livecare/livecare_scheduling/schedule_clinic_card.dart b/lib/pages/livecare/livecare_scheduling/schedule_clinic_card.dart index 72ca4ce9..330fec35 100644 --- a/lib/pages/livecare/livecare_scheduling/schedule_clinic_card.dart +++ b/lib/pages/livecare/livecare_scheduling/schedule_clinic_card.dart @@ -1,15 +1,15 @@ +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/LiveCare/LiveCareScheduleClinicsListResponse.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; class ScheduleClinicCard extends StatefulWidget { bool isSelected; final ClinicsHaveScheduleList clinicsHaveScheduleList; var languageID; - ScheduleClinicCard( - {this.isSelected, - this.languageID, - @required this.clinicsHaveScheduleList}); + ScheduleClinicCard({this.isSelected, this.languageID, @required this.clinicsHaveScheduleList}); @override _ScheduleClinicCardState createState() => _ScheduleClinicCardState(); @@ -18,29 +18,72 @@ class ScheduleClinicCard extends StatefulWidget { class _ScheduleClinicCardState extends State { @override Widget build(BuildContext context) { + ProjectViewModel projectViewModel = Provider.of(context); return Container( - child: Card( - margin: EdgeInsets.fromLTRB(15.0, 10.0, 15.0, 8.0), - color: widget.isSelected ? Color(0xff06b806) : Colors.white, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), + width: double.infinity, + margin: EdgeInsets.fromLTRB(15.0, 0.0, 15.0, 8.0), + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + border: Border.all(width: widget.isSelected ? 3 : 0, color: widget.isSelected ? CustomColors.green : Colors.transparent), + boxShadow: [ + BoxShadow( + color: Color(0xff000000).withOpacity(.05), + blurRadius: 27, + offset: Offset(0, -3), + ), + ], + color: Colors.transparent, + ), + child: Container( + decoration: BoxDecoration( + color: CustomColors.green , + borderRadius: BorderRadius.all( + Radius.circular(6.0), + ), ), child: Container( - width: MediaQuery.of(context).size.width * 0.8, - padding: EdgeInsets.all(12.0), + margin: EdgeInsets.only( + left: projectViewModel.isArabic + ? 0 + : widget.isSelected + ? 4 + : 6, + right: projectViewModel.isArabic ? widget.isSelected + ? 4 + : 6: 0), + padding: EdgeInsets.symmetric(vertical: 10, horizontal: 12), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.white, width: 1), + borderRadius: BorderRadius.only( + bottomRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), + topRight: projectViewModel.isArabic ? Radius.circular(0) : Radius.circular(10.0), + bottomLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), + topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0), + ), + ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ Container( child: Text( - widget.languageID == 'ar' - ? widget.clinicsHaveScheduleList.clinicDescN != null ? widget.clinicsHaveScheduleList.clinicDescN: "" - : widget.clinicsHaveScheduleList.clinicDesc != null ? widget.clinicsHaveScheduleList.clinicDesc: "Test Clinic", - style: TextStyle( - fontSize: 16.0, - color: - widget.isSelected ? Colors.white : Colors.black)), + widget.languageID == 'ar' + ? widget.clinicsHaveScheduleList.clinicDescN != null + ? widget.clinicsHaveScheduleList.clinicDescN + : "" + : widget.clinicsHaveScheduleList.clinicDesc != null + ? widget.clinicsHaveScheduleList.clinicDesc + : "Test Clinic", + style: TextStyle( + fontSize: 16.0, + color: Colors.black, + fontWeight: FontWeight.w600, + ), + ), ), ], ), diff --git a/lib/pages/livecare/widgets/clinic_list.dart b/lib/pages/livecare/widgets/clinic_list.dart index df3c83cb..988d102c 100644 --- a/lib/pages/livecare/widgets/clinic_list.dart +++ b/lib/pages/livecare/widgets/clinic_list.dart @@ -16,6 +16,7 @@ import 'package:diplomaticquarterapp/pages/livecare/widgets/clinic_card.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart'; +import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; @@ -450,64 +451,63 @@ class _clinic_listState extends State { return Column( children: [ isDataLoaded - ? Container( - height: MediaQuery.of(context).size.height * 0.7, - child: liveCareScheduleClinicsListResponse.clinicsHaveScheduleList.length > 0 - ? Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - padding: EdgeInsets.all(0.0), - itemCount: liveCareScheduleClinicsListResponse.clinicsHaveScheduleList.length, - itemBuilder: (context, index) { - return InkWell( - onTap: () { - updateSelectedScheduleIndex(liveCareScheduleClinicsListResponse.clinicsHaveScheduleList[index]); - }, - child: ScheduleClinicCard( - isSelected: selectedClinicID == liveCareScheduleClinicsListResponse.clinicsHaveScheduleList[index].serviceID ? true : false, - clinicsHaveScheduleList: liveCareScheduleClinicsListResponse.clinicsHaveScheduleList[index], - languageID: languageID, - ), - ); - }, - ), - Container( - height: 10.0, - ), - ], - ) - : getNoDataWidget(context), - ) + ? Expanded( + child: Container( + child: liveCareScheduleClinicsListResponse.clinicsHaveScheduleList.length > 0 + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + mHeight(10), + ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + padding: EdgeInsets.all(0.0), + itemCount: liveCareScheduleClinicsListResponse.clinicsHaveScheduleList.length, + itemBuilder: (context, index) { + return InkWell( + onTap: () { + updateSelectedScheduleIndex(liveCareScheduleClinicsListResponse.clinicsHaveScheduleList[index]); + }, + child: ScheduleClinicCard( + isSelected: selectedClinicID == liveCareScheduleClinicsListResponse.clinicsHaveScheduleList[index].serviceID ? true : false, + clinicsHaveScheduleList: liveCareScheduleClinicsListResponse.clinicsHaveScheduleList[index], + languageID: languageID, + ), + ); + }, + ), + Container( + height: 10.0, + ), + ], + ) + : getNoDataWidget(context), + ), + ) : Container(), isDataLoaded - ? Align( - alignment: FractionalOffset.bottomCenter, - child: Container( - width: MediaQuery.of(context).size.width, - height: 50.0, - margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 0.0), - child: ButtonTheme( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), - minWidth: MediaQuery.of(context).size.width * 0.7, - height: 45.0, - child: RaisedButton( - color: new Color(0xFF60686b), - textColor: Colors.white, - elevation: 0, - disabledTextColor: Colors.white, - disabledColor: new Color(0xFFbcc2c4), - onPressed: startScheduleLiveCare, - child: Text(TranslationBase.of(context).start, style: TextStyle(fontSize: 18.0)), - ), - ), + ? Container( + width: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(12), + child: ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), ), - ) + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: CustomColors.accentColor, + textColor: Colors.white, + elevation: 0, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: startScheduleLiveCare, + child: Text(TranslationBase.of(context).start, style: TextStyle(fontSize: 18.0)), + ), + ), + ) : Container(), ], ); From d2223da3c23242e7a8bd3b003bd4745ebb21cf93 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 28 Oct 2021 17:00:57 +0300 Subject: [PATCH 12/13] improvements. --- lib/pages/medical/balance/my_balance_page.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pages/medical/balance/my_balance_page.dart b/lib/pages/medical/balance/my_balance_page.dart index 640b18f9..e4ff9581 100644 --- a/lib/pages/medical/balance/my_balance_page.dart +++ b/lib/pages/medical/balance/my_balance_page.dart @@ -92,10 +92,10 @@ class MyBalancePage extends StatelessWidget { Text( double.parse(model.totalAdvanceBalanceAmount?.toString() ?? "0").toStringAsFixed(2), style: TextStyle( - fontSize: 28, + fontSize: 24, fontWeight: FontWeight.bold, - letterSpacing: -3.2, - height: 40 / 35, + letterSpacing: -1.44, + height: 24 / 23, color: Colors.white, ), ), From 57ea450662fa3d8e259e0f2bcc18f621d314de4b Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Thu, 28 Oct 2021 17:53:05 +0300 Subject: [PATCH 13/13] LiveCare Schedule fixes --- .../schedule_clinic_card.dart | 22 +++--- .../livecare_services/livecare_provider.dart | 78 ------------------- 2 files changed, 9 insertions(+), 91 deletions(-) diff --git a/lib/pages/livecare/livecare_scheduling/schedule_clinic_card.dart b/lib/pages/livecare/livecare_scheduling/schedule_clinic_card.dart index 330fec35..7884b37e 100644 --- a/lib/pages/livecare/livecare_scheduling/schedule_clinic_card.dart +++ b/lib/pages/livecare/livecare_scheduling/schedule_clinic_card.dart @@ -39,7 +39,7 @@ class _ScheduleClinicCardState extends State { ), child: Container( decoration: BoxDecoration( - color: CustomColors.green , + color: CustomColors.green, borderRadius: BorderRadius.all( Radius.circular(6.0), ), @@ -49,11 +49,13 @@ class _ScheduleClinicCardState extends State { left: projectViewModel.isArabic ? 0 : widget.isSelected - ? 4 - : 6, - right: projectViewModel.isArabic ? widget.isSelected - ? 4 - : 6: 0), + ? 4 + : 6, + right: projectViewModel.isArabic + ? widget.isSelected + ? 4 + : 6 + : 0), padding: EdgeInsets.symmetric(vertical: 10, horizontal: 12), decoration: BoxDecoration( color: Colors.white, @@ -71,13 +73,7 @@ class _ScheduleClinicCardState extends State { children: [ Container( child: Text( - widget.languageID == 'ar' - ? widget.clinicsHaveScheduleList.clinicDescN != null - ? widget.clinicsHaveScheduleList.clinicDescN - : "" - : widget.clinicsHaveScheduleList.clinicDesc != null - ? widget.clinicsHaveScheduleList.clinicDesc - : "Test Clinic", + widget.clinicsHaveScheduleList.clinicDesc, style: TextStyle( fontSize: 16.0, color: Colors.black, diff --git a/lib/services/livecare_services/livecare_provider.dart b/lib/services/livecare_services/livecare_provider.dart index fa40bd57..6553da40 100644 --- a/lib/services/livecare_services/livecare_provider.dart +++ b/lib/services/livecare_services/livecare_provider.dart @@ -25,18 +25,7 @@ class LiveCareService extends BaseService { authUser = data; } - var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); - Request req = appGlobal.getPublicRequest(); request = { - "LanguageID": languageID == 'ar' ? 1 : 2, - "IPAdress": "10.20.10.20", - "VersionID": req.VersionID, - "Channel": req.Channel, - "generalid": 'Cs2020@2016\$2958', - "PatientOutSA": 0, - "TokenID": "", - "DeviceTypeID": req.DeviceTypeID, - "SessionID": "YckwoXhUmWBsnHKEKig", "Age": authUser.age != null ? authUser.age : 0, "PatientID": authUser.patientID != null ? authUser.patientID : 0, "Gender": authUser.gender != null ? authUser.gender : 0 @@ -60,18 +49,7 @@ class LiveCareService extends BaseService { authUser = data; } - var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); - Request req = appGlobal.getPublicRequest(); request = { - // "LanguageID": languageID == 'ar' ? 1 : 2, - // "IPAdress": "10.20.10.20", - // "VersionID": req.VersionID, - // "Channel": req.Channel, - // "generalid": 'Cs2020@2016\$2958', - // "PatientOutSA": 0, - // "TokenID": "", - // "DeviceTypeID": req.DeviceTypeID, - // "SessionID": "YckwoXhUmWBsnHKEKig", "Age": authUser.age != null ? authUser.age : 0, "PatientID": authUser.patientID != null ? authUser.patientID : 0, "Gender": authUser.gender != null ? authUser.gender : 0 @@ -95,19 +73,8 @@ class LiveCareService extends BaseService { authUser = data; } - var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); - Request req = appGlobal.getPublicRequest(); request = { - "LanguageID": languageID == 'ar' ? 1 : 2, - "IPAdress": "10.20.10.20", - "VersionID": req.VersionID, - "Channel": req.Channel, - "generalid": 'Cs2020@2016\$2958', - "PatientOutSA": 0, - "TokenID": "", - "DeviceTypeID": req.DeviceTypeID, "ServiceID": serviceID, - "SessionID": "YckwoXhUmWBsnHKEKig", "Age": authUser.age != null ? authUser.age : 0, "PatientID": authUser.patientID != null ? authUser.patientID : 0, "Gender": authUser.gender != null ? authUser.gender : 0 @@ -154,18 +121,8 @@ class LiveCareService extends BaseService { authUser = data; } - var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); - Request req = appGlobal.getPublicRequest(); request = { - "LanguageID": languageID == 'ar' ? 1 : 2, - "IPAdress": "10.20.10.20", - "VersionID": req.VersionID, - "Channel": req.Channel, - "generalid": 'Cs2020@2016\$2958', - "PatientOutSA": 0, "ServiceID": serviceID, - "DeviceTypeID": req.DeviceTypeID, - "SessionID": "YckwoXhUmWBsnHKEKig", "Age": authUser.age != null ? authUser.age : 0, "PatientID": authUser.patientID != null ? authUser.patientID : 0, "Gender": authUser.gender != null ? authUser.gender : 0 @@ -189,21 +146,9 @@ class LiveCareService extends BaseService { authUser = data; } - var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); - Request req = appGlobal.getPublicRequest(); request = { - "LanguageID": languageID == 'ar' ? 1 : 2, - "IPAdress": "10.20.10.20", - "VersionID": req.VersionID, - "Channel": req.Channel, - "generalid": 'Cs2020@2016\$2958', - "PatientOutSA": 0, "ServiceID": serviceID, "ProjectID": 15, - "DeviceTypeID": req.DeviceTypeID, - "PatientType": authUser.patientType != null ? authUser.patientType : 0, - "PatientTypeID": authUser.patientType != null ? authUser.patientType : 0, - "SessionID": "YckwoXhUmWBsnHKEKig", "Age": authUser.age != null ? authUser.age : 0, "PatientID": authUser.patientID != null ? authUser.patientID : 0, "Gender": authUser.gender != null ? authUser.gender : 0 @@ -227,21 +172,9 @@ class LiveCareService extends BaseService { authUser = data; } - var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); - Request req = appGlobal.getPublicRequest(); request = { - "LanguageID": languageID == 'ar' ? 1 : 2, - "IPAdress": "10.20.10.20", - "VersionID": req.VersionID, - "Channel": req.Channel, - "generalid": 'Cs2020@2016\$2958', - "PatientOutSA": 0, "ServiceID": serviceID, "ProjectID": 15, - "DeviceTypeID": req.DeviceTypeID, - "PatientType": authUser.patientType != null ? authUser.patientType : 0, - "PatientTypeID": authUser.patientType != null ? authUser.patientType : 0, - "SessionID": "YckwoXhUmWBsnHKEKig", "Age": authUser.age != null ? authUser.age : 0, "PatientID": authUser.patientID != null ? authUser.patientID : 0, "Gender": authUser.gender != null ? authUser.gender : 0 @@ -271,15 +204,7 @@ class LiveCareService extends BaseService { authUser = data; } - var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); - Request req = appGlobal.getPublicRequest(); request = { - "LanguageID": languageID == 'ar' ? 1 : 2, - "IPAdress": "10.20.10.20", - "VersionID": req.VersionID, - "Channel": req.Channel, - "generalid": 'Cs2020@2016\$2958', - "PatientOutSA": 0, "ErServiceID": serviceID, "ClientRequestID": clientRequestID, "DeviceToken": deviceToken, @@ -287,9 +212,6 @@ class LiveCareService extends BaseService { "Latitude": "24.708488", "Longitude": "46.665925", "DeviceType": Platform.isIOS ? 'iOS' : 'Android', - "PatientType": authUser.patientType != null ? authUser.patientType : 0, - "PatientTypeID": authUser.patientType != null ? authUser.patientType : 0, - "SessionID": "YckwoXhUmWBsnHKEKig", "Age": authUser.age != null ? authUser.age : 0, "PatientID": authUser.patientID != null ? authUser.patientID : 0, "Gender": authUser.gender != null ? authUser.gender : 0