From 9630a77681c8a17ca8dfc9d6d51bac7eb834cc2b Mon Sep 17 00:00:00 2001 From: Sneha Date: Mon, 28 Aug 2023 11:27:26 +0530 Subject: [PATCH] add reports functionality --- images/profile_pic.png | Bin 7579 -> 6529 bytes lib/BMI/bmi_history.dart | 318 ++++++----- lib/BP/bp_history.dart | 18 +- lib/Reports/add_reports.dart | 674 ++++++++++++++++++++++++ lib/Reports/allreports.dart | 526 ++++++++++++++++++ lib/Reports/finding_images.dart | 79 +++ lib/Reports/report_images.dart | 114 ++++ lib/chart/bmi_chart.dart | 45 ++ lib/chart/bpchart.dart | 65 +++ lib/common/dashboard.dart | 7 +- lib/common/settings.dart | 171 +++++- lib/common/zoom_image.dart | 34 ++ lib/models/bmi_history_model.dart | 4 + lib/models/prescriptions_model.dart | 14 +- lib/models/reports_model.dart | 47 ++ lib/prescriptions/oreder_medicines.dart | 107 ++-- lib/prescriptions/prescriptions.dart | 161 ++---- lib/reports.dart | 56 -- pubspec.lock | 28 + pubspec.yaml | 2 + 20 files changed, 2104 insertions(+), 366 deletions(-) create mode 100644 lib/Reports/add_reports.dart create mode 100644 lib/Reports/allreports.dart create mode 100644 lib/Reports/finding_images.dart create mode 100644 lib/Reports/report_images.dart create mode 100644 lib/chart/bmi_chart.dart create mode 100644 lib/chart/bpchart.dart create mode 100644 lib/common/zoom_image.dart create mode 100644 lib/models/reports_model.dart delete mode 100644 lib/reports.dart diff --git a/images/profile_pic.png b/images/profile_pic.png index 3fd3f73bef2a4a3a89e3fd91b2eb2730dba2233c..d8b670e05b0212f148082cae29d24106061d4cd9 100644 GIT binary patch literal 6529 zcmV-{8Gh!8P)V^v9bE$~h15~jZB4LX$5Kux$LJ~+qmYHm1w#;_>{r9F%Gr3sV(`&YNvQY$qX&eu}xjIYI`IiZPVLlyfew@Lam64LkrX**w zw74{u8lTQ4#HTT{F^-QoLtMYlJ3J2NbURp^-NK(YcARBahm|#Sp5>3}^*TBYWlRv? z_j;vcoA23L#xx8~5=JED3xc$aNz#f532D=Erz~JoiJ%!*T+PV|C)(^p9uaq}v6NL= zD)78cVnQKF<*U!%wY89G44NSfs?Kfluag9}oJg5>efG_4X8J55X%>qnK;EIcB6hs- z2$9!TCrH93KVyYNULDf_VoultZ?B$j@cLJqP4Pcjm~~_F{3&@+Cuty5ww`2%YxlFm zb^GZ=30wU{UaX0W8DX$Z0`qT;GsZ1ieAR7i@yzdDWPh{*s7^2%D`(wx-D;L(9?vcpko{%1&b*CGnv_-DdUExG zJ9B$VcN{;=B8W&ynDFyw?@ks{jT=(qQ`fFr{M)e4pR@)=+N|ByXP&=%+rzXgA}TT> zgh2%wjpDltvu~XLgKO^@wYDl$I4GjB`^0;SZCgw#@(c?zabZ=7qykyn^qOqJC>AW4 zyL{G4BFmsNu&)a6U*}BDB^Ak%t1T7FuerpmBn>K91;IePrxKTKpS(RlC5t|v2{|C6>kjnmi&1Z7x+LAvl+khSER?@zlS>n1ja z!ErHZWpOwxwsC6lUrgdvfut+iqK)`$IN{p#hRc6YNQ~ z-L>Y=-#xyE4a1&=Dq*-Pgw*BcwG$H3A6hbJ1sg+XKp-J4DgB`bU;oKkdMe1;YRDM! zo8b}S{l9qQzHFxVl|H)UiR8;Y+!QGwjP=+@|J~Wq(UrI5{x@n_2$B|xgu#OsCBe6a zBx{VU5dh~7DJD~#{*?_IHgK&q)X(aN@+QTFfAIhB{YhG4+AZ{BOiO^Z;)r%%hfFDYq5WmfptzpR{|m}>g?(L0`;rWNVh^(7CqGN;Ee z;CoUzakCigt=6;xF0#k=tnakfp3m9#yZ77K5C|Kpm#F*ZJ$X;vdi8C$T$g!0i#1>a zo+^Bt9XVUfynfH1?**BVykm_=h_G}vDQPm(3XmHlhD^2YT65`+V;`|F5hmXK%$?Jx zOuF)=yYg1^q+Kk5tMZQ@Kf>CHv`_%zN{L_;n`TeQVOl{(@-();X79r3i?Uxk{`YcJ zArDI0P@E1iDJ^dOV#=(>TBSg;oh zpPvst1~pTcvSH$no>-nUW9HXRJ-YM>7Hj-|*RO&~){?m^E~>r)xmB$dJfYYY@EJ%M z{*P7?t4MsVr~hWLbbkG7O;;TmEY>)nN`z8GFSrY=f zTQ;Cd#H8!W6%(=rov>=&lm#r-Km~3fes<&9OIBckRMeE11Ei^-Y7bv1p%tK*Cm}9j z)rwz#H&vdS1%)`seqDTuDgSy3T57>|VWEN=IIf{)2ypz112W)P(Nf(~!L$Ns1o}_o z({m?2M6ueC3FEKn4C3!^$hw)u8Vwz1F4`CBap4LMl(JKnlT1s1CKL6-9ox5Whp7t6 zO|YFpUS6JV)pI}0PfJM8)Iy{{9l=l#>T%%;4%8H(P7NXrL}tS|HYi#Okp z9eZ^Mn1i_A!*Lh_2{LQ2UJ{=;o-@z^+Vakho{W$&7`B!S^&%j{_ynrexigBoJ|ByZp=|WUr4JC}FMPNO* zVASQ(L*2@iD+O8eaa?4>($mvLLhcleRY3*I!M$_z^`MfY2Coa;`}jrn>w1mY=U{+F z(HlfmHtA|=YD8J{aReqX#jBTQrNo)yrfMyBq$DE|A5?(J?`xmE#3$95m#HNNQUx-D z<;#Liq_qSbUz{;M^OhffJ!RipB`vI1^Kmg#69#D$r(Bacf2u~DjX>P{jR)ifbp7W~ zeBrnpx|$G|*4vw75HAuTEv>JpK@_Lu#@3tJTP5$xyEtimDv@+0Ho9?%x@)FrlrSYO zIGFUeIjjSc1(H@Rd|*_p0ELHcFzT~1GBS7#sIs3wKxE!xv2dqDuhVO$1Rxj`(n6io zE1w%JMX%5l27@89p`oFlpTSik3Tz4s3x$-F6rE@g=T1$Y#t?_CpPw7lOq2!$`l6 z)|&s+gmk78MI5}4laqt!6W_0PI=HSBM3$+=2*6+fIT-UYE}z&Z?5!XQSivt6S;`!l zI~@WhXYvk#-jrlEj;=My@CtiFPiMG##K3bcB`8A$k8=tviK!e8_!^KfWg0CcCMIHz zmZWu;m$wpX=B7=LAi6_bK*9ugisXEN8;Pq#N|+bH3 zXy1;J0Mc@}rifQO1!kWI16=${dOybQ6Yp!fuyg=$vX~rG)XNVf3P}l0r!y+;cR~S( zDmb<0k`=x~1(KG^L>msvC?HOlIB}xT($dmL7>6nXg*cG5WUgl2 z{ywq*g)k*ng~;%Ex~gMp#~@X^<+}O7fMY}|V(R!zUTdiKZk=u?5p7}hoxO`Bf|VI4 zK&l4wxra5>u?Mw^l3zN{WFgAS%VVXbr56Q%11k|>a=qR=M_#{(EL`bB zDa9Ts@H=Q?rZpfK(9`2-Q0?McP${M2WZCU@$=&U0XzUEFB55Q*R`_s`MGi=Xe3hHE zK*GA4x*=g$$s$qs(BDrb%3FWM2d9g(=47#G0FsR8Lm(hov9cvNrftQWc{ByKE>`^> zF%3DrukIv;3nhv`@#RMdO>w6~&NfT*A}c>w)n#|sqoNiu*9ugHI6<+LtnEi%?+bmw zo7{WqBNlDo+}oYD#+oDbefNc-@L_M!sPZH$D+@*qO#0mp&u3MwkzFW&g9=oIi1Ed` z&tl;GuPw?B7=XneJuXj$%jNQubRlus=P+`@Hf-3y>gwv)`Sa%`v)Sx-b~`HSBW%YY zU4dBjjR)8m7!PotZ|VL7Trk;G$=hDSHg4Rg?DUhA`6~CwtqvmloEcX$8nE zSnIk@P%z$?nwr{g`K-FY1El#J4u}89d&lcryIRf-Rx2^00}7&U$NEU26qx-Qfu%B@YggpuRng;(P2a(zxNri)aDiEB zcx!>`J0oQpi_|jW!!*t5vAar4CX<(Jm`|_Qb6%9!)xlrRqU=I?EvMTG4rdmvibUEW zFaa6ub!ffKxz-Qqy}Y<5NFW*)8Rm-N2JF|lidM{Z;B5HDjT_fzzW{Z;09T1ADJgiP zx8VN{7PoXXp9;5H45kie23egFNhqPHk)Tqp8wn?HZY*SqK6+|jF-ez~?3a(6!Qh0+ z1^1GyGrjcGYqQ$-mNk~La3b((MII~K>(IirkT2ZDN-!0zHEqw)LvKPtg15cB-It%A zKcLgWbtMIXePqXcJru|~xUJ;1!!tv3oxU~;ucQs$+t_e|Nj4oj1DC(ZWn4wo&vNWx+e_CZC`y>!Ac z0gnXTQv^VseasD|}GCDPVMbL4(?Hi7HIxZ}~;*~tmRsQLWt z-y+$BWVF>lMhYm0DBF3Gt3w)SQRjs^+_Y(vq*@*pT*5F&Eqcgf^pw1LtbEojIi)0J zdEt<NZ2g&?r#`8!r>CBzq$DpzoqVJY`#Bsyu#TjB zPDW&TLYgaZ^vJ7 zyWNm150T}aJ$tqvL3w%ILmz^6TOm>8uDvLV9&$e1WxG$-w>GrA8H>pENYN0*+}?12 zDMmy6*_~hRsX9x}hMV=OLtlA$xj$G}w_t>E&xE4)KAX+vrT`?q#9g@g&FJ+vazUzW(ncnc**;y8?YED8L!{K2PvK(MvHDC^1chtgu|^`UqZN zsAFlWY~5VB_Y9=KEe|eXYyiRr1M2L@(MYC|VKf>MR9tZ1%RegpE|jb=KMrM^CrwV0(J=lB*`pHjdR~1P7ume=huE_raHo|LxSiy0didTn2-| zNuHsztE&rA24`bX+ofPQOJoJg)i9DW-gTh0rrpVOVu>Z8;oEbr%rz#NE}vW1hXWw% z$%4naKihHSmq&M(S5wO0Md3cD*XwnRA3xsZa5!LUhC~(+3Ss;UDFVV;TU+r^Ah8z7 z84((eH+K4%@AF1;?HFk)AcOqpPye@j-`mB%{QT`QL<(F)n3F9Ug|F14t3$Bc?TijUpesf^SKi#|X1BiqYPx-7Oel27_m zyUjXT!|R443V4HXFb=%@*)LBNRv~2qJLRN-iK~mIO74b+1}}mW>Ri`Q5GrAcp7rPD z<$2DXJI9)un)ol0dSpZ%D=)0BC-wLcyPy5Z>9J3~onm=f@B0xhU{Z{wQ<&})y;}U+ z(+BF+WMQ}_PoCTZve+de8UtatT?6{s&ClunRko!(A*=aZ^De0swQ_Tsa040RmkvB@t2|cu{QK+oymH>!Z6jyQ zP3HkBu#YTy>?VygEXh(3j?OoIq|t%-Dd{PZ%L>xCb5gOly4>03DCnNhF{9+%p~+~4 z7wenGg$r=mUq19K`{ekCM?Zb}z_0gjEjdj8o2R2>vbZWtPEPJ22Q6feFc?PMNJWzG zLrlgK>e0x0(*uf%G|2;MQ@8Xt-&%6z?1^i>GxzpMTDXDSaG`YP+4aS{w$@7PEAMUm za64%fFR4JD*`VR1V7Zg#SRhTElpMBXDF|oh8zpoFazI=lY1pTmeQVB?1uL#uGc7Co zdsqvmrG?;^g1U`Tb6wN+eJ>o`(okvXBC>q4y@KoRijR+Xl0@;iD-C#q-b=*@hl+4F z1LHGxa$6SU%%7q)aj;YgSc)s68il zu~!Z~$BtH&loh^sVC~+`hdw^v=77rcAbKH3FdP&Ga)2xfF!Z2YkjV0di!30ly``WY z<#`39O`n#QX0%$ZT-t~<6TLo;hLNsD?1Kswuf8Sc%Df+3vnKJ1#D76LKCqp6EP+S` z7AG7$U1V!H)AV7*ftnA#*jZ6UFZsMM)N*ncgW`gmG|Flyu|cISBWz>=5o-pva^*^$ zd><^RNCRDYMw`tB)i{pQGbV~fDx~S?kLsp>Gi&nnZ%&(^K{hTuWzr-p=eYqlb&GQU zVUUDc$zqCBG+ED8pKrAl6}?#ePIHX~ZG=DoR0S_bql>Ty5qEmr1IGddOXLL(yC!2O zh;;WhB?_X<*NkM0jbw{Cad=Mp-+(zAktWhb%OfT?t@--3S=UbeUR<(iKFGs#0Ny1Q zO@!M~>Fq&vk}sq?-f)Dqb~ZN?N&6d4G!^aNQgW1CShA`R1hei9AT9a_=l5@B6tkCeBF9Ny|>X$rNYINr+FHgg7N` zHG)>*Q&V~+5S`pm_8k~i;Wr&{XQYP zMW+weH`9e9VIduD6{5VP6+EOBl*%UVy0iWspkEF(g;fOxJDJgfLY&%@47LS%IuIvI z9kv2(`LRy=T1vvqTV~Ek%}UKNCm1K0#+z~=1cq_?NrGNXpm|_|`bTL#WRtvpo8RZR zxqH0LZkxN=W%D#U+U?CJJ}571tg?2~_has;oM=T#c*(j<6iDeSLnHO)A&0`9lau4C zuC7+x^@vH88nI|-DdLum6rNEePEYpDK=w@`P0ucb8UE5r%1^r>%eAqIRW2a%&DMtwrnHpZ_ST=kJ7;U!1HOAdq=;U&6|uo4oB>%6i= zVF{2Qofo1>l!92dj1_RtP29$jT_BE=r`mGzTrL-%2B_X6lDZO*`9|ClUnUdTcPAhj z{4u?UOA@`OulEIg-cO%bB+9EA{Q1O*6TK}hEo#a0tG_cA&`OVAHF15Cm!6)kvsf&g z9FjhrEPbMC^i!229mvly)mFlmsU(WX@9RfGNkp}DsfV(UH|3(~N!aI8!-b}rGRtvE zW%kX9m_2*8NYen3TxJnBqeFI^)Kg#5lFB+ z4q7+C#zEz=3wAANHew6|Ly$>S=5l&+SPW!Kcz~HgU}j1P!jF%aM}lf3Qlupjk4d%h z*X8#jzB!IA1jWHIV3JP~E~&jYE;QHg&7Kt9W=3(rkm00000NkvXXu0mjfc7L6h literal 7579 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 diff --git a/lib/BMI/bmi_history.dart b/lib/BMI/bmi_history.dart index 256824d..a07f870 100644 --- a/lib/BMI/bmi_history.dart +++ b/lib/BMI/bmi_history.dart @@ -1,9 +1,12 @@ import 'dart:convert'; +import 'package:healthcare_user/chart/bmi_chart.dart'; 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'; +import '../chart/bpchart.dart'; + class BMIHistory extends StatefulWidget { const BMIHistory({Key? key}) : super(key: key); @@ -12,8 +15,7 @@ class BMIHistory extends StatefulWidget { } class _BMIHistoryState extends State { - - bool isLoading=false; + bool isLoading = false; List bmiHistoryList = []; List FilteredList = []; var dateItems = [ @@ -21,47 +23,42 @@ class _BMIHistoryState extends State { 'last one month', 'last one year', ]; - var dateItemsVariable = 'last 7 days'; + var dateItemsVariable = 'last 7 days'; Future getBmiHistoryDetails(var selectedRange) async { - isLoading=true; - var response1= await AppSettings.getBmiHistory(); + isLoading = true; + var response1 = await AppSettings.getBmiHistory(); print(response1); setState(() { - bmiHistoryList = - ((jsonDecode(response1)) as List).map((dynamic model) { - return BmiHistoryModel.fromJson(model); - }).toList(); + 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); + 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) { + 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) { + } 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) { + } 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; } - else{ - FilteredList=bmiHistoryList; - } - - isLoading=false; + isLoading = false; }); } @@ -71,76 +68,91 @@ class _BMIHistoryState extends State { 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 - ), + 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), + 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), + // 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); + }, + ), + ), + IconButton( + onPressed: () { + /*Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BmiChart()), + );*/ + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new BmiChart(myObject: FilteredList))); + // showBMIAdddialog(); + }, + icon: Icon( + Icons.auto_graph, + color: primaryColor, + ), + ), + 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) , + padding: EdgeInsets.all(8), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( width: MediaQuery.of(context).size.width * .55, child: Column( @@ -152,13 +164,21 @@ class _BMIHistoryState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Image( - image: const AssetImage('images/height.png'), + 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()),) - + Padding( + padding: EdgeInsets.all(5), + child: Text( + FilteredList[index] + .height + .toString() + .toUpperCase() + + ' ft', + style: valuesTextStyle()), + ) ], ), Row( @@ -166,13 +186,21 @@ class _BMIHistoryState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Image( - image: const AssetImage('images/weight.png'), + 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()),) - + Padding( + padding: EdgeInsets.all(5), + child: Text( + FilteredList[index] + .weight + .toString() + .toUpperCase() + + ' Kgs', + style: valuesTextStyle()), + ) ], ), Row( @@ -180,13 +208,20 @@ class _BMIHistoryState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Image( - image: const AssetImage('images/date.png'), + 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()),) - + Padding( + padding: EdgeInsets.all(5), + child: Text( + FilteredList[index] + .displayDate + .toString() + .toUpperCase(), + style: valuesTextStyle()), + ) ], ), Row( @@ -194,61 +229,60 @@ class _BMIHistoryState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Image( - image: const AssetImage('images/weight.png'), + 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()),) - + Padding( + padding: EdgeInsets.all(5), + child: Text( + FilteredList[index] + .bmiValue + .toString() + .toUpperCase(), + style: valuesTextStyle()), + ) ], ), - - ], ), - - ), - ], - ), ), ); - }) ), - ]); - } - else{ - return Center( + })), + ]); + } 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 { - - }, - ), - ) - ], + 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 {}, + ), + ) + ], + ), + )); } } @@ -256,12 +290,14 @@ class _BMIHistoryState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppSettings.appBar('Body Mass Index'), - body: isLoading?Center( - child: CircularProgressIndicator( - color: primaryColor, - strokeWidth: 5.0, - ), - ):renderzUi(), + body: isLoading + ? Center( + child: CircularProgressIndicator( + color: primaryColor, + strokeWidth: 5.0, + ), + ) + : renderzUi(), ); } } diff --git a/lib/BP/bp_history.dart b/lib/BP/bp_history.dart index eb5dcbb..ece8c03 100644 --- a/lib/BP/bp_history.dart +++ b/lib/BP/bp_history.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:healthcare_user/chart/bpchart.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'; @@ -75,7 +76,7 @@ class _BPHistoryState extends State { if(BpHistoryList.length!=0){ return Column( - crossAxisAlignment: CrossAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 10), child: DropdownButtonFormField( @@ -127,6 +128,21 @@ class _BPHistoryState extends State { }, ),), + IconButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => Bpchart()), + ); + // showBMIAdddialog(); + }, + icon: Icon( + Icons.auto_graph, + color: primaryColor, + ), + ), + Expanded(child:ListView.builder( padding: EdgeInsets.all(0), itemCount: FilteredList.length, diff --git a/lib/Reports/add_reports.dart b/lib/Reports/add_reports.dart new file mode 100644 index 0000000..539ab53 --- /dev/null +++ b/lib/Reports/add_reports.dart @@ -0,0 +1,674 @@ +import 'dart:convert'; +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:intl/intl.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:multi_image_picker/multi_image_picker.dart'; + +class AddReports extends StatefulWidget { + const AddReports({Key? key}) : super(key: key); + + @override + State createState() => _AddReportsState(); +} + +class _AddReportsState extends State { + TextEditingController doctorNameController = TextEditingController(); + TextEditingController hospitalNameController = TextEditingController(); + TextEditingController problemController = TextEditingController(); + TextEditingController dateInput = TextEditingController(); + TextEditingController patientNameController = TextEditingController(); + TextEditingController patientAgeController = TextEditingController(); + final ImagePicker _picker = ImagePicker(); + String Url = ''; + final ImagePicker imagePicker = ImagePicker(); + List imageFileList = []; + List imageFileListReports = []; + List imageFileListPrescriptions = []; + List uiFindingsImages = []; + List uiReportsImages = []; + List uiPrescriptionImages = []; + + List images = []; + String _error = 'No Error Dectected'; + String apiMultiImages = ''; + String? prescriptionFor; + String? gender; + + Future pickImageFromGallery() async { + imageFileList = []; + final List? selectedImages = await imagePicker.pickMultiImage(); + AppSettings.preLoaderDialog(context); + if (selectedImages!.isNotEmpty) { + imageFileList.addAll(selectedImages); + } + + var res = await AppSettings.uploadImageForFindings(imageFileList); + print(jsonDecode(res)); + Navigator.of(context, rootNavigator: true).pop(); + setState(() { + uiFindingsImages = jsonDecode(res)['findings']; + }); + } + + Future takeImageFromCamera() async { + try { + final image = await _picker.pickImage(source: ImageSource.camera); + if (image == null) return; + final imageTemp = File(image.path); + AppSettings.preLoaderDialog(context); + var res = await AppSettings.uploadImageForFindingsCamera(image); + print(jsonDecode(res)); + Navigator.of(context, rootNavigator: true).pop(); + setState(() { + uiFindingsImages = jsonDecode(res)['findings']; + }); + } on PlatformException catch (e) { + print('Failed to pick image: $e'); + } + } + + + Future takeImageFromCameraForReports() async { + try { + final image = await _picker.pickImage(source: ImageSource.camera); + if (image == null) return; + final imageTemp = File(image.path); + AppSettings.preLoaderDialog(context); + var res = await AppSettings.uploadImageForFindingsCamera(image); + print(jsonDecode(res)); + Navigator.of(context, rootNavigator: true).pop(); + setState(() { + uiReportsImages = jsonDecode(res)['findings']; + }); + } on PlatformException catch (e) { + print('Failed to pick image: $e'); + } + } + + Future pickImageFromGalleryForReports() async { + imageFileListReports = []; + final List? selectedImages = await imagePicker.pickMultiImage(); + AppSettings.preLoaderDialog(context); + if (selectedImages!.isNotEmpty) { + imageFileListReports.addAll(selectedImages); + } + + var res = await AppSettings.uploadImageForReports(imageFileListReports); + print(jsonDecode(res)); + Navigator.of(context, rootNavigator: true).pop(); + setState(() { + uiReportsImages = jsonDecode(res)['reports']; + }); + } + + + Future takeImageFromCameraForPrescriptions() async { + try { + final image = await _picker.pickImage(source: ImageSource.camera); + if (image == null) return; + final imageTemp = File(image.path); + AppSettings.preLoaderDialog(context); + var res = await AppSettings.uploadImageForFindingsCamera(image); + print(jsonDecode(res)); + Navigator.of(context, rootNavigator: true).pop(); + setState(() { + uiFindingsImages = jsonDecode(res)['findings']; + }); + } on PlatformException catch (e) { + print('Failed to pick image: $e'); + } + } + + Future pickImageFromGalleryForPrescriptions() async { + imageFileListPrescriptions = []; + final List? selectedImages = await imagePicker.pickMultiImage(); + AppSettings.preLoaderDialog(context); + if (selectedImages!.isNotEmpty) { + imageFileListPrescriptions.addAll(selectedImages); + } + + var res = await AppSettings.uploadImageForPrescriptions(imageFileListPrescriptions); + print(jsonDecode(res)); + Navigator.of(context, rootNavigator: true).pop(); + setState(() { + uiPrescriptionImages = jsonDecode(res)['precription']; + }); + } + + + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Reports'), + body: SingleChildScrollView( + child: Container( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + child: TextFormField( + cursorColor: greyColor, + controller: doctorNameController, + textCapitalization: TextCapitalization.words, + decoration: textFormFieldDecoration( + Icons.person, 'Enter Doctor name'), + ), + ), + SizedBox( + height: MediaQuery.of(context).size.height * .02, + ), + Container( + child: TextFormField( + cursorColor: greyColor, + controller: hospitalNameController, + textCapitalization: TextCapitalization.words, + decoration: textFormFieldDecoration( + Icons.location_city_outlined, 'Enter Hospital name'), + ), + ), + SizedBox( + height: MediaQuery.of(context).size.height * .02, + ), + Container( + child: TextFormField( + cursorColor: greyColor, + controller: problemController, + textCapitalization: TextCapitalization.words, + decoration: textFormFieldDecoration( + Icons.report_problem, 'Enter Problem'), + ), + ), + SizedBox( + height: MediaQuery.of(context).size.height * .02, + ), + Container( + child: TextFormField( + cursorColor: greyColor, + controller: dateInput, + decoration: textFormFieldDecoration( + Icons.calendar_today, 'Enter Date'), + readOnly: true, + onTap: () async { + DateTime? pickedDate = await showDatePicker( + context: context, + initialDate: DateTime.now(), + firstDate: DateTime(1950), + lastDate: DateTime.now(), + builder: (BuildContext context, Widget? child) { + return Theme( + data: ThemeData.dark().copyWith( + colorScheme: ColorScheme.dark( + primary: buttonColors, + onPrimary: Colors.white, + surface: buttonColors, + onSurface: Colors.white, + ), + dialogBackgroundColor: primaryColor, + ), + child: child!, + ); + }, + ); + + if (pickedDate != null) { + print( + pickedDate); //pickedDate output format => 2021-03-10 00:00:00.000 + String formattedDate = + DateFormat('dd-MM-yyyy').format(pickedDate); + print( + formattedDate); //formatted date output using intl package => 2021-03-16 + setState(() { + dateInput.text = + formattedDate; //set output date to TextField value. + }); + } else {} + }, + ), + ), + Row( + children: [ + + Expanded(child: RadioListTile( + title: Text("For Yourself"), + value: "self", + groupValue: prescriptionFor, + activeColor: primaryColor, + onChanged: (value){ + setState(() { + prescriptionFor = value.toString(); + }); + }, + ),), + Expanded(child: RadioListTile( + title: Text("For Family"), + value: "others", + groupValue: prescriptionFor, + activeColor: primaryColor, + onChanged: (value){ + setState(() { + prescriptionFor = value.toString(); + }); + }, + ),), + ], + ), + Visibility( + visible:prescriptionFor.toString().toLowerCase()=='others' , + child: Container( + child: TextFormField( + cursorColor: greyColor, + controller: patientNameController, + decoration: textFormFieldDecoration(Icons.person,'Enter patient name'), + + ), + ),), + SizedBox(height:MediaQuery.of(context).size.height * .02,), + Visibility( + visible:prescriptionFor.toString().toLowerCase()=='others' , + child: Container( + child: TextFormField( + cursorColor: greyColor, + keyboardType: TextInputType.number, + controller: patientAgeController, + decoration: textFormFieldDecoration(Icons.person,'Enter patient age'), + + ), + ),), + Visibility( + visible:prescriptionFor.toString().toLowerCase()=='others' , + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + Expanded(child: RadioListTile( + title: Text("Male",style: TextStyle(fontSize: 10)), + value: "male", + groupValue: gender, + activeColor: primaryColor, + onChanged: (value){ + setState(() { + gender = value.toString(); + }); + }, + ),), + Expanded(child: RadioListTile( + title: Text("Female",style: TextStyle(fontSize: 10),), + value: "female", + groupValue: gender, + activeColor: primaryColor, + onChanged: (value){ + setState(() { + gender = value.toString(); + }); + }, + ),), + Expanded(child: RadioListTile( + title: Text("Others",style: TextStyle(fontSize: 10)), + value: "other", + groupValue: gender, + activeColor: primaryColor, + onChanged: (value){ + setState(() { + gender = value.toString(); + }); + }, + ),), + ], + ),), + 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: primaryColor, + ), + onTap: () async { + await takeImageFromCamera(); + Navigator.pop(context); + }, + ), + SizedBox( + width: MediaQuery.of(context).size.width * + .20, + ), + GestureDetector( + child: Icon( + Icons.photo, + size: 100, + color: primaryColor, + ), + onTap: () async { + await pickImageFromGallery(); + Navigator.pop(context); + }, + ), + ], + ), + ), + ); + }); + }, + child: const Text('Select Findings'), + ), + Visibility( + visible: uiFindingsImages.length > 0, + child: Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * .20, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: uiFindingsImages.length, + itemBuilder: (context, index) { + return Column( + children: [ + Card( + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + uiFindingsImages[index] + ['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + ), + ), + /*Expanded(child:IconButton( + icon: const Icon(Icons.remove,color: Colors.red,), + + onPressed: () async{ + + }, + ),)*/ + ], + ); + }), + )), + 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: primaryColor, + ), + onTap: () async { + await takeImageFromCameraForReports(); + Navigator.pop(context); + }, + ), + SizedBox( + width: MediaQuery.of(context).size.width * + .20, + ), + GestureDetector( + child: Icon( + Icons.photo, + size: 100, + color: primaryColor, + ), + onTap: () async { + await pickImageFromGalleryForReports(); + Navigator.pop(context); + }, + ), + ], + ), + ), + ); + }); + }, + child: const Text('Select Reports'), + ), + Visibility( + visible: uiReportsImages.length > 0, + child: Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * .20, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: uiReportsImages.length, + itemBuilder: (context, index) { + return Column( + children: [ + Card( + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + uiReportsImages[index] + ['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + ), + ), + /*Expanded(child:IconButton( + icon: const Icon(Icons.remove,color: Colors.red,), + + onPressed: () async{ + + }, + ),)*/ + ], + ); + }), + )), + 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: primaryColor, + ), + onTap: () async { + await takeImageFromCameraForPrescriptions(); + Navigator.pop(context); + }, + ), + SizedBox( + width: MediaQuery.of(context).size.width * + .20, + ), + GestureDetector( + child: Icon( + Icons.photo, + size: 100, + color: primaryColor, + ), + onTap: () async { + await pickImageFromGalleryForPrescriptions(); + Navigator.pop(context); + }, + ), + ], + ), + ), + ); + }); + }, + child: const Text('Select Prescriptions'), + ), + + Visibility( + visible: uiPrescriptionImages.length > 0, + child: Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * .20, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: uiPrescriptionImages.length, + itemBuilder: (context, index) { + return Column( + children: [ + Card( + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + uiPrescriptionImages[index] + ['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + ), + ), + /*Expanded(child:IconButton( + icon: const Icon(Icons.remove,color: Colors.red,), + + onPressed: () async{ + + }, + ),)*/ + ], + ); + }), + )), + + Container( + width:double.infinity, + height: MediaQuery.of(context).size.height * .06, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + primary: buttonColors, // background + onPrimary: Colors.black, // foreground + ), + onPressed: () async{ + + if(doctorNameController.text!=''&& problemController.text!=''&& dateInput.text!=''&&prescriptionFor!=''){ + + String _name=''; + String _age=''; + String? _gender=''; + + if(prescriptionFor.toString().toLowerCase()=='others'){ + if(patientNameController!=''&& patientAgeController.text!=''&&gender!=''){ + _name=patientNameController.text; + _age=patientAgeController.text; + _gender=gender; + } + else{ + AppSettings.longFailedToast('Please enter details'); + } + } + else{ + _name=AppSettings.userName; + _age=AppSettings.age; + _gender=AppSettings.gender; + } + AppSettings.preLoaderDialog(context); + bool isOnline = await AppSettings.internetConnectivity(); + if(isOnline){ + + var payload = new Map(); + payload["problem"] = problemController.text.toString(); + payload["doctorName"] = doctorNameController.text.toString(); + payload["hospitalName"] = hospitalNameController.text.toString(); + payload["date"] = dateInput.text.toString(); + payload["findings_date"] = ''; + payload["reports_date"] = ''; + payload["prescription_date"] = ''; + payload["patientType"] = prescriptionFor.toString(); + payload["others"] ={ + "name": _name, + "age": int.parse(_age), + "gender": _gender.toString().toLowerCase() + }; + payload["findings"] =uiFindingsImages; + payload["reports"] =uiReportsImages; + payload["prescription"] =uiPrescriptionImages; + + bool uploadStatus = await AppSettings.addRecords(payload); + + try{ + if(uploadStatus){ + Navigator.of(context,rootNavigator: true).pop(); + AppSettings.longSuccessToast('Record added successfully'); + Navigator.pop(context); + } + else{ + Navigator.of(context,rootNavigator: true).pop(); + AppSettings.longFailedToast('Fail to add record details'); + } + } + catch(e){ + print(e); + Navigator.of(context,rootNavigator: true).pop(); + AppSettings.longFailedToast('Fail to add record details'); + } + + } + else{ + AppSettings.longFailedToast('Please check internet'); + } + + + + } + else{ + AppSettings.longFailedToast('Please enter valid details'); + } + }, + child: const Text('Submit'), + )), + ], + ), + ), + ), + )); + } +} diff --git a/lib/Reports/allreports.dart b/lib/Reports/allreports.dart new file mode 100644 index 0000000..385e138 --- /dev/null +++ b/lib/Reports/allreports.dart @@ -0,0 +1,526 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:healthcare_user/Reports/add_reports.dart'; +import 'package:healthcare_user/Reports/finding_images.dart'; +import 'package:healthcare_user/Reports/report_images.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/common/zoom_image.dart'; +import 'package:healthcare_user/models/reports_model.dart'; +import 'package:photo_view/photo_view.dart'; + +class AllReports extends StatefulWidget { + const AllReports({Key? key}) : super(key: key); + + @override + State createState() => _AllReportsState(); +} + +class _AllReportsState extends State { + + + List reportsList = []; + List reportsListOriginal = []; + bool isReportsDataLoading = false; + bool isSereverIssue = false; + + Future gaetAllRecords() async { + isReportsDataLoading=true; + try { + var response = await AppSettings.getAllRecords(); + + setState(() { + reportsListOriginal = ((jsonDecode(response)) as List) + .map((dynamic model) { + return ReportsModel.fromJson(model); + }).toList(); + reportsList=reportsListOriginal.reversed.toList(); + isReportsDataLoading = false; + }); + } catch (e) { + setState(() { + isReportsDataLoading = false; + isSereverIssue = true; + }); + } + } + + @override + void initState() { + gaetAllRecords(); + super.initState(); + } + + + showPicDialog(var imageUrl){ + return showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return StatefulBuilder( + builder: (BuildContext context, StateSetter setState) { + return AlertDialog( + title: const Text(''), + content: SingleChildScrollView( + child: ListBody( + children: [ + Container( + width: MediaQuery.of(context).size.width * .10, + height: MediaQuery.of(context).size.height * .50, + child: PhotoView( + imageProvider: NetworkImage(imageUrl) as ImageProvider, + maxScale: PhotoViewComputedScale.contained * 4.0, + minScale: PhotoViewComputedScale.contained, + initialScale: PhotoViewComputedScale.contained, + basePosition: Alignment.center, + + ) + ) + ], + ), + ), + actions: [ + TextButton( + child: Text('Close', style: textButtonStyle()), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }); + }, + ); + } + + + Widget findings(var obj){ + return Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * .20, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: obj.findingsImages.length, + itemBuilder: (context, index) { + return Column( + children: [ + Card( + child: GestureDetector( + onTap: (){ + /*showPicDialog(obj.findingsImages[index]['url']);*/ + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new ImageZoomPage(imageName:'Findings',imageDetails:obj.findingsImages[index]['url']))); + }, + child: Container( + width: MediaQuery.of(context).size.width * + .30, + height: + MediaQuery.of(context).size.height * + .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + obj.findingsImages[index]['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + ), + ), + ), + /*Expanded(child:IconButton( + icon: const Icon(Icons.remove,color: Colors.red,), + + onPressed: () async{ + + }, + ),)*/ + ], + ); + }), + ); + } + + Widget reports(var obj){ + + return Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * .20, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: obj.reportImages.length, + itemBuilder: (context, index) { + return Column( + children: [ + Card( + child: GestureDetector( + onTap: (){ + //showPicDialog(obj.reportImages[index]['url']); + + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new ImageZoomPage(imageName:'Reports',imageDetails:obj.reportImages[index]['url']))); + + }, + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + obj.reportImages[index] + ['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + ), + ), + ), + /*Expanded(child:IconButton( + icon: const Icon(Icons.remove,color: Colors.red,), + + onPressed: () async{ + + }, + ),)*/ + ], + ); + }), + ); + + } + + Widget prescriptions(var obj){ + + return Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * .20, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: obj.prescriptionImages.length, + itemBuilder: (context, index) { + return Column( + children: [ + Card( + child: GestureDetector( + onTap: (){ + //showPicDialog(obj.prescriptionImages[index]['url']); + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new ImageZoomPage(imageName:'Prescriptions',imageDetails:obj.prescriptionImages[index]['url']))); + + + + }, + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + obj.prescriptionImages[index] + ['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + ), + ), + ), + /*Expanded(child:IconButton( + icon: const Icon(Icons.remove,color: Colors.red,), + + onPressed: () async{ + + }, + ),)*/ + ], + ); + }), + ); + + } + + + Widget _allreports(){ + + if(reportsList.length!=0){ + return Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Expanded(child:ListView.builder( + padding: EdgeInsets.all(0), + itemCount: reportsList.length, + itemBuilder: (BuildContext context, int index) { + return Card( + + //color: prescriptionsList[index].cardColor, + child: Padding( + padding:EdgeInsets.all(8) , + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + 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: [ + Text('Problem: '+reportsList[index].problem.toString().toUpperCase(),style: problemTextStyle()), + Text(reportsList[index].doctorName.toString().toUpperCase(),style: valuesTextStyle()), + Text(reportsList[index].hospitalName.toString().toUpperCase(),style: valuesTextStyle()), + Text(reportsList[index].date.toString().toUpperCase(),style: valuesTextStyle()), + Text(reportsList[index].patient_name.toString().toUpperCase(),style: valuesTextStyle()), + Text(reportsList[index].gender.toString().toUpperCase(),style: valuesTextStyle()), + Text(reportsList[index].age.toString().toUpperCase(),style: valuesTextStyle()), + ], + ), + + + ), + + + Expanded(child:IconButton( + icon: const Icon(Icons.edit,color: primaryColor,), + onPressed: () { + + + }, + ),), + Expanded(child:IconButton( + icon: const Icon(Icons.delete,color: primaryColor,), + + onPressed: () async{ + showDialog( + //if set to true allow to close popup by tapping out of the popup + //barrierDismissible: false, + context: context, + builder: (BuildContext context) => AlertDialog( + title: const Text('Do you want to delete Record?', + style: TextStyle( + color: primaryColor, + fontSize: 20, + )), + actionsAlignment: MainAxisAlignment.spaceBetween, + actions: [ + TextButton( + onPressed: ()async { + + bool deleteTankStatus = await AppSettings.deleteRecord(reportsList[index].recordId); + + + if(deleteTankStatus){ + gaetAllRecords(); + AppSettings.longSuccessToast('Record deleted successfully'); + Navigator.of(context).pop(true); + + } + else{ + AppSettings.longFailedToast('Record deletion failed'); + Navigator.of(context).pop(true); + } + }, + child: const Text('Yes', + style: TextStyle( + color: primaryColor, + fontSize: 20, + )), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(true); + }, + child: const Text('No', + style: TextStyle( + color: primaryColor, + fontSize: 20, + )), + ), + ], + ), + ); + + + + }, + ),) + + ], + + ), + + Row( + children: [ + ElevatedButton( + style: ElevatedButton.styleFrom( + primary: primaryColor, // background + onPrimary: Colors.white, // foreground + ), + onPressed: () async { + /*Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const FindingImages()), + );*/ + + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new FindingImages(imageDetails:reportsList[index].findingsImages))); + }, + child: Text('Findings: '+reportsList[index].findingsImages.length.toString()), + ), + SizedBox( + width:MediaQuery.of(context).size.width * .05, + ), + ElevatedButton( + style: ElevatedButton.styleFrom( + primary: primaryColor, // background + onPrimary: Colors.white, // foreground + ), + onPressed: () async { + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new ReportImages(imageDetails:reportsList[index].reportImages))); + + }, + child: Text('Reports: '+reportsList[index].reportImages.length.toString()), + ), + SizedBox( + width:MediaQuery.of(context).size.width * .05, + ), + ElevatedButton( + style: ElevatedButton.styleFrom( + primary: primaryColor, // background + onPrimary: Colors.white, // foreground + ), + onPressed: () async { + }, + child: Text('Prescriptions: '+reportsList[index].prescriptionImages.length.toString()), + ), + ], + ), + + + + Visibility( + visible: false, + child: Text('Findings',style: headingsTextStyle()),), + Visibility( + visible: false, + child: findings(reportsList[index])), + Visibility( + visible: false, + child: Text('Reports',style: headingsTextStyle()),), + Visibility( + visible: false, + child:reports(reportsList[index]) ), + Visibility( + visible: false, + child: Text('Prescriptions',style: headingsTextStyle()),), + Visibility( + visible:false, + child:prescriptions(reportsList[index]) ), + ], + ), + ), + ); + }) ), + Padding( + padding: EdgeInsets.fromLTRB(8, 8, 8, 8), + child: CircleAvatar( + backgroundColor: primaryColor, + radius: 40, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + iconSize: 40, + icon: const Icon( + Icons.add, + color: Colors.white, + ), + onPressed: () async{ + /*await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AddPrescription()), + );*/ + Navigator.push(context, MaterialPageRoute(builder: (context) => AddReports())).then((value) { + gaetAllRecords(); + }); + //showBoreAddingDialog(); + }, + ), + /* Padding( + padding: EdgeInsets.fromLTRB(5, 0, 5, 5), + child: Text( + 'Add Tanks ', + style: TextStyle(color: Colors.white), + ), + )*/ + ], + ), + ), + ), + ]); + } + 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('Click below icon to add new Record'), + SizedBox( + height: 20, + ), + CircleAvatar( + backgroundColor: primaryColor, + radius: 40, + child: IconButton( + iconSize: 40, + icon: const Icon( + Icons.add, + color: Colors.white, + ), + onPressed: () async { + Navigator.push(context, MaterialPageRoute(builder: (context) => AddReports())).then((value) { + gaetAllRecords(); + }); + }, + ), + ) + ], + ), + ) + ); + } + + + } + + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Reports'), + body: isReportsDataLoading?Center( + child: CircularProgressIndicator( + color: primaryColor, + strokeWidth: 5.0, + ), + ): _allreports(), + ); + } +} diff --git a/lib/Reports/finding_images.dart b/lib/Reports/finding_images.dart new file mode 100644 index 0000000..412a463 --- /dev/null +++ b/lib/Reports/finding_images.dart @@ -0,0 +1,79 @@ +import 'package:flutter/material.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/common/zoom_image.dart'; + +class FindingImages extends StatefulWidget { + var imageDetails; + FindingImages({this.imageDetails}); + + + @override + State createState() => _FindingImagesState(); +} + +class _FindingImagesState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Finding Images'), + body:Container( + padding: EdgeInsets.all(12.0), + child: GridView.builder( + itemCount:widget.imageDetails.length, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + crossAxisSpacing: 2.0, + mainAxisSpacing: 2.0, + ), + itemBuilder: (BuildContext context, int index) { + return GestureDetector( + onTap: () { + + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new ImageZoomPage(imageName:'Findings',imageDetails:widget.imageDetails[index]['url']))); + /*gridOntap(index);*/ + }, + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + widget.imageDetails[index]['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + child: Stack( + children: [ + Positioned( + right: 0, + child: Container( + child: IconButton( + iconSize: 30, + icon: const Icon( + Icons.cancel, + color: Colors.red, + ), + onPressed: () async { + + + + + }, + ), + /* color: Colors.pinkAccent, + width: 35, + height: 35,*/ + ), + )]), + ), + + //Image.network(widget.imageDetails[index]['url']), + ); + }, + )), + ); + } +} diff --git a/lib/Reports/report_images.dart b/lib/Reports/report_images.dart new file mode 100644 index 0000000..4dee705 --- /dev/null +++ b/lib/Reports/report_images.dart @@ -0,0 +1,114 @@ +import 'package:flutter/material.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/common/zoom_image.dart'; + +class ReportImages extends StatefulWidget { + var imageDetails; + ReportImages({this.imageDetails}); + + @override + State createState() => _ReportImagesState(); +} + +class _ReportImagesState extends State { + Widget renderUi() { + + if(widget.imageDetails.length!=0){ + return GridView.builder( + itemCount: widget.imageDetails.length, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + crossAxisSpacing: 2.0, + mainAxisSpacing: 2.0, + ), + itemBuilder: (BuildContext context, int index) { + return GestureDetector( + onTap: () { + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new ImageZoomPage( + imageName: 'Findings', + imageDetails: widget.imageDetails[index]['url']))); + /*gridOntap(index);*/ + }, + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage(widget.imageDetails[index]['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + child: Stack(children: [ + Positioned( + right: 0, + child: Container( + child: IconButton( + iconSize: 30, + icon: const Icon( + Icons.cancel, + color: Colors.red, + ), + onPressed: () async {}, + ), + /* color: Colors.pinkAccent, + width: 35, + height: 35,*/ + ), + ) + ]), + ), + + //Image.network(widget.imageDetails[index]['url']), + ); + }, + ); + } + 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('Click below icon to add new Report'), + SizedBox( + height: 20, + ), + CircleAvatar( + backgroundColor: primaryColor, + radius: 40, + child: IconButton( + iconSize: 40, + icon: const Icon( + Icons.add, + color: Colors.white, + ), + onPressed: () async { + /*Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const Login()), + );*/ + }, + ), + ) + ], + ), + ) + ); + } + + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Report Images'), + body: Container(padding: EdgeInsets.all(12.0), child: renderUi()), + ); + } +} diff --git a/lib/chart/bmi_chart.dart b/lib/chart/bmi_chart.dart new file mode 100644 index 0000000..18b162b --- /dev/null +++ b/lib/chart/bmi_chart.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:healthcare_user/models/bmi_history_model.dart'; + + +class BmiChart extends StatefulWidget { + var myObject; + BmiChart({ + this.myObject + }); + + @override + State createState() => _BmiChartState(); +} + +class _BmiChartState extends State { + + + _getSeriesData() { + List> series = [ + charts.Series( + id: "Sales", + data: widget.myObject, + domainFn: (BmiHistoryModel series, _) => series.dateForFilter, + measureFn: (BmiHistoryModel series, _) => series.number2, + colorFn: (BmiHistoryModel series, _) => charts.MaterialPalette.blue.shadeDefault + ) + ]; + return series; + } + + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('BMI Chart'), + body: Container( + + child:new charts.TimeSeriesChart(_getSeriesData(), animate: true,), + + ), + ); + } +} diff --git a/lib/chart/bpchart.dart b/lib/chart/bpchart.dart new file mode 100644 index 0000000..f790b7f --- /dev/null +++ b/lib/chart/bpchart.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:healthcare_user/common/settings.dart'; +class SalesData { + final int year; + final int sales; + + SalesData(this.year, this.sales); +} + +final data = [ + new SalesData(0, 1500000), + new SalesData(1, 1735000), + new SalesData(2, 1678000), + new SalesData(3, 1890000), + new SalesData(4, 1907000), + new SalesData(5, 2300000), + new SalesData(6, 2360000), + new SalesData(7, 1980000), + new SalesData(8, 2654000), + new SalesData(9, 2789070), + new SalesData(10, 3020000), + new SalesData(11, 3245900), + new SalesData(12, 4098500), + new SalesData(13, 4500000), + new SalesData(14, 4456500), + new SalesData(15, 3900500), + new SalesData(16, 5123400), + new SalesData(17, 5589000), + new SalesData(18, 5940000), + new SalesData(19, 6367000), +]; + + +_getSeriesData() { + List> series = [ + charts.Series( + id: "Sales", + data: data, + domainFn: (SalesData series, _) => series.year, + measureFn: (SalesData series, _) => series.sales, + colorFn: (SalesData series, _) => charts.MaterialPalette.blue.shadeDefault + ) + ]; + return series; +} + +class Bpchart extends StatefulWidget { + const Bpchart({Key? key}) : super(key: key); + + @override + State createState() => _BpchartState(); +} + +class _BpchartState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar('Bp chart'), + body: Container( + child:new charts.LineChart(_getSeriesData(), animate: true,), + ), + ); + } +} diff --git a/lib/common/dashboard.dart b/lib/common/dashboard.dart index dbdea3f..4e7648c 100644 --- a/lib/common/dashboard.dart +++ b/lib/common/dashboard.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:healthcare_user/Reports/allreports.dart'; import 'package:healthcare_user/common/updateprofile.dart'; import 'package:healthcare_user/emergency.dart'; import 'package:healthcare_user/howareufeeling_today.dart'; @@ -10,7 +11,7 @@ import 'package:healthcare_user/my_health.dart'; import 'package:healthcare_user/my_medicine_timings.dart'; import 'package:healthcare_user/prescriptions/prescriptions.dart'; import 'package:healthcare_user/report_my_self.dart'; -import 'package:healthcare_user/reports.dart'; +import 'package:healthcare_user/Reports/add_reports.dart'; import 'package:healthcare_user/seekopinion.dart'; import 'package:healthcare_user/common/settings.dart'; import 'package:image_picker/image_picker.dart'; @@ -75,7 +76,7 @@ class _DashboardState extends State { } else if (ind == 1) { Navigator.push( context, - MaterialPageRoute(builder: (context) => const Reports()), + MaterialPageRoute(builder: (context) => const AddReports()), ); } else if (ind == 2) { Navigator.push( @@ -274,7 +275,7 @@ class _DashboardState extends State { Navigator.push( context, MaterialPageRoute( - builder: (context) => const Reports()), + builder: (context) => const AllReports()), ); }, ), diff --git a/lib/common/settings.dart b/lib/common/settings.dart index 404e0b9..d905300 100644 --- a/lib/common/settings.dart +++ b/lib/common/settings.dart @@ -12,6 +12,7 @@ import 'package:flutter_styled_toast/flutter_styled_toast.dart'; import 'dart:async'; import 'package:geolocator/geolocator.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:path/path.dart' as path; //const Color primaryColor = Color(0XFF1786A3); const Color primaryColor = Color(0XFF68A85D); @@ -54,6 +55,22 @@ TextStyle valuesTextStyle() { ); } +TextStyle problemTextStyle() { + return TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: Colors.red + ); +} + +TextStyle headingsTextStyle() { + return TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: primaryColor + ); +} + TextStyle startAndStopHeading() { return TextStyle( fontSize: 14, @@ -220,12 +237,22 @@ class AppSettings { static String addMedicineTimingsUrl = host + 'medicine-timing'; static String getMedicineTimingsUrl = host + 'getmedicineztiming'; static String prescriptionUploadPicUrl = host + 'uploads-precription'; + static String findingsUploadPicUrl = host + 'uploads-findings-prescription'; + static String reportsUploadPicUrl = host + 'uploads-reports-prescription'; + static String recordPrescriptionsUploadPicUrl = host + 'uploads-prescription-prescription'; static String getAllpharmaciesDataUrl = host + 'getAllPharmacylist'; static String getAllQuotationRequestsUrl = host + 'userprecription'; static String getQuotationUrl = host + 'submitPicture'; static String addPrescriptionUrl = host + 'add-prescription-details'; + static String addRecordsUrl = host + 'add-record'; static String reportMySelfVideoUploadUrl = host + 'reportProblemVideo'; - static String getAllPrescriptionsDataUrl = host + 'usersinglerprecription'; + //static String getAllPrescriptionsDataUrl = host + 'usersinglerprecription'; + static String getAllPrescriptionsDataUrl = host + 'getAllPrescriptionDetails'; + + static String getRecordsDataUrl = host + 'getAllRecords'; + static String deleteRecordUrl = host + 'deleteRecord'; + + static File? updatedImage; static String image = ''; @@ -690,6 +717,60 @@ class AppSettings { return response.body; } + static Future uploadImageForFindings(file) async { + + var request = http.MultipartRequest( + 'POST', Uri.parse(findingsUploadPicUrl + '/' + customerId)); + if (file.length > 0) { + for (var i = 0; i < file.length; i++) { + request.files.add(await http.MultipartFile.fromPath('picture', file[i].path)); + }} + // request.files.add(await http.MultipartFile.fromPath('picture', images.toString().replaceAll('[', '').replaceAll(']',''))); + var res = await request.send(); + var response = await http.Response.fromStream(res); + return response.body; + } + + static Future uploadImageForReports(file) async { + + var request = http.MultipartRequest( + 'POST', Uri.parse(reportsUploadPicUrl + '/' + customerId)); + if (file.length > 0) { + for (var i = 0; i < file.length; i++) { + request.files.add(await http.MultipartFile.fromPath('picture', file[i].path)); + }} + // request.files.add(await http.MultipartFile.fromPath('picture', images.toString().replaceAll('[', '').replaceAll(']',''))); + var res = await request.send(); + var response = await http.Response.fromStream(res); + return response.body; + } + + + static Future uploadImageForPrescriptions(file) async { + + var request = http.MultipartRequest( + 'POST', Uri.parse(recordPrescriptionsUploadPicUrl + '/' + customerId)); + if (file.length > 0) { + for (var i = 0; i < file.length; i++) { + request.files.add(await http.MultipartFile.fromPath('picture', file[i].path)); + }} + // request.files.add(await http.MultipartFile.fromPath('picture', images.toString().replaceAll('[', '').replaceAll(']',''))); + var res = await request.send(); + var response = await http.Response.fromStream(res); + return response.body; + } + + static Future uploadImageForFindingsCamera(file) async { + + var request = http.MultipartRequest( + 'POST', Uri.parse(findingsUploadPicUrl + '/' + 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 uploadVideoInReportMySelf(file) async { var request = http.MultipartRequest( 'POST', Uri.parse(reportMySelfVideoUploadUrl + '/' + customerId)); @@ -859,6 +940,39 @@ class AppSettings { } } + + static Future addRecords(payload) async { + var uri = Uri.parse(addRecordsUrl + '/' + customerId); + var response = await http.post(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + + if (response.statusCode == 200) { + try { + var _response = json.decode(response.body); + print(_response); + return true; + } catch (e) { + print(e); + return false; + } + } 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 true; + } else { + return false; + } + } else { + return false; + } + } else { + return false; + } + } + static Future getAllPrescriptions() async { var uri = Uri.parse(getAllPrescriptionsDataUrl + '/' + customerId); //uri = uri.replace(query: 'customerId=$customerId'); @@ -883,6 +997,61 @@ class AppSettings { } } + + static Future getAllRecords() async { + var uri = Uri.parse(getRecordsDataUrl + '/' + customerId); + //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 deleteRecord(recordId) async { + var uri = Uri.parse(deleteRecordUrl + '/' + recordId); + + try { + var response = await http.delete(uri, headers: await buildRequestHeaders()); + + if (response.statusCode == 200) { + return true; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.delete(uri, headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return true; + } else { + return false; + } + } else { + return false; + } + } else { + return false; + } + } catch (e) { + print(e); + return false; + } + } + /*Apis ends here*/ //save data local diff --git a/lib/common/zoom_image.dart b/lib/common/zoom_image.dart new file mode 100644 index 0000000..5cc137a --- /dev/null +++ b/lib/common/zoom_image.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:healthcare_user/common/settings.dart'; +import 'package:photo_view/photo_view.dart'; +class ImageZoomPage extends StatefulWidget { + var imageName; + var imageDetails; + ImageZoomPage({this.imageName,this.imageDetails}); + + + @override + State createState() => _ImageZoomPageState(); +} + +class _ImageZoomPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppSettings.appBar(widget.imageName), + body: Container( + //width: MediaQuery.of(context).size.width * .10, + //height: MediaQuery.of(context).size.height * .50, + child: PhotoView( + imageProvider: NetworkImage(widget.imageDetails) as ImageProvider, + maxScale: PhotoViewComputedScale.contained * 4.0, + minScale: PhotoViewComputedScale.contained, + initialScale: PhotoViewComputedScale.contained, + basePosition: Alignment.center, + + ) + ), + + ); + } +} diff --git a/lib/models/bmi_history_model.dart b/lib/models/bmi_history_model.dart index 17d1340..a2c10c2 100644 --- a/lib/models/bmi_history_model.dart +++ b/lib/models/bmi_history_model.dart @@ -10,6 +10,8 @@ class BmiHistoryModel { String displayDate=''; DateTime dateForFilter=new DateTime.now(); + var number1; + var number2; BmiHistoryModel(); @@ -30,6 +32,8 @@ class BmiHistoryModel { rtvm.bmiValue = json['bmivalue'].toString() ?? ''; rtvm.height = json['height'].toString() ?? ''; rtvm.weight = json['weight'].toString() ?? ''; + rtvm.number1 = double.parse( rtvm.bmiValue); + rtvm.number2 = double.parse( rtvm.bmiValue); rtvm.date = json['createdAt'].toString() ?? ''; //DateTime tempDate = new DateFormat("yyyy-MM-dd hh:mm:ss").parse(rtvm.date); diff --git a/lib/models/prescriptions_model.dart b/lib/models/prescriptions_model.dart index 63a9a5d..9445846 100644 --- a/lib/models/prescriptions_model.dart +++ b/lib/models/prescriptions_model.dart @@ -8,13 +8,17 @@ class PrescriptionsModel { String age=''; String gender=''; String patient_type=''; + List prescriptionUrls=[]; + PrescriptionsModel(); factory PrescriptionsModel.fromJson(Map json){ PrescriptionsModel rtvm = new PrescriptionsModel(); - rtvm.prescription_name = json['name'] ?? ''; + rtvm.prescriptionUrls=json['precription']??[]; + + /*rtvm.prescription_name = json['name'] ?? ''; rtvm.patient_type = json['patientType'] ?? ''; rtvm.prescription_url = json['pictureUrl'][0] ?? ''; @@ -23,16 +27,12 @@ class PrescriptionsModel { rtvm.gender=AppSettings.gender; rtvm.patient_name=AppSettings.userName; } - /* "others": { - "name": "jhanu", - "age": 23, - "gender": "female" - },*/ + else{ rtvm.age=json['others']['age'].toString(); rtvm.gender=json['others']['gender']; rtvm.patient_name=json['others']['name']; - } + }*/ return rtvm; } diff --git a/lib/models/reports_model.dart b/lib/models/reports_model.dart new file mode 100644 index 0000000..7882c67 --- /dev/null +++ b/lib/models/reports_model.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; +import 'package:healthcare_user/common/settings.dart'; + +class ReportsModel { + String patient_name=''; + String age=''; + String gender=''; + String patient_type=''; + String problem=''; + String doctorName=''; + String hospitalName=''; + String date=''; + String recordId=''; + List findingsImages = []; + List reportImages = []; + List prescriptionImages = []; + + ReportsModel(); + + factory ReportsModel.fromJson(Map json){ + ReportsModel rtvm = new ReportsModel(); + + rtvm.patient_type = json['patientType'] ?? ''; + rtvm.doctorName = json['doctorName'] ?? ''; + rtvm.hospitalName = json['hospitalName'] ?? ''; + rtvm.problem = json['problem'] ?? ''; + rtvm.date = json['date'] ?? ''; + rtvm.recordId = json['recordId'] ?? ''; + rtvm.findingsImages = json['findings'] ?? []; + rtvm.reportImages = json['reports'] ?? []; + rtvm.prescriptionImages = json['prescription'] ?? []; + + if(rtvm.patient_type.toString().toLowerCase()=='self'){ + rtvm.age=AppSettings.age; + rtvm.gender=AppSettings.gender; + rtvm.patient_name=AppSettings.userName; + } + else{ + rtvm.age=json['others']['age'].toString(); + rtvm.gender=json['others']['gender']; + rtvm.patient_name=json['others']['name']; + } + + return rtvm; + } + +} \ No newline at end of file diff --git a/lib/prescriptions/oreder_medicines.dart b/lib/prescriptions/oreder_medicines.dart index e4a86db..7f52bad 100644 --- a/lib/prescriptions/oreder_medicines.dart +++ b/lib/prescriptions/oreder_medicines.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/common/zoom_image.dart'; import 'package:healthcare_user/google_maps_place_picker_mb/src/models/pick_result.dart'; import 'package:healthcare_user/google_maps_place_picker_mb/src/place_picker.dart'; import 'package:healthcare_user/keys.dart'; @@ -701,10 +702,10 @@ class _OrderMedicinesState extends State { payload["picture"] = widget.prescriptionDetails.prescription_url.toString(); payload["pharmacies"] = pharmaciesCheckboxes; payload["familyDetails"] = { - "patient_name": widget.prescriptionDetails.patient_name.toString(), - "patient_age": int.parse(widget.prescriptionDetails.age.toString()), - "patient_gender": widget.prescriptionDetails.gender.toString().toLowerCase(), - "patient_address": userAddress + "patient_name": widget.prescriptionDetails.patient_name.toString()??'', + "patient_age": int.parse(widget.prescriptionDetails.age.toString())??0, + "patient_gender": widget.prescriptionDetails.gender.toString().toLowerCase()??'', + "patient_address": userAddress??'' }; bool status = await AppSettings.getQuotation(payload); @@ -815,6 +816,58 @@ class _OrderMedicinesState extends State { super.initState(); } + + Widget prescriptions(var obj){ + + return Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * .20, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: obj.prescriptionUrls.length, + itemBuilder: (context, index) { + return Column( + children: [ + Card( + child: GestureDetector( + onTap: (){ + //showPicDialog(obj.prescriptionImages[index]['url']); + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new ImageZoomPage(imageName:'Prescriptions',imageDetails:obj.prescriptionUrls[index]['url']))); + + + + }, + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + obj.prescriptionUrls[index] + ['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + ), + ), + ), + /*Expanded(child:IconButton( + icon: const Icon(Icons.remove,color: Colors.red,), + + onPressed: () async{ + + }, + ),)*/ + ], + ); + }), + ); + + } + @override Widget build(BuildContext context) { return Scaffold( @@ -825,51 +878,7 @@ class _OrderMedicinesState extends State { children: [ Padding( padding: EdgeInsets.all(10), - child: Row( - children: [ - Container( - width: MediaQuery.of(context).size.width * .18, - height: MediaQuery.of(context).size.height * .10, - decoration: BoxDecoration( - shape: BoxShape.rectangle, - image: DecorationImage( - image: NetworkImage(widget.prescriptionDetails.prescription_url) - as ImageProvider, // picked file - fit: BoxFit.contain)), - ), - SizedBox( - width: MediaQuery.of(context).size.width * .02, - ), - Container( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.prescriptionDetails.prescription_name - .toString() - .toUpperCase(), - style: valuesTextStyle()), - Text( - widget.prescriptionDetails.patient_name - .toString() - .toUpperCase(), - style: valuesTextStyle()), - Text( - widget.prescriptionDetails.gender - .toString() - .toUpperCase(), - style: valuesTextStyle()), - Text( - widget.prescriptionDetails.age - .toString() - .toUpperCase(), - style: valuesTextStyle()), - ], - ), - ), - ], - )), + child: prescriptions(widget.prescriptionDetails),), Padding( padding: EdgeInsets.all(10), child: Row( diff --git a/lib/prescriptions/prescriptions.dart b/lib/prescriptions/prescriptions.dart index 4ccc2b3..c0d24da 100644 --- a/lib/prescriptions/prescriptions.dart +++ b/lib/prescriptions/prescriptions.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:geolocator/geolocator.dart'; import 'package:healthcare_user/common/settings.dart'; +import 'package:healthcare_user/common/zoom_image.dart'; import 'package:healthcare_user/models/pharmacies_model.dart'; import 'package:healthcare_user/prescriptions/add_prescriptions.dart'; import 'package:healthcare_user/prescriptions/oreder_medicines.dart'; @@ -443,6 +444,57 @@ class _PrescriptionsState extends State { ); } + Widget prescriptions(var obj){ + + return Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * .20, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: obj.prescriptionUrls.length, + itemBuilder: (context, index) { + return Column( + children: [ + Card( + child: GestureDetector( + onTap: (){ + //showPicDialog(obj.prescriptionImages[index]['url']); + Navigator.push( + context, + new MaterialPageRoute( + builder: (__) => new ImageZoomPage(imageName:'Prescriptions',imageDetails:obj.prescriptionUrls[index]['url']))); + + + + }, + child: Container( + width: MediaQuery.of(context).size.width * .30, + height: MediaQuery.of(context).size.height * .15, + decoration: BoxDecoration( + shape: BoxShape.rectangle, + image: DecorationImage( + image: NetworkImage( + obj.prescriptionUrls[index] + ['url']) + as ImageProvider, // picked file + fit: BoxFit.fill)), + ), + ), + ), + /*Expanded(child:IconButton( + icon: const Icon(Icons.remove,color: Colors.red,), + + onPressed: () async{ + + }, + ),)*/ + ], + ); + }), + ); + + } + Widget _allPrescriptions(){ if (prescriptionsList.length != 0) { return Column( @@ -460,114 +512,7 @@ class _PrescriptionsState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - GestureDetector( - child: Container( - width: MediaQuery.of(context).size.width * .18, - height: - MediaQuery.of(context).size.height * .10, - decoration: BoxDecoration( - shape: BoxShape.rectangle, - image: DecorationImage( - image: NetworkImage(prescriptionsList[index].prescription_url) as ImageProvider, // picked file - fit: BoxFit.contain)), - ), - onTap: (){ - showPicDialog(prescriptionsList[index].prescription_url); - - }, - ), - SizedBox(width:MediaQuery.of(context).size.width * .02,), - - Container( - width: MediaQuery.of(context).size.width * .55, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(prescriptionsList[index].prescription_name.toString().toUpperCase(),style: valuesTextStyle()), - Text(prescriptionsList[index].patient_name.toString().toUpperCase(),style: valuesTextStyle()), - Text(prescriptionsList[index].gender.toString().toUpperCase(),style: valuesTextStyle()), - Text(prescriptionsList[index].age.toString().toUpperCase(),style: valuesTextStyle()), - ], - ), - - - ), - - - Expanded(child:IconButton( - icon: const Icon(Icons.edit,color: primaryColor,), - onPressed: () { - - - }, - ),), - Expanded(child:IconButton( - icon: const Icon(Icons.delete,color: primaryColor,), - - onPressed: () async{ - /* showDialog( - //if set to true allow to close popup by tapping out of the popup - //barrierDismissible: false, - context: context, - builder: (BuildContext context) => AlertDialog( - title: const Text('Do you want to delete tank?', - style: TextStyle( - color: primaryColor, - fontSize: 20, - )), - actionsAlignment: MainAxisAlignment.spaceBetween, - actions: [ - TextButton( - onPressed: ()async { - var payload = new Map(); - payload["tankLocation"] = modelTanksViewList[index].tank_location.toString().toLowerCase(); - bool deleteTankStatus = await AppSettings.deleteTank(modelTanksViewList[index].tank_name,payload); - - - if(deleteTankStatus){ - readJson(); - AppSettings.longSuccessToast('tank deleted successfully'); - Navigator.of(context).pop(true); - - } - else{ - AppSettings.longFailedToast('tank deletion failed'); - Navigator.of(context).pop(true); - } - }, - child: const Text('Yes', - style: TextStyle( - color: primaryColor, - fontSize: 20, - )), - ), - TextButton( - onPressed: () { - Navigator.of(context).pop(true); - }, - child: const Text('No', - style: TextStyle( - color: primaryColor, - fontSize: 20, - )), - ), - ], - ), - );*/ - - - - }, - ),) - - ], - - ), + prescriptions(prescriptionsList[index]), TextButton( child: const Text( 'Order Medicines', diff --git a/lib/reports.dart b/lib/reports.dart deleted file mode 100644 index e8ea39b..0000000 --- a/lib/reports.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:healthcare_user/common/settings.dart'; - -class Reports extends StatefulWidget { - const Reports({Key? key}) : super(key: key); - - @override - State createState() => _ReportsState(); -} - -class _ReportsState extends State { - - TextEditingController doctorNameController = TextEditingController(); - TextEditingController hospitalNameController = TextEditingController(); - TextEditingController problemController = TextEditingController(); - - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppSettings.appBar('Reports'), - body: Container( - child: Padding( - padding: EdgeInsets.all(10), - child: Column( - children: [ - Container( - child: TextFormField( - cursorColor: greyColor, - controller: doctorNameController, - decoration: textFormFieldDecoration(Icons.person,'Enter Doctor name'), - ), - ), - SizedBox(height:MediaQuery.of(context).size.height * .02,), - Container( - child: TextFormField( - cursorColor: greyColor, - controller: hospitalNameController, - decoration: textFormFieldDecoration(Icons.location_city_outlined,'Enter Hospital name'), - ), - ), - SizedBox(height:MediaQuery.of(context).size.height * .02,), - Container( - child: TextFormField( - cursorColor: greyColor, - controller: problemController, - decoration: textFormFieldDecoration(Icons.edit,'Enter Problem'), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/pubspec.lock b/pubspec.lock index 3ea868b..14bcec6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -57,6 +57,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.1" + charts_common: + dependency: transitive + description: + name: charts_common + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0" + charts_flutter: + dependency: "direct dev" + description: + name: charts_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0" checked_yaml: dependency: transitive description: @@ -679,6 +693,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.1" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" matcher: dependency: transitive description: @@ -700,6 +721,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0" + multi_image_picker: + dependency: "direct dev" + description: + name: multi_image_picker + url: "https://pub.dartlang.org" + source: hosted + version: "4.8.01" nested: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 7061105..e5feb3a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -65,6 +65,8 @@ dev_dependencies: photo_view: ^0.14.0 pinch_zoom: ^1.0.0 dots_indicator: ^3.0.0 + multi_image_picker: ^4.8.1 + charts_flutter: ^0.12.0 flutter_icons: image_path_ios: 'images/appicon.png'