From 6eaf448d5ad59ea7ff0492ea9912d0c3a10bac44 Mon Sep 17 00:00:00 2001 From: mosazaid Date: Tue, 30 Mar 2021 16:43:30 +0300 Subject: [PATCH] working on new design for vital sign and admission request --- .../patient/vital_signs/Obese_BMI-r.png | Bin 0 -> 2088 bytes .../images/patient/vital_signs/Obese_BMI.png | Bin 0 -> 2088 bytes .../patient/vital_signs/blood_pressure.png | Bin 0 -> 733 bytes .../patient/vital_signs/health_BMI-r.png | Bin 0 -> 1991 bytes .../images/patient/vital_signs/health_BMI.png | Bin 0 -> 1991 bytes .../images/patient/vital_signs/heart_rate.png | Bin 0 -> 940 bytes assets/images/patient/vital_signs/height.png | Bin 0 -> 417 bytes .../patient/vital_signs/ovrweight_BMI-r.png | Bin 0 -> 1966 bytes .../patient/vital_signs/ovrweight_BMI.png | Bin 0 -> 1966 bytes .../patient/vital_signs/respiration_rate.png | Bin 0 -> 995 bytes .../patient/vital_signs/temperature.png | Bin 0 -> 854 bytes .../patient/vital_signs/underweight_BMI-r.png | Bin 0 -> 1859 bytes .../patient/vital_signs/underweight_BMI.png | Bin 0 -> 1859 bytes assets/images/patient/vital_signs/weight.png | Bin 0 -> 399 bytes lib/config/config.dart | 4 +- lib/config/localized_values.dart | 9 +- .../patient-vital-sign-viewmodel.dart | 13 + .../admission-request-first-screen.dart | 51 +- .../profile/patient_profile_screen.dart | 2 +- .../referral/my-referral-patient-screen.dart | 2 +- .../vital_sign/vital_sign_details_screen.dart | 518 ++++++++++++------ .../profile/vital_sign/vital_sign_item.dart | 110 ++-- lib/util/translations_delegate_base.dart | 9 +- .../patient-referral-item-widget.dart | 14 +- .../patient-profile-header-new-design.dart | 2 +- lib/widgets/shared/app-textfield-custom.dart | 140 +++++ pubspec.yaml | 1 + 27 files changed, 632 insertions(+), 243 deletions(-) create mode 100644 assets/images/patient/vital_signs/Obese_BMI-r.png create mode 100644 assets/images/patient/vital_signs/Obese_BMI.png create mode 100644 assets/images/patient/vital_signs/blood_pressure.png create mode 100644 assets/images/patient/vital_signs/health_BMI-r.png create mode 100644 assets/images/patient/vital_signs/health_BMI.png create mode 100644 assets/images/patient/vital_signs/heart_rate.png create mode 100644 assets/images/patient/vital_signs/height.png create mode 100644 assets/images/patient/vital_signs/ovrweight_BMI-r.png create mode 100644 assets/images/patient/vital_signs/ovrweight_BMI.png create mode 100644 assets/images/patient/vital_signs/respiration_rate.png create mode 100644 assets/images/patient/vital_signs/temperature.png create mode 100644 assets/images/patient/vital_signs/underweight_BMI-r.png create mode 100644 assets/images/patient/vital_signs/underweight_BMI.png create mode 100644 assets/images/patient/vital_signs/weight.png create mode 100644 lib/widgets/shared/app-textfield-custom.dart diff --git a/assets/images/patient/vital_signs/Obese_BMI-r.png b/assets/images/patient/vital_signs/Obese_BMI-r.png new file mode 100644 index 0000000000000000000000000000000000000000..50b3282278f74fe59d8e039517ad1ad66e03f651 GIT binary patch literal 2088 zcmaKsc~lcw8pQ(vI;;XB5D28QkW|=Y38K*;$PyNXkRT%3G>af%Q6>t=qO!{-w8(0U zhP`PT1Vv=fmURFzkOUeOrv((HgUF`LjBPW}RRL$_kC{2=Rn>d1?)SU*dzF(craMDf zK}P|BKq$L7JFuW94Y~qQNa)^de8?1mkj`Nq_Hu-lo09PZ0?}z}%eS-~H!}JwkvI(i z{TK{i$5Nza3hg{6lLv`JJ{~UsfKh#uag5OuU64;A@v)Q^m%x13LI6O6 zB*a1`WC4yWga!c7NFqEafCsz-(IAcxn&Y9lWQl`JVVV#ii?%a>(2fXN!oaNzAPn4^ zOYFA!kP#jdLv|3B1Vg@%C4z0T1S`n{d%>GqX}831%TRzVK4c0Dw!~Wj;07fY+a1A6 zN%$`rphMW!OA7ykwk?yuB}~Xy5&-TU7Q=re0HAY&PGT{BV}aezCy_>C@Lwd>`+xx->HGt(Z%TLV*wnVKr|qc zL5iV~vFUCza|=tV)gJ4;wEYL@HV19(9UPq)F0O}ayoUn+Y zdgk@pxnITe?-mx9mRD9kd|dn6-~aLHx6i+?|8wKL@#ICQMX5kHhQo7&GNTEBkO_5h zu=CPJ7jC){tI!rWJPn#Iho?mQ zE_8+F0^D59l^lxTPWIw>#EL-iKCgrYa^36Kz-Zmn;_dII2zYyrsNZ ztsXt)d1J*nCH41J<68B)^_J=u;|=|I-Zt@8!aXv6Ih+KoQv1fquCN!HJ>klZY#p=P zz8{m;LbAtKey9eeS2XWuOKGsZdKzvNUw5(P-S8ck0_ro0!!F2t_x&$}GG;mEZ=|&^ zrn&|p%6nS*>D*HDbyTpv$#HROiYuisqMs_~iY^Llw^(p-VpSBH*Rnu*Q$d6dk`a^U ziZd?J9+UN%s#ce`KipIotWb!{owWhk9L`{}MSa<8G#Hml&>F&I&&hXv8}6AM$Mg%r zJmnqmP`j$se=E--8_o0!#@w+jvuk-AWNlbm!pu#xDEZSHd$e84na`R)9l#~ zT{J_p@chQG{eiJU6<&KJTCx2qn%OZOcvz$XB9C`Vn_ksK_*iecWR!K%Ws9f9E#Y6$ zFQwNc#M$&F25yA;)K19cDJLzSi$9=V%h(lxW~7qIy_(J$;k)P=FFo>$qSB?s?>I3X zFX=VqHK)@!aFtH!Jt@n|35CpI=PB{b1e~Wz1_pUE+#|{R^0R1q}0_3CQjT9Gb5MQr9Ev z+LZ-34QM`u1j1GcRe(2D~|K=(*Ro9+O-) z=~Wrk>iHzKOekBR_eAyOnd^^K(<=8^Re<)-Y8>91dq;!8K#E>2x|w zi9{j}$F{U&&}cN60sxypVB&CetgS7D0_#~I$RLsEL?R83x5rVKAP50~9g%1c%kUHk zN2UV+jYMJ+i3|dTjwjoJAd5s|5Qz|;Ov8ap0Dxq6I|7-B2N~OxNhCAy0PMBf@`4Zn zgej8<(g~m)9)OD?MgqtnAQ)}{K7uhs0O$yX^$38E7%)a$0K5>F3_}E&9kvjGO&5|z zf+;M9LtrD~f-xOlhzkJ>#04Tiwqzj)MfC6vYc`D}8AdcDxNV3e^CAM6$`VLO0#b-5 z8$qVu#BkfPTCfs+G6IqDw}7!-UgB=mTgC_FOi#K~y!>6o}P@d=4ZXH(KL zv(9JdG>Zn@stcH?Hp?arUN?%e(P zUQcgd|G?nT$b*NYfB(nW_@jwmA5T7=diLA%=@&Dv-pu_joqxNqxU{^o`u@Y(KmYab zkAHmn&-#Bi-r=Xt!XwHBxpSPJqBJ-yD3n4N*U7=#08`SN^R2g!fznJ|sFr%1IansP z0t2b~M@R7Y0X4z{LR7DE8{Q_z38z0szWDIRhjj-}^+uaNuqZQZKDP6i)AYH9Q{9Q@ z%9^fJB+kWaxd*%*tci)?&^*-494dySc2{#U)Vp1tJPvdnIJEXrCnv0)gVxcy>s*M{ z0h&ro2sZ1{mr>belD(jG7VIW<%u&T*3jDG&)54ZHYC-|wvPm>exF&+E}inZvE z>$D}`{j2uVRg>09>{XK`@}jM?_O!%T&X?cr*;iRGQJPoQcuOn3-MH6ysbMj}+F#;p zpI|d)tKgp}O4KiRY@X@~f2P+Lq2Vkr1g;4`q^yPJK3@4-EmnR-?^dpyuE4vm>2m2M zE?aV0_*l-YF{?EEjKcRn{5Grr<^)FQjb|U$K%i>k{Mb`;&q;!u{$e6$&&`7EdKGb?Q00 zA~BqFOUr&e*Q|(LtgPprg(cCM^3u1W*skZSy2?ti_6uHYm-4S|6J{T?$6`=VJ)eBL za9t;>zvp z0x|Z8^o;g~Sn8(~0vhj}IjL(rTa{lIY_YCUyEw<<@r7Y`^fwa5W0iyUMKuD^6+!fY z1zr8XSJYpy+2^t00W*QQgJw>x7lWwlQ4O8yLwj?@A61XmgmKf9Z3Ip;O{T_y*^y8} zzo#j5HGR0D#xm)fhGtZCO2@gECrzU=wKCh!YMgTy9g%M-5$-POvddgCoN z`G4w2f`_^z4A*y1JGI239~pT_YPELu)-f z8(l*y0|N^K0~;L!Yh6QYpsX$kSpt#1zO|kqh^=R6sb^pfL_jH^h`ynf9!Py+D;f1XKWG0QG`3LKr}mV3R?DAOtcB$_AMX(gl-(aKYN)YQPMz z7Le8Giovq~|Nm!xqjm)tK(Qr3e!&dPEUavN!Xl#Ll2X#La*A5I28PBa=9bnDuAbih z0ij_LQE~ApX?evZW#tw1jeY%-r_Pu;YtfRW%T}z~x^4T81BXwXI(_Esx$C#?Jbd!} z<*PUE-hcS`<=gikKY#uG*Wk0|8PFoeByV?@IF@UPyMb(0PZ!4!jq}L~42<_qL}+lN zq#R&jnr9HEW9)h9S)+r15U&#RRD-3m$$}1(y)LbJ)D=|YaY^plwSNVfVa)*(X3RB+ zx#bmikXP;O6BdzxsaN`WM2{H61jf0r9r?C(;>12v=jmo!w}l0_eOR<5Dfhxs#|C2w zwFN!Cvm7t6pXt4ld_e2$fkjCv*~<Kb|#?P{9QeO5D1aCx7^K5M8Q)ml}A;P5Vt zg)4^HS5ffzu!Ow-;s4hu(VwsI-L?yZTE!j9rqu6)A=t^*Ta8{yCsjLvYuY~cM7FSt@x`P9jh4L?G6f(0u=0K?*Ov!j!h-!;3mPiw6Yj@IhmzeJG9tsn9qI0Yf@hxb z=(e8EGZGR-A6}b$@_^gvHJPQH+*_N&KOFI(#hzv%;4VByaLnq;uDKS*M6prSTO_s& zGw_04O~0(N?5=3E8oN-;UKE<-U1ZWdA2M@zlbdApibP}CeC4$rviY*f3=RsT{43|_ zQX3^(V_sI{@v=7dcj>l@K%ZwfBcdzym3wcdgAC!-z_HXV-w!s4kx2yX6)}3cYbL29 zew63JTYR-y%G!_{b*PfpMoY1PAEeb1{xzqxGgXDI!w=z}nngPfc%PDLPQsHM*`CunLqH6=W|-2LewZd?-^ z(|LEjO-ttKyf>N!)4v_{a%i@ys?XHs`OtJjxlXR%cA>iuS{AU93pRWg%<0KJ!WM2O za{Kxy1$Cy*fsRJ^NW=Rt`)UeL4@Od$5}%mUKV3Jqmf3VzS=TN;nAX?=Aov%uO**p}pNySALSS6=ju6fjOkD6H+5}EGxKBFig)8i*IL#$m7oQ8Tx*!A zOCU1PA4`bQM@y+K-|ogV*KcKfLj4VS zSky4o9?ab&apbyh7Jd-cyopa|Cs>W#nm6xvZq5ffG%1lfO>%xbO?|`rag+NQpzf>2 zqTG6>d!6^=#-y%djfZg|y3r@5v(E;U?%_D*VmZ?eQe#@VUHW-y4?&7T?V^{b)gU_K y3m2*TLw@iX6;{~a9FkAe#J%3Jr`+e@vXQnby?~b%RtNnX5HvrA?+u@r{Qm-;bSQv6b+yd zzyJjWg$g7Ns2HN9U>jlrRwN8+EknzsZ5c%PO2yjy0$A7TTjwQbpS$-y=iHUGa@?Qi zWrDUuqfjUlwzoSUeA|QfGb01=d89F^4TaJ_;m-;50C4dU2n0+flR}~3a5yZMZN+3# zsZ;|ZV-v4%Ry5l2NJ-9VH&Ki96&MYr0b9D%yk7UjsCh*sxJg_iCCbO#kWXpLM2LO^KCvD_M*>gvn#B{HBb z$=~dVFp>CY=C=*s&=w~FGyK!*P1CoN|IL5>`Zd=PTM2%S4-)vi9Vk70gB91wkz@2*|9-h6`v#`3-QH*L1E*<$B_Bfw;eqmwI@MrXKv$lUJb&Gzx- zaC!a#{2hXw9|r~R4%zd`r(xm3$p1!vzArW|{=mUQiAl--OF8mI>X&Kh8Amg-zREs! zT$GcWcj9Dzfw-`!_>`oiwCwBhiqmH*tIk%}d~?3Gu3jp;aPiXRD_5^IUY9p1ZruE~ z`MZ|ZTR$kV$BN zuTYjuRu%YK2XH+aGOLTKB5#DM`(qrd6N3T+9XO6YvM0_FmW}OSBt}NHe0YBR;myKk z`gn5Z`1bNt>0ZIj`ps+;S>fD$l-Q^u|2#P>G+2c3zHBejSU-3sD&bXpQsBoSv75{iS}t z$cOdhk|3mbuz35W1RI|GoX<$yhMykQD$&ulTh1yiCtIhY6%oS{STg@&y;`^?)pwMi zHh4gRZ;P!78EA{m3)wj&=Rwk^IC00Wh3o2?6)gq_9%c^)vs?PqQ?s37-Y?zKU~R|k zk;AhBcGu*!x$0c&lu>z9Q*OhxMxN)?#0+i%7ru30g2L)tc)>znqBuZumrD`$TxF&D z9#fax;tsaI$nuy;Df}EWINh=>0JHUuWRNi+>FUWT>AIqt{%T=tx=GfcWY`Xed7aY4 z8b?baIJS}Bm27kAwW%e=RHXpV|Q`9V*^tP93MZzj%vd~o3E|5s82eY{z^M% zNZL=|T4z>LmDHWiV)yo^5y;=STDI*r%@oFDuKAHGZcp1MlCQTb?CD`-Rv1D)4tm$^ z2XJss0K2)~-|EIl%mE%4$UDK#9i z8^Bt9>DPN$+G6N@5=ZDvU76&5p$xshw$~_>m6-gZforjP9Qyr4ynNT5u`9dgZa-Ee z+>Mj@I}rG>>Kz@_WJ~%z8>dXaJVx+E})F*A~U zT&dDfN;f8Z7CzWBvnsrVQR-U$an34o&slScpKuS?dQ>Dk86RvXMc0bw%%N`K#EL|9 znWzIB{0=i+78Q?y_c}~x$YMe^6+2m|#ZG969@!?ExyxN;&@?NF-zepKegLf%W;R^! zC`s$^#CQaGke!DP@ICGO49WHJMjpbAN*Z=}rD;`duBGfMxr`rITiBJ>Yd6e*&U7?o z2;lGy&@*93>ka(yp%9hYHT%#fD!Y*VdEWKk)2!>N-s64h{U>^FOLcz}w{V@xq0n)? zd|N=>Iw?mKX*P6u*0>L<%dk>tV}p9NF&Po;u8Yk3wT{QED!#7CPOIWORxt0^M7QQ> zo%FLTYgnPpJr*`F*i3baM0DY(YCbIFf&szv{lx#(lIyJG`3aKx70DU(=@cwFtE@zveeMG zQ8%$xGq%*yw^la-DzMNnvQaa!)H1fvG6qUns2SU68Ch$X*k~DAYMNMU7+V2JbptDP zV@q`-YmhmHK!z2FVPpkls2f_V8-rwlDuD_#Kn!aQBWrcA0+3=uYfWR2Vojj!Km|Z? zAQvPHHAfSu1!N9T0Z17{r6y1%SiPo!HJA-iU+qHM!;Uh+byrFJ8ZW_x{u8uiw7^`2F`^ z|FKCvKxZ%}dAqyRT->G*4`j!9x;TbNNY)-~x0g<2V0-YrXTcSYSqrvZ_!6+#ZT7V; z+r_g=c1-)0IrTuOc(>b((PFCR`5EnIur1t z*{dXIR$HTg$huVv&IEQOylS1OG&A=A&#skcoM!YKEj#9OdCk#_7K=PD*R{6%%Goo2m{gs??|9>x(ULCbNt`UVTKGXO5f00&%g@E(A9?^YkdPNpopG< zB~%>9FocM}NFY}qs!LBFCJ5H`|NnoNw6_I7M`)D<`2{mDvUBkY2uexoI5@iaMnIa57d978nD zFTHe=k4ce-^}_2mX)Ud;$41KUzWuik;5w(W*oWuiK8N$pv(;E*tUlbd(R{M+K~dS8 zO1-HXLuJMsX_X-;Zvc zXdn4n=hy+2#3x(z=|luppq~M zm4^dTAc2UA1PT=#n8}17gH=JX3RVe9OBJLiLEG2A-dgA0yU%y_{(bwLb??paV!Ii` z&EPN?%$T`}?hT&S;M%cJAKc@E`)OoUFQDpflqSBnuiKVD5 z2;C6Wg`+62WF?lQMiaVFc)10nge=uqk^+raq98ezsK64G7=j9oSE0#r6iI;tgQ&z3 zR2YIBO;VzWDjZRPAuBN?6`H6<5kS5Iiw8gzP%uOV8VrIGMbIi*5hN3pV4wjLWRgG( zPzp3~Bq_0g45nHI0F^)i z+MVhWbiHX$U{3jr(w)^O!v7X(<4+}E^&cZ({VDAq!e{00rT-hu&dv@p41WY~o-)px z&4JC+)1Pnf#e#)~aHB7c7cKtJlBLTK%S~4x%~o1qaS)zBB3n|d?Y{cj!SS2b->#uK zIj>v4f#JG|$#UQ9!S?jp;?3du`1<(=ZVL|Cz9Td&d}rjYC|>lQn7#XA_s1t3IC$uA z;*q43?~kP(PdjmvFF1WhD9X;s%{!N0@Wc7Sq6-%<7nl54T2?NWR8&f@R$aS(qxxoz zthVl_hM#ZUx!cm(*51+CC0D4_-S>O@`Uie_^!Ulp@Y81_&tJS89eefL>o?$1%3YD8Li!bOw(#2a>^v|VvH)jeScyQ)tq$t;j3r+6#&+w6QJ-~T9S z?OkC&eepr38TeQnobw`abY3)KOlO}3yK^@tIXE* zui}rMJ1)J#59Hr^w>+)7xO=e=TwJ`4h49^wBJuLa&)5|+cX*^~>`Px{Ut%K`-QE-3 z_I_DVUC@IJ<11kq_=qI0s`=st>IaUs(HGA|*LvI*2gdNm*Vxpc#^J5MnFs$mvb=H3 zv$n8h?9#&mO;pYxqrS4e0wLvn_tUWl@wGFVZgs;*#$HZ%oMXGVisQPdA*bDcD^VKM zL*>8RBNa@?PXy97Hpd)B#(6aNu@3nNL>fQKnna)8bc2b*VaFxd7}4SNu68^ATmPJp z&@q*Sb`H*+TwvSAb2JU_DrsQ{6j3?B-TfHx2@8*FB@=@B63q>X{X^=L5M)<|ldbe6 zv$>-~A;bH?W0A;vCjuK`cGJVlK`*K(4AJil1v-b6kgJ|F7RyN2l4*mz2) zhg?zS7U2Z5;#%$1Tim|7KrcEw$0*v@YUR;w0X^gN19<|c?M0#e`p?>4j3%FdbGk4$ z%itBqYSJZF@c48}$AW-gsMMoo_a+R_VsPiG;qB}LDUZvWTyjFoU?)l^>EoM`<6&uQ zr|b5twsWg8(ZflTuWv!Ld~f`84gZg90<4xF6*5p++U7Dmmgr7~E=P7K$koT4Jk!;E(^SpjODfBcJ zzAyhmx?8>^{X;A>%CC>)N`4iHWrvW95i-fyR9Oz?*}{EvOoXh9+q(QoSlY9vj!ev{ zqYQZ4ZEFtZ&&KO;nTQ z)_@aR@T8J^GLPKqWn$l6ob1ZByecG5B#@g7mx{Jz_>eE>9^BbZYO>7wD)pfEAcP1- zu%g`Yl@&t%)#t1M))7xuprD$r=G@JTW0c=17ga(}!_JsAMhQnX*IDYI#zLX*P-I&1 z?nW-tXR046GbiQUSc1xk#5=%3SZne&9kFed<+GbTkOp^aHui3Zuh4`F>tbSs8DQCa5QeHS1KG6=-0h33w~Dykv=4E;Y;4mRU+z30~6W z>|#y@H7gRGF74uVx@Bc*tt)vCkeba&(;U`n1JppD3o5T$2t)gNZm^;7PHxGI-O1+5b${3GB%sRU;qh0 z5P`t9vVt8P9Dt-y*d!8*Kwwzg+f%7d5X2-B9SC-Ibh;Cj3X{nU0-Xf_BArQ~F(?!V zGMPo9Gl(=t0F%iui3FNVfDx&%u7DsGM1x6GCXoV`903nOKr#S~gi}B!6QVIlRG38h z%z{WJi2|@GlFEdrIth6ALk*e?h%!Zzkxd~gtdocfsSyi_43nqq5Cy;=n{C0stO-I0!j)Arg>?ar!*d{SQ;go1#q{oAs?}WQwLHG-IyZs4$9hkpNbKe9@}Nv>2P- za3nZA6xF1y@Q;YZhPxUneR`#8NMuARNzYVcQbJ-+o8-n{q9{_fM&oYYkhcjcyMI@u z=XE3|dH%Kw+VZMn*Mo!=*X6#og>kG2`rG{~^2?&7op~m)k&f>lc;Dua+u05-8qfC@ zp#t@Pz}z`0E3g}^G+o*AjdbwD!HRQIKk1b>3scmEx8{n`%EFa=jMwTUm4}bz1f`I- z*)3U1FMgJJMu3@fb$dk1+XenL{&&-i&jqJhh9-Da&Q#9oylY<_ar#(9wcAytU!-K1 z2~{l}MmPVpB;e11h4n-3)%i_BXYS`|!?W&jYs*{9Fcp&Tem-zFrg|dXrKTUt-60H# zwr^Ed3Z3WFWwrWju&VICLz6z=ULhNg8S#VHG)C^lM!Pk3^Y@5l3az(oRlK+>)nH_A z@IjSDq+;(XXUgUuYo9KUZ5vBi<`j@UI*Z&Qv0oI@UeqM;EuaYlZuOWe51F}LC>oK~ z7HKc3==W)l00}FRKaGiYOxP(3{)pn5P$!nPn8=Mf`gIM&CQboZUGx z)~14>9{ndR&ju4uzB-zponi1oNE~Hn%N`z0YMbTz2aUGh^u~zcadX@WHM&)>JLzF* z13N3I1a+u*lry{zI~<&{V!UR%BgLiCL=RVycyT?Z>3ieHOzA(F%Td+R@W9^k;ud!Q zP`oSra>L<_%W&9=uB}{y+19q-D98G0`rgn^3FldD6LDZDUApzrd5grx0XjEg%Mpv% zKF@Qh1DS*~OLBUo)>K=J$nOCxELQ{uRnn@~DH#Bb9>IF)#E}Z7v#+*v5L?P=i=`U8SPZQgm z&5qmBYTaO)K~0YHyobjGVff*$mgQw~>G`MpUj9CJzMo9Z=@eeiiRPAGD^--^9|s>Z zsSlSAYA^CT{p<7PUVULHh1=>yJn>i$zGR7Y&ZT)v)50w6P=S1A&f0zCW=*c3(G6>G zy=qO@hFX#Y){3iIx_M=?%j&VkdAZ&mtcA-(crSLld literal 0 HcmV?d00001 diff --git a/assets/images/patient/vital_signs/respiration_rate.png b/assets/images/patient/vital_signs/respiration_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..ff695dec77fe9328985304e7e976322b4ac58af2 GIT binary patch literal 995 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)p!3-oN7|sC&7$*hzgt!8^KoA-l>fqpDY;3IH z;9zNK31sN$=>bUt0|#AQ8$&}|Jv}QO9dm6{Q$s^*9UVJELo1-Tj!0 zP>qhEwSj?^zP_cNk+rU&m5za>fq?}?R@V^7w$U@R)HSrwF|gLxhbRMbt#v_MOFcas zT?0#feQQ0S$p)5sAaSr72p1$}rDtHR3)E<631lF#f#N`9sjF|TZwOMOr*8#P22ul( z0$QP`Z>bMtgG~UFKv^r0W55dZpq7I5f=qxRFdL*2h(LOQ4#SWFs{uI}=vufen2S)1 zDh@Xd#K1uR|NpG|nTnlIn{bEeYY_xAnds@j6gGqZEMc1*uw`|Y6Z;=D^MABruUDskjg%R23n7y7)_ z3HrQSr@UI$vE%{6#Bw8b!+L}Eha77CmWnThePV7$v9>)_3+RlU+mN}EIpWRTO&e^& ze$6=Rx4ws!dv?Db(_5)SSJtUS`Lotu+W4U4^|^&o&lbrUekv(7nfa3^^QFa^lu3(M z`@2=FunE@9y=S4O`!(^{-fh$P&t!J)zB~DDzM-UMZ)NR=&{uM-QyZVg9-bk$lD&Ab zEd$flhQ@zK!WRVJVn3t$i@jmfvYq)rdb;m9+vF&9%Nf64{$(x} W-utS$tl}IfuX?)rxvXfqpDY;3Hp zt*xTssQ_l{>FH@}JE*H$8yGm~>e^^)TWXk@85-JZo0{tDTk7eV8yZ>}7+C1(+36Zv z>g!wU=>fS`x?n*A0~?5lo}s0#p@oitHAst*rLF-`nT?*IwXT7so}m>G0hNJN8d`xx zfPz3ND_wmneM3t4Uh|dio$iAgK>l02Tytffj*ef!aZ8K#GAR z$VR9FkhrCuK1cz?9FUDb!$IO;1kw(XLU2K{VB4W;;EJIdK_(!h|Ns9_Ulz>-4Az2@ zAirP+MkZz!RyKAHE^Z!P0YM>QQ3+`oc?CrcZ5;zkYX?UsXBSs@4=-Q8fZ&j@@QA3m zk!rv@Pa@>%VBfx8>b0c8mf(U`HN*b2`|DSBXV8r=*$Ne`mt;@wV!jC(eNxyH2 zHMO7cWOGis;v|*nK4%Yxx(14ENR7CXl5KTT+|$%&^XZ(F?%&e9xyH4D^Iu97FlD@4 zeZHnj#WdmBrNzKNcz_ilc{ z^n|JP>b;05jK}$l!>pCJ&+S{0`>dii>_uDgQ-w R>@5N14o_Dc6OJB1Ag zwOZ5XrJ3!BA6S4aGr8W&);~#6W2blnN`Uu!_P`Qgpuq6C#npE|NM(%#|sKi6cv}0o;-E>%-QmabE5N=;tQ9rNUE4h#+rk9`01ho8sB|2;7| z_57FrOwY{fU;g^r@2}^0H=is8gDr^*^z&BEemf0*DPw7Xw5G#u zCjY@K7wcl~pS7zK#KpPR-PN}iBKLNQ9&vbAy+MFN&GqzzK5(U3T7kg@IkFxQn;e5s)*S%ceGz@)|894aZZj_uk{OTj>)cd zu^lFb@fBrvG@_MP`)tAkb=SLcHtRCS)3gVqul$>SEWQ-IOV>fjzT<4A4{vOZ(G`8t zJ8(C#`M0icWTXC=M@i9v8#52Y+}wLns`)goXroSss%&RRj_x)i+Q;g=PFe?z9__)k zJ%2xS%o#^YmwW1$dj;8csFIDXF7P8ck7QwAhHd?&YVZT$@^WOOGE^U3DhWyUD)m9O zolXhe5a#ZG(fn2LfQ9NtKC`kW@4)5oAz99D-F!WPSy{c!1?3U0MEx9^{>-w?q+)xm zOEt6O>~d@rJwKF@eWB^meBF2`uJS7)yw<5lJjGrLK4K-daF3`fs zHLm+kh_VTs^Rbdkq9{VVb&8}y^bE#j951x)EOrSCX)3hroaL++=W}qc3!f#aA@|j@ zbVMxY#z^JD&a<}cWfj(E3EH3b>H|gs^i^E%*T}oLsfeuvVYR2#NK`(tGsyj}>D`XY zXGEj8i$_XvP6dL!>C0T&N9^Oq&3uh$=0k8ootz$XM(z=pVErMEZ=;|lh~(>IF34Tt z9+`JR)n<+b9#@B!4N8e{TAj{nO#01xFA8)k$0VhUsmd9h$yn{Lrfw6c_^_>zB&Zlq zAMxDbSrOoY&x)ubKZXwBw_i8z&bXC}?@b}yoPDBgPiiY;Thv5`BOe7-l#izq`H^L# zHO<9la6yOu$UB5Zz F=pXBfFgpMM literal 0 HcmV?d00001 diff --git a/assets/images/patient/vital_signs/underweight_BMI.png b/assets/images/patient/vital_signs/underweight_BMI.png new file mode 100644 index 0000000000000000000000000000000000000000..83b0260af2994b7e46f585cd2cdb33e7afff991f GIT binary patch literal 1859 zcmY+F2~-p38ipfCR02gz6@dy`6wzcRGa1M-3Em*PEJ6riC|+4CvIrtILJ>iwS3wpR z1S3(=pd*q(xtfY>UV;?s2C`KexIk@bkpi|zj<#0lKY@E~=gdsL_xs=HTXJ$vas&K5 zO^vOLDHMvSx0jn3eADG1AHa!K+avk!NDSt2*a?|A`zd@2LTMj z42Ed^dI6Wq1rk9-5F~Wqa4<}SqRudkGnrh5lM{wHqo{zz;=?eP$=t-igeZz52oHug z0Y4MN8Eig+a9J!N3=1HP&t&re&SD8b1qcF?%Rq$)g6k{rAhwW+3ShPXLUASnKpp@= z451(v&QUPRhfp390ZsK3Ss#aCA&d$j1cwkl4EzWmm`Oj1lYRu;0+v385dp*kNzx3O zvOqhK*Mks1NDq*FaFY_Wn3v!PByqrkfTTcEP(jb?W4#~6S!5nK1uzSY4WvE>Ngx3W z@_Gyu7J{-dM;;#+2siyhr@x1(k!V@P?ojy}sa#nt>RB`^&Wo7vl;#$S^O4a98)iwXVss6IIuD+qM=}xoe zZtK0T?>~Ih-qG3B)BDZSzHj>n28V{fd-nZLqhmjhPfWh}<=3f~)4JEc{r<<>8S#y$ z3&COwqI^8v+NZyrnx#+-Ro-qcl9iSRHF?nmGRmRvUgcC1oX^Df*Dc>7J|(U;hc+HR z2``I`S#wq%R=@PQM_^n^ZfQ=A@}bu!gR|F%QvIhcOuU--)S+0RjktT}gDPoM6k2s# z*O*J(*{O)`^x1i!Uy0x7l}bE`8*f(}96HSW@6?KshEs80x~snCJW)2peidqehj7aC zV-ij@-^MKo9C=z<$aIopXP?5PE|X>j#fLv(dHOVQW}>vY1x>L;#|DLiFnNZxu=$RbOpmuA7iWmlWOVk}to~YZc_9 zz1EhoS(`eR)V*Kz#;fj!{EOi`wJr4YTabk=sJ1aeoA*&q|LxfN-`j!+XWdb}AaDQm zm-iH$%sXKnvq>DevsT^NVLd&3WS5D}sz|Nt2}|FRBaf*~FSv=L5Y;wWTBK7 z5pQU5UJ{BuPzQbH^0lsW;G2z@EpbIZl`p3H#x)Z^t5&{H)j$Ri`-}v>LbzIMO zD6Poae<^5Cov}+hTTOQ;Ee}RI#q`TzKLsQ|H*Yd3*;Z+l)Ej-aC{3DWa4T#K8?I?z zGn(mbsUkgBz@sVd|>9!8J0 zOi-4{pW9PYj^$dm<|Bdrb-CuP(-=>YjZxp`K974saa=jQmQZLo5h{(W^^7%hQHkXl zdiRfebl$_>x-yR2TjD+HWXM*!tlY(7I4s+y)z|U1@$HsNr{yEm3x^A-j2!8nx4@}!A}FAt>*SUw#jBc qODVRU#Q!keVOu#Ae(rl^)`DjPiC?`5u<0ZJ3ccO^-KsZ79QhNu1IM2L literal 0 HcmV?d00001 diff --git a/assets/images/patient/vital_signs/weight.png b/assets/images/patient/vital_signs/weight.png new file mode 100644 index 0000000000000000000000000000000000000000..4a3bd2cce8158afed222d004714590b022e34970 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAwFLNtxB_V)2n`K&aBwg-HrCeG z29n0c4mvvKhK9EK`qp}SHhM|G$JuyBW|CS|ve#!3<2yEUau?BH~)w<`$NI{sEa; zIR!-v7A{)8|IpFnSFT>W`|SCv*YAJ){HHu^>ldId#w2fd7j2cDPdI>_W=|K#5RLQ6 z4?-^-VtP_3v7w7ORl;PWcZSh{2(3p=f0&$vRvFlZIC)NJW#oxyoib51#X{miLoAo# z!gI$C98f*YF*WhB!;1+iX$e73nmdfU6mKh@JEEX;_T*6}@pjJ)PlL{;IcjHA+Foht x>Y9phc{0iJ)N{@W>{d2BVff)hvgmU*2K5QS!5a$vb^@Kl;OXk;vd$@?2>@KYeF*>n literal 0 HcmV?d00001 diff --git a/lib/config/config.dart b/lib/config/config.dart index 3a72faba..0f615af5 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -4,8 +4,8 @@ const MAX_SMALL_SCREEN = 660; const ONLY_NUMBERS = "[0-9]"; const ONLY_LETTERS = "[a-zA-Z &'\"]"; const ONLY_DATE = "[0-9/]"; -// const BASE_URL = 'https://hmgwebservices.com/'; -const BASE_URL = 'https://uat.hmgwebservices.com/'; +const BASE_URL = 'https://hmgwebservices.com/'; +// const BASE_URL = 'https://uat.hmgwebservices.com/'; const PHARMACY_ITEMS_URL = "Services/Lists.svc/REST/GetPharmcyItems_Region_enh"; const PHARMACY_LIST_URL = "Services/Patients.svc/REST/GetPharmcyList"; const PATIENT_PROGRESS_NOTE_URL = diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index f30a86e5..aa57f29a 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -84,7 +84,7 @@ const Map> localizedValues = { 'speciality': {'en': 'Speciality', 'ar': 'التخصص'}, 'errorMessage': {'en': 'Something went wrong', 'ar': 'حدث خطأ ما'}, 'patientProfile': {'en': 'Patient Profile', 'ar': 'ملف المريض'}, - 'vitalSign': {'en': 'Vital Sign', 'ar': 'المؤشرات الحيوية'}, + 'vitalSign': {'en': 'Vital Signs', 'ar': 'المؤشرات الحيوية'}, 'vital': {'en': 'Vital', 'ar': 'الحيوية'}, 'signs': {'en': 'Signs', 'ar': 'المؤشرات'}, 'labOrder': {'en': 'Lab Order', 'ar': 'نتائج التحاليل'}, @@ -377,6 +377,11 @@ const Map> localizedValues = { 'headCircum': {'en': "Head Circum", 'ar': 'محيط الرأس'}, 'leanBodyWeight': {'en': "Lean Body Weight", 'ar': 'وزن الجسم الهزيل'}, 'bodyMassIndex': {'en': "Body Mass Index", 'ar': 'مؤشر كتلة الجسم'}, + 'yourBodyMassIndex': {'en': "Your Body Mass Index is", 'ar': 'مؤشر كتلة جسمك هو'}, + 'bmiUnderWeight': {'en': "UnderWeight", 'ar': 'تحت الوزن'}, + 'bmiHealthy': {'en': "Healthy", 'ar': 'صحي'}, + 'bmiOverWeight': {'en': "OverWeight", 'ar': 'فوق الوزن'}, + 'bmiObese': {'en': "Obese", 'ar': 'سمين'}, 'method': {'en': "Method", 'ar': 'الطريقة'}, 'pulseBeats': {'en': 'Pulse(beats/minute)', 'ar': ' (دقة/دقيقة)النبض'}, 'rhythm': {'en': "Rhythm", 'ar': 'الإيقاع'}, @@ -608,7 +613,7 @@ const Map> localizedValues = { "sys-dias": {"en": "SBP/DBP", "ar": "إنقباض/إنبساط"}, "body": {"en": "Body \n Mass", "ar": "كتلة\nالجسم"}, 'respirationRate': {'en': 'Respiration Rate', 'ar': 'معدل التنفس'}, - 'heart': {'en': 'Heart', 'ar': 'قلب'}, + 'heart': {'en': 'Heart rate', 'ar': 'معدل ضربات القلب'}, 'medicalReport': {'en': "medical Report", 'ar': "تقرير طبي"}, 'visitDate': {'en': "Visit Date", 'ar': "تاريخ الزيارة"}, 'test': {'en': "Procedures/Test", 'ar': "عمليات/تحاليل"}, diff --git a/lib/core/viewModel/patient-vital-sign-viewmodel.dart b/lib/core/viewModel/patient-vital-sign-viewmodel.dart index 2def78db..0a51f7f5 100644 --- a/lib/core/viewModel/patient-vital-sign-viewmodel.dart +++ b/lib/core/viewModel/patient-vital-sign-viewmodel.dart @@ -99,6 +99,19 @@ class VitalSignsViewModel extends BaseViewModel { } } + int getBMIStatus() { + var bodyMassIndex = double.parse(bodyMax); + if (bodyMassIndex <= 18.5) { + return 1; + } else if (bodyMassIndex <= 25.0) { + return 2; + } else if (bodyMassIndex <= 30) { + return 3; + } else { + return 4; + } + } + String getTempratureMethod(int temperatureCelciusMethod) { // temperatureCelciusMethod ( vital sign response field )- master 2005 if (temperatureCelciusMethod == 1) { diff --git a/lib/screens/patients/profile/admission-request/admission-request-first-screen.dart b/lib/screens/patients/profile/admission-request/admission-request-first-screen.dart index 0c1f0de2..1cf69da8 100644 --- a/lib/screens/patients/profile/admission-request/admission-request-first-screen.dart +++ b/lib/screens/patients/profile/admission-request/admission-request-first-screen.dart @@ -1,4 +1,3 @@ -import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart'; @@ -6,11 +5,12 @@ import 'package:doctor_app_flutter/core/viewModel/patient-admission-request-view import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; -import 'package:doctor_app_flutter/util/date-utils.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/patient-page-header-widget.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart'; +import 'package:doctor_app_flutter/widgets/shared/app-textfield-custom.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; @@ -47,12 +47,15 @@ class _AdmissionRequestThirdScreenState Widget build(BuildContext context) { final routeArgs = ModalRoute.of(context).settings.arguments as Map; PatiantInformtion patient = routeArgs['patient']; + String patientType = routeArgs['patientType']; + String arrivalType = routeArgs['arrivalType']; final screenSize = MediaQuery.of(context).size; ProjectViewModel projectViewModel = Provider.of(context); return BaseView( builder: (_, model, w) => AppScaffold( baseViewModel: model, + isShowAppBar: false, appBarTitle: TranslationBase.of(context).admissionRequest, body: GestureDetector( onTap: (){ @@ -62,27 +65,57 @@ class _AdmissionRequestThirdScreenState } }, child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - PatientPageHeaderWidget(patient), + // PatientPageHeaderWidget(patient), + PatientProfileHeaderNewDesign( + patient, patientType, arrivalType), Container( - margin: EdgeInsets.symmetric( - vertical: 16, horizontal: 16), + margin: EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SizedBox( - height: 16, + AppText( + "${TranslationBase.of(context).admission}", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.6, + fontWeight: FontWeight.w600, ), + AppText( + "${TranslationBase.of(context).request}", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 3, + fontWeight: FontWeight.bold, + ) + ], + ), + ), + Container( + margin: EdgeInsets.symmetric( + vertical: 0, horizontal: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ AppText( TranslationBase.of(context) .specialityAndDoctorDetail, - fontWeight: FontWeight.bold, - fontSize: SizeConfig.textMultiplier * 2.5, + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.8, + fontWeight: FontWeight.w700, + ), + SizedBox( + height: 10, + ), + AppTextFieldCustom( + height: screenSize.height * 0.070, + hintText: "test field", + isDropDown: true, + controller: _sickLeaveCommentsController, ), SizedBox( height: 10, diff --git a/lib/screens/patients/profile/patient_profile_screen.dart b/lib/screens/patients/profile/patient_profile_screen.dart index 85c93e2f..70c9f5b9 100644 --- a/lib/screens/patients/profile/patient_profile_screen.dart +++ b/lib/screens/patients/profile/patient_profile_screen.dart @@ -96,7 +96,7 @@ class PatientProfileScreen extends StatelessWidget { if (int.parse(patientType) == 7 || int.parse(patientType) == 6) Positioned( - top: 195, + top: 175, left: 20, right: 20, child: Row( diff --git a/lib/screens/patients/profile/referral/my-referral-patient-screen.dart b/lib/screens/patients/profile/referral/my-referral-patient-screen.dart index 3cab440c..e6cccf48 100644 --- a/lib/screens/patients/profile/referral/my-referral-patient-screen.dart +++ b/lib/screens/patients/profile/referral/my-referral-patient-screen.dart @@ -33,7 +33,7 @@ class MyReferralPatientScreen extends StatelessWidget { ) : SingleChildScrollView( child: Container( - margin: EdgeInsets.only(top: 50), + margin: EdgeInsets.only(top: 70), // color: Colors.white, // height: MediaQuery.of(context).size.height, child: Column( diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart index 2b4877e8..3dd45782 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart @@ -6,6 +6,7 @@ import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_item.dart'; import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_item_details_screen.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-header-new-design.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart'; @@ -29,191 +30,378 @@ class VitalSignDetailsScreen extends StatelessWidget { String from = routeArgs['from']; String to = routeArgs['to']; String imageBasePath = 'assets/images/'; + String assetBasePath = "${imageBasePath}patient/vital_signs/"; return BaseView( onModelReady: (model) => model.getPatientVitalSignHistory(patient, from, to), builder: (_, mode, widget) => AppScaffold( - isShowAppBar: true, + isShowAppBar: false, baseViewModel: mode, appBarTitle: TranslationBase.of(context).vitalSign, body: mode.patientVitalSignsHistory.length > 0 - ? Container( - child: ListView( - children: [ - Row( - children: [ - InkWell( - onTap: () => isNotOneAppointment - ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.Height, - pageTitle: - TranslationBase.of(context).height, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ) - : null, - child: Container( - child: VitalSignItem( - des: TranslationBase.of(context).height, - imagePath: "${imageBasePath}vital_height.png", - lastVal: mode.heightCm, - unit: TranslationBase.of(context).cm, - ), - ), + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + PatientProfileHeaderNewDesign( + patient, patientType, arrivalType), + Container( + margin: EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + "${patient.firstName ?? patient.patientDetails.firstName}'s", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.6, + fontWeight: FontWeight.w600, ), - InkWell( - onTap: () => isNotOneAppointment - ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.Weight, - pageTitle: - TranslationBase.of(context).weight, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ) - : null, - child: VitalSignItem( - des: TranslationBase.of(context).weight, - imagePath: "${imageBasePath}vital_weight.png", - unit: TranslationBase.of(context).kg, - lastVal: mode.weightKg, - ), + AppText( + TranslationBase.of(context).vitalSign, + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 3, + fontWeight: FontWeight.bold, + ) + ], + ), + ), + Container( + height: MediaQuery.of(context).size.height * 0.21, + width: double.infinity, + padding: EdgeInsets.all(12.0), + margin: EdgeInsets.symmetric(horizontal: 16.0), + decoration: BoxDecoration( + shape: BoxShape.rectangle, + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.fromBorderSide(BorderSide( + color: Colors.grey.shade400, + width: 0.4, + )), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + "${TranslationBase.of(context).yourBodyMassIndex} ${mode.bodyMax}", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 2.0, + fontWeight: FontWeight.w700, ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + mode.getBMIStatus() != 1 + ? '${assetBasePath}underweight_BMI.png' + : '${assetBasePath}underweight_BMI-r.png', + height: + MediaQuery.of(context).size.height * 0.10, + ), + const SizedBox( + height: 4, + ), + AppText( + "${TranslationBase.of(context).bmiUnderWeight}", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + color: mode.getBMIStatus() == 1 + ? Color(0XFFD02127) + : null, + fontWeight: FontWeight.w700, + ), + AppText( + "(1-10)", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + color: mode.getBMIStatus() == 1 + ? Color(0XFFD02127) + : null, + fontWeight: FontWeight.w700, + ), + ], + )), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + mode.getBMIStatus() != 2 + ? '${assetBasePath}health_BMI.png' + : '${assetBasePath}health_BMI-r.png', + height: + MediaQuery.of(context).size.height * 0.10, + ), + const SizedBox( + height: 4, + ), + AppText( + "${TranslationBase.of(context).bmiHealthy}", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + fontWeight: FontWeight.w700, + color: mode.getBMIStatus() == 2 + ? Color(0XFFD02127) + : null, + ), + AppText( + "(11-20)", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + fontWeight: FontWeight.w700, + color: mode.getBMIStatus() == 2 + ? Color(0XFFD02127) + : null, + ), + ], + )), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + mode.getBMIStatus() != 3 + ? '${assetBasePath}ovrweight_BMI.png' + : '${assetBasePath}ovrweight_BMI-r.png', + height: + MediaQuery.of(context).size.height * 0.10, + ), + const SizedBox( + height: 4, + ), + AppText( + "${TranslationBase.of(context).bmiOverWeight}", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + fontWeight: FontWeight.w700, + color: mode.getBMIStatus() == 3 + ? Color(0XFFD02127) + : null, + ), + AppText( + "(21-30)", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + fontWeight: FontWeight.w700, + color: mode.getBMIStatus() == 3 + ? Color(0XFFD02127) + : null, + ), + ], + )), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + mode.getBMIStatus() != 4 + ? '${assetBasePath}Obese_BMI.png' + : '${assetBasePath}Obese_BMI-r.png', + height: + MediaQuery.of(context).size.height * 0.10, + ), + const SizedBox( + height: 4, + ), + AppText( + "${TranslationBase.of(context).bmiObese}", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + fontWeight: FontWeight.w700, + color: mode.getBMIStatus() == 4 + ? Color(0XFFD02127) + : null, + ), + AppText( + "(31-40>)", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + fontWeight: FontWeight.w700, + color: mode.getBMIStatus() == 4 + ? Color(0XFFD02127) + : null, + ), + ], + )), + ], + ) ], ), - Row( - children: [ - InkWell( - onTap: () => isNotOneAppointment - ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: - vitalSignDetails.BodyMeasurements, - pageTitle: TranslationBase.of(context) - .bodyMeasurements, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ) - : null, - child: VitalSignItem( - des: TranslationBase.of(context).body, - imagePath: "${imageBasePath}vital_body_mass.png", - lastVal: mode.bodyMax, - unit: TranslationBase.of(context).mass, + ), + Expanded( + child: Container( + margin: EdgeInsets.symmetric(horizontal: 8.0), + child : GridView.count( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + crossAxisSpacing: 4, + mainAxisSpacing: 4, + childAspectRatio: 1 / 1.0, + crossAxisCount: 3, + children: [ + InkWell( + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.Height, + pageTitle: + TranslationBase.of(context) + .height, + vitalList: + mode.patientVitalSignsHistory, + ), + ), + ) + : null, + child: Container( + child: VitalSignItem( + des: TranslationBase.of(context).height, + imagePath: + "${assetBasePath}height.png", + lastVal: mode.heightCm, + unit: TranslationBase.of(context).cm, + ), + ), ), - ), - InkWell( - onTap: () => isNotOneAppointment - ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.Temperature, - pageTitle: TranslationBase.of(context) - .temperature, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ) - : null, - child: Container( + InkWell( + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.Weight, + pageTitle: + TranslationBase.of(context) + .weight, + vitalList: + mode.patientVitalSignsHistory, + ), + ), + ) + : null, child: VitalSignItem( - des: TranslationBase.of(context).temperature, - imagePath: - "${imageBasePath}vital_temperature.png", - lastVal: mode.temperatureCelcius, - unit: TranslationBase.of(context).tempC, + des: TranslationBase.of(context).weight, + imagePath: "${assetBasePath}weight.png", + unit: TranslationBase.of(context).kg, + lastVal: mode.weightKg, ), ), - ), - ], - ), - Row( - children: [ - InkWell( - onTap: () => isNotOneAppointment - ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.heart, - pageTitle: - TranslationBase.of(context).heart, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ) - : null, - child: VitalSignItem( - des: TranslationBase.of(context).heart, - imagePath: "${imageBasePath}vital_heart_rate.png", - lastVal: mode.hartRat, - unit: TranslationBase.of(context).bpm, + InkWell( + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: + vitalSignDetails.Temperature, + pageTitle: + TranslationBase.of(context) + .temperature, + vitalList: + mode.patientVitalSignsHistory, + ), + ), + ) + : null, + child: Container( + child: VitalSignItem( + des: + TranslationBase.of(context).temperature, + imagePath: + "${assetBasePath}temperature.png", + lastVal: mode.temperatureCelcius, + unit: TranslationBase.of(context).tempC, + ), + ), ), - ), - InkWell( - onTap: () => isNotOneAppointment - ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.Respiration, - pageTitle: TranslationBase.of(context) - .respirationRate, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ) - : null, - child: VitalSignItem( - des: TranslationBase.of(context).respirationRate, - imagePath: "${imageBasePath}vital_respiration.png", - lastVal: mode.respirationBeatPerMinute, - unit: TranslationBase.of(context).respirationSigns, + InkWell( + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: vitalSignDetails.heart, + pageTitle: + TranslationBase.of(context) + .heart, + vitalList: + mode.patientVitalSignsHistory, + ), + ), + ) + : null, + child: VitalSignItem( + des: TranslationBase.of(context).heart, + imagePath: + "${assetBasePath}heart_rate.png", + lastVal: mode.hartRat, + unit: TranslationBase.of(context).bpm, + ), ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - InkWell( - onTap: () => isNotOneAppointment - ? Navigator.push( - context, - FadePage( - page: VitalSignItemDetailsScreen( - pageKey: vitalSignDetails.BloodPressure, - pageTitle: TranslationBase.of(context) - .bloodPressure, - vitalList: mode.patientVitalSignsHistory, - ), - ), - ) - : null, - child: VitalSignItem( - des: TranslationBase.of(context).bloodPressure, - imagePath: - "${imageBasePath}vital_blood-pressure.png", - lastVal: mode.bloodPressure, - unit: TranslationBase.of(context).sysDias, + InkWell( + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: + vitalSignDetails.Respiration, + pageTitle: + TranslationBase.of(context) + .respirationRate, + vitalList: + mode.patientVitalSignsHistory, + ), + ), + ) + : null, + child: VitalSignItem( + des: TranslationBase.of(context) + .respirationRate, + imagePath: + "${assetBasePath}respiration_rate.png", + lastVal: mode.respirationBeatPerMinute, + unit: TranslationBase.of(context) + .respirationSigns, + ), ), - ), - ], + InkWell( + onTap: () => isNotOneAppointment + ? Navigator.push( + context, + FadePage( + page: VitalSignItemDetailsScreen( + pageKey: + vitalSignDetails.BloodPressure, + pageTitle: + TranslationBase.of(context) + .bloodPressure, + vitalList: + mode.patientVitalSignsHistory, + ), + ), + ) + : null, + child: VitalSignItem( + des: + TranslationBase.of(context).bloodPressure, + imagePath: + "${assetBasePath}blood_pressure.png", + lastVal: mode.bloodPressure, + unit: TranslationBase.of(context).sysDias, + ), + ), + ], + ), ), - ], - ), + ), + ], ) : Center( child: AppText( diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_item.dart b/lib/screens/patients/profile/vital_sign/vital_sign_item.dart index 33b25e82..e99e7bad 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_item.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_item.dart @@ -1,9 +1,17 @@ import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; class VitalSignItem extends StatelessWidget { + final String des; + final String lastVal; + final String unit; + final String imagePath; + final double height; + final double width; + const VitalSignItem( {Key key, @required this.des, @@ -14,77 +22,71 @@ class VitalSignItem extends StatelessWidget { @required this.imagePath}) : super(key: key); - final String des; - final String lastVal; - final String unit; - final String imagePath; - final double height; - final double width; - @override Widget build(BuildContext context) { return RoundedContainer( - margin: 0.025 * SizeConfig.realScreenWidth, - height: 0.15 * SizeConfig.realScreenHeight, - width: 0.45 * SizeConfig.realScreenWidth, + // margin: 0.025 * SizeConfig.realScreenWidth, + // height: 0.15 * SizeConfig.realScreenHeight, + // width: 0.45 * SizeConfig.realScreenWidth, child: Container( padding: EdgeInsets.all(5), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( - height: 0.10 * SizeConfig.realScreenHeight, - child: Row( - children: [ - Expanded( - flex: 2, - child: Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - des, - style: TextStyle( - fontSize: 1.7 * SizeConfig.textMultiplier, - color: HexColor('#B8382C'), - fontWeight: FontWeight.bold, - ), + Expanded( + child: Container( + padding: EdgeInsets.only(top: 8), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Container( + padding: EdgeInsets.only(left: 8, right: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + AppText( + "$lastVal", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.6, + fontWeight: FontWeight.w800, + margin: 0, + ), + AppText( + "$unit", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.3, + fontWeight: FontWeight.w700, + color: HexColor('#B8382C'), + margin: 0, + ), + ], ), ), ), - ), - Expanded( - flex: 1, - child: Container( + Container( child: Image.asset( imagePath, width: 40, height: 40, - )), - ) - ], + )) + ], + ), ), ), - Expanded( - child: Container( - width: double.infinity, - child: Align( - alignment: Alignment.topRight, - child: Container( - margin: EdgeInsets.only(left: 5, right: 5), - child: RichText( - text: TextSpan( - style: TextStyle(color: Colors.black), - children: [ - TextSpan(text: "$lastVal "), - TextSpan( - text: unit, - style: TextStyle( - color: HexColor('#B8382C'), - ), - ), - ]), - ), + Container( + width: double.infinity, + child: Align( + alignment: Alignment.topLeft, + child: Container( + margin: EdgeInsets.only(left: 5, right: 5), + child: AppText( + "$des", + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.5, + fontWeight: FontWeight.w600, ), ), ), diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart index 331b2812..df880f9a 100644 --- a/lib/util/translations_delegate_base.dart +++ b/lib/util/translations_delegate_base.dart @@ -645,8 +645,13 @@ class TranslationBase { String get leanBodyWeight => localizedValues['leanBodyWeight'][locale.languageCode]; - String get bodyMassIndex => - localizedValues['bodyMassIndex'][locale.languageCode]; + String get bodyMassIndex => localizedValues['bodyMassIndex'][locale.languageCode]; + + String get yourBodyMassIndex => localizedValues['yourBodyMassIndex'][locale.languageCode]; + String get bmiUnderWeight => localizedValues['bmiUnderWeight'][locale.languageCode]; + String get bmiHealthy => localizedValues['bmiHealthy'][locale.languageCode]; + String get bmiOverWeight => localizedValues['bmiOverWeight'][locale.languageCode]; + String get bmiObese => localizedValues['bmiObese'][locale.languageCode]; String get method => localizedValues['method'][locale.languageCode]; diff --git a/lib/widgets/patients/patient-referral-item-widget.dart b/lib/widgets/patients/patient-referral-item-widget.dart index 6e9008e7..14afa5b6 100644 --- a/lib/widgets/patients/patient-referral-item-widget.dart +++ b/lib/widgets/patients/patient-referral-item-widget.dart @@ -313,12 +313,14 @@ class PatientReferralItemWidget extends StatelessWidget { ), Row( children: [ - AppText( - patientInfo.patientName, - fontSize: SizeConfig.textMultiplier * 2.5, - fontWeight: FontWeight.bold, - backGroundcolor: Colors.white, - fontFamily: 'Poppins', + Expanded( + child: AppText( + patientInfo.patientName, + fontSize: SizeConfig.textMultiplier * 2.5, + fontWeight: FontWeight.bold, + backGroundcolor: Colors.white, + fontFamily: 'Poppins', + ), ), SizedBox( width: 4, diff --git a/lib/widgets/patients/profile/patient-profile-header-new-design.dart b/lib/widgets/patients/profile/patient-profile-header-new-design.dart index 5979b8e1..b50a191b 100644 --- a/lib/widgets/patients/profile/patient-profile-header-new-design.dart +++ b/lib/widgets/patients/profile/patient-profile-header-new-design.dart @@ -26,7 +26,7 @@ class PatientProfileHeaderNewDesign extends StatelessWidget { decoration: BoxDecoration( color: Colors.white, ), - height: 220, + height: 200, child: Container( padding: EdgeInsets.only( left: 10, right: 10, bottom: 10), diff --git a/lib/widgets/shared/app-textfield-custom.dart b/lib/widgets/shared/app-textfield-custom.dart new file mode 100644 index 00000000..15c8865a --- /dev/null +++ b/lib/widgets/shared/app-textfield-custom.dart @@ -0,0 +1,140 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:flutter/material.dart'; + +import 'app_texts_widget.dart'; + +class AppTextFieldCustom extends StatefulWidget { + final double height; + final Function onClick; + final String hintText; + final TextEditingController controller; + final bool isDropDown; + final Icon suffixIcon; + final Color dropDownColor; + + AppTextFieldCustom( + {this.height = 0, + this.onClick, + this.hintText, + this.controller, + this.isDropDown = false, + this.suffixIcon, + this.dropDownColor}); + + @override + _AppTextFieldCustomState createState() => _AppTextFieldCustomState(); +} + +class _AppTextFieldCustomState extends State { + @override + Widget build(BuildContext context) { + return Container( + height: widget.height != 0 ? widget.height : null, + decoration: + containerBorderDecoration(Color(0Xffffffff), Color(0xFFEFEFEF)), + padding: EdgeInsets.only(top: 4.0, bottom: 4.0, left: 8.0, right: 8.0), + child: InkWell( + onTap: widget.onClick ?? null, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (widget.controller.text != "") + AppText( + widget.hintText, + fontFamily: 'Poppins', + fontSize: SizeConfig.textMultiplier * 1.4, + fontWeight: FontWeight.w600, + ), + TextField( + textAlign: TextAlign.left, + decoration: textFieldSelectorDecoration( + widget.hintText, null, true), + style: TextStyle( + fontSize: 14, + color: Colors.grey.shade600, + ), + controller: widget.controller, + ), + ], + ), + ), + widget.isDropDown + ? widget.suffixIcon != null + ? widget.suffixIcon + : Icon( + Icons.arrow_drop_down, + color: widget.dropDownColor != null + ? widget.dropDownColor + : Colors.black, + ) + : Container(), + ], + ), + ), + ); + } + + BoxDecoration containerBorderDecoration( + Color containerColor, Color borderColor, + {double borderWidth = -1}) { + return BoxDecoration( + color: containerColor, + shape: BoxShape.rectangle, + borderRadius: BorderRadius.all(Radius.circular(8)), + border: Border.fromBorderSide(BorderSide( + color: borderColor, + width: borderWidth == -1 ? 2.0 : borderWidth, + )), + ); + } + + static InputDecoration textFieldSelectorDecoration( + String hintText, String selectedText, bool isDropDown, + {Icon suffixIcon, Color dropDownColor}) { + return InputDecoration( + isDense: true, + contentPadding: EdgeInsets.symmetric(horizontal: 0, vertical: 0), + enabledBorder: UnderlineInputBorder( + borderSide: BorderSide(color: Color(0Xffffffff)), + ), + focusedBorder: UnderlineInputBorder( + borderSide: BorderSide(color: Color(0Xffffffff)), + ), + border: UnderlineInputBorder( + borderSide: BorderSide(color: Color(0Xffffffff)), + ), + /*focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), + borderRadius: BorderRadius.circular(8), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), + borderRadius: BorderRadius.circular(8), + ), + disabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), + borderRadius: BorderRadius.circular(8), + ),*/ + hintText: selectedText != null ? selectedText : hintText, + hintStyle: TextStyle( + fontSize: 14, + color: Colors.grey.shade600, + ), + /*suffixIcon: isDropDown + ? suffixIcon != null + ? suffixIcon + : Icon( + Icons.arrow_drop_down, + color: dropDownColor != null ? dropDownColor : Colors.black, + ) + : null,*/ + // labelText: + // labelStyle: + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index b564ffda..3aae565e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -107,6 +107,7 @@ flutter: - assets/images/dashboard/ - assets/images/login/ - assets/images/patient/ + - assets/images/patient/vital_signs/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware.