From a35d50972fa230fec9f9432af93a0eb6a222c44d Mon Sep 17 00:00:00 2001 From: Sneha Date: Mon, 3 Jul 2023 14:53:34 +0530 Subject: [PATCH] added medicine timings functionality --- images/08.png | Bin 0 -> 1113 bytes images/date.png | Bin 0 -> 805 bytes images/height.png | Bin 0 -> 2811 bytes images/history.png | Bin 0 -> 2287 bytes images/time.png | Bin 0 -> 4071 bytes images/weight.png | Bin 0 -> 3188 bytes lib/BMI/bmi_caluculator.dart | 324 ++++++++++ lib/BMI/bmi_history.dart | 267 +++++++++ lib/BP/bp_calculator.dart | 164 ++++++ lib/BP/bp_history.dart | 256 ++++++++ lib/Sugar/sugar_calculator.dart | 143 +++++ lib/Sugar/sugar_history.dart | 281 +++++++++ lib/bmi_history.dart | 23 - lib/{ => common}/dashboard.dart | 35 +- lib/{ => common}/login.dart | 6 +- lib/{ => common}/otpscreen.dart | 5 +- lib/{ => common}/preloader.dart | 2 +- lib/{ => common}/settings.dart | 312 +++++++++- lib/{ => common}/signup.dart | 81 ++- lib/{ => common}/splash_screen.dart | 9 +- lib/{ => common}/updateprofile.dart | 72 ++- lib/emergency.dart | 2 +- lib/invitations.dart | 2 +- lib/main.dart | 3 +- lib/medicines.dart | 2 +- lib/models/bmi_history_model.dart | 46 ++ lib/models/bp_history_model.dart | 46 ++ lib/models/pharmacies.dart | 26 + lib/models/sugar_history_model.dart | 48 ++ lib/my_health.dart | 59 +- lib/my_medicine_timings.dart | 876 ++++++++++++++++++++++++++++ lib/prescriptions.dart | 207 ++++++- lib/reports.dart | 2 +- lib/seekopinion.dart | 2 +- pubspec.lock | 7 + pubspec.yaml | 4 +- test/widget_test.dart | 4 +- 37 files changed, 3225 insertions(+), 91 deletions(-) create mode 100644 images/08.png create mode 100644 images/date.png create mode 100644 images/height.png create mode 100644 images/history.png create mode 100644 images/time.png create mode 100644 images/weight.png create mode 100644 lib/BMI/bmi_caluculator.dart create mode 100644 lib/BMI/bmi_history.dart create mode 100644 lib/BP/bp_calculator.dart create mode 100644 lib/BP/bp_history.dart create mode 100644 lib/Sugar/sugar_calculator.dart create mode 100644 lib/Sugar/sugar_history.dart delete mode 100644 lib/bmi_history.dart rename lib/{ => common}/dashboard.dart (94%) rename lib/{ => common}/login.dart (98%) rename lib/{ => common}/otpscreen.dart (98%) rename lib/{ => common}/preloader.dart (95%) rename lib/{ => common}/settings.dart (65%) rename lib/{ => common}/signup.dart (91%) rename lib/{ => common}/splash_screen.dart (91%) rename lib/{ => common}/updateprofile.dart (82%) create mode 100644 lib/models/bmi_history_model.dart create mode 100644 lib/models/bp_history_model.dart create mode 100644 lib/models/pharmacies.dart create mode 100644 lib/models/sugar_history_model.dart create mode 100644 lib/my_medicine_timings.dart diff --git a/images/08.png b/images/08.png new file mode 100644 index 0000000000000000000000000000000000000000..cb22d9d7809323159745276056edcaed01488e3f GIT binary patch literal 1113 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q}r7uqb%CIEGX(zP)?UPuNlB_{aY_ z+H!jeF3DB0R5X8Ln^j@x)uJBIC**N^L4k>l3RQrVpo3MJU9LQ31tqO=k6gUp z?}v+vdR82WeC#)AZ_vusq4SlyEnS{>RvTJB+4k-C$zth~#Zxa9$6Cd7bHu2;`p}Wt-(+iJ&J6Ow$dw%Xp={ zXOFaeBz4zfxrna5j!A#5d_|=!(71Q~Yqz>r36=V8Td!8M-&ggMS;0ilp3iTW+lDLo zOPv)DQPO9=J!9c2wM_@JC&w)lsuaKR>`U^@iJs=W({8U+oO)vQfz&g)(*<{KHMj6d zJJ!P%AiR`srOQ1QJz(&pJ<%!r+OkVL`sqBa%0juAv^$mGF4XehsmoqYu#1je${b$4)+_UJ5$!4C_S3$$6BVDw<_a_)nlV{rri?eQ_YL+7S0rI z)|vkJT=fR?AJc3k&dTlzuGo7>LqSU2za zy=C7HSOuj`{?sws`)_+j^Iq}7&#O%h?yo4jZPpRp^LRSi}Jh<@KXk(-5kyIsS@6OXt)|RMi=uO^wY3_y{K0XPZ zg)=)21U=sLfZ4n6bQ7PBtzPz|%U3Qn?`>Q*$7jAoR*YKRDkDr&vUty|zNo^#JVep6 zF!F8nhFyz%R~_rP-ZD*O`p%E{mfUrWcE93TH{0yy(bwrbllOkh_@ixS5L+$;&laoF zN>>%_k`Y=zWAXCU7iX;P;R~MiLSt7>-n_5#cup#1H>PLDezXeWm_7NLN!PKnqO&Ki zjrH|2 literal 0 HcmV?d00001 diff --git a/images/date.png b/images/date.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2226233c3a2031c4961b7210cbc6d982ef37d3 GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q}r7Fun0~aSW+oe0%qxpKzc^!^2|l zt1jkmQf|5*P~Y%_#ia1@qKx}att`7HuC;5F5_^|Z!Ki6H-Nxx|;LVbSoxaP8=b9b6 z5VcS@UGMw6KljE5*J#p<(p9v>NAlwB(@4P5q5=Ff+-6X)N(R)04nw%t_h`0IqnLA*A_OI}tl z(mx`#)Z4h=-RFZjW&H`p~vW=bktEEh_%88=Hc|3zAvPusG#Ris58YKI6z= zGfpO{achF30irBz(~Of`=|-PRuF7sX#S?nuH+SRAHPJ_W#PWJ@`UvLD7|G`MkF)=+ zjlXB`{(cgN^MCyt$4xIzn8K>&Hf?D=>xY<0dyd8P6fLi3JYyR8?eUV!)f>Ks%y}I2 z{`7~PGBIz=?spn}J&<4(e z3*U={&(V?0tpdd%4agZST(qBe&L+-*w}?npDU9(alHbxg-B|t^284_(-1Uxd*R{x} zFN%LwA!l+oa9PY{$kIcLV1hWc_dB83iGKE&cSq?|fCXR9^_#5M!^~Fdi3+4e$|$puB%r5kaC8J?>t4 zL(k``(Wa7hvHASJ{az#TU{DG3*hehDTKB=>ixk4R@nVT6Z|bmKJk_=6lh;cPki-CD z(V#YHJ-NJlxD68b%o(eL2AIVLjysa04i??xxqp3llJqtz&d?$S`t|52*gDrl1fcC= z1I=q3LCI2JFHSd?tHMxE$TdfvazvhUG`D})5YHWvOeZ*8a6E(`t)Q+hO@lmu70?7N z4NPuN%xha&3C5V^t|AtWqxEDT^s8MJ>^N1u+#Yh+{KB&7~dC2<;3^Gx==Y5*rh!L!Rkfzhz@cV4$+#E7phuiRo$APg8s$%W|9NaNcZH!;bLJF__vrV% zf*hDS19R|_^6MjZ<-R)I8GcL5xAnhM-utP%U)z!A)3_$;+aL1~;b~!DlI?J7fU4D) zGw{Q`!$q-fyAu0YMfoem4#LO_i1ufQxNWp-8pRFBnA{B<)^lGn#ezB+V&qCBve-J? zTvk?`AR|BA`%q=TwkuYDHcGB=Vq9M0Wi+TYt7AtBTPoRVgUsWQGo! ztkm%Xt3ce>g{VF?(^~ZrYt1srtTR)zGcCjBYG6O#&7f*UffYzbuXXJ{g_Q8unq_|* z!djN2IQL4{eQ}b*suf9hT77*@n~8kT=>XKgh_-hxN`HD zWI+(b7~S6mv6^C#0CH1>YBO-WR^B*X<(YKd>O077pZZ}%}>AgC8b4OftBL4s2@=m zOdd+O?)c)r7{zlxy;}ptXuIGa>atp$$9gqk@gri{oXQJbCr$3cQzo)hNF92_GUl}s6zrAEy8^8njuhhcImSu8%M zlD6vR|E1sif#d>p((81=;m*cb@uO{V2NW{VrOJX;xHUSp2Zo&cfzSmOsa&NV=;hx= zDXdzFXtS66v_B+o1y<=gXP^Q}6EcEyUob#rj+&pIjG)QxNA7KukgHQQ(&vc<_D7)vNCxd(TobN4!(9g0 zWXye(3S+_DQfO~c z`>Oqs<~V8(0R!Nd7-uh?q~}F3rU3&G7Ht+t_hl9MW8_exySI28o8LCl?FOJlB`Z7u zeb+=qC2Jc7B>c=ei~*nZwiwzgJzm0K2+o6^V3|!1gz2&~;TQu?IC{5H0_>ib^~z`O z1e&)|8fuC&NYJ&7Qf`X^lZLLEEQ2C+)npxkK?z#A=+pJ3r(uOFx*^RlB-%#NRN;b1 z@k3=BrD?(B!4r-#@PuOwJmF~4M(J>yGx(9QK9U_X0}qWpZItMNF`#m$rj1f3Tymd8 zagmL!E-65~U$nB$0V6UMZIq%QliYF+QK@`L7p9_((lnF%9DKU5wBX+^9a#T<6)c_I z_>+tlQ8aDFf&t_;rjj*0CJ&x)jDaT{W8euV(>eIA&7rcJK6gSp1$DT?XfLL61j`B% z!kmkereyQbgIT-#c`nHWR1{FgVJh#sGJEMZzZbjz^spmNt-N3RnNEvvHCwXnot^l% zq1}7G?IHV80KO>OqKd$BRi~sff|+Gyx48?3znxst-PJ@rTo}ndMub5dvH3T_vKarI zBor)MwNu@i(vMUOeEJW+FGlJ{9;aiwtSQ+54D~nB%|6oDF*ppV3XiEmb+h?PH8gU^ zZO89-<{9vQg|xl1V7EUd-i9{%{gBnqHlB~we_91ouPpa(wFCIJhtV!Pz{PLt!7f1B zw9cWhm2eX*AI`CQzPX&sjj*Datpg!`Jv?Z|eC$R3H!e=w9yrGQlNTFA@$06D%jmz@Wz~*fcb~j`0FL257f5+}&kT#&7WD@PPy)T5 zp3~d4!}%vK7tc2De*=!-#1zd_vQqI6`b}DdG7t=)1;0 zq>9t6;?McwTm9B%t+ink#dl2a=^e3P3ORrQHw3+f+U3`jF)V0z{Oca9Wa5kk=cTB{ z)nUO*_t8<0T5ys!MjuLCj7IV2Cau^>FZw3HPFGeSgdHx^RxAP=WHMDlx^?Pc4j4oP zHb|(aUIH)Eio1^vdSD0<*f5_&BaX(UTCr-Go2Erz!{o7I&ObAC5Fr9vU~0uz!qar; zcKa?EKm@h`TXB*%mV#2_9vGnVtV&b+%Er@zV^CKo@o7t2)}JbmNz(hH!G?|1h$Ai?@qmSF)cY! zDI%~%h`ca$08#)IBLZ8b<&CT-?0@tEf428szeszKvU8~mQ@Ox(#9Q-Hx5$%9KB-R{Ld8^X!CCRvl9g+!qGpj(e~tng zK*dxp@F!6`NFRZLZBKfZIz;BO6_8QYAdbdALB&)qaFTzN;SDOJWvChJBCE?@`Tz<| zTwyV@O(HtZ7*V^xj7^cr!_@1dl#!HI79#>{PddF|3YyCUE=p06J&3=Bf+W*(M(s^( zwX%$&6h;J|uEVKsn2oEGdC4m>mne)z>K+tC!FVTYO!RhSq>7Lcfs=JO%OfP%aK(z5 zERk8<(I{Rjx=sfAH6l?jZ440|nz}-2EL4eO%*^I@$%>h)L@p~X^RDf0K!*2hYI;t7 zHW)-79sUX_W%zAefG)#7wIday;>+7}*AX{gML!D9Hdj9fLl`}5$a8hF)47$oKH27j zC2P;Nthmf{?G4h$czrO4Q48kv=WWOT88Vt_;5c3yK3pHb4Pt7&Kc|nP5To(Za5pQJ zr#wb2IM>xl4Ym9OmmIF^!mnjIHK#%f4^4{87(Wl5T%F9WIOF0}U6yHUf*^eqh3DHV z#w!aM7nrSB5#)Fw_UkyBpu2a}&r^@n^xFF#YYA}kdq*dEdLZcS)!MM3)$XQ!o-)f6 zavPrW&6UCdlQLLK*+DPnI*ys%D7EO&WKj}RB>fa~h^x8qqS#tVVQT^>N#BZctvTB1 zI_W-guLsdpB$i8%=~OWaaKp4?^?R%)-JNZ(?&qzNo>=nU^FBCE(#R{H;G833=UXdxz%tg;X4$JojPF721T)&`bo|#g zi)d%T>n;CIxmy$H*XoU8D^ArcwOu1A(YYjP)a;E~yLGjwDQdM7%tx!zsP&#u8IfVy zyZ7Bl?b~dORj!9|z2Y*pUj!>DG81Zx9+oupYUtGqCn|>3KeeR`HE~yP+fO`6_ zqV;<6yP*H2jz%n(ZE-tkP8r{;TU^GetDHGY;b#%*NYN=wK7Qh|34F7D_VV?l%V>L! zualq$3q-VtfITg00N0@I_ItB9SC#HF9W?L|IkBy2r%PO}uOJss!A8wxxzJwuKV2~cn=Ysz2!bF8f*=TjAP9mW2!bF8f*=TjAP9mW2!dda{{yc2a`(o<2S@+_002ov JPDHLkV1ge0N7VoT literal 0 HcmV?d00001 diff --git a/images/time.png b/images/time.png new file mode 100644 index 0000000000000000000000000000000000000000..2efce7aff09aa2edc4d52a380187d86dbcb3a101 GIT binary patch literal 4071 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 Z{tx&e4s+o<*nj{4002ovPDHLkV1jpN&aeOg literal 0 HcmV?d00001 diff --git a/images/weight.png b/images/weight.png new file mode 100644 index 0000000000000000000000000000000000000000..04eac04c052c861b64a58d8a16e8722787a2efe7 GIT binary patch literal 3188 zcmbW4XE+;-*T(S}L5;RX|21mG-g{P)+Iv$;gc?;vVuVn86pdZ0_Nca$2#pyjo`;4< z?Ny4JjZri-)TqAR_xu0L`{A75mvgS`e7LXsx=)&ol`$L3Z5A3D8a7iC1G_7t|F-~) zS6$0XeUgUenvSUf$N^2eS2l*=BXN_yewwtitIT(pu1=`VykG*fjj6kC-~PuWQi}6I zUTq0XV5gGlOSPSOvf+G+$WUJfB3EvfE;uNmx6_qvBg9KHe3<3AYo4twMHo0xHh1Fm zYIvy(Sa)X;ICn(r|9p6UGxuw>3SzmWonGM*)0tblLHXd%Zr#v{f8fAJiDrJ7ULJPfF{ftGEQ^`_gn7v^CnVl) zv;rTyT=z1qx2EynWCt)4IeDwTxUKB(9xas#q&+?pi%qz1R9PI6^Ffg4U<#$cBmu=jgatzCf9T5y2LS^~`-UpZsm_pnJ zwulrk0VlfzNVO!X*IW;JeD>b&FZMu-*OBTH#`<=2<-T8-J4*@b+8>m(BB8>WQw3^( z*LQTxv(TSX)T{UC#e?+YT?;TstwO7^NG+{1>(76cY)>%o+|Dn>PBc{TcQK6{;q!Z= z-=BQkT1|{AJj$GTZC}wxJ7`%}VOps>K$=qLR4nQaI#9+l=VbL6BNp{U#n@?F-qelh ziqjC#1X#jQ;ha5(%-&AuNW=~A!2;zhn_}KSmg&w}`Nrh^3{$S7kmAn)dC(K*Q$WRf3!gv053ieb7>XuZPtQc-ywmKAHwz=3~a;Y1w!^_;j=caK^; zHoGR|S=WrR%V`MF70TpzyJol<9xi)hr$sdIly0TD<=|}cNeV!TlI{liv7b`^lb`OF z^Vx+T!Y8Oyws#IVg>N9#sPrA}zx-GI%MP^Jp$gM~Akwt=d7r6ybV1!KSEEHn*~8jE zI8=QJ&==-P1gr+i>Bhxqwm?%ovY!k&M46#O^T z^i&6?(^9?3tFrzipFF}Dks-?kim88UX}Sxh9@(w!y|Llt_c2e&23W3ad|z7aDj*C` zH9}%PW0!?ETgyWRBHz^kmB&0fWxno0d76LaUvjT%H#NQsT?S8cza#`5gM{e+e(x^K zcfD{XR7=EosDz`N{AVz>by zd;w(e4V|E4bgvknUV~`@>W}GYxR@Y9LVmC~$Iq$Zs^{v_{OqIzTE3m~ntLnd z1=R0+>`CZ$=D63f3RQsb2I0qqrd~3V#`pPq*Ig74_idM&r7(N@F&X{&L-ffXqN>?2 zkZ({01)G^RB(Kt3G}v6oYO{3iA2QX>=q1G&?sRGj3oS4%{qC2aKV=| z*c;WIb*?k-f|GxGYuv`Icp|ZLj8C#vOb8fSqb#P88X{7hRdp>`cj2Wd!P@`c)Tqmk zC-i4}f%NRE*CI8Zs%TTuT3VklG{<<(UeMmP!_TY9ZN487e@@Nuv2m%X(+S%;Q`&+b z6w4XlejIT~t#qKOWIt*t4A_6AwcvZCP0a~I9FbB;c~%V>5n7Yi77CQv*xq@A_~Wql zs$0FrzHRL_Xujz&z(vH1I}A#UpQe}hR z!d+B|^Yz59jJ4q;EI^p;xcdTT!98GNZRcC}h23~oDTT8IVXXg%LAxL(Evk4UbZTLb zFki3}(3;5Ooue|(iliycwU?!ow!^>D%>~;_6;j0!qZ~GKQL}S57G>MXQq}-7K86Ei?)t#1H<`E*DTA9i9`z>ImCRsY$-W@3q$1v#d8q}=!L4cwgdU3U z7J1^imd~Llw;@3YpT5@A3}+oXudNzak}Ns0g6hL_2WQBN$Nxtv?emgGI3oS9Cu`8J zVj_s-C%_wU>m+RCr(j{IXA>BJ3W9OUT_2K88`S|hS*$@L$lqY$p)z`1LZx;u7P3XD zv=BUvn!xyq{RVZCZJJ94lD>J@s`K0WXoT?AtaED;Ras705uzkrMO@SRQI&VmMgEr; zOOqhl!gk+=P`;&zlonUl4^zl~6m;4hs$&!RQx^}AyNMaK%vfYTeA~&Ydx)uqZ)DjI zk1oh0dHXVkLTx2acS<7zVg}fiRzu{U9IK&OY(eAtHc(2cDv?ixBMI2O;T*57&cgs;M_F zuN-Y?{(D&Cb0W;zY1zt$r)m7FOhIj+K!5d9-_kvsS;e=14`^c;=Hk0HM*tzjjPXf2 z6~2x9$)aunRdHuY>j%#QAnf)hmwDgDWL*9x6-YMDnRUFcbON!bCTUvoL@@gE|G?HA z_V8l!!jRS6B&dR%g5vuKITWU}lms@BC;Gd~DY0j}h~0*Q&r(&7gTlMq@Y9`gErAjy z9>YyJS>E?gA-!G3s4lPmk`nux@JdVHlBc0KQnwDt`tYI#-6;NT7cZu zjA6(%bnd|2$yKk2V=-0Kz?V)QQ;L9iK=>O%qydq!ekQf7mr=uLrO1;$Q|teW9G35L z-_-f!rAsi#OUoiG2H2(pndzjx`rzP7gkCwtDrjsn>K3T(#*_Uv3R7F$T> zvqjx$xYBS1>$L`ofRT(+=_lFX)4}**BgLeOcXh_6vmAx@s@k$kM=3G4fXY>iH8o&_ z_<2CDfFIa{WG5j_?Q4^(K*M=ce(g%4$R!fyrplW;^$0S5+I(c?phl|Fen9=T`L!VCFUt-6*vlU&lFP&YHJbll eZ0}aO;27brDKZ)FJi7WOXiN>Q46tDLg#Q8Sa3Y2P literal 0 HcmV?d00001 diff --git a/lib/BMI/bmi_caluculator.dart b/lib/BMI/bmi_caluculator.dart new file mode 100644 index 0000000..bf81b8d --- /dev/null +++ b/lib/BMI/bmi_caluculator.dart @@ -0,0 +1,324 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:healthcare_user/BMI/bmi_history.dart'; +import 'package:healthcare_user/common/settings.dart'; + +class BMICalculator extends StatefulWidget { + const BMICalculator({Key? key}) : super(key: key); + + @override + State createState() => _BMICalculatorState(); +} + +class _BMICalculatorState extends State { + + TextEditingController heightController = TextEditingController(); + TextEditingController weightController = TextEditingController(); + TextEditingController ageController = TextEditingController(); + String bmiValue = ''; + String bmiText = ''; + var heightUnitItems = [ + 'feet', + 'cm', + 'inches', + ]; + var heightUnits = 'feet'; + var weightUnitItems = [ + 'kg', + 'gr', + ]; + var weightUnits = 'kg'; + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Calculate BMI'), + body: SingleChildScrollView( + child: Container( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + TextFormField( + cursorColor: greyColor, + controller: ageController, + textCapitalization: TextCapitalization.characters, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.person, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Age', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + SizedBox(height: 10), + Container( + //height: 60, + child: Row( + children: [ + Expanded( + child: TextFormField( + cursorColor: greyColor, + controller: heightController, + textCapitalization: TextCapitalization.characters, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.height, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Height', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + ), + SizedBox(width: 5), + Expanded( + child: DropdownButtonFormField( + // Initial Value + value: heightUnits, + isExpanded: true, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.ac_unit_outlined, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Units', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + + hint: Text('Units'), + // Down Arrow Icon + //icon: const Icon(Icons.keyboard_arrow_down), + + // Array list of items + items: heightUnitItems.map((String items) { + return DropdownMenuItem( + value: items, + child: Text( + items, + style: TextStyle( + fontSize: 16, + ), + textAlign: TextAlign.center, + )); + }).toList(), + // After selecting the desired option,it will + // change button value to selected value + onChanged: (String? newValue) { + setState(() { + heightUnits = newValue!; + }); + }, + ), + ) + ], + ), + ), + SizedBox(height: 10), + Container( + //height: 40, + padding: const EdgeInsets.fromLTRB(0, 0, 0, 0), + child: Row( + children: [ + Expanded( + child: TextFormField( + cursorColor: greyColor, + controller: weightController, + textCapitalization: TextCapitalization.characters, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.line_weight_outlined, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Weight', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + ), + SizedBox(width: 5), + Expanded( + child: DropdownButtonFormField( + // Initial Value + value: weightUnits, + isExpanded: true, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.ac_unit_outlined, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Units', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + + hint: Text('Units'), + // Down Arrow Icon + //icon: const Icon(Icons.keyboard_arrow_down), + + // Array list of items + items: weightUnitItems.map((String items) { + return DropdownMenuItem( + value: items, + child: Text( + items, + style: TextStyle( + fontSize: 16, + ), + textAlign: TextAlign.center, + )); + }).toList(), + // After selecting the desired option,it will + // change button value to selected value + onChanged: (String? newValue) { + setState(() { + weightUnits = newValue!; + }); + }, + ), + ) + ], + ), + ), + SizedBox(height: 10), + TextButton( + child: Text('Calculate BMI', style: textButtonStyle()), + onPressed: () async { + if (ageController.text != '' && + heightController.text != '' && + weightController.text != '') { + var payload = new Map(); + + payload["age"] = + int.parse(ageController.text.toString()); + payload["height"] = heightController.text.toString(); + payload["weight"] = weightController.text.toString(); + payload["heightUnit"] = heightUnits.toString(); + payload["weightUnit"] = weightUnits.toString(); + var value = await AppSettings.calculateBmi(payload); + var valueResponse = jsonDecode(value); + print(valueResponse); + setState(() { + bmiValue = valueResponse['userDetails']['bmivalue'].toString(); + if(double.parse(bmiValue)<18.5){ + bmiText='Underweight'; + } + else if(double.parse(bmiValue)>=18.5&&double.parse(bmiValue)<=24.9){ + bmiText='Normal weight'; + } + else if(double.parse(bmiValue)>=25&&double.parse(bmiValue)<=29.9){ + bmiText='Overweight'; + } + else if(double.parse(bmiValue)>=30){ + bmiText='Obesity'; + } + }); + } + }, + ), + SizedBox(height: 10), + Container( + child: Row( + children: [ + Text('Your Bmi value: $bmiValue'), + SizedBox(width: 10,), + Text(bmiText,style: TextStyle(color: Colors.red)), + ], + ) + ), + SizedBox(height: 30), + Container( + child: Text('Underweight = <18.5',style: bmiTextStyle(),), + ), + SizedBox(height: 10), + Container( + child: Text('Normal weight = 18.5–24.9',style: bmiTextStyle()), + ), + SizedBox(height: 10), + Container( + child: Text('Overweight = 25–29.9',style: bmiTextStyle()), + ), + SizedBox(height: 10), + Container( + child: Text('Obesity = BMI of 30 or greater',style: bmiTextStyle()), + ), + SizedBox(height: 20), + IconButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BMIHistory()), + ); + }, + icon: Icon( + Icons.history, + color: primaryColor, + size: 40, + ), + ), + SizedBox(height: 10), + Padding(padding: EdgeInsets.fromLTRB(10,0,0,0), + child: Container( + child: Text('History',style:TextStyle(color:Colors.black,fontSize: 12,fontWeight: FontWeight.bold,)), + ),) + + ], + ), + ) + ), + ) + ); + } +} diff --git a/lib/BMI/bmi_history.dart b/lib/BMI/bmi_history.dart new file mode 100644 index 0000000..256824d --- /dev/null +++ b/lib/BMI/bmi_history.dart @@ -0,0 +1,267 @@ +import 'dart:convert'; +import 'package:intl/intl.dart'; +import 'package:flutter/material.dart'; +import 'package:healthcare_user/models/bmi_history_model.dart'; +import 'package:healthcare_user/common/settings.dart'; + +class BMIHistory extends StatefulWidget { + const BMIHistory({Key? key}) : super(key: key); + + @override + State createState() => _BMIHistoryState(); +} + +class _BMIHistoryState extends State { + + bool isLoading=false; + List bmiHistoryList = []; + List FilteredList = []; + var dateItems = [ + 'last 7 days', + 'last one month', + 'last one year', + ]; + var dateItemsVariable = 'last 7 days'; + + Future getBmiHistoryDetails(var selectedRange) async { + isLoading=true; + var response1= await AppSettings.getBmiHistory(); + print(response1); + setState(() { + bmiHistoryList = + ((jsonDecode(response1)) as List).map((dynamic model) { + return BmiHistoryModel.fromJson(model); + }).toList(); + + var now = new DateTime.now(); + var now_1w = now.subtract(Duration(days: 7)); + var now_1m = new DateTime(now.year, now.month-1, now.day); + var now_1y = new DateTime(now.year-1, now.month, now.day); + + if(selectedRange.toString().toUpperCase()=='LAST 7 DAYS'){ + FilteredList=bmiHistoryList.where((product) { + final date = product.dateForFilter; + return now_1w.isBefore(date); + }).toList(); + } + else if(selectedRange.toString().toUpperCase()=='LAST ONE MONTH'){ + FilteredList=bmiHistoryList.where((product) { + final date = product.dateForFilter; + return now_1m.isBefore(date); + }).toList(); + } + else if(selectedRange.toString().toUpperCase()=='LAST ONE YEAR'){ + FilteredList=bmiHistoryList.where((product) { + final date = product.dateForFilter; + return now_1y.isBefore(date); + }).toList(); + } + else{ + FilteredList=bmiHistoryList; + } + + + isLoading=false; + }); + } + + @override + void initState() { + getBmiHistoryDetails(dateItemsVariable); + super.initState(); + } + + Widget renderzUi(){ + if(bmiHistoryList.length!=0){ + + return Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 10), + child: DropdownButtonFormField( + // Initial Value + value: dateItemsVariable, + isExpanded: true, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.calendar_month, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Units', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + + hint: Text('Units'), + // Down Arrow Icon + //icon: const Icon(Icons.keyboard_arrow_down), + + // Array list of items + items: dateItems.map((String items) { + return DropdownMenuItem( + value: items, + child: Text( + items, + style: TextStyle( + fontSize: 16, + ), + textAlign: TextAlign.center, + )); + }).toList(), + // After selecting the desired option,it will + // change button value to selected value + onChanged: (String? newValue) { + setState(() { + dateItemsVariable = newValue!; + }); + getBmiHistoryDetails(dateItemsVariable); + }, + ),), + + Expanded(child:ListView.builder( + padding: EdgeInsets.all(0), + itemCount: FilteredList.length, + itemBuilder: (BuildContext context, int index) { + return Card( + + color: Colors.white, + child: Padding( + padding:EdgeInsets.all(8) , + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + + Container( + width: MediaQuery.of(context).size.width * .55, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/height.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].height.toString().toUpperCase()+' ft',style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/weight.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].weight.toString().toUpperCase()+' Kgs',style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/date.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].displayDate.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/weight.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].bmiValue.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + + + ], + ), + + + ), + + ], + + ), + ), + ); + }) ), + ]); + } + else{ + return Center( + child: Padding( + padding: EdgeInsets.fromLTRB(0, 40, 0, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: MediaQuery.of(context).size.height * .25,), + Text('No Data'), + SizedBox( + height: 20, + ), + CircleAvatar( + backgroundColor: primaryColor, + radius: 40, + child: IconButton( + iconSize: 40, + icon: const Icon( + Icons.info, + color: Colors.white, + ), + onPressed: () async { + + }, + ), + ) + ], + ), + ) + ); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Body Mass Index'), + body: isLoading?Center( + child: CircularProgressIndicator( + color: primaryColor, + strokeWidth: 5.0, + ), + ):renderzUi(), + ); + } +} diff --git a/lib/BP/bp_calculator.dart b/lib/BP/bp_calculator.dart new file mode 100644 index 0000000..aa0e86e --- /dev/null +++ b/lib/BP/bp_calculator.dart @@ -0,0 +1,164 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:healthcare_user/BMI/bmi_history.dart'; +import 'package:healthcare_user/BP/bp_history.dart'; +import 'package:healthcare_user/common/settings.dart'; + +class BPCalculator extends StatefulWidget { + const BPCalculator({Key? key}) : super(key: key); + + @override + State createState() => _BPCalculatorState(); +} + +class _BPCalculatorState extends State { + + TextEditingController systoloicController = TextEditingController(); + TextEditingController diastolicController = TextEditingController(); + String bpValue = ''; + String bpText = ''; + var heightUnitItems = [ + 'feet', + 'cm', + 'inches', + ]; + var heightUnits = 'feet'; + var weightUnitItems = [ + 'kg', + 'gr', + ]; + var weightUnits = 'kg'; + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Blood Pressure'), + body: SingleChildScrollView( + child: Container( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + TextFormField( + cursorColor: greyColor, + controller: systoloicController, + textCapitalization: TextCapitalization.characters, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.person, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Enter systolic value', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + SizedBox(height: 10), + TextFormField( + cursorColor: greyColor, + controller: diastolicController, + textCapitalization: TextCapitalization.characters, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.person, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Enter diastolic value', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + SizedBox(height: 10), + TextButton( + child: Text('Check BP', style: textButtonStyle()), + onPressed: () async { + if (systoloicController.text != '' && + diastolicController.text != '') { + AppSettings.preLoaderDialog(context); + var payload = new Map(); + + payload["Systolic"] = double.parse(systoloicController.text.toString()); + payload["Diastolic"] = double.parse(diastolicController.text.toString()); + + var value = await AppSettings.calculateBP(payload); + var valueResponse = jsonDecode(value); + print(valueResponse); + setState(() { + bpValue = valueResponse['userDetails']['bpCategory'].toString(); + /*bpValue = valueResponse['userDetails']['bmivalue'].toString(); + if(double.parse(bpValue)<18.5){ + bpText='Underweight'; + } + else if(double.parse(bpValue)>=18.5&&double.parse(bpValue)<=24.9){ + bpText='Normal weight'; + } + else if(double.parse(bpValue)>=25&&double.parse(bpValue)<=29.9){ + bpText='Overweight'; + } + else if(double.parse(bpValue)>=30){ + bpText='Obesity'; + }*/ + }); + systoloicController.clear(); + diastolicController.clear(); + Navigator.of(context,rootNavigator: true).pop(); + } + }, + ), + SizedBox(height: 10), + Container( + child: Row( + children: [ + Text(bpValue,style: TextStyle(color: Colors.red),), + ], + ) + ), + SizedBox(height: 20), + IconButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BPHistory()), + ); + }, + icon: Icon( + Icons.history, + color: primaryColor, + size: 40, + ), + ), + SizedBox(height: 10), + Padding(padding: EdgeInsets.fromLTRB(10,0,0,0), + child: Container( + child: Text('History',style:TextStyle(color:Colors.black,fontSize: 12,fontWeight: FontWeight.bold,)), + ),) + + ], + ), + ) + ), + ) + ); + } +} diff --git a/lib/BP/bp_history.dart b/lib/BP/bp_history.dart new file mode 100644 index 0000000..eb5dcbb --- /dev/null +++ b/lib/BP/bp_history.dart @@ -0,0 +1,256 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:healthcare_user/models/bmi_history_model.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/models/bp_history_model.dart'; + +class BPHistory extends StatefulWidget { + const BPHistory({Key? key}) : super(key: key); + + @override + State createState() => _BPHistoryState(); +} + +class _BPHistoryState extends State { + + bool isLoading=false; + List BpHistoryList = []; + List FilteredList = []; + var dateItems = [ + 'last 7 days', + 'last one month', + 'last one year', + ]; + var dateItemsVariable = 'last 7 days'; + + Future getBmiHistoryDetails(var selectedRange) async { + isLoading=true; + var response1= await AppSettings.getBPHistory(); + print(response1); + setState(() { + BpHistoryList = + ((jsonDecode(response1)) as List).map((dynamic model) { + return BPHistoryModel.fromJson(model); + }).toList(); + + var now = new DateTime.now(); + var now_1w = now.subtract(Duration(days: 7)); + var now_1m = new DateTime(now.year, now.month-1, now.day); + var now_1y = new DateTime(now.year-1, now.month, now.day); + + if(selectedRange.toString().toUpperCase()=='LAST 7 DAYS'){ + FilteredList=BpHistoryList.where((product) { + final date = product.dateForFilter; + return now_1w.isBefore(date); + }).toList(); + } + else if(selectedRange.toString().toUpperCase()=='LAST ONE MONTH'){ + FilteredList=BpHistoryList.where((product) { + final date = product.dateForFilter; + return now_1m.isBefore(date); + }).toList(); + } + else if(selectedRange.toString().toUpperCase()=='LAST ONE YEAR'){ + FilteredList=BpHistoryList.where((product) { + final date = product.dateForFilter; + return now_1y.isBefore(date); + }).toList(); + } + else{ + FilteredList=BpHistoryList; + } + + + isLoading=false; + }); + } + + @override + void initState() { + getBmiHistoryDetails(dateItemsVariable); + super.initState(); + } + + Widget renderzUi(){ + if(BpHistoryList.length!=0){ + + return Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 10), + child: DropdownButtonFormField( + // Initial Value + value: dateItemsVariable, + isExpanded: true, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.calendar_month, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Units', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + + hint: Text('Units'), + // Down Arrow Icon + //icon: const Icon(Icons.keyboard_arrow_down), + + // Array list of items + items: dateItems.map((String items) { + return DropdownMenuItem( + value: items, + child: Text( + items, + style: TextStyle( + fontSize: 16, + ), + textAlign: TextAlign.center, + )); + }).toList(), + // After selecting the desired option,it will + // change button value to selected value + onChanged: (String? newValue) { + setState(() { + dateItemsVariable = newValue!; + }); + getBmiHistoryDetails(dateItemsVariable); + }, + ),), + + Expanded(child:ListView.builder( + padding: EdgeInsets.all(0), + itemCount: FilteredList.length, + itemBuilder: (BuildContext context, int index) { + return Card( + + color: Colors.white, + child: Padding( + padding:EdgeInsets.all(8) , + child: Container( + width: MediaQuery.of(context).size.width * .55, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /* Image( + image: const AssetImage('images/height.png'), + height: 25, + width: 25, + fit: BoxFit.fill),*/ + Text('Systolic',style: TextStyle(color: primaryColor),), + SizedBox(width: 5,), + Padding(padding: EdgeInsets.all(1), + child: Text(FilteredList[index].systolic.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Diastolic',style: TextStyle(color: primaryColor),), + Padding(padding: EdgeInsets.all(1), + child: Text(FilteredList[index].diastolic.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/height.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].bpText.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/date.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].displayDate.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + + + ], + ), + + + ), + ), + ); + }) ), + ]); + } + else{ + return Center( + child: Padding( + padding: EdgeInsets.fromLTRB(0, 40, 0, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: MediaQuery.of(context).size.height * .25,), + Text('No data'), + SizedBox( + height: 20, + ), + CircleAvatar( + backgroundColor: primaryColor, + radius: 40, + child: IconButton( + iconSize: 40, + icon: const Icon( + Icons.info, + color: Colors.white, + ), + onPressed: () async { + + }, + ), + ) + ], + ), + ) + ); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Blood Pressure'), + body: isLoading?Center( + child: CircularProgressIndicator( + color: primaryColor, + strokeWidth: 5.0, + ), + ):renderzUi(), + ); + } +} diff --git a/lib/Sugar/sugar_calculator.dart b/lib/Sugar/sugar_calculator.dart new file mode 100644 index 0000000..d81da1a --- /dev/null +++ b/lib/Sugar/sugar_calculator.dart @@ -0,0 +1,143 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:healthcare_user/BMI/bmi_history.dart'; +import 'package:healthcare_user/BP/bp_history.dart'; +import 'package:healthcare_user/Sugar/sugar_history.dart'; +import 'package:healthcare_user/common/settings.dart'; + +class SugarCalculator extends StatefulWidget { + const SugarCalculator({Key? key}) : super(key: key); + + @override + State createState() => _SugarCalculatorState(); +} + +class _SugarCalculatorState extends State { + + TextEditingController fastingValueController = TextEditingController(); + TextEditingController postParandialValueController = TextEditingController(); + String sugarValue = ''; + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Diabetes'), + body: SingleChildScrollView( + child: Container( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + TextFormField( + cursorColor: greyColor, + controller: fastingValueController, + textCapitalization: TextCapitalization.characters, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.person, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Enter fasting sugar value', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + SizedBox(height: 10), + TextFormField( + cursorColor: greyColor, + controller: postParandialValueController, + textCapitalization: TextCapitalization.characters, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.person, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Enter PostPrandial value', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + SizedBox(height: 10), + TextButton( + child: Text('Check Sugar', style: textButtonStyle()), + onPressed: () async { + if (fastingValueController.text != '' && + postParandialValueController.text != '') { + AppSettings.preLoaderDialog(context); + var payload = new Map(); + + payload["fasting"] = double.parse(fastingValueController.text.toString()); + payload["postPrandial"] = double.parse(postParandialValueController.text.toString()); + + var value = await AppSettings.calculateSugar(payload); + var valueResponse = jsonDecode(value); + print(valueResponse); + setState(() { + sugarValue = valueResponse['userSugarDetails']['sugarCategory'].toString(); + + }); + fastingValueController.clear(); + postParandialValueController.clear(); + Navigator.of(context,rootNavigator: true).pop(); + } + }, + ), + SizedBox(height: 10), + Container( + child: Row( + children: [ + Text(sugarValue,style: TextStyle(color: Colors.red),), + ], + ) + ), + SizedBox(height: 20), + IconButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SugarHistory()), + ); + }, + icon: Icon( + Icons.history, + color: primaryColor, + size: 40, + ), + ), + SizedBox(height: 10), + Padding(padding: EdgeInsets.fromLTRB(10,0,0,0), + child: Container( + child: Text('History',style:TextStyle(color:Colors.black,fontSize: 12,fontWeight: FontWeight.bold,)), + ),) + + ], + ), + ) + ), + ) + ); + } +} diff --git a/lib/Sugar/sugar_history.dart b/lib/Sugar/sugar_history.dart new file mode 100644 index 0000000..39ac4f9 --- /dev/null +++ b/lib/Sugar/sugar_history.dart @@ -0,0 +1,281 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:healthcare_user/models/bmi_history_model.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/models/bp_history_model.dart'; +import 'package:healthcare_user/models/sugar_history_model.dart'; + +class SugarHistory extends StatefulWidget { + const SugarHistory({Key? key}) : super(key: key); + + @override + State createState() => _SugarHistoryState(); +} + +class _SugarHistoryState extends State { + + bool isLoading=false; + List sugarHistoryList = []; + List FilteredList = []; + var dateItems = [ + 'last 7 days', + 'last one month', + 'last one year', + ]; + var dateItemsVariable = 'last 7 days'; + + Future getSugarHistoryDetails(var selectedRange) async { + isLoading=true; + var response1= await AppSettings.getSugarHistory(); + print(response1); + setState(() { + sugarHistoryList = + ((jsonDecode(response1)) as List).map((dynamic model) { + return SugarHistoryModel.fromJson(model); + }).toList(); + + var now = new DateTime.now(); + var now_1w = now.subtract(Duration(days: 7)); + var now_1m = new DateTime(now.year, now.month-1, now.day); + var now_1y = new DateTime(now.year-1, now.month, now.day); + + if(selectedRange.toString().toUpperCase()=='LAST 7 DAYS'){ + FilteredList=sugarHistoryList.where((product) { + final date = product.dateForFilter; + return now_1w.isBefore(date); + }).toList(); + } + else if(selectedRange.toString().toUpperCase()=='LAST ONE MONTH'){ + FilteredList=sugarHistoryList.where((product) { + final date = product.dateForFilter; + return now_1m.isBefore(date); + }).toList(); + } + else if(selectedRange.toString().toUpperCase()=='LAST ONE YEAR'){ + FilteredList=sugarHistoryList.where((product) { + final date = product.dateForFilter; + return now_1y.isBefore(date); + }).toList(); + } + else{ + FilteredList=sugarHistoryList; + } + + + isLoading=false; + }); + } + + @override + void initState() { + getSugarHistoryDetails(dateItemsVariable); + super.initState(); + } + + Widget renderzUi(){ + if(sugarHistoryList.length!=0){ + + return Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 10), + child: DropdownButtonFormField( + // Initial Value + value: dateItemsVariable, + isExpanded: true, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.calendar_month, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Units', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + + hint: Text('Units'), + // Down Arrow Icon + //icon: const Icon(Icons.keyboard_arrow_down), + + // Array list of items + items: dateItems.map((String items) { + return DropdownMenuItem( + value: items, + child: Text( + items, + style: TextStyle( + fontSize: 16, + ), + textAlign: TextAlign.center, + )); + }).toList(), + // After selecting the desired option,it will + // change button value to selected value + onChanged: (String? newValue) { + setState(() { + dateItemsVariable = newValue!; + }); + getSugarHistoryDetails(dateItemsVariable); + }, + ),), + + Expanded(child:ListView.builder( + padding: EdgeInsets.all(0), + itemCount: FilteredList.length, + itemBuilder: (BuildContext context, int index) { + return Card( + + color: Colors.white, + child: Padding( + padding:EdgeInsets.all(8) , + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + + Container( + width: MediaQuery.of(context).size.width * .55, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/height.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].fasting.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/height.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].postPrandial.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/height.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].sugarValue.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/height.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].sugartText.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image( + image: const AssetImage('images/date.png'), + height: 25, + width: 25, + fit: BoxFit.fill), + Padding(padding: EdgeInsets.all(5), + child: Text(FilteredList[index].displayDate.toString().toUpperCase(),style: valuesTextStyle()),) + + ], + ), + + ], + ), + + + ), + + ], + + ), + ), + ); + }) ), + ]); + } + else{ + return Center( + child: Padding( + padding: EdgeInsets.fromLTRB(0, 40, 0, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: MediaQuery.of(context).size.height * .25,), + Text('No data'), + SizedBox( + height: 20, + ), + CircleAvatar( + backgroundColor: primaryColor, + radius: 40, + child: IconButton( + iconSize: 40, + icon: const Icon( + Icons.info, + color: Colors.white, + ), + onPressed: () async { + + }, + ), + ) + ], + ), + ) + ); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Diabetes'), + body: isLoading?Center( + child: CircularProgressIndicator( + color: primaryColor, + strokeWidth: 5.0, + ), + ):renderzUi(), + ); + } +} diff --git a/lib/bmi_history.dart b/lib/bmi_history.dart deleted file mode 100644 index a1a9feb..0000000 --- a/lib/bmi_history.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; - -class BMIHistory extends StatefulWidget { - const BMIHistory({Key? key}) : super(key: key); - - @override - State createState() => _BMIHistoryState(); -} - -class _BMIHistoryState extends State { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppSettings.appBar('Body Mass Index'), - body: Container( - - - - ), - ); - } -} diff --git a/lib/dashboard.dart b/lib/common/dashboard.dart similarity index 94% rename from lib/dashboard.dart rename to lib/common/dashboard.dart index 8d9eb65..a7d5e7c 100644 --- a/lib/dashboard.dart +++ b/lib/common/dashboard.dart @@ -1,15 +1,16 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:healthcare_user/common/updateprofile.dart'; import 'package:healthcare_user/emergency.dart'; import 'package:healthcare_user/invitations.dart'; import 'package:healthcare_user/medicines.dart'; import 'package:healthcare_user/my_health.dart'; +import 'package:healthcare_user/my_medicine_timings.dart'; import 'package:healthcare_user/prescriptions.dart'; import 'package:healthcare_user/reports.dart'; import 'package:healthcare_user/seekopinion.dart'; -import 'package:healthcare_user/settings.dart'; -import 'package:healthcare_user/updateprofile.dart'; +import 'package:healthcare_user/common/settings.dart'; import 'package:image_picker/image_picker.dart'; import 'package:carousel_slider/carousel_slider.dart'; import 'dart:ui' as ui; @@ -179,13 +180,13 @@ class _DashboardState extends State { devicedetection(); } - Future uploadProfileApi(image) async { + /*Future uploadProfileApi(image) async { var payload = new Map(); payload["formData"] = image.toString(); var response1 = await AppSettings.updateProfilePicture(payload); print(response1); - } + }*/ Future pickImageFromGallery() async { try { @@ -195,7 +196,8 @@ class _DashboardState extends State { setState(() { AppSettings.updatedImage = imageTemp; }); - uploadProfileApi(image.path); + //uploadProfileApi(image.path); + AppSettings.uploadImageHTTP(image); AppSettings.saveProfile(image.path); } on PlatformException catch (e) { print('Failed to pick image: $e'); @@ -211,7 +213,8 @@ class _DashboardState extends State { AppSettings.updatedImage = imageTemp; }); - uploadProfileApi(image.path); + //uploadProfileApi(image.path); + AppSettings.uploadImageHTTP(image); AppSettings.saveProfile(image.path); } on PlatformException catch (e) { print('Failed to pick image: $e'); @@ -380,10 +383,18 @@ class _DashboardState extends State { AppSettings.phoneNumber, style: TextStyle(color: Colors.white, fontSize: 15), ), - Text( + Visibility( + visible:AppSettings.email!='', + child: Text( AppSettings.email, style: TextStyle(color: Colors.white, fontSize: 15), - ), + ),), + Visibility( + visible: AppSettings.age!='', + child: Text( + AppSettings.age+' Yrs', + style: TextStyle(color: Colors.white, fontSize: 15), + ),), ], ), Container() @@ -506,7 +517,13 @@ class _DashboardState extends State { Text('My Medicine Timings', style: TextStyle(color: primaryColor)), ], ), - onTap: () {}, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const MyMedicineTimings()), + ); + }, ), Divider( color: Colors.grey, diff --git a/lib/login.dart b/lib/common/login.dart similarity index 98% rename from lib/login.dart rename to lib/common/login.dart index 8d3c84c..7bea85e 100644 --- a/lib/login.dart +++ b/lib/common/login.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:healthcare_user/dashboard.dart'; -import 'package:healthcare_user/settings.dart'; -import 'package:healthcare_user/signup.dart'; +import 'package:healthcare_user/common/dashboard.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/common/signup.dart'; import 'package:path/path.dart' as Path; class Login extends StatefulWidget { diff --git a/lib/otpscreen.dart b/lib/common/otpscreen.dart similarity index 98% rename from lib/otpscreen.dart rename to lib/common/otpscreen.dart index 85b8a6c..c2b2252 100644 --- a/lib/otpscreen.dart +++ b/lib/common/otpscreen.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:healthcare_user/dashboard.dart'; -import 'package:healthcare_user/login.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/common/login.dart'; +import 'package:healthcare_user/common/settings.dart'; class OtpScreen extends StatefulWidget { var myObject; OtpScreen({this.myObject}); diff --git a/lib/preloader.dart b/lib/common/preloader.dart similarity index 95% rename from lib/preloader.dart rename to lib/common/preloader.dart index a0724f2..409d060 100644 --- a/lib/preloader.dart +++ b/lib/common/preloader.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/common/settings.dart'; class Dialogs { static Future showLoadingDialog(BuildContext context, GlobalKey key) async { diff --git a/lib/settings.dart b/lib/common/settings.dart similarity index 65% rename from lib/settings.dart rename to lib/common/settings.dart index 7910e0b..9b03ade 100644 --- a/lib/settings.dart +++ b/lib/common/settings.dart @@ -3,8 +3,9 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'dart:convert'; import 'package:flutter/services.dart'; -import 'package:healthcare_user/preloader.dart'; +import 'package:healthcare_user/common/preloader.dart'; import 'package:http/http.dart' as http; +import 'package:http/http.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:intl/intl.dart'; import 'package:flutter_styled_toast/flutter_styled_toast.dart'; @@ -19,10 +20,11 @@ const Color screenBackgroundColor = Color(0XFFEAF6FF); const Color screenBackgroundColord = Colors.black12; const Color dashboardbackground = Color(0XFFF5F5F5); -Color AppBarGradient_1 = Color(0XFF1258F6); +//Color AppBarGradient_1 = Color(0XFF1258F6); +Color AppBarGradient_1 = Color(0XFF1786A3); TextStyle PreloaderText() { - return TextStyle(color: Colors.blueAccent); + return TextStyle(color: Color(0XFF1786A3)); } TextStyle labelTextStyle() { @@ -92,6 +94,9 @@ TextStyle wrapTextStyleBlack() { TextStyle withoutWrapTextStyle() { return TextStyle(color:primaryColor,fontSize: 12,fontWeight: FontWeight.bold,); } +TextStyle bmiTextStyle() { + return TextStyle(color:primaryColor,fontSize: 16,fontWeight: FontWeight.bold,); +} final GlobalKey preloaderWindowKey = new GlobalKey(); Future preloaderWindow(BuildContext context) async { @@ -106,6 +111,7 @@ class AppSettings { static String userName = ''; static String userAddress = ''; static String email = ''; + static String age = ''; static String phoneNumber = ''; static String accessToken = ''; static String customerId = ''; @@ -136,7 +142,21 @@ class AppSettings { static String verifyPhnUrl = host + 'phone'; static String resetTokenUrl = host + 'reset_token'; static String bmiCaluculateUrl = host + 'insertBMI'; + static String bpCaluculateUrl = host + 'insertBP'; + static String sugarCaluculateUrl = host + 'insertSugar'; static String profilePicUrl = host + 'users/profile-picture'; + static String updateProfileUrl = host + 'update/currentUser'; + static String uploadPicUrl = host + 'uploads'; + static String getBmiHistoryUrl = host + 'usersbmi'; + static String getBpHistoryUrl = host + 'usersbp'; + static String getSugarHistoryUrl = host + 'userssugar'; + static String addMedicineTimingsUrl = host + 'medicine-timing'; + static String getMedicineTimingsUrl = host + 'getmedicineztiming'; + static String prescriptionUploadPicUrl = host + 'uploads-precription'; + static String getAllpharmaciesDataUrl = host + 'getAllPharmacylist'; + + + @@ -343,6 +363,56 @@ class AppSettings { } } + static Future calculateBP(payload) async { + var uri = Uri.parse(bpCaluculateUrl+ '/'+customerId); + + var response = await http.post(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.post(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else { + return ''; + } + } else { + return ''; + } + } else { + return ''; + } + } + + static Future calculateSugar(payload) async { + var uri = Uri.parse(sugarCaluculateUrl+ '/'+customerId); + + var response = await http.post(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.post(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else { + return ''; + } + } else { + return ''; + } + } else { + return ''; + } + } + static Future resetToken() async { var uri = Uri.parse(resetTokenUrl + '/' + customerId); @@ -425,6 +495,205 @@ class AppSettings { } } + static Future updateProfile(payload) async { + var uri = Uri.parse(updateProfileUrl + '/' + customerId); + try { + var response = await http.put( + uri, + body: json.encode(payload), + headers: await buildRequestHeaders()); + + if (response.statusCode == 200) { + var _response = json.decode(response.body); + + userName = _response['username']; + phoneNumber = _response['phone']; + email = _response['emails'][0]['email']; + age = _response['age'].toString(); + + await saveData('phone', _response['phone'], 'STRING'); + await saveData('email', _response['emails'][0]['email'], 'STRING'); + await saveData('username', _response['username'], 'STRING'); + await saveData('age', _response['age'].toString(), 'STRING'); + await loadDataFromMemory(); + return true; + } else { + return false; + } + } catch (e) { + print(e); + return false; + } + } + + static Future getBmiHistory() async { + var uri = Uri.parse(getBmiHistoryUrl+'/'+customerId); + + var response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else { + return ''; + } + } else { + return ''; + } + } else { + return ''; + } + } + + static Future getBPHistory() async { + var uri = Uri.parse(getBpHistoryUrl+'/'+customerId); + + var response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else { + return ''; + } + } else { + return ''; + } + } else { + return ''; + } + } + + static Future getSugarHistory() async { + var uri = Uri.parse(getSugarHistoryUrl+'/'+customerId); + + var response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else { + return ''; + } + } else { + return ''; + } + } else { + return ''; + } + } + + /* static Future upload() async{ + final uri = Uri.parse('https://myendpoint.com'); + var request = new http.MultipartRequest('POST', uri); + final httpImage = http.MultipartFile.fromBytes('files.myimage', bytes, + contentType: MediaType.parse(mimeType), filename: 'myImage.png'); + request.files.add(httpImage); + final response = await request.send(); + }*/ + + static Future uploadImageHTTP(file) async { + + var request = http.MultipartRequest('POST', Uri.parse(uploadPicUrl + '/' + customerId)); + request.files.add(await http.MultipartFile.fromPath('picture', file.path)); + var res = await request.send(); + return res; + + } + + static Future uploadImageHTTPForPrescriptions(file) async { + + var request = http.MultipartRequest('POST', Uri.parse(prescriptionUploadPicUrl + '/' + customerId)); + request.files.add(await http.MultipartFile.fromPath('picture', file.path)); + var res = await request.send(); + var response = await http.Response.fromStream(res); + return response.body; + + } + + static Future getAllpharmacies() async { + var uri = Uri.parse(getAllpharmaciesDataUrl); + //uri = uri.replace(query: 'customerId=$customerId'); + + var response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else { + return ''; + } + } else { + return ''; + } + } else { + return ''; + } + } + + static Future addMedicineTimings(payload) async { + var uri = Uri.parse(addMedicineTimingsUrl+ '/'+customerId); + + var response = await http.post(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.post(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else { + return ''; + } + } else { + return ''; + } + } else { + return ''; + } + } + + static Future getMedicineTimings() async { + var uri = Uri.parse(getMedicineTimingsUrl+'/'+customerId); + + var response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.get(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return response.body; + } else { + return ''; + } + } else { + return ''; + } + } else { + return ''; + } + } /*Apis ends here*/ @@ -443,6 +712,7 @@ class AppSettings { await saveData('latitude', input['simplydata']['latitude'], 'DOUBLE'); await saveData('longitude', input['simplydata']['longitude'], 'DOUBLE'); await saveData('fcmId', input['simplydata']['fcmId'], 'STRING'); + //await saveData('age', input['simplydata']['age'], 'STRING'); //latitude,longitude await loadDataFromMemory(); } @@ -467,6 +737,31 @@ class AppSettings { userLatitude = await getData('latitude', 'DOUBLE'); userLongitude =await getData('longitude', 'DOUBLE'); fcmId =await getData('fcmId', 'STRING'); + age=await getData('age', 'STRING'); + getProfile(); + } + + static Future getProfile() async { + final image1 = await getData('profile', 'STRING'); + + //Io.File.fromUri(imageFile.uri) + + var x = image1; + + if (image1 == null) return; + + if (image1 == '') { + updatedImage = null; + } + else if (image1 == 'null') { + updatedImage = null; + } + else { + final imageTemp = File(image1); + updatedImage = imageTemp; + } + + print(updatedImage); } static void longFailedStyledToast(String message, context) { @@ -494,6 +789,17 @@ class AppSettings { textColor: Colors.white, fontSize: 16.0); } + static void longSuccessToast1(String message) { + Fluttertoast.showToast( + msg: message, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.CENTER, + timeInSecForIosWeb: 1, + backgroundColor: Colors.green, + textColor: Colors.white, + fontSize: 16.0 + ); + } static void longFailedToast(String message) { Fluttertoast.showToast( diff --git a/lib/signup.dart b/lib/common/signup.dart similarity index 91% rename from lib/signup.dart rename to lib/common/signup.dart index e4b1a13..6b58859 100644 --- a/lib/signup.dart +++ b/lib/common/signup.dart @@ -1,19 +1,17 @@ import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:healthcare_user/common/login.dart'; import 'package:healthcare_user/google_maps_place_picker_mb/google_maps_place_picker.dart'; import 'package:healthcare_user/keys.dart'; -import 'package:healthcare_user/settings.dart'; -import 'login.dart'; +import 'package:healthcare_user/common/settings.dart'; import 'package:geolocator/geolocator.dart'; -import 'package:geocoding/geocoding.dart'; -import 'package:image_picker/image_picker.dart'; import 'package:flutter/services.dart'; import 'dart:io' show File, Platform; import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:location/location.dart' as locationmap; -import 'google_maps_place_picker_mb/src/models/pick_result.dart'; -import 'google_maps_place_picker_mb/src/place_picker.dart'; +import '../google_maps_place_picker_mb/src/models/pick_result.dart'; +import '../google_maps_place_picker_mb/src/place_picker.dart'; import 'otpscreen.dart'; @@ -38,6 +36,12 @@ class _SignUpState extends State { TextEditingController userAddressCapturingController = TextEditingController(); TextEditingController passwordController = TextEditingController(); TextEditingController confirmPasswordController = TextEditingController(); + var genderUnitItems = [ + 'Male', + 'Female', + 'Other', + ]; + var genderUnit = 'Male'; String _currentAddress =''; @@ -197,6 +201,59 @@ class _SignUpState extends State { ), ), ), //name + const SizedBox( + height: 5, + ), + Container( + padding: const EdgeInsets.all(10), + child: DropdownButtonFormField( + // Initial Value + value: genderUnit, + isExpanded: true, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.female, + color: primaryColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: primaryColor), + ), + labelText: 'Units', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + + hint: Text('Units'), + // Down Arrow Icon + //icon: const Icon(Icons.keyboard_arrow_down), + + // Array list of items + items: genderUnitItems.map((String items) { + return DropdownMenuItem( + value: items, + child: Text( + items, + style: TextStyle( + fontSize: 16, + ), + textAlign: TextAlign.center, + )); + }).toList(), + // After selecting the desired option,it will + // change button value to selected value + onChanged: (String? newValue) { + setState(() { + genderUnit = newValue!; + }); + }, + ),), + const SizedBox( height: 5, @@ -500,15 +557,17 @@ class _SignUpState extends State { ]; payload["lastName"] = ''; payload["address1"] = userAddressCapturingController.text; - payload["address2"] = address2; - payload["city"] = city; - payload["state"] = state; - payload["zip"] = zip; - payload["country"] = country; + payload["address2"] = ''; + payload["city"] = ''; + payload["state"] = ''; + payload["zip"] = ''; + payload["country"] = ''; payload["notes"] = ''; payload["latitude"] = lat; payload["longitude"] = lng; payload["fcmId"] = AppSettings.fcmId; + payload["age"] = 0; + payload["gender"] = genderUnit.toString(); bool signUpStatus = await AppSettings.signUp(payload); diff --git a/lib/splash_screen.dart b/lib/common/splash_screen.dart similarity index 91% rename from lib/splash_screen.dart rename to lib/common/splash_screen.dart index ca7ee45..1c3dec6 100644 --- a/lib/splash_screen.dart +++ b/lib/common/splash_screen.dart @@ -1,11 +1,8 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:healthcare_user/settings.dart'; -import 'package:healthcare_user/signup.dart'; - -import 'dashboard.dart'; +import 'package:healthcare_user/common/dashboard.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/common/signup.dart'; void main() async{ SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); diff --git a/lib/updateprofile.dart b/lib/common/updateprofile.dart similarity index 82% rename from lib/updateprofile.dart rename to lib/common/updateprofile.dart index 6fa8193..1fef78a 100644 --- a/lib/updateprofile.dart +++ b/lib/common/updateprofile.dart @@ -2,7 +2,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/common/dashboard.dart'; +import 'package:healthcare_user/common/settings.dart'; import 'package:image_picker/image_picker.dart'; import 'dart:io'; @@ -20,6 +21,8 @@ class _UpdateprofileState extends State { TextEditingController nameController = TextEditingController(); TextEditingController mobileNumberController = TextEditingController(); TextEditingController emailController = TextEditingController(); + TextEditingController ageController = TextEditingController(); + @@ -30,6 +33,7 @@ class _UpdateprofileState extends State { nameController.text=AppSettings.userName; mobileNumberController.text=AppSettings.phoneNumber; emailController.text=AppSettings.email; + ageController.text=AppSettings.age; super.initState(); @@ -46,10 +50,9 @@ class _UpdateprofileState extends State { setState(() { AppSettings.updatedImage = imageTemp; }); - //uploadProfileApi(AppSettings.updatedImage); + //uploadProfileApi(image.path); + AppSettings.uploadImageHTTP(image); AppSettings.saveProfile(image.path); - - } on PlatformException catch (e) { print('Failed to pick image: $e'); } @@ -64,14 +67,30 @@ class _UpdateprofileState extends State { AppSettings.updatedImage = imageTemp; }); - // uploadProfileApi(AppSettings.updatedImage); + //uploadProfileApi(image.path); + AppSettings.uploadImageHTTP(image); AppSettings.saveProfile(image.path); - } on PlatformException catch (e) { print('Failed to pick image: $e'); } } + Future uploadProfileApi(image) async { + var formData = new Map(); + /* formData = FormData.fromMap({ + "username" : "John", + "password" : "123456", + "device-type" : "Android" + });*/ + + + var payload = new Map(); + payload["formData"] = image.toString(); + var response1 = await AppSettings.updateProfilePicture(payload); + + print(response1); + } + @override Widget build(BuildContext context) { @@ -246,10 +265,32 @@ class _UpdateprofileState extends State { SizedBox( height: 10, ), - Container( - width: 400, - height: 55, + padding: const EdgeInsets.all(10), + child: TextFormField( + cursorColor: greyColor, + controller: ageController, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.person, + color: greyColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: greyColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + labelText: 'Enter age', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + ), + Container( padding: const EdgeInsets.fromLTRB(10, 0, 10, 0), child: ElevatedButton( style: ElevatedButton.styleFrom( @@ -258,9 +299,18 @@ class _UpdateprofileState extends State { ), onPressed: () async{ - /* var payload = new Map(); + int age=0; + if(ageController.text.toString()!=''){ + age=int.parse(ageController.text.toString()); + } + else{ + age=0; + } + + var payload = new Map(); payload["username"] = nameController.text.toString(); payload["phone"] = mobileNumberController.text.toString(); + payload["age"] = age; payload["emails"] = [{"email":emailController.text.toString()}]; bool signUpStatus = await AppSettings.updateProfile(payload); try{ @@ -279,7 +329,7 @@ class _UpdateprofileState extends State { catch(exception){ print(exception); AppSettings.longFailedToast("Please enter valid details"); - }*/ + } }, child: Text('Update'), diff --git a/lib/emergency.dart b/lib/emergency.dart index 2f944ac..c65f86b 100644 --- a/lib/emergency.dart +++ b/lib/emergency.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/common/settings.dart'; class Emergency extends StatefulWidget { const Emergency({Key? key}) : super(key: key); diff --git a/lib/invitations.dart b/lib/invitations.dart index 936a0b7..ce69cef 100644 --- a/lib/invitations.dart +++ b/lib/invitations.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/common/settings.dart'; class Invitations extends StatefulWidget { const Invitations({Key? key}) : super(key: key); diff --git a/lib/main.dart b/lib/main.dart index 7cebc4f..63fd8b3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:healthcare_user/dashboard.dart'; -import 'package:healthcare_user/splash_screen.dart'; +import 'package:healthcare_user/common/splash_screen.dart'; import 'package:sizer/sizer.dart'; import 'package:flutter/services.dart'; diff --git a/lib/medicines.dart b/lib/medicines.dart index 1b47663..7796958 100644 --- a/lib/medicines.dart +++ b/lib/medicines.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/common/settings.dart'; class Medicines extends StatefulWidget { const Medicines({Key? key}) : super(key: key); diff --git a/lib/models/bmi_history_model.dart b/lib/models/bmi_history_model.dart new file mode 100644 index 0000000..17d1340 --- /dev/null +++ b/lib/models/bmi_history_model.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; + + +class BmiHistoryModel { + String bmiValue = ''; + String height= ''; + String weight= ''; + String date= ''; + String displayDate=''; + DateTime dateForFilter=new DateTime.now(); + + + BmiHistoryModel(); + + factory BmiHistoryModel.fromJson(Map json){ + BmiHistoryModel rtvm = new BmiHistoryModel(); + /*"heightUnit": "feet", + "weightUnit": "kg", + "_id": "6493fe48eca67b71b8444e24", + "bmiinfoid": "BMI1687420488845468", + "customerId": "AHSUSNE2", + "height": "164.592", + "weight": "50", + "age": 27, + "bmivalue": 18.46, + "createdAt": "2023-06-22T07:54:48.847Z", + "updatedAt": "2023-06-22T07:54:48.847Z",*/ + + rtvm.bmiValue = json['bmivalue'].toString() ?? ''; + rtvm.height = json['height'].toString() ?? ''; + rtvm.weight = json['weight'].toString() ?? ''; + rtvm.date = json['createdAt'].toString() ?? ''; + + //DateTime tempDate = new DateFormat("yyyy-MM-dd hh:mm:ss").parse(rtvm.date); + DateTime parseDate = new DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(rtvm.date); + var outputFormat = DateFormat('MM/dd/yyyy hh:mm a'); + rtvm.dateForFilter=parseDate; + var outputDate = outputFormat.format(parseDate); + rtvm.displayDate=outputDate; + + + return rtvm; + } + +} \ No newline at end of file diff --git a/lib/models/bp_history_model.dart b/lib/models/bp_history_model.dart new file mode 100644 index 0000000..716e39d --- /dev/null +++ b/lib/models/bp_history_model.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; + + +class BPHistoryModel { + String bpText = ''; + String systolic= ''; + String diastolic= ''; + String date= ''; + String displayDate=''; + DateTime dateForFilter=new DateTime.now(); + + + BPHistoryModel(); + + factory BPHistoryModel.fromJson(Map json){ + BPHistoryModel rtvm = new BPHistoryModel(); + /*"heightUnit": "feet", + "weightUnit": "kg", + "_id": "6493fe48eca67b71b8444e24", + "bmiinfoid": "BMI1687420488845468", + "customerId": "AHSUSNE2", + "height": "164.592", + "weight": "50", + "age": 27, + "bmivalue": 18.46, + "createdAt": "2023-06-22T07:54:48.847Z", + "updatedAt": "2023-06-22T07:54:48.847Z",*/ + + rtvm.bpText = json['bpCategory'].toString() ?? ''; + rtvm.systolic = json['Systolic'].toString() ?? ''; + rtvm.diastolic = json['Diastolic'].toString() ?? ''; + rtvm.date = json['createdAt'].toString() ?? ''; + + //DateTime tempDate = new DateFormat("yyyy-MM-dd hh:mm:ss").parse(rtvm.date); + DateTime parseDate = new DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(rtvm.date); + var outputFormat = DateFormat('MM/dd/yyyy hh:mm a'); + rtvm.dateForFilter=parseDate; + var outputDate = outputFormat.format(parseDate); + rtvm.displayDate=outputDate; + + + return rtvm; + } + +} \ No newline at end of file diff --git a/lib/models/pharmacies.dart b/lib/models/pharmacies.dart new file mode 100644 index 0000000..642531a --- /dev/null +++ b/lib/models/pharmacies.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:healthcare_user/common/settings.dart'; + +class PharmaciesModel { + String pharmacy_name = ''; + String status=''; + String picture=''; + Color text_color=Colors.black; + double lat=0; + double lng=0; + + PharmaciesModel(); + + factory PharmaciesModel.fromJson(Map json){ + PharmaciesModel rtvm = new PharmaciesModel(); + + rtvm.pharmacy_name = json['pharmacyname'] ?? ''; + rtvm.picture = json['pharmacyname'] ?? ''; + rtvm.status = json['status'] ?? ''; + rtvm.lat = json['latitude'] ?? 0; + rtvm.lng = json['longitude'] ??0; + + return rtvm; + } + +} \ No newline at end of file diff --git a/lib/models/sugar_history_model.dart b/lib/models/sugar_history_model.dart new file mode 100644 index 0000000..e3dfe6c --- /dev/null +++ b/lib/models/sugar_history_model.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; + + +class SugarHistoryModel { + String sugartText = ''; + String sugarValue = ''; + String fasting= ''; + String postPrandial= ''; + String date= ''; + String displayDate=''; + DateTime dateForFilter=new DateTime.now(); + + + SugarHistoryModel(); + + factory SugarHistoryModel.fromJson(Map json){ + SugarHistoryModel rtvm = new SugarHistoryModel(); + /*"heightUnit": "feet", + "weightUnit": "kg", + "_id": "6493fe48eca67b71b8444e24", + "bmiinfoid": "BMI1687420488845468", + "customerId": "AHSUSNE2", + "height": "164.592", + "weight": "50", + "age": 27, + "bmivalue": 18.46, + "createdAt": "2023-06-22T07:54:48.847Z", + "updatedAt": "2023-06-22T07:54:48.847Z",*/ + + rtvm.sugartText = json['sugarCategory'].toString() ?? ''; + rtvm.sugarValue = json['sugarValue'].toString() ?? ''; + rtvm.fasting = json['fasting'].toString() ?? ''; + rtvm.postPrandial = json['postPrandial'].toString() ?? ''; + rtvm.date = json['createdAt'].toString() ?? ''; + + //DateTime tempDate = new DateFormat("yyyy-MM-dd hh:mm:ss").parse(rtvm.date); + DateTime parseDate = new DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(rtvm.date); + var outputFormat = DateFormat('MM/dd/yyyy hh:mm a'); + rtvm.dateForFilter=parseDate; + var outputDate = outputFormat.format(parseDate); + rtvm.displayDate=outputDate; + + + return rtvm; + } + +} \ No newline at end of file diff --git a/lib/my_health.dart b/lib/my_health.dart index 7151967..1370938 100644 --- a/lib/my_health.dart +++ b/lib/my_health.dart @@ -1,9 +1,14 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/BMI/bmi_history.dart'; +import 'package:healthcare_user/BP/bp_calculator.dart'; +import 'package:healthcare_user/BP/bp_history.dart'; +import 'package:healthcare_user/Sugar/sugar_calculator.dart'; +import 'package:healthcare_user/Sugar/sugar_history.dart'; +import 'package:healthcare_user/common/settings.dart'; -import 'bmi_history.dart'; +import 'BMI/bmi_caluculator.dart'; class MyHealth extends StatefulWidget { const MyHealth({Key? key}) : super(key: key); @@ -317,12 +322,12 @@ class _MyHealthState extends State { ), IconButton( onPressed: () { - /* Navigator.push( + Navigator.push( context, MaterialPageRoute( builder: (context) => BMICalculator()), - );*/ - showBMIAdddialog(); + ); + // showBMIAdddialog(); }, icon: Icon( Icons.add, @@ -340,7 +345,27 @@ class _MyHealthState extends State { children: [ Text('Blood Pressure'), IconButton( - onPressed: () {}, + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BPHistory()), + ); + }, + icon: Icon( + Icons.history, + color: greyColor, + ), + ), + IconButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BPCalculator()), + ); + // showBMIAdddialog(); + }, icon: Icon( Icons.add, color: greyColor, @@ -357,7 +382,27 @@ class _MyHealthState extends State { children: [ Text('Diabetes'), IconButton( - onPressed: () {}, + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SugarHistory()), + ); + }, + icon: Icon( + Icons.history, + color: greyColor, + ), + ), + IconButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SugarCalculator()), + ); + // showBMIAdddialog(); + }, icon: Icon( Icons.add, color: greyColor, diff --git a/lib/my_medicine_timings.dart b/lib/my_medicine_timings.dart new file mode 100644 index 0000000..a0b1a2d --- /dev/null +++ b/lib/my_medicine_timings.dart @@ -0,0 +1,876 @@ +import 'dart:convert'; +import 'package:intl/intl.dart'; +import 'package:flutter/material.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:day_night_time_picker/day_night_time_picker.dart'; + +class MyMedicineTimings extends StatefulWidget { + const MyMedicineTimings({Key? key}) : super(key: key); + + @override + State createState() => _MyMedicineTimingsState(); +} + +class _MyMedicineTimingsState extends State { + + + bool isLoading=false; + TimeOfDay selectedTime = TimeOfDay.now(); + Time _time = Time(hour: 0, minute: 0, second: 0); + Time _wakeupTime = Time(hour: 0, minute: 0, second: 0); + Time _beforeBreakfastTime = Time(hour: 0, minute: 0, second: 0); + Time _afterBreakfastTime = Time(hour: 0, minute: 0, second: 0); + Time _beforeLunchTime = Time(hour: 0, minute: 0, second: 0); + Time _afterLunchTime = Time(hour: 0, minute: 0, second: 0); + Time _eveningTeaTime = Time(hour: 0, minute: 0, second: 0); + Time _beforeDinnerTime = Time(hour: 0, minute: 0, second: 0); + Time _afterDinnerTime = Time(hour: 0, minute: 0, second: 0); + Time _sleepTime = Time(hour: 0, minute: 0, second: 0); + + String wakeUpfForApi=''; + String _beforeBreakfastTimeForApi=''; + String _afterBreakfastTimeForApi=''; + String _beforeLunchTimeForApi=''; + String _afterLunchTimeForApi=''; + String _eveningTeaTimeForApi=''; + String _beforeDinnerTimeForApi=''; + String _afterDinnerTimeForApi=''; + String _sleepTimeForApi=''; + + + + DateTime wakeUp = DateTime.now(); + + bool iosStyle = true; + + + List timings = [ + {'name': 'Wakeup'}, + {'name': 'Before breakfast'}, + {'name': 'After- breakfast'}, + {'name': 'Before lunch'}, + {'name': 'After lunch'}, + {'name': 'Evening tea'}, + {'name': 'Before dinner'}, + {'name': 'After dinner'}, + {'name': 'Sleep'} + ]; + + Map medicineTimings={}; + + Future getMedicineTimingsList() async { + + isLoading=true; + var response1= await AppSettings.getMedicineTimings(); + setState(() { + if(response1!='null'){ + medicineTimings=jsonDecode(response1); + wakeUpfForApi=medicineTimings['wakeUp']; + _beforeBreakfastTimeForApi=medicineTimings['beforeBreakfast']; + _afterBreakfastTimeForApi=medicineTimings['afterBreakfast']; + _beforeLunchTimeForApi=medicineTimings['beforeLunch']; + _afterLunchTimeForApi=medicineTimings['afterLunch']; + _eveningTeaTimeForApi=medicineTimings['eveningTea']; + _beforeDinnerTimeForApi=medicineTimings['beforeDinner']; + _afterDinnerTimeForApi=medicineTimings['afterDinner']; + _sleepTimeForApi=medicineTimings['sleep']; + } + + isLoading=false; + }); + + } + @override + void initState() { + getMedicineTimingsList(); + super.initState(); + } + + void onTimeChanged(Time newTime, int index) { + setState(() { + _time=newTime; + }); + if (index == 0) { + setState(() { + _wakeupTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _wakeupTime.hour, _wakeupTime.minute); + final format = DateFormat.jm(); + setState(() { + wakeUpfForApi=format.format(dt); + }); + } + else if (index == 1) { + setState(() { + _beforeBreakfastTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _beforeBreakfastTime.hour, _beforeBreakfastTime.minute); + final format = DateFormat.jm(); + setState(() { + _beforeBreakfastTimeForApi=format.format(dt); + }); + } + else if (index == 2) { + setState(() { + _afterBreakfastTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _afterBreakfastTime.hour, _afterBreakfastTime.minute); + final format = DateFormat.jm(); + setState(() { + _afterBreakfastTimeForApi=format.format(dt); + }); + } + else if (index == 3) { + setState(() { + _beforeLunchTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _beforeLunchTime.hour, _beforeLunchTime.minute); + final format = DateFormat.jm(); + setState(() { + _beforeLunchTimeForApi=format.format(dt); + }); + } + else if (index == 4) { + setState(() { + _afterLunchTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _afterLunchTime.hour, _afterLunchTime.minute); + final format = DateFormat.jm(); + setState(() { + _afterLunchTimeForApi=format.format(dt); + }); + } + else if (index == 5) { + setState(() { + _eveningTeaTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _eveningTeaTime.hour, _eveningTeaTime.minute); + final format = DateFormat.jm(); + setState(() { + _eveningTeaTimeForApi=format.format(dt); + }); + } + else if (index == 6) { + setState(() { + _beforeDinnerTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _beforeDinnerTime.hour, _beforeDinnerTime.minute); + final format = DateFormat.jm(); + setState(() { + _beforeDinnerTimeForApi=format.format(dt); + }); + } + else if (index == 7) { + setState(() { + _afterDinnerTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _afterDinnerTime.hour, _afterDinnerTime.minute); + final format = DateFormat.jm(); + setState(() { + _afterDinnerTimeForApi=format.format(dt); + }); + } + else if (index == 8) { + setState(() { + _sleepTime = newTime; + }); + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, _sleepTime.hour, _sleepTime.minute); + final format = DateFormat.jm(); + setState(() { + _sleepTimeForApi=format.format(dt); + }); + } + } + + void valueOfTiming(int index) { + if (index == 0) { + _time = _wakeupTime; + } else if (index == 1) { + _time = _beforeBreakfastTime; + } + } + + String formatTimeOfDay(TimeOfDay tod) { + final now = new DateTime.now(); + final dt = DateTime(now.year, now.month, now.day, tod.hour, tod.minute); + final format = DateFormat.jm(); //"6:00 AM" + return format.format(dt); + } + + void _selectedDateWithTime(DateTime newTime,int ind){ + if (ind == 0) { + setState(() { + wakeUp = newTime; + String formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(wakeUp); + // DateTime parseDate = new DateFormat("dd-MM-yyyy HH:mm:ss").parse(wakeUp); + print(formattedDate); + }); + } + /*else if (ind == 1) { + setState(() { + _beforeBreakfastTime = newTime; + }); + } + else if (ind == 2) { + setState(() { + _afterBreakfastTime = newTime; + }); + } + else if (ind == 3) { + setState(() { + _beforeLunchTime = newTime; + }); + } + else if (ind == 4) { + setState(() { + _afterLunchTime = newTime; + }); + } + else if (ind == 5) { + setState(() { + _eveningTeaTime = newTime; + }); + } + else if (ind == 6) { + setState(() { + _beforeDinnerTime = newTime; + }); + } + else if (ind == 7) { + setState(() { + _afterDinnerTime = newTime; + }); + } + else if (ind == 8) { + setState(() { + _sleepTime = newTime; + }); + }*/ + } + + Widget textForSelectedTime(int index) { + if (index == 0) { + return + Text( + wakeUpfForApi, + style: TextStyle(color: Colors.black), + ); + } else if (index == 1) { + return Text( + _beforeBreakfastTimeForApi, + style: TextStyle(color: Colors.black), + ); + } else if (index == 2) { + return Text( + _afterBreakfastTimeForApi, + style: TextStyle(color: Colors.black), + ); + } else if (index == 3) { + return Text( + _beforeLunchTimeForApi, + style: TextStyle(color: Colors.black), + ); + } else if (index == 4) { + return Text( + _afterLunchTimeForApi, + style: TextStyle(color: Colors.black), + ); + } else if (index == 5) { + return Text( + _eveningTeaTimeForApi, + style: TextStyle(color: Colors.black), + ); + } else if (index == 6) { + return Text( + _beforeDinnerTimeForApi, + style: TextStyle(color: Colors.black), + ); + } else if (index == 7) { + return Text( + _afterDinnerTimeForApi, + style: TextStyle(color: Colors.black), + ); + } else if (index == 8) { + return Text( + _sleepTimeForApi, + style: TextStyle(color: Colors.black), + ); + } else { + return Container(); + } + } + + Widget renderTimings(){ + return Column( + children: [ + Expanded( + child: ListView.separated( + separatorBuilder: (context, index) => const Divider( + height: 4.0, + color: primaryColor, + ), + //padding: EdgeInsets.all(8), + itemCount: timings.length, + itemBuilder: (BuildContext context, int index) { + return Padding( + padding: EdgeInsets.all(10), + child: Container( + padding: EdgeInsets.fromLTRB(8, 8, 0, 0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + width: + MediaQuery.of(context).size.width * .40, + child: Text( + timings[index]['name'], + style: wrapTextStyle(), + ), + ), + GestureDetector( + onTap: () { + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + textForSelectedTime(index) + ], + ), + ], + )), + ); + })), + Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 40), + child: Row( + children: [ + ElevatedButton( + style: ElevatedButton.styleFrom( + primary: primaryColor, // background + onPrimary: Colors.white, // foreground + ), + onPressed: () async { + editTimingsDialog(); + }, + child: const Text('Edit'), + ), + ], + ) + ) + ], + ); + } + + editTimingsDialog(){ + + return showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return StatefulBuilder( + builder: (BuildContext context, StateSetter setState) { + return AlertDialog( + title: const Text('Edit Timings'), + content: SingleChildScrollView( + child: Container( + width: double.maxFinite, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + ConstrainedBox( + constraints: BoxConstraints( + maxHeight: MediaQuery.of(context).size.height * 0.4, + ), + child: ListView.separated( + separatorBuilder: (context, index) => const Divider( + height: 4.0, + color: primaryColor, + ), + //padding: EdgeInsets.all(8), + itemCount: timings.length, + itemBuilder: (BuildContext context, int index) { + return Padding( + padding: EdgeInsets.all(10), + child: Container( + padding: EdgeInsets.fromLTRB(8, 8, 0, 0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + width: + MediaQuery.of(context).size.width * .25, + child: Text( + timings[index]['name'], + style: wrapTextStyle(), + ), + ), + GestureDetector( + onTap: () { + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + //onChange: onTimeChanged, + onChange: (val) { + onTimeChanged(val, index); + }, + is24HrFormat: false, + sunrise: TimeOfDay( + hour: 6, minute: 0), // optional + sunset: TimeOfDay(hour: 18, minute: 0), + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + + _selectedDateWithTime(dateTime,index); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + textForSelectedTime(index) + ], + ), + ], + )), + ); + }) + ), + ]), + )), + actions: [ + TextButton( + child: Text('Cancel', style: textButtonStyle()), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + TextButton( + child: Text('Save', style: textButtonStyle()), + onPressed: () async { + + }, + ), + ], + ); + }); + }, + ); + } + + Widget renderUi() { + return Column( + children: [ + Expanded( + child: ListView.separated( + separatorBuilder: (context, index) => const Divider( + height: 4.0, + color: primaryColor, + ), + //padding: EdgeInsets.all(8), + itemCount: timings.length, + itemBuilder: (BuildContext context, int index) { + return Padding( + padding: EdgeInsets.all(10), + child: Container( + padding: EdgeInsets.fromLTRB(8, 8, 0, 0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + width: + MediaQuery.of(context).size.width * .40, + child: Text( + timings[index]['name'], + style: wrapTextStyle(), + ), + ), + GestureDetector( + onTap: () { + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + //onChange: onTimeChanged, + onChange: (val) { + onTimeChanged(val, index); + }, + is24HrFormat: false, + sunrise: TimeOfDay( + hour: 6, minute: 0), // optional + sunset: TimeOfDay(hour: 18, minute: 0), + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + + _selectedDateWithTime(dateTime,index); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + textForSelectedTime(index) + ], + ), + ], + )), + ); + })), + Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 40), + child: Row( + children: [ + ElevatedButton( + style: ElevatedButton.styleFrom( + primary: primaryColor, // background + onPrimary: Colors.white, // foreground + ), + onPressed: () async { + + AppSettings.preLoaderDialog(context); + + bool isOnline = await AppSettings.internetConnectivity(); + if(isOnline){ + if(_time!=TimeOfDay(hour: 0,minute: 0)){ + + var payload = new Map(); + payload["wakeUp"] = wakeUpfForApi;//_wakeupTime.hour.toString()+':'+_wakeupTime.minute.toString(); + payload["beforeBreakfast"] = _beforeBreakfastTime.hour.toString()+':'+_beforeBreakfastTime.minute.toString(); + payload["afterBreakfast"] = _afterBreakfastTime.hour.toString()+':'+_afterBreakfastTime.minute.toString(); + payload["beforeLunch"] = _beforeLunchTime.hour.toString()+':'+_beforeLunchTime.minute.toString(); + payload["afterLunch"] = _afterLunchTime.hour.toString()+':'+_afterLunchTime.minute.toString(); + payload["eveningTea"] = _eveningTeaTime.hour.toString()+':'+_eveningTeaTime.minute.toString(); + payload["beforeDinner"] = _beforeDinnerTime.hour.toString()+':'+_beforeDinnerTime.minute.toString(); + payload["afterDinner"] = _afterDinnerTime.hour.toString()+':'+_afterDinnerTime.minute.toString(); + payload["sleep"] = _sleepTime.hour.toString()+':'+_sleepTime.minute.toString(); + + var value = await AppSettings.addMedicineTimings(payload); + var valueResponse = jsonDecode(value); + + Navigator.of(context,rootNavigator: true).pop(); + getMedicineTimingsList(); + } + else{ + Navigator.of(context,rootNavigator: true).pop(); + AppSettings.longFailedToast('Please select timing' ); + } + + } + + }, + child: const Text('Save'), + ), + SizedBox(width: 20,), + ElevatedButton( + style: ElevatedButton.styleFrom( + primary: primaryColor, // background + onPrimary: Colors.white, // foreground + ), + onPressed: () async {}, + child: const Text('Cancel'), + ), + ], + ) + ) + ], + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('My medicine timings'), + body: medicineTimings.length==0?renderUi():renderTimings(), + /*Container( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 10,), + Text('Wakeup'), + SizedBox(height: 10,), + Text('Before breakfast'), + SizedBox(height: 15,), + Text('After breakfast'), + SizedBox(height: 15,), + Text('Before lunch'), + SizedBox(height: 15,), + Text('After lunch'), + SizedBox(height: 15,), + Text('Evening Tea'), + SizedBox(height: 15,), + Text('Before dinner'), + SizedBox(height: 15,), + Text('After dinner'), + SizedBox(height: 15,), + Text('Sleep'), + ], + ), + Column( + children: [ + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + SizedBox(height: 5,), + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + + SizedBox(height: 5,), + GestureDetector( + onTap: (){ + Navigator.of(context).push( + showPicker( + showSecondSelector: true, + context: context, + value: _time, + onChange: onTimeChanged, + minuteInterval: TimePickerInterval.FIVE, + // Optional onChange to receive value as DateTime + onChangeDateTime: (DateTime dateTime) { + // print(dateTime); + debugPrint("[debug datetime]: $dateTime"); + }, + ), + ); + }, + child: Image( + image: AssetImage('images/time.png'), + width: 30, + height: 30, + ), + ), + ], + ), + + + ], + ), + ], + ), + ) + )*/ + ); + } +} diff --git a/lib/prescriptions.dart b/lib/prescriptions.dart index 0c1cc52..1f0c854 100644 --- a/lib/prescriptions.dart +++ b/lib/prescriptions.dart @@ -1,5 +1,12 @@ +import 'dart:convert'; +import 'dart:io'; + import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:flutter/services.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/models/pharmacies.dart'; +import 'package:image_picker/image_picker.dart'; class Prescriptions extends StatefulWidget { const Prescriptions({Key? key}) : super(key: key); @@ -9,11 +16,207 @@ class Prescriptions extends StatefulWidget { } class _PrescriptionsState extends State { + + final ImagePicker _picker = ImagePicker(); + String Url=''; + List pharmaciesList = []; + List FilteredList = []; + bool isSupplierDataLoading=false; + bool isSereverIssue = false; + double lat=0; + double lng=0; + String userAddress=''; + String dropdownArea = '2'; + //String dropdownType = 'Tank'; + var AreaItems = [ + '2', + '5', + '10', + '25', + '50', + '100' + ]; + + + Future getAllPharmaciesData(var distance) async { + + + + try { + var pharmacyResponse = await AppSettings.getAllpharmacies(); + + setState(() { + pharmaciesList = + ((jsonDecode(pharmacyResponse)['data']) as List).map((dynamic model) { + return PharmaciesModel.fromJson(model); + }).toList(); + FilteredList=[]; + pharmaciesList.forEach((element) async{ + var distanceInM; + if(distance=='2'){ + distanceInM=2000; + } + else if(distance=='5'){ + distanceInM=5000; + } + else if(distance=='10'){ + distanceInM=10000; + } + else if(distance=='25'){ + distanceInM=25000; + } + else if(distance=='50'){ + distanceInM=50000; + } + else if(distance=='100'){ + distanceInM=100000; + } + double distanceInMeters = await Geolocator.distanceBetween(element.lat,element.lng,lat,lng); + if(distanceInMeters<=distanceInM){ + FilteredList.add(element); + } + }); + + //FilteredList=suppliersList.where((product) => product.address.toString().toUpperCase()=='SUMP').toList(); + + + isSupplierDataLoading = false; + }); + + + } catch (e) { + setState(() { + isSupplierDataLoading = false; + isSereverIssue = true; + }); + } + } + + @override + void initState() { + + lat=AppSettings.userLatitude; + lng=AppSettings.userLongitude; + userAddress=AppSettings.userAddress; + getAllPharmaciesData(dropdownArea); + super.initState(); + } + + + Future pickImageFromGallery() async { + try { + final image = await _picker.pickImage(source: ImageSource.gallery); + if (image == null) return; + final imageTemp = File(image.path); + + + var res=await AppSettings.uploadImageHTTPForPrescriptions(image); + print(jsonDecode(res)); + setState(() { + Url = jsonDecode(res)['picture']; + }); + + } on PlatformException catch (e) { + print('Failed to pick image: $e'); + } + } + + Future takeImageFromCamera() async { + try { + final image = await _picker.pickImage(source: ImageSource.camera); + if (image == null) return; + final imageTemp = File(image.path); + + var res=await AppSettings.uploadImageHTTPForPrescriptions(image); + print(jsonDecode(res)); + setState(() { + Url = jsonDecode(res)['picture']; + }); + + } on PlatformException catch (e) { + print('Failed to pick image: $e'); + } + } + + /**/ + @override Widget build(BuildContext context) { return Scaffold( appBar: AppSettings.appBar('Prescriptions'), - body: Container(), + body: Container( + + child: Column( + children: [ + Padding( + padding: EdgeInsets.all(10), + child: ElevatedButton( + style: ElevatedButton.styleFrom( + primary: primaryColor, // background + onPrimary: Colors.white, // foreground + ), + onPressed: () async{ + + showModalBottomSheet( + context: context, + builder: (BuildContext context) { + return SizedBox( + height: 200, + child: Center( + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + GestureDetector( + child: Icon( + Icons.camera_alt_outlined, + size: 100, + color: greyColor, + ), + onTap: () async { + await takeImageFromCamera(); + Navigator.pop(context); + }, + ), + SizedBox( + width: MediaQuery.of(context) + .size + .width * + .20, + ), + GestureDetector( + child: Icon( + Icons.photo, + size: 100, + color: greyColor, + ), + onTap: () async { + await pickImageFromGallery(); + Navigator.pop(context); + }, + ), + ], + ), + ), + ); + }); + }, + child: const Text('Select image'), + ), + ), + Container( + width: MediaQuery.of(context).size.width * .18, + height: + MediaQuery.of(context).size.height * .10, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage(Url) as ImageProvider, // picked file + fit: BoxFit.contain)), + ), + ], + ) + ), ); } } diff --git a/lib/reports.dart b/lib/reports.dart index b59994d..a41b4ff 100644 --- a/lib/reports.dart +++ b/lib/reports.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/common/settings.dart'; class Reports extends StatefulWidget { const Reports({Key? key}) : super(key: key); diff --git a/lib/seekopinion.dart b/lib/seekopinion.dart index 57a7ac7..a5ba434 100644 --- a/lib/seekopinion.dart +++ b/lib/seekopinion.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:healthcare_user/settings.dart'; +import 'package:healthcare_user/common/settings.dart'; class SeekOpinion extends StatefulWidget { const SeekOpinion({Key? key}) : super(key: key); diff --git a/pubspec.lock b/pubspec.lock index 5c070a0..bfca4ee 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -155,6 +155,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" + day_night_time_picker: + dependency: "direct dev" + description: + name: day_night_time_picker + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" dbus: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 91290fa..f544010 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -60,8 +60,8 @@ dev_dependencies: permission_handler: ^10.2.0 cloudinary_public: ^0.21.0 carousel_slider: ^4.2.1 - fluttertoast: ^8.1.2 - + fluttertoast: ^8.2.2 + day_night_time_picker: ^1.3.0 flutter_icons: image_path_ios: 'images/logo.png' diff --git a/test/widget_test.dart b/test/widget_test.dart index a60db62..a6567d6 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -7,9 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; - -import 'package:healthcare_user/main.dart'; -import 'package:healthcare_user/splash_screen.dart'; +import 'package:healthcare_user/common/splash_screen.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async {