From 6ebee5dbf6261bb82bf5ff04c829ade8c2f137c7 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 1 Jun 2020 10:30:28 +0300 Subject: [PATCH 01/15] first step form chart --- lib/models/chart_axis_model.dart | 7 + lib/models/patient/vital_sign_res_model.dart | 6 +- .../vital_sign/body_measurements_screen.dart | 260 ++++++++++-------- .../vital_sign/vital_sign_details_screen.dart | 1 + lib/widgets/auth/verfiy_account.dart | 4 + lib/widgets/shared/charts/app_line_chart.dart | 34 +++ 6 files changed, 200 insertions(+), 112 deletions(-) create mode 100644 lib/models/chart_axis_model.dart create mode 100644 lib/widgets/shared/charts/app_line_chart.dart diff --git a/lib/models/chart_axis_model.dart b/lib/models/chart_axis_model.dart new file mode 100644 index 00000000..781d0e71 --- /dev/null +++ b/lib/models/chart_axis_model.dart @@ -0,0 +1,7 @@ +/// Sample linear data type. +class ChartAxis { + final int xAxis; + final int yAxis; + + ChartAxis(this.xAxis, this.yAxis); +} diff --git a/lib/models/patient/vital_sign_res_model.dart b/lib/models/patient/vital_sign_res_model.dart index 6066e4b0..28b43cd7 100644 --- a/lib/models/patient/vital_sign_res_model.dart +++ b/lib/models/patient/vital_sign_res_model.dart @@ -5,6 +5,8 @@ *@return:VitalSignResModel *@desc: VitalSignResModel class */ +import 'package:doctor_app_flutter/util/helpers.dart'; + class VitalSignResModel { var transNo; var projectID; @@ -42,7 +44,7 @@ class VitalSignResModel { var triageCategory; var gCScore; var lineItemNo; - var vitalSignDate; + DateTime vitalSignDate; var actualTimeTaken; var sugarLevel; var fBS; @@ -168,7 +170,7 @@ class VitalSignResModel { triageCategory = json['TriageCategory']; gCScore = json['GCScore']; lineItemNo = json['LineItemNo']; - vitalSignDate = json['VitalSignDate']; + vitalSignDate = Helpers.convertStringToDate(json['VitalSignDate']); actualTimeTaken = json['ActualTimeTaken']; sugarLevel = json['SugarLevel']; fBS = json['FBS']; diff --git a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart index 992a5780..9e0dc749 100644 --- a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart +++ b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart @@ -1,143 +1,183 @@ import 'package:charts_flutter/flutter.dart' as charts; import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/models/chart_axis_model.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; +import 'package:doctor_app_flutter/providers/patients_provider.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/charts/app_line_chart.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; class BodyMeasurementsScreen extends StatelessWidget { BodyMeasurementsScreen(); - List vitalList; + // ; + PatientsProvider patientsProv; + @override Widget build(BuildContext context) { - _seriesData = List>(); - _seriesPieData = List>(); - _seriesLineData = List>(); - _generateData(); + patientsProv = Provider.of(context); + List seriesList = generateData(); + + // generateData(); return AppScaffold( appBarTitle: 'Body Measurements', - body: RoundedContainer( - height: SizeConfig.realScreenHeight*0.4, - child: Padding( - padding: EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Column( - children: [ - Text( - 'Body Mass Index', - style: TextStyle( - fontSize: 24.0, fontWeight: FontWeight.bold), - ), - Expanded( - child: charts.BarChart( - _seriesData, - animate: true, - barGroupingType: charts.BarGroupingType.grouped, - // behaviors: [new charts.SeriesLegend()], - // primaryMeasureAxis: , - animationDuration: Duration(seconds: 1), + body: ListView( + children: [ + Column( + children: [ + RoundedContainer( + height: SizeConfig.realScreenHeight * 0.4, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Container( + child: Center( + child: Text('sss'), ), ), - ], + ), + ), + Container( + height: SizeConfig.realScreenHeight * 0.4, + child: Center( + child: Expanded( + child: charts.TimeSeriesChart(seriesList, + animate: true, + behaviors: [ + new charts.RangeAnnotation([ + new charts.RangeAnnotationSegment( + new DateTime(2017, 10, 4), + new DateTime(2017, 10, 15), + charts.RangeAnnotationAxisType.domain), + ]), + ]), + ), + ), ), - ), + ], ), - ), + ], ), ); } - List> _seriesData; - List> _seriesPieData; - List> _seriesLineData; - - _generateData() { - var data1 = [ - new Pollution(1980, 'USA', 40), + generateData() { + var myFakeMobileData3 = [ + new LinearSales(0, 15), + new LinearSales(1, 75), + new LinearSales(2, 300), + new LinearSales(3, 225), + ]; + final myFakeDesktopData = [ + new ChartAxis(10, 35), + new ChartAxis(1, 36), + new ChartAxis(5, 40), + new ChartAxis(17, 35), + new ChartAxis(4, 35), + new ChartAxis(5, 36), + new ChartAxis(15, 35), + new ChartAxis(7, 40), + new ChartAxis(11, 36), + new ChartAxis(2, 35), + new ChartAxis(10, 38), + new ChartAxis(1, 38), + ]; + final data = [ + new TimeSeriesSales(new DateTime(2017, 9, 19), 5), + new TimeSeriesSales(new DateTime(2017, 9, 26), 25), + new TimeSeriesSales(new DateTime(2017, 10, 3), 100), + new TimeSeriesSales(new DateTime(2017, 10, 10), 75), ]; - - _seriesData.add( - charts.Series( - domainFn: (Pollution pollution, _) => '', - measureFn: (Pollution pollution, _) => pollution.quantity, - id: '2017', - data: data1, - fillPatternFn: (_, __) => charts.FillPatternType.solid, - fillColorFn: (Pollution pollution, _) => - charts.ColorUtil.fromDartColor(Color(0xff990099)), - ), - ); - _seriesData.add( - charts.Series( - domainFn: (Pollution pollution, _) => '', - measureFn: (Pollution pollution, _) => pollution.quantity, - id: '2017', - data: data1, - fillPatternFn: (_, __) => charts.FillPatternType.solid, - fillColorFn: (Pollution pollution, _) => - charts.ColorUtil.fromDartColor(Color(0xff990099)), - ), - ); - _seriesData.add( - charts.Series( - domainFn: (Pollution pollution, _) => '', - measureFn: (Pollution pollution, _) => pollution.quantity, - id: '2017', - data: data1, - fillPatternFn: (_, __) => charts.FillPatternType.solid, - fillColorFn: (Pollution pollution, _) => - charts.ColorUtil.fromDartColor(Color(0xff990099)), - ), - ); - _seriesData.add( - charts.Series( - domainFn: (Pollution pollution, _) => '', - measureFn: (Pollution pollution, _) => pollution.quantity, - id: '2017', - data: data1, - fillPatternFn: (_, __) => charts.FillPatternType.solid, - fillColorFn: (Pollution pollution, _) => - charts.ColorUtil.fromDartColor(Color(0xff990099)), - ), - ); - _seriesData.add( - charts.Series( - domainFn: (Pollution pollution, _) => '', - measureFn: (Pollution pollution, _) => pollution.quantity, - id: '2017', - data: data1, - fillPatternFn: (_, __) => charts.FillPatternType.solid, - fillColorFn: (Pollution pollution, _) => - charts.ColorUtil.fromDartColor(Color(0xff990099)), - ), - ); - + final List data1 = []; - - } -} + final List myFakeDesktopData1 = []; + List vitalList = patientsProv.patientVitalSignList; + if (vitalList.length > 0) { + // vitalList.sort((VitalSignResModel a, VitalSignResModel b) { + // return a.bodyMassIndex.toInt() - b.bodyMassIndex.toInt(); + // }); + for (int x = vitalList.length - 1; x >= 0; x--) { + myFakeDesktopData1.add( + new ChartAxis( + // x, + vitalList[x].vitalSignDate.day, + // 20, + // vitalSign.bodyMassIndex.toInt(), + // vitalSign.vitalSignDate.toString(), + // vitalSign.pulseBeatPerMinute!=null?vitalSign.pulseBeatPerMinute.toInt():50, + vitalList[x].bodyMassIndex.toInt(), + ), + ); + data1.add(TimeSeriesSales(new DateTime(vitalList[x].vitalSignDate.year,vitalList[x].vitalSignDate.month,vitalList[x].vitalSignDate.day), + vitalList[x].bodyMassIndex.toInt())); + // data1.add(TimeSeriesSales(vitalList[x].vitalSignDate,vitalList[x].bodyMassIndex.toInt() + x * 15)); + } + // vitalList.forEach((VitalSignResModel vitalSign) { -class Pollution { - String place; - int year; - int quantity; + // // print(e);' + // // int x = int.parse(vitalSign.bodyMassIndex); + // myFakeDesktopData1.add( + // new ChartAxis( + // vitalSign.vitalSignDate.day, + // // 20, + // // vitalSign.bodyMassIndex.toInt(), + // // vitalSign.vitalSignDate.toString(), + // // vitalSign.pulseBeatPerMinute!=null?vitalSign.pulseBeatPerMinute.toInt():50, + // vitalSign.bodyMassIndex.toInt(), + // ), + // ); + // }); - Pollution(this.year, this.place, this.quantity); + // // map( + // // (VitalSignResModel vitalSign) { + // // print(vitalSign); + // // myFakeDesktopData1.add( + // // ChartAxis(vitalSign.transNo, vitalSign.bodyMassIndex), + // // ); + // // }, + // // ); + // } + } + return [ + new charts.Series( + id: 'Sales', + domainFn: (TimeSeriesSales sales, _) => sales.time, + measureFn: (TimeSeriesSales sales, _) => sales.sales, + data: data1, + ) + // charts.Series( + // id: 'ww', + // // Light shade for even xAxiss, dark shade for odd. + // colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, + // // dashPatternFn: (ChartAxis yAxis, _) => [2, 4], + // strokeWidthPxFn: (ChartAxis yAxis, _) => 2.5, + // domainFn: (ChartAxis xAxis, _) => xAxis.xAxis, + // measureFn: (ChartAxis yAxis, _) => yAxis.yAxis, + // data: myFakeDesktopData1, + // ), + // new charts.Series( + // id: 'Desktop', + // colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, + // domainFn: (LinearSales sales, _) => sales.year, + // measureFn: (LinearSales sales, _) => sales.sales, + // data: myFakeDesktopData1, + // ) + ]; + } } -class Task { - String task; - double taskvalue; - Color colorval; +class LinearSales { + final int year; + final int sales; - Task(this.task, this.taskvalue, this.colorval); + LinearSales(this.year, this.sales); } -class Sales { - int yearval; - int salesval; +/// Sample time series data type. +class TimeSeriesSales { + final DateTime time; + final int sales; - Sales(this.yearval, this.salesval); + TimeSeriesSales(this.time, this.sales); } diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart index d2cb5380..9547c1ce 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart @@ -73,6 +73,7 @@ class _VitalSignDetailsScreenState extends State { vitalSing = routeArgs['vitalSing']; return AppScaffold( appBarTitle: "vital Sing ", + isloading: patientsProv.isLoading, body: CustomScrollView( primary: false, slivers: [ diff --git a/lib/widgets/auth/verfiy_account.dart b/lib/widgets/auth/verfiy_account.dart index 465ce07e..963b26bf 100644 --- a/lib/widgets/auth/verfiy_account.dart +++ b/lib/widgets/auth/verfiy_account.dart @@ -402,6 +402,10 @@ class _VerifyAccountState extends State { } }).catchError((err) { print('$err'); + changeLoadingStata(false); + + print('$err'); + helpers.showErrorToast(); }); } } diff --git a/lib/widgets/shared/charts/app_line_chart.dart b/lib/widgets/shared/charts/app_line_chart.dart new file mode 100644 index 00000000..554eafa1 --- /dev/null +++ b/lib/widgets/shared/charts/app_line_chart.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +class AppLineChart extends StatelessWidget { + const AppLineChart({ + Key key, + @required this.seriesList, + this.chartTitle, + }) : super(key: key); + + final List seriesList; + + final String chartTitle; + + @override + Widget build(BuildContext context) { + return Container( + child: Column( + children: [ + Text( + 'Body Mass Index', + style: TextStyle(fontSize: 24.0, fontWeight: FontWeight.bold), + ), + Expanded( + child: charts.LineChart(seriesList, + defaultRenderer: new charts.LineRendererConfig( + includeArea: false, stacked: true), + animate: true), + ), + ], + ), + ); + } +} From 33fe5e8263fe90a4653d9ce6bc434e822f6c4020 Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Mon, 1 Jun 2020 10:31:41 +0300 Subject: [PATCH 02/15] create vital sign details --- lib/client/base_app_client.dart | 2 +- .../patients/vital_sign_details_wideget.dart | 13 ++++++++++++ pubspec.lock | 21 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 lib/widgets/patients/vital_sign_details_wideget.dart diff --git a/lib/client/base_app_client.dart b/lib/client/base_app_client.dart index 10164c4b..28c30e90 100644 --- a/lib/client/base_app_client.dart +++ b/lib/client/base_app_client.dart @@ -12,7 +12,7 @@ import 'package:http/http.dart'; *@Date:28/5/2020 *@param: url, onSuccess callBack, onFailure callBack *@return: - *@desc: convert DateTime to data formatted + *@desc: */ class BaseAppClient { static Client client = HttpInterceptor().getClient(); diff --git a/lib/widgets/patients/vital_sign_details_wideget.dart b/lib/widgets/patients/vital_sign_details_wideget.dart new file mode 100644 index 00000000..adb3f1c8 --- /dev/null +++ b/lib/widgets/patients/vital_sign_details_wideget.dart @@ -0,0 +1,13 @@ +import 'package:flutter/cupertino.dart'; + +class VitalSignDetailsWidget extends StatefulWidget { + @override + _VitalSignDetailsWidgetState createState() => _VitalSignDetailsWidgetState(); +} + +class _VitalSignDetailsWidgetState extends State { + @override + Widget build(BuildContext context) { + return Container(); + } +} diff --git a/pubspec.lock b/pubspec.lock index 7cf1a612..afe0aa60 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -277,6 +277,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.7" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.4" flutter_test: dependency: "direct dev" description: flutter @@ -462,6 +469,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.6.4" + path_drawing: + dependency: transitive + description: + name: path_drawing + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.4" pedantic: dependency: transitive description: From bf094136ab1a488aa29dd946cf5e16d9f11ba700 Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Mon, 1 Jun 2020 15:30:07 +0300 Subject: [PATCH 03/15] create vital sign details --- .../patients/vital_sign_details_wideget.dart | 107 +++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/lib/widgets/patients/vital_sign_details_wideget.dart b/lib/widgets/patients/vital_sign_details_wideget.dart index adb3f1c8..35e85699 100644 --- a/lib/widgets/patients/vital_sign_details_wideget.dart +++ b/lib/widgets/patients/vital_sign_details_wideget.dart @@ -1,6 +1,18 @@ +import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; class VitalSignDetailsWidget extends StatefulWidget { + final List vitalList; + final String title1; + final String title2; + final String viewKey; + + VitalSignDetailsWidget({Key key, this.vitalList, this.title1, this.title2,this.viewKey}); + @override _VitalSignDetailsWidgetState createState() => _VitalSignDetailsWidgetState(); } @@ -8,6 +20,99 @@ class VitalSignDetailsWidget extends StatefulWidget { class _VitalSignDetailsWidgetState extends State { @override Widget build(BuildContext context) { - return Container(); + return Container( + decoration: BoxDecoration( + color: Colors.transparent, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10.0), + ), + ), + margin: EdgeInsets.all(20), + child: Container( + color: Colors.transparent, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Container( + decoration: BoxDecoration( + color: Hexcolor('#515B5D'), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10.0), + ), + ), + child: Center( + child: Texts( + widget.title1, + color: Colors.white, + ), + ), + height: 60, + ), + ), + Expanded( + child: Container( + decoration: BoxDecoration( + color: Hexcolor('#515B5D'), + borderRadius: BorderRadius.only( + topRight: Radius.circular(10.0), + ), + ), + child: Center( + child: Texts(widget.title2, color: Colors.white), + ), + height: 60), + ), + ], + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: widget.vitalList.map((vital) { + return Column( + children: [ + Row( + children: [ + Expanded( + child: Container( + height: 50, + color: Colors.white, + child: Center( + child: Texts( + '${Helpers.getWeekDay(vital.vitalSignDate.weekday)}, ${vital.vitalSignDate.day} ${Helpers.getMonth(vital.vitalSignDate.month)}, ${vital.vitalSignDate.year} ', + textAlign: TextAlign.center, + ), + ), + ), + ), + SizedBox( + width: 2, + ), + Expanded( + child: Container( + height: 50, + color: Colors.white, + child: Center( + child: Texts( + '${vital.toJson()[widget.viewKey]}', + textAlign: TextAlign.center, + ), + ), + ), + ), + ], + ), + SizedBox( + height: 2, + ), + ], + ); + }).toList(), + ), + ], + ), + ), + ); } } From 92dd877042562bdf56cf2a1d8157fcdf68fe2957 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 1 Jun 2020 15:32:57 +0300 Subject: [PATCH 04/15] chart works --- .../vital_sign/body_measurements_screen.dart | 115 +++++------------- 1 file changed, 33 insertions(+), 82 deletions(-) diff --git a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart index 9e0dc749..c3b88614 100644 --- a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart +++ b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart @@ -13,7 +13,7 @@ class BodyMeasurementsScreen extends StatelessWidget { BodyMeasurementsScreen(); // ; PatientsProvider patientsProv; - + List vitalList = []; @override Widget build(BuildContext context) { patientsProv = Provider.of(context); @@ -26,18 +26,18 @@ class BodyMeasurementsScreen extends StatelessWidget { children: [ Column( children: [ + // RoundedContainer( + // height: SizeConfig.realScreenHeight * 0.4, + // child: Padding( + // padding: EdgeInsets.all(8.0), + // child: Container( + // child: Center( + // child: Text('sss'), + // ), + // ), + // ), + // ), RoundedContainer( - height: SizeConfig.realScreenHeight * 0.4, - child: Padding( - padding: EdgeInsets.all(8.0), - child: Container( - child: Center( - child: Text('sss'), - ), - ), - ), - ), - Container( height: SizeConfig.realScreenHeight * 0.4, child: Center( child: Expanded( @@ -46,8 +46,8 @@ class BodyMeasurementsScreen extends StatelessWidget { behaviors: [ new charts.RangeAnnotation([ new charts.RangeAnnotationSegment( - new DateTime(2017, 10, 4), - new DateTime(2017, 10, 15), + vitalList[vitalList.length - 1].vitalSignDate, + vitalList[0].vitalSignDate, charts.RangeAnnotationAxisType.domain), ]), ]), @@ -82,87 +82,38 @@ class BodyMeasurementsScreen extends StatelessWidget { new ChartAxis(10, 38), new ChartAxis(1, 38), ]; - final data = [ - new TimeSeriesSales(new DateTime(2017, 9, 19), 5), - new TimeSeriesSales(new DateTime(2017, 9, 26), 25), - new TimeSeriesSales(new DateTime(2017, 10, 3), 100), - new TimeSeriesSales(new DateTime(2017, 10, 10), 75), - ]; + // final data = [ + // new TimeSeriesSales(new DateTime(2018, 11, 30), 45), + // new TimeSeriesSales(new DateTime(2017, 9, 26), 25), + // new TimeSeriesSales(new DateTime(2017, 10, 3), 100), + // new TimeSeriesSales(new DateTime(2015, 10, 10), 75), + // ]; - final List data1 = []; + final List data = []; - final List myFakeDesktopData1 = []; - List vitalList = patientsProv.patientVitalSignList; + vitalList = patientsProv.patientVitalSignList; if (vitalList.length > 0) { - // vitalList.sort((VitalSignResModel a, VitalSignResModel b) { - // return a.bodyMassIndex.toInt() - b.bodyMassIndex.toInt(); - // }); + vitalList.sort((VitalSignResModel a, VitalSignResModel b) { + return a.vitalSignDate.microsecondsSinceEpoch - + b.vitalSignDate.microsecondsSinceEpoch; + }); + for (int x = vitalList.length - 1; x >= 0; x--) { - myFakeDesktopData1.add( - new ChartAxis( - // x, - vitalList[x].vitalSignDate.day, - // 20, - // vitalSign.bodyMassIndex.toInt(), - // vitalSign.vitalSignDate.toString(), - // vitalSign.pulseBeatPerMinute!=null?vitalSign.pulseBeatPerMinute.toInt():50, - vitalList[x].bodyMassIndex.toInt(), - ), - ); - data1.add(TimeSeriesSales(new DateTime(vitalList[x].vitalSignDate.year,vitalList[x].vitalSignDate.month,vitalList[x].vitalSignDate.day), + data.add(TimeSeriesSales( + new DateTime( + vitalList[x].vitalSignDate.year, + vitalList[x].vitalSignDate.month, + vitalList[x].vitalSignDate.day), vitalList[x].bodyMassIndex.toInt())); - // data1.add(TimeSeriesSales(vitalList[x].vitalSignDate,vitalList[x].bodyMassIndex.toInt() + x * 15)); } - // vitalList.forEach((VitalSignResModel vitalSign) { - - // // print(e);' - // // int x = int.parse(vitalSign.bodyMassIndex); - // myFakeDesktopData1.add( - // new ChartAxis( - // vitalSign.vitalSignDate.day, - // // 20, - // // vitalSign.bodyMassIndex.toInt(), - // // vitalSign.vitalSignDate.toString(), - // // vitalSign.pulseBeatPerMinute!=null?vitalSign.pulseBeatPerMinute.toInt():50, - // vitalSign.bodyMassIndex.toInt(), - // ), - // ); - // }); - - // // map( - // // (VitalSignResModel vitalSign) { - // // print(vitalSign); - // // myFakeDesktopData1.add( - // // ChartAxis(vitalSign.transNo, vitalSign.bodyMassIndex), - // // ); - // // }, - // // ); - // } } return [ new charts.Series( id: 'Sales', domainFn: (TimeSeriesSales sales, _) => sales.time, measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data1, + data: data, ) - // charts.Series( - // id: 'ww', - // // Light shade for even xAxiss, dark shade for odd. - // colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - // // dashPatternFn: (ChartAxis yAxis, _) => [2, 4], - // strokeWidthPxFn: (ChartAxis yAxis, _) => 2.5, - // domainFn: (ChartAxis xAxis, _) => xAxis.xAxis, - // measureFn: (ChartAxis yAxis, _) => yAxis.yAxis, - // data: myFakeDesktopData1, - // ), - // new charts.Series( - // id: 'Desktop', - // colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - // domainFn: (LinearSales sales, _) => sales.year, - // measureFn: (LinearSales sales, _) => sales.sales, - // data: myFakeDesktopData1, - // ) ]; } } From bd24b7c196a661e985ed562daa8f9d629475862b Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 1 Jun 2020 21:25:24 +0300 Subject: [PATCH 05/15] TimeSeriesChart as widget --- lib/providers/patients_provider.dart | 32 +++++-- .../vital_sign/body_measurements_screen.dart | 90 +++++-------------- .../shared/charts/app_time_series_chart.dart | 51 +++++++++++ 3 files changed, 95 insertions(+), 78 deletions(-) create mode 100644 lib/widgets/shared/charts/app_time_series_chart.dart diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index dbf68203..a70be1aa 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -27,6 +27,7 @@ class PatientsProvider with ChangeNotifier { bool isError = false; String error = ''; List patientVitalSignList = []; + List patientVitalSignOrderdSubList = []; List patientLabResultOrdersList = []; List patientPrescriptionsList = []; List patientRadiologyList = []; @@ -117,6 +118,22 @@ class PatientsProvider with ChangeNotifier { res['List_DoctorPatientVitalSign'].forEach((v) { patientVitalSignList.add(new VitalSignResModel.fromJson(v)); }); + + if (patientVitalSignList.length > 0) { + List patientVitalSignOrderdSubListTemp = []; + patientVitalSignOrderdSubListTemp = patientVitalSignList; + patientVitalSignOrderdSubListTemp + .sort((VitalSignResModel a, VitalSignResModel b) { + return b.vitalSignDate.microsecondsSinceEpoch - + a.vitalSignDate.microsecondsSinceEpoch; + }); + patientVitalSignOrderdSubList.clear(); + for(int x =0; x< 20;x++ ){ + patientVitalSignOrderdSubList.add(patientVitalSignOrderdSubListTemp[x]); + + } + var asd=""; + } // patientVitalSignList = res['List_DoctorPatientVitalSign']; } else { isError = true; @@ -283,12 +300,12 @@ class PatientsProvider with ChangeNotifier { } } - - getPatientProgressNote(patient) async{ + getPatientProgressNote(patient) async { setBasicData(); try { if (await Helpers.checkConnection()) { - final response =await AppClient.post(PATIENT_PROGRESS_NOTE_URL, body: json.encode(patient)); + final response = await AppClient.post(PATIENT_PROGRESS_NOTE_URL, + body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; @@ -299,7 +316,7 @@ class PatientsProvider with ChangeNotifier { var res = json.decode(response.body); print('$res'); if (res['MessageStatus'] == 1) { - patientProgressNoteList = res['List_GetPregressNoteForInPatient']; + patientProgressNoteList = res['List_GetPregressNoteForInPatient']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; @@ -316,12 +333,12 @@ class PatientsProvider with ChangeNotifier { } } - getPatientInsuranceApprovals(patient) async{ - + getPatientInsuranceApprovals(patient) async { //setBasicData(); try { if (await Helpers.checkConnection()) { - final response =await AppClient.post(PATIENT_INSURANCE_APPROVALS_URL, body: json.encode(patient)); + final response = await AppClient.post(PATIENT_INSURANCE_APPROVALS_URL, + body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; @@ -349,5 +366,4 @@ class PatientsProvider with ChangeNotifier { handelCatchErrorCase(err); } } - } diff --git a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart index c3b88614..769b40f9 100644 --- a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart +++ b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart @@ -1,10 +1,9 @@ import 'package:charts_flutter/flutter.dart' as charts; import 'package:doctor_app_flutter/config/size_config.dart'; -import 'package:doctor_app_flutter/models/chart_axis_model.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; import 'package:doctor_app_flutter/providers/patients_provider.dart'; +import 'package:doctor_app_flutter/widgets/patients/vital_sign_details_wideget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/charts/app_line_chart.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -26,33 +25,12 @@ class BodyMeasurementsScreen extends StatelessWidget { children: [ Column( children: [ - // RoundedContainer( - // height: SizeConfig.realScreenHeight * 0.4, - // child: Padding( - // padding: EdgeInsets.all(8.0), - // child: Container( - // child: Center( - // child: Text('sss'), - // ), - // ), - // ), - // ), - RoundedContainer( - height: SizeConfig.realScreenHeight * 0.4, - child: Center( - child: Expanded( - child: charts.TimeSeriesChart(seriesList, - animate: true, - behaviors: [ - new charts.RangeAnnotation([ - new charts.RangeAnnotationSegment( - vitalList[vitalList.length - 1].vitalSignDate, - vitalList[0].vitalSignDate, - charts.RangeAnnotationAxisType.domain), - ]), - ]), - ), - ), + TimeSeriesChart(seriesList: seriesList, vitalList: vitalList), + VitalSignDetailsWidget( + vitalList: vitalList.reversed.toList(), + title1: 'Date', + title2: 'Kg', + viewKey: 'HeightCm', ), ], ), @@ -62,50 +40,21 @@ class BodyMeasurementsScreen extends StatelessWidget { } generateData() { - var myFakeMobileData3 = [ - new LinearSales(0, 15), - new LinearSales(1, 75), - new LinearSales(2, 300), - new LinearSales(3, 225), - ]; - final myFakeDesktopData = [ - new ChartAxis(10, 35), - new ChartAxis(1, 36), - new ChartAxis(5, 40), - new ChartAxis(17, 35), - new ChartAxis(4, 35), - new ChartAxis(5, 36), - new ChartAxis(15, 35), - new ChartAxis(7, 40), - new ChartAxis(11, 36), - new ChartAxis(2, 35), - new ChartAxis(10, 38), - new ChartAxis(1, 38), - ]; - // final data = [ - // new TimeSeriesSales(new DateTime(2018, 11, 30), 45), - // new TimeSeriesSales(new DateTime(2017, 9, 26), 25), - // new TimeSeriesSales(new DateTime(2017, 10, 3), 100), - // new TimeSeriesSales(new DateTime(2015, 10, 10), 75), - // ]; - final List data = []; - vitalList = patientsProv.patientVitalSignList; + vitalList = patientsProv.patientVitalSignOrderdSubList; if (vitalList.length > 0) { - vitalList.sort((VitalSignResModel a, VitalSignResModel b) { - return a.vitalSignDate.microsecondsSinceEpoch - - b.vitalSignDate.microsecondsSinceEpoch; - }); - - for (int x = vitalList.length - 1; x >= 0; x--) { - data.add(TimeSeriesSales( - new DateTime( - vitalList[x].vitalSignDate.year, - vitalList[x].vitalSignDate.month, - vitalList[x].vitalSignDate.day), - vitalList[x].bodyMassIndex.toInt())); - } + vitalList.forEach( + (element) { + data.add( + TimeSeriesSales( + new DateTime(element.vitalSignDate.year, + element.vitalSignDate.month, element.vitalSignDate.day), + element.bodyMassIndex.toInt(), + ), + ); + }, + ); } return [ new charts.Series( @@ -118,6 +67,7 @@ class BodyMeasurementsScreen extends StatelessWidget { } } + class LinearSales { final int year; final int sales; diff --git a/lib/widgets/shared/charts/app_time_series_chart.dart b/lib/widgets/shared/charts/app_time_series_chart.dart new file mode 100644 index 00000000..128c81cd --- /dev/null +++ b/lib/widgets/shared/charts/app_time_series_chart.dart @@ -0,0 +1,51 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; +import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:charts_flutter/flutter.dart' as charts; + +class TimeSeriesChart extends StatelessWidget { + const TimeSeriesChart({ + Key key, + @required this.seriesList, + @required this.vitalList, + }) : super(key: key); + + final List seriesList; + final List vitalList; + + @override + Widget build(BuildContext context) { + return RoundedContainer( + height: SizeConfig.realScreenHeight * 0.4, + child: Center( + child: Expanded( + child: charts.TimeSeriesChart( + seriesList, + animate: true, + behaviors: [ + new charts.RangeAnnotation( + [ + new charts.RangeAnnotationSegment( + DateTime( + vitalList[vitalList.length - 1] + .vitalSignDate + .year, + vitalList[vitalList.length - 1] + .vitalSignDate + .month + + 3, + vitalList[vitalList.length - 1] + .vitalSignDate + .day), + vitalList[0].vitalSignDate, + charts.RangeAnnotationAxisType.domain), + ], + ), + ], + ), + ), + ), + ); + } +} From 29239fddde594b4a29ae21045749c46ad82f66e7 Mon Sep 17 00:00:00 2001 From: Amjad Amireh Date: Tue, 2 Jun 2020 11:42:51 +0300 Subject: [PATCH 06/15] modify search --- lib/screens/patients/patient_search_screen.dart | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/lib/screens/patients/patient_search_screen.dart b/lib/screens/patients/patient_search_screen.dart index 2c0963cd..d00aabdb 100644 --- a/lib/screens/patients/patient_search_screen.dart +++ b/lib/screens/patients/patient_search_screen.dart @@ -58,9 +58,8 @@ class _PatientSearchScreenState extends State { PatientOutSA: false); void _validateInputs() async { -print("============== _selectedType============"+ _selectedType); - if(_selectedType!='3') - { +//print("============== _selectedType============"+ _selectedType); + try { //==================== @@ -102,15 +101,7 @@ print("============== _selectedType============"+ _selectedType); } catch (err) { handelCatchErrorCase(err); } - } - else - { - Navigator.of(context).pushNamed(PATIENTS_REFERRED, arguments: { - "patientSearchForm": _patientSearchFormValues, - "selectedType": _selectedType - }); - - } + } handelCatchErrorCase(err) { From 69a618018dda0ec07b10cd9f6732346f1a63f416 Mon Sep 17 00:00:00 2001 From: Amjad Amireh Date: Tue, 2 Jun 2020 16:35:23 +0300 Subject: [PATCH 07/15] MyPrefered Patiant --- lib/config/config.dart | 2 +- lib/models/my_referred_patient_model.dart | 343 +++++++++--------- .../request_add_referred_doctor_remarks.dart | 1 + .../verify_referral_doctor_remarks.dart | 103 ++++++ lib/providers/referred_patient_provider.dart | 57 ++- .../doctor/my_referred_patient_widget.dart | 78 ++-- 6 files changed, 346 insertions(+), 238 deletions(-) create mode 100644 lib/models/verify_referral_doctor_remarks.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index 92291ed3..63d5545f 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -2,7 +2,7 @@ const MAX_SMALL_SCREEN = 660; const ONLY_NUMBERS = "[0-9]"; const ONLY_LETTERS = "[a-zA-Z]"; const ONLY_DATE = "[0-9/]"; - +//const BASE_URL = 'https://hmgwebservices.com/Services/'; const BASE_URL = 'https://uat.hmgwebservices.com/Services/'; const PHARMACY_ITEMS_URL = "Lists.svc/REST/GetPharmcyItems"; const PHARMACY_LIST_URL = "Patients.svc/REST/GetPharmcyList"; diff --git a/lib/models/my_referred_patient_model.dart b/lib/models/my_referred_patient_model.dart index 4aaef077..9ecfdb2f 100644 --- a/lib/models/my_referred_patient_model.dart +++ b/lib/models/my_referred_patient_model.dart @@ -1,73 +1,18 @@ -/* - *@author: Amjad amireh - *@Date:1/6/2020 - *@param: - *@return: - *@desc: MyReferredPatientModel - */ import 'dart:convert'; + import 'package:doctor_app_flutter/util/helpers.dart'; +MyReferredPatientModel myReferredPatientModelFromJson(String str) => MyReferredPatientModel.fromJson(json.decode(str)); -import 'package:doctor_app_flutter/util/helpers.dart'; +String myReferredPatientModelToJson(MyReferredPatientModel data) => json.encode(data.toJson()); class MyReferredPatientModel { - int projectID; - int lineItemNo; - int doctorID; - int patientID; - String doctorName; - String doctorNameN; - String firstName; - String middleName; - String lastName; - String firstNameN; - String middleNameN; - String lastNameN; - int gender; - String dateofBirth; - String mobileNumber; - String emailAddress; - String patientIdentificationNo; - int patientType; - String admissionNo; - String admissionDate; - String roomID; - String bedID; - String nursingStationID; - String description; - String nationalityName; - String nationalityNameN; - String clinicDescription; - String clinicDescriptionN; - int referralDoctor; - int referringDoctor; - int referralClinic; - int referringClinic; - int referralStatus; - String referralDate; - String referringDoctorRemarks; - String referredDoctorRemarks; - String referralResponseOn; - int priority; - int frequency; - DateTime mAXResponseTime; - String age; - String frequencyDescription; - String genderDescription; - bool isDoctorLate; - bool isDoctorResponse; - String nursingStationName; - String priorityDescription; - String referringClinicDescription; - String referringDoctorName; - - MyReferredPatientModel( - {this.projectID, + MyReferredPatientModel({ + this.projectId, this.lineItemNo, - this.doctorID, - this.patientID, + this.doctorId, + this.patientId, this.doctorName, this.doctorNameN, this.firstName, @@ -84,9 +29,9 @@ class MyReferredPatientModel { this.patientType, this.admissionNo, this.admissionDate, - this.roomID, - this.bedID, - this.nursingStationID, + this.roomId, + this.bedId, + this.nursingStationId, this.description, this.nationalityName, this.nationalityNameN, @@ -103,7 +48,8 @@ class MyReferredPatientModel { this.referralResponseOn, this.priority, this.frequency, - this.mAXResponseTime, + this.maxResponseTime, + this.dischargeDate, this.age, this.frequencyDescription, this.genderDescription, @@ -111,114 +57,165 @@ class MyReferredPatientModel { this.isDoctorResponse, this.nursingStationName, this.priorityDescription, - this.referringClinicDescription, - this.referringDoctorName}); + this.referralClinicDescription, + this.referralDoctorName, + }); - MyReferredPatientModel.fromJson(Map json) { - projectID = json['ProjectID']; - lineItemNo = json['LineItemNo']; - doctorID = json['DoctorID']; - patientID = json['PatientID']; - doctorName = json['DoctorName']; - doctorNameN = json['DoctorNameN']; - firstName = json['FirstName']; - middleName = json['MiddleName']; - lastName = json['LastName']; - firstNameN = json['FirstNameN']; - middleNameN = json['MiddleNameN']; - lastNameN = json['LastNameN']; - gender = json['Gender']; - dateofBirth = json['DateofBirth']; - mobileNumber = json['MobileNumber']; - emailAddress = json['EmailAddress']; - patientIdentificationNo = json['PatientIdentificationNo']; - patientType = json['PatientType']; - admissionNo = json['AdmissionNo']; - admissionDate = json['AdmissionDate']; - roomID = json['RoomID']; - bedID = json['BedID']; - nursingStationID = json['NursingStationID']; - description = json['Description']; - nationalityName = json['NationalityName']; - nationalityNameN = json['NationalityNameN']; - clinicDescription = json['ClinicDescription']; - clinicDescriptionN = json['ClinicDescriptionN']; - referralDoctor = json['ReferralDoctor']; - referringDoctor = json['ReferringDoctor']; - referralClinic = json['ReferralClinic']; - referringClinic = json['ReferringClinic']; - referralStatus = json['ReferralStatus']; - referralDate = json['ReferralDate']; - referringDoctorRemarks = json['ReferringDoctorRemarks']; - referredDoctorRemarks = json['ReferredDoctorRemarks']; - referralResponseOn = json['ReferralResponseOn']; - priority = json['Priority']; - frequency = json['Frequency']; - mAXResponseTime = Helpers.convertStringToDate(json['MAXResponseTime']); - age = json['Age']; - frequencyDescription = json['FrequencyDescription']; - genderDescription = json['GenderDescription']; - isDoctorLate = json['IsDoctorLate']; - isDoctorResponse = json['IsDoctorResponse']; - nursingStationName = json['NursingStationName']; - priorityDescription = json['PriorityDescription']; - referringClinicDescription = json['ReferringClinicDescription']; - referringDoctorName = json['ReferringDoctorName']; - } + int projectId; + int lineItemNo; + int doctorId; + int patientId; + String doctorName; + dynamic doctorNameN; + String firstName; + String middleName; + String lastName; + dynamic firstNameN; + dynamic middleNameN; + dynamic lastNameN; + int gender; + String dateofBirth; + String mobileNumber; + String emailAddress; + String patientIdentificationNo; + int patientType; + String admissionNo; + String admissionDate; + String roomId; + String bedId; + dynamic nursingStationId; + dynamic description; + String nationalityName; + dynamic nationalityNameN; + String clinicDescription; + dynamic clinicDescriptionN; + int referralDoctor; + int referringDoctor; + int referralClinic; + int referringClinic; + int referralStatus; + String referralDate; + String referringDoctorRemarks; + String referredDoctorRemarks; + String referralResponseOn; + int priority; + int frequency; + DateTime maxResponseTime; + dynamic dischargeDate; + String age; + String frequencyDescription; + String genderDescription; + bool isDoctorLate; + bool isDoctorResponse; + String nursingStationName; + String priorityDescription; + String referralClinicDescription; + String referralDoctorName; - Map toJson() { - final Map data = new Map(); - data['ProjectID'] = this.projectID; - data['LineItemNo'] = this.lineItemNo; - data['DoctorID'] = this.doctorID; - data['PatientID'] = this.patientID; - data['DoctorName'] = this.doctorName; - data['DoctorNameN'] = this.doctorNameN; - data['FirstName'] = this.firstName; - data['MiddleName'] = this.middleName; - data['LastName'] = this.lastName; - data['FirstNameN'] = this.firstNameN; - data['MiddleNameN'] = this.middleNameN; - data['LastNameN'] = this.lastNameN; - data['Gender'] = this.gender; - data['DateofBirth'] = this.dateofBirth; - data['MobileNumber'] = this.mobileNumber; - data['EmailAddress'] = this.emailAddress; - data['PatientIdentificationNo'] = this.patientIdentificationNo; - data['PatientType'] = this.patientType; - data['AdmissionNo'] = this.admissionNo; - data['AdmissionDate'] = this.admissionDate; - data['RoomID'] = this.roomID; - data['BedID'] = this.bedID; - data['NursingStationID'] = this.nursingStationID; - data['Description'] = this.description; - data['NationalityName'] = this.nationalityName; - data['NationalityNameN'] = this.nationalityNameN; - data['ClinicDescription'] = this.clinicDescription; - data['ClinicDescriptionN'] = this.clinicDescriptionN; - data['ReferralDoctor'] = this.referralDoctor; - data['ReferringDoctor'] = this.referringDoctor; - data['ReferralClinic'] = this.referralClinic; - data['ReferringClinic'] = this.referringClinic; - data['ReferralStatus'] = this.referralStatus; - data['ReferralDate'] = this.referralDate; - data['ReferringDoctorRemarks'] = this.referringDoctorRemarks; - data['ReferredDoctorRemarks'] = this.referredDoctorRemarks; - data['ReferralResponseOn'] = this.referralResponseOn; - data['Priority'] = this.priority; - data['Frequency'] = this.frequency; - data['MAXResponseTime'] = this.mAXResponseTime; - data['Age'] = this.age; - data['FrequencyDescription'] = this.frequencyDescription; - data['GenderDescription'] = this.genderDescription; - data['IsDoctorLate'] = this.isDoctorLate; - data['IsDoctorResponse'] = this.isDoctorResponse; - data['NursingStationName'] = this.nursingStationName; - data['PriorityDescription'] = this.priorityDescription; - data['ReferringClinicDescription'] = this.referringClinicDescription; - data['ReferringDoctorName'] = this.referringDoctorName; - return data; - } -} + factory MyReferredPatientModel.fromJson(Map json) => MyReferredPatientModel( + projectId: json["ProjectID"], + lineItemNo: json["LineItemNo"], + doctorId: json["DoctorID"], + patientId: json["PatientID"], + doctorName: json["DoctorName"], + doctorNameN: json["DoctorNameN"], + firstName: json["FirstName"], + middleName: json["MiddleName"], + lastName: json["LastName"], + firstNameN: json["FirstNameN"], + middleNameN: json["MiddleNameN"], + lastNameN: json["LastNameN"], + gender: json["Gender"], + dateofBirth: json["DateofBirth"], + mobileNumber: json["MobileNumber"], + emailAddress: json["EmailAddress"], + patientIdentificationNo: json["PatientIdentificationNo"], + patientType: json["PatientType"], + admissionNo: json["AdmissionNo"], + admissionDate: json["AdmissionDate"], + roomId: json["RoomID"], + bedId: json["BedID"], + nursingStationId: json["NursingStationID"], + description: json["Description"], + nationalityName: json["NationalityName"], + nationalityNameN: json["NationalityNameN"], + clinicDescription: json["ClinicDescription"], + clinicDescriptionN: json["ClinicDescriptionN"], + referralDoctor: json["ReferralDoctor"], + referringDoctor: json["ReferringDoctor"], + referralClinic: json["ReferralClinic"], + referringClinic: json["ReferringClinic"], + referralStatus: json["ReferralStatus"], + referralDate: json["ReferralDate"], + referringDoctorRemarks: json["ReferringDoctorRemarks"], + referredDoctorRemarks: json["ReferredDoctorRemarks"], + referralResponseOn: json["ReferralResponseOn"], + priority: json["Priority"], + frequency: json["Frequency"], + maxResponseTime: Helpers.convertStringToDate(json['MAXResponseTime']),//json["MAXResponseTime"], + dischargeDate: json["DischargeDate"], + age: json["Age"], + frequencyDescription: json["FrequencyDescription"], + genderDescription: json["GenderDescription"], + isDoctorLate: json["IsDoctorLate"], + isDoctorResponse: json["IsDoctorResponse"], + nursingStationName: json["NursingStationName"], + priorityDescription: json["PriorityDescription"], + referralClinicDescription: json["ReferralClinicDescription"], + referralDoctorName: json["ReferralDoctorName"], + ); + Map toJson() => { + "ProjectID": projectId, + "LineItemNo": lineItemNo, + "DoctorID": doctorId, + "PatientID": patientId, + "DoctorName": doctorName, + "DoctorNameN": doctorNameN, + "FirstName": firstName, + "MiddleName": middleName, + "LastName": lastName, + "FirstNameN": firstNameN, + "MiddleNameN": middleNameN, + "LastNameN": lastNameN, + "Gender": gender, + "DateofBirth": dateofBirth, + "MobileNumber": mobileNumber, + "EmailAddress": emailAddress, + "PatientIdentificationNo": patientIdentificationNo, + "PatientType": patientType, + "AdmissionNo": admissionNo, + "AdmissionDate": admissionDate, + "RoomID": roomId, + "BedID": bedId, + "NursingStationID": nursingStationId, + "Description": description, + "NationalityName": nationalityName, + "NationalityNameN": nationalityNameN, + "ClinicDescription": clinicDescription, + "ClinicDescriptionN": clinicDescriptionN, + "ReferralDoctor": referralDoctor, + "ReferringDoctor": referringDoctor, + "ReferralClinic": referralClinic, + "ReferringClinic": referringClinic, + "ReferralStatus": referralStatus, + "ReferralDate": referralDate, + "ReferringDoctorRemarks": referringDoctorRemarks, + "ReferredDoctorRemarks": referredDoctorRemarks, + "ReferralResponseOn": referralResponseOn, + "Priority": priority, + "Frequency": frequency, + "MAXResponseTime": maxResponseTime, + "DischargeDate": dischargeDate, + "Age": age, + "FrequencyDescription": frequencyDescription, + "GenderDescription": genderDescription, + "IsDoctorLate": isDoctorLate, + "IsDoctorResponse": isDoctorResponse, + "NursingStationName": nursingStationName, + "PriorityDescription": priorityDescription, + "ReferralClinicDescription": referralClinicDescription, + "ReferralDoctorName": referralDoctorName, + }; +} diff --git a/lib/models/request_add_referred_doctor_remarks.dart b/lib/models/request_add_referred_doctor_remarks.dart index 0799c7ba..b396c47f 100644 --- a/lib/models/request_add_referred_doctor_remarks.dart +++ b/lib/models/request_add_referred_doctor_remarks.dart @@ -17,6 +17,7 @@ class RequestAddReferredDoctorRemarks { String sessionID; bool isLoginForDoctorApp; bool patientOutSA; + RequestAddReferredDoctorRemarks( {this.projectID, diff --git a/lib/models/verify_referral_doctor_remarks.dart b/lib/models/verify_referral_doctor_remarks.dart new file mode 100644 index 00000000..b9bfce0a --- /dev/null +++ b/lib/models/verify_referral_doctor_remarks.dart @@ -0,0 +1,103 @@ +import 'package:doctor_app_flutter/config/config.dart'; + +class VerifyReferralDoctorRemarks { + int projectID; + String admissionNo; + int lineItemNo; + String referredDoctorRemarks; + int editedBy; + int patientID; + int referringDoctor; + int languageID; + String stamp; + String iPAdress; + double versionID; + int channel; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + String firstName; + + String middleName; + String lastName; + String patientMobileNumber; + String patientIdentificationID; + + VerifyReferralDoctorRemarks( + {this.projectID, + this.admissionNo, + this.lineItemNo, + this.referredDoctorRemarks, + this.editedBy, + this.patientID, + this.referringDoctor, + this.languageID = LANGUAGE_ID, + this.stamp = STAMP, + this.iPAdress = IP_ADDRESS, + this.versionID = VERSION_ID, + this.channel= CHANNEL, + this.tokenID, + this.sessionID = SESSION_ID, + this.isLoginForDoctorApp = IS_LOGIN_FOR_DOCTOR_APP, + this.patientOutSA = PATIENT_OUT_SA, + this.firstName, + this.middleName, + this.lastName, + this.patientMobileNumber, + this.patientIdentificationID, + }); + + VerifyReferralDoctorRemarks.fromJson(Map json) { + projectID = json['ProjectID']; + admissionNo = json['AdmissionNo']; + lineItemNo = json['LineItemNo']; + referredDoctorRemarks = json['ReferredDoctorRemarks']; + editedBy = json['EditedBy']; + patientID = json['PatientID']; + referringDoctor = json['ReferringDoctor']; + languageID = json['LanguageID']; + stamp = json['stamp']; + iPAdress = json['IPAdress']; + versionID = json['VersionID']; + channel = json['Channel']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + firstName= json["FirstName"]; + middleName= json["MiddleName"]; + lastName= json["LastName"]; + patientMobileNumber= json["PatientMobileNumber"]; + patientIdentificationID = json["PatientIdentificationID"]; + + + + } + + Map toJson() { + final Map data = new Map(); + data['ProjectID'] = this.projectID; + data['AdmissionNo'] = this.admissionNo; + data['LineItemNo'] = this.lineItemNo; + data['ReferredDoctorRemarks'] = this.referredDoctorRemarks; + data['EditedBy'] = this.editedBy; + data['PatientID'] = this.patientID; + data['ReferringDoctor'] = this.referringDoctor; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.iPAdress; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + data['FirstName'] = this.firstName; + data['MiddleName'] = this.middleName; + data['LastName'] = this.lastName; + data['PatientMobileNumber'] = this.patientMobileNumber; + data['PatientIdentificationID'] = this.patientIdentificationID; + return data; + } +} diff --git a/lib/providers/referred_patient_provider.dart b/lib/providers/referred_patient_provider.dart index 19904f2b..0f3e6741 100644 --- a/lib/providers/referred_patient_provider.dart +++ b/lib/providers/referred_patient_provider.dart @@ -1,22 +1,23 @@ import 'package:doctor_app_flutter/client/base_app_client.dart'; -import 'package:doctor_app_flutter/models/my_referral_patient_model.dart'; +//import 'package:doctor_app_flutter/models/my_referral_patient_model.dart'; import 'package:doctor_app_flutter/models/my_referred_patient_model.dart'; //import 'package:doctor_app_flutter/models/my_referred_patient_model.dart'; -import 'package:doctor_app_flutter/models/request_add_referred_doctor_remarks.dart'; +//import 'package:doctor_app_flutter/models/request_add_referred_doctor_remarks.dart'; import 'package:doctor_app_flutter/models/request_my_referral_patient_model.dart'; +import 'package:doctor_app_flutter/models/verify_referral_doctor_remarks.dart'; import 'package:flutter/cupertino.dart'; class MyReferredPatientProvider with ChangeNotifier { - List listMyReferralPatientModel = []; + List listMyReferredPatientModel = []; bool isLoading = true; bool isError = false; String error = ''; RequestMyReferralPatientModel _requestMyReferralPatient = RequestMyReferralPatientModel(); - RequestAddReferredDoctorRemarks _requestAddReferredDoctorRemarks = RequestAddReferredDoctorRemarks(); - + // RequestAddReferredDoctorRemarks _requestAddReferredDoctorRemarks = RequestAddReferredDoctorRemarks(); + VerifyReferralDoctorRemarks _verifyreferraldoctorremarks = VerifyReferralDoctorRemarks(); MyReferredPatientProvider() { getMyReferralPatient(); } @@ -24,11 +25,11 @@ class MyReferredPatientProvider with ChangeNotifier { getMyReferralPatient() async { try { await BaseAppClient.post( - 'DoctorApplication.svc/REST/GtMyReferralPatient', + 'DoctorApplication.svc/REST/GtMyReferredPatient', body: _requestMyReferralPatient.toJson(), onSuccess: (dynamic response, int statusCode) { - response['List_MyReferralPatient'].forEach((v) { - listMyReferralPatientModel.add(MyReferredPatientModel.fromJson(v)); + response['List_MyReferredPatient'].forEach((v) { + listMyReferredPatientModel.add(MyReferredPatientModel.fromJson(v)); }); isError = false; isLoading = false; @@ -48,22 +49,40 @@ class MyReferredPatientProvider with ChangeNotifier { } } - Future replay( - String referredDoctorRemarks, MyReferredPatientModel model) async { + // Future replay( + // String referredDoctorRemarks, MyReferredPatientModel model) async { + Future replay( + MyReferredPatientModel model) async { try { - _requestAddReferredDoctorRemarks.admissionNo = model.admissionNo; - _requestAddReferredDoctorRemarks.patientID = model.patientID; - _requestAddReferredDoctorRemarks.referredDoctorRemarks = referredDoctorRemarks; - _requestAddReferredDoctorRemarks.lineItemNo = model.lineItemNo; - _requestAddReferredDoctorRemarks.referringDoctor = model.referringDoctor; + + _verifyreferraldoctorremarks.patientID=model.projectId; + _verifyreferraldoctorremarks.admissionNo =model.admissionNo; + _verifyreferraldoctorremarks.lineItemNo = model.lineItemNo; + + _verifyreferraldoctorremarks.referredDoctorRemarks=model.referredDoctorRemarks; + _verifyreferraldoctorremarks.referringDoctor=model.referringDoctor; + _verifyreferraldoctorremarks.firstName=model.firstName; + _verifyreferraldoctorremarks.middleName=model.middleName; + _verifyreferraldoctorremarks.lastName=model.lastName; + _verifyreferraldoctorremarks.patientMobileNumber=model.mobileNumber; + _verifyreferraldoctorremarks.patientIdentificationID=model.patientIdentificationNo; + + + + + + + + + await BaseAppClient.post( 'DoctorApplication.svc/REST/GtMyReferredPatient', - body: _requestAddReferredDoctorRemarks.toJson(), + body: _verifyreferraldoctorremarks.toJson(),//_requestAddReferredDoctorRemarks.toJson(), onSuccess: (dynamic body, int statusCode) { - model.referredDoctorRemarks = referredDoctorRemarks; - listMyReferralPatientModel[ - listMyReferralPatientModel.indexOf(model)] = model; + + listMyReferredPatientModel[ + listMyReferredPatientModel.indexOf(model)] = model; notifyListeners(); }, onFailure: (String error, int statusCode) { diff --git a/lib/widgets/doctor/my_referred_patient_widget.dart b/lib/widgets/doctor/my_referred_patient_widget.dart index 0ab91954..0998788a 100644 --- a/lib/widgets/doctor/my_referred_patient_widget.dart +++ b/lib/widgets/doctor/my_referred_patient_widget.dart @@ -99,7 +99,7 @@ class _MyReferredPatientWidgetState extends State { fontWeight: FontWeight.bold, ), AppText( - '${widget.myReferredPatientModel.referringDoctor}', + '${widget.myReferredPatientModel.patientId}', fontSize: 1.7 * SizeConfig.textMultiplier, fontWeight: FontWeight.w300, @@ -119,18 +119,18 @@ class _MyReferredPatientWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ AppText( - 'Referring Doctor', + 'Referral Doctor', fontSize: 1.7 * SizeConfig.textMultiplier, fontWeight: FontWeight.bold, ), - AppText( + Texts( widget.myReferredPatientModel - .referringClinicDescription, - fontSize: - 1.7 * SizeConfig.textMultiplier, - fontWeight: FontWeight.w300, - ) + .referralDoctorName, + maxLength: 80, + readMore: true, + ), + ], ), ), @@ -152,7 +152,7 @@ class _MyReferredPatientWidgetState extends State { fontWeight: FontWeight.bold, ), AppText( - '${widget.myReferredPatientModel.referringClinicDescription}', + '${widget.myReferredPatientModel.referralClinicDescription}', fontSize: 1.7 * SizeConfig.textMultiplier, fontWeight: FontWeight.w300, @@ -232,7 +232,7 @@ class _MyReferredPatientWidgetState extends State { AppText( Helpers.getDateFormatted(widget .myReferredPatientModel - .mAXResponseTime), + .maxResponseTime), fontSize: 1.7 * SizeConfig.textMultiplier, fontWeight: FontWeight.w300, @@ -249,15 +249,17 @@ class _MyReferredPatientWidgetState extends State { fontWeight: FontWeight.bold, textAlign: TextAlign.start, ), + SizedBox( height: 5, ), - AppText( - '${widget.myReferredPatientModel.referringDoctorRemarks}', - fontSize: - 1.7 * SizeConfig.textMultiplier, - fontWeight: FontWeight.w300, - ), + + Texts( + '${widget.myReferredPatientModel.referringDoctorRemarks}', + style: "bodyText1", + readMore: true, + textAlign: TextAlign.start, + maxLength: 100), SizedBox( height: 5, ), @@ -270,28 +272,17 @@ class _MyReferredPatientWidgetState extends State { SizedBox( height: 5, ), - AppText( - '${widget.myReferredPatientModel.referredDoctorRemarks}', - fontSize: - 1.7 * SizeConfig.textMultiplier, - fontWeight: FontWeight.w300, - ), - // Form( - // key: _formKey, - // child: TextFields( - // maxLines: 2, - // minLines: 2, - // hintText: 'Answer the patient', - // initialValue: widget.myReferredPatientModel.referredDoctorRemarks ?? '', - // readOnly: _isLoading, - // validator: (value) { - // if (value.isEmpty) - // return "please enter answer"; - // else - // return null; - // }, - // ), - // ), + + Texts( + '${widget.myReferredPatientModel.referredDoctorRemarks}', + style: "bodyText1", + readMore: true, + textAlign: TextAlign.start, + maxLength: 100), + SizedBox( + height: 5, + ), + SizedBox(height: 10.0), if (error != null && error.isNotEmpty) Column( @@ -325,13 +316,10 @@ class _MyReferredPatientWidgetState extends State { child: Button( onTap: () async { final form = _formKey.currentState; - if (form.validate()) { - setState(() { - _isLoading = true; - }); + try { - await Provider.of(context, listen: false).replay(answerController.text.toString(), widget.myReferredPatientModel); - // await Provider.of(context, listen: false).replay(answerController.text.toString(), widget.myReferredPatientModel);//myReferredPatientModel + await Provider.of(context, listen: false).replay(widget.myReferredPatientModel); + setState(() { _isLoading = false; }); @@ -341,7 +329,7 @@ class _MyReferredPatientWidgetState extends State { _isLoading = false; }); } - } + }, title: 'Verify', loading: _isLoading, From 0d30fd62122dda8f58db42a4f68b0990694fbdf8 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 2 Jun 2020 17:13:41 +0300 Subject: [PATCH 08/15] vitalsign details --- lib/lookups/patient_lookup.dart | 11 + .../vital_sign/body_measurements_screen.dart | 188 ++++++++++++---- .../vital_ding_chart_and_detials.dart | 39 ++++ .../vital_sign/vital_sign_details_screen.dart | 206 +++++++++++++++--- .../shared/charts/app_time_series_chart.dart | 110 +++++++--- 5 files changed, 440 insertions(+), 114 deletions(-) create mode 100644 lib/screens/patients/profile/vital_sign/vital_ding_chart_and_detials.dart diff --git a/lib/lookups/patient_lookup.dart b/lib/lookups/patient_lookup.dart index fbb382c2..451e694b 100644 --- a/lib/lookups/patient_lookup.dart +++ b/lib/lookups/patient_lookup.dart @@ -20,3 +20,14 @@ {"text": "Out Sudia Arabia", "val": "2"}, ]; + + +enum vitalSignDetails { + bodyMeasurements, + temperature, + pulse, + pespiration, + bloodPressure, + oxygenation, + painScale +} \ No newline at end of file diff --git a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart index 769b40f9..f0133e84 100644 --- a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart +++ b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart @@ -1,10 +1,8 @@ -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/lookups/patient_lookup.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; import 'package:doctor_app_flutter/providers/patients_provider.dart'; -import 'package:doctor_app_flutter/widgets/patients/vital_sign_details_wideget.dart'; +import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_ding_chart_and_detials.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; -import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -13,61 +11,157 @@ class BodyMeasurementsScreen extends StatelessWidget { // ; PatientsProvider patientsProv; List vitalList = []; + String pageTitle; @override Widget build(BuildContext context) { patientsProv = Provider.of(context); - List seriesList = generateData(); + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + pageTitle = routeArgs['title']; + var pageKey = routeArgs['key']; + List VSchart; + vitalList = patientsProv.patientVitalSignOrderdSubList; + switch (pageKey) { + case vitalSignDetails.bodyMeasurements: + VSchart = [ + { + 'name': 'Highet', + 'title1': 'Date', + 'title2': 'Cm', + 'viewKey': 'HeightCm', + }, + { + 'name': 'Weight Kg', + 'title1': 'Date', + 'title2': 'Kg', + 'viewKey': 'WeightKg', + }, + { + 'name': 'BodyMassIndex', + 'title1': 'Date', + 'title2': 'BodyMass', + 'viewKey': 'BodyMassIndex', + }, + { + 'name': 'HeadCircumCm', + 'title1': 'Date', + 'title2': 'Cm', + 'viewKey': 'HeadCircumCm', + }, + { + 'name': 'Ideal Body Weight (Lbs)', + 'title1': 'Date', + 'title2': 'Ideal Weight', + 'viewKey': 'IdealBodyWeightLbs', + }, + { + 'name': 'LeanBodyWeightLbs (Lbs)', + 'title1': 'Date', + 'title2': 'Lean Weight', + 'viewKey': 'LeanBodyWeightLbs', + } + ]; + + break; + + case vitalSignDetails.temperature: + VSchart = [ + { + 'name': 'Temperature In Celcius', + 'title1': 'Date', + 'title2': 'C', + 'viewKey': 'TemperatureCelcius', + }, + ]; + + break; + case vitalSignDetails.pulse: + VSchart = [ + { + 'name': 'Pulse Beat Per Minute', + 'title1': 'Date', + 'title2': 'Minute', + 'viewKey': 'PulseBeatPerMinute', + }, + ]; + + break; + case vitalSignDetails.pespiration: + VSchart = [ + { + 'name': 'Respiration Beat Per Minute', + 'title1': 'Date', + 'title2': 'Beat Per Minute', + 'viewKey': 'RespirationBeatPerMinute', + }, + ]; + + break; + case vitalSignDetails.bloodPressure: + VSchart = [ + { + 'name': 'Blood Pressure Higher', + 'title1': 'Date', + 'title2': 'Minute', + 'viewKey': 'BloodPressureHigher', + }, + { + 'name': 'Blood Pressure Lower', + 'title1': 'Date', + 'title2': 'Minute', + 'viewKey': 'BloodPressureLower', + } + ]; + + break; + case vitalSignDetails.oxygenation: + VSchart = [ + { + 'name': 'FIO2', + 'title1': 'Date', + 'title2': 'Cm', + 'viewKey': 'FIO2', + }, + { + 'name': 'SAO2', + 'title1': 'Date', + 'title2': 'Cm', + 'viewKey': 'SAO2', + }, + ]; + + break; + case vitalSignDetails.painScale: + VSchart = [ + { + 'name': 'PainScore', + 'title1': 'Date', + 'title2': 'Cm', + 'viewKey': 'PainScore', + }, + ]; + break; + + default: + } // generateData(); return AppScaffold( - appBarTitle: 'Body Measurements', + appBarTitle: pageTitle, body: ListView( - children: [ - Column( - children: [ - TimeSeriesChart(seriesList: seriesList, vitalList: vitalList), - VitalSignDetailsWidget( - vitalList: vitalList.reversed.toList(), - title1: 'Date', - title2: 'Kg', - viewKey: 'HeightCm', - ), - ], - ), - ], + children: VSchart.map((chartInfo) { + var vitalListTemp = vitalList.where((element) => element.toJson()[chartInfo['viewKey']] != null,); + return vitalListTemp.length !=0 ? VitalSingChartAndDetials( + vitalList: vitalList, + name: chartInfo['name'], + title1: chartInfo['title1'], + title2: chartInfo['title2'], + viewKey: chartInfo['viewKey']) : Container(); + }).toList(), ), ); } - - generateData() { - final List data = []; - - vitalList = patientsProv.patientVitalSignOrderdSubList; - if (vitalList.length > 0) { - vitalList.forEach( - (element) { - data.add( - TimeSeriesSales( - new DateTime(element.vitalSignDate.year, - element.vitalSignDate.month, element.vitalSignDate.day), - element.bodyMassIndex.toInt(), - ), - ); - }, - ); - } - return [ - new charts.Series( - id: 'Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } } - class LinearSales { final int year; final int sales; diff --git a/lib/screens/patients/profile/vital_sign/vital_ding_chart_and_detials.dart b/lib/screens/patients/profile/vital_sign/vital_ding_chart_and_detials.dart new file mode 100644 index 00000000..e01290c1 --- /dev/null +++ b/lib/screens/patients/profile/vital_sign/vital_ding_chart_and_detials.dart @@ -0,0 +1,39 @@ +import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; +import 'package:doctor_app_flutter/widgets/patients/vital_sign_details_wideget.dart'; +import 'package:doctor_app_flutter/widgets/shared/charts/app_time_series_chart.dart'; +import 'package:flutter/material.dart'; +class VitalSingChartAndDetials extends StatelessWidget { + VitalSingChartAndDetials({ + Key key, + @required this.vitalList, + @required this.name, + @required this.viewKey, + @required this.title1, + @required this.title2, + }) : super(key: key); + + final List vitalList ; + final String name; + final String viewKey; + final String title1; + final String title2; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + AppTimeSeriesChart( + vitalList: vitalList, + chartName: name, + viewKey: viewKey, + ), + VitalSignDetailsWidget( + vitalList: vitalList.reversed.toList(), + title1: '${title1}', + title2: '${title2}', + viewKey: '${viewKey}', + ), + ], + ); + } +} diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart index 9547c1ce..fc25928a 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart @@ -1,16 +1,18 @@ import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; +import 'package:doctor_app_flutter/lookups/patient_lookup.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign_req_model.dart'; import 'package:doctor_app_flutter/providers/patients_provider.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; +import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../../../config/size_config.dart'; import '../../../../models/patient/vital_sign_res_model.dart'; -import '../../../../widgets/patients/profile/profile_medical_info_widget.dart'; import '../../../../widgets/shared/app_scaffold_widget.dart'; + DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); class VitalSignDetailsScreen extends StatefulWidget { @@ -74,54 +76,192 @@ class _VitalSignDetailsScreenState extends State { return AppScaffold( appBarTitle: "vital Sing ", isloading: patientsProv.isLoading, - body: CustomScrollView( - primary: false, - slivers: [ - SliverPadding( - padding: const EdgeInsets.all(10), - sliver: SliverGrid.count( - childAspectRatio: 0.7, - crossAxisSpacing: 10, - mainAxisSpacing: 0, - crossAxisCount: 3, + body: Container( + child: Column( + children: [ + Row( children: [ InkWell( - onTap: (){ - Navigator.of(context).pushNamed(BODY_MEASUREMENTS); + onTap: () { + Navigator.of(context).pushNamed(BODY_MEASUREMENTS, + arguments: { + 'title': 'Body Measurements', + 'key': vitalSignDetails.bodyMeasurements + }); }, - child: CircleAvatarWidget( + child: VitalSignItem( des: 'Body Measurements', url: url + 'heartbeat.png', + lastVal: patientsProv + .patientVitalSignOrderdSubList[0].heightCm + .toString(), + unit: 'Cm', ), ), - CircleAvatarWidget( - des: 'Temperature', - url: url + 'heartbeat.png', + InkWell( + onTap: () { + Navigator.of(context).pushNamed(BODY_MEASUREMENTS, + arguments: { + 'title': 'Temperature', + 'key': vitalSignDetails.temperature + }); + }, + child: VitalSignItem( + des: 'Temperature', + url: url + 'heartbeat.png', + ), ), - CircleAvatarWidget( - des: 'Pulse', - url: url + 'heartbeat.png', + ], + ), + Row( + children: [ + InkWell( + onTap: () { + Navigator.of(context).pushNamed(BODY_MEASUREMENTS, + arguments: { + 'title': 'pulse', + 'key': vitalSignDetails.pulse + }); + }, + child: VitalSignItem( + des: 'Pulse', + url: url + 'heartbeat.png', + ), ), - CircleAvatarWidget( - des: 'Respiration', - url: url + 'heartbeat.png', + InkWell( + onTap: () { + Navigator.of(context).pushNamed(BODY_MEASUREMENTS, + arguments: { + 'title': 'pespiration', + 'key': vitalSignDetails.pespiration + }); + }, + child: VitalSignItem( + des: 'Respiration', + url: url + 'heartbeat.png', + ), ), - CircleAvatarWidget( - des: 'Blood Pressure', - url: url + 'heartbeat.png', + ], + ), + Row( + children: [ + InkWell( + onTap: () { + Navigator.of(context).pushNamed(BODY_MEASUREMENTS, + arguments: { + 'title': 'Blood Pressure', + 'key': vitalSignDetails.bloodPressure + }); + }, + child: VitalSignItem( + des: 'Blood Pressure', + url: url + 'heartbeat.png', + ), ), - CircleAvatarWidget( - des: 'Oxygenation', - url: url + 'heartbeat.png', + InkWell( + onTap: () { + Navigator.of(context).pushNamed(BODY_MEASUREMENTS, + arguments: { + 'title': 'Oxygenation', + 'key': vitalSignDetails.oxygenation + }); + }, + child: VitalSignItem( + des: 'Oxygenation', + url: url + 'heartbeat.png', + ), ), - CircleAvatarWidget( - des: 'Pain Scale', - url: url + 'heartbeat.png', + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + InkWell( + onTap: () { + Navigator.of(context).pushNamed(BODY_MEASUREMENTS, + arguments: { + 'title': 'Pain Scale', + 'key': vitalSignDetails.painScale + }); + }, + child: VitalSignItem( + des: 'Pain Scale', + url: url + 'heartbeat.png', + ), ), ], ), + ], + ), + )); + } +} + +class VitalSignItem extends StatelessWidget { + const VitalSignItem( + {Key key, + @required this.url, + @required this.des, + this.lastVal = 'N/A', + this.unit = '', + this.height, + this.width}) + : super(key: key); + + final String url; + final String des; + final String lastVal; + final String unit; + + final double height; + final double width; + + @override + Widget build(BuildContext context) { + return RoundedContainer( + height: 0.14 * SizeConfig.realScreenHeight, + width: 0.45 * SizeConfig.realScreenWidth, + child: Container( + padding: EdgeInsets.all(5), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + des, + style: TextStyle( + fontSize: 1.7 * SizeConfig.textMultiplier, + color: Theme.of(context).primaryColor, + fontWeight: FontWeight.bold), ), + Column( + // mainAxisAlignment: MainAxisAlignment.spaceEvenly, + // crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Image.asset( + url, + height: SizeConfig.heightMultiplier * 7, + ), + ), + Expanded( + child: RichText( + text: TextSpan( + style: TextStyle(color: Colors.black), + children: [ + new TextSpan(text: lastVal), + new TextSpan( + text: ' ${unit}', + style: + TextStyle(color: Theme.of(context).primaryColor)), + ], + ), + )) + ], + ) ], - )); + ), + ), + ); } } diff --git a/lib/widgets/shared/charts/app_time_series_chart.dart b/lib/widgets/shared/charts/app_time_series_chart.dart index 128c81cd..d22fb951 100644 --- a/lib/widgets/shared/charts/app_time_series_chart.dart +++ b/lib/widgets/shared/charts/app_time_series_chart.dart @@ -1,51 +1,93 @@ +import 'package:charts_flutter/flutter.dart' as charts; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; +import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/body_measurements_screen.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; -class TimeSeriesChart extends StatelessWidget { - const TimeSeriesChart({ - Key key, - @required this.seriesList, - @required this.vitalList, - }) : super(key: key); +class AppTimeSeriesChart extends StatelessWidget { + AppTimeSeriesChart( + {Key key, + @required this.vitalList, + @required this.viewKey, + this.chartName = ''}); - final List seriesList; final List vitalList; + final String chartName; + final String viewKey; + List seriesList; @override Widget build(BuildContext context) { + seriesList = generateData(); return RoundedContainer( - height: SizeConfig.realScreenHeight * 0.4, - child: Center( - child: Expanded( - child: charts.TimeSeriesChart( - seriesList, - animate: true, - behaviors: [ - new charts.RangeAnnotation( - [ - new charts.RangeAnnotationSegment( - DateTime( - vitalList[vitalList.length - 1] - .vitalSignDate - .year, - vitalList[vitalList.length - 1] - .vitalSignDate - .month + - 3, - vitalList[vitalList.length - 1] - .vitalSignDate - .day), - vitalList[0].vitalSignDate, - charts.RangeAnnotationAxisType.domain), - ], + height: SizeConfig.realScreenHeight * 0.47, + child: Column( + children: [ + Text( + chartName, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: SizeConfig.textMultiplier * 3), + ), + Container( + height: SizeConfig.realScreenHeight * 0.37, + child: Center( + child: Expanded( + child: charts.TimeSeriesChart( + seriesList, + animate: true, + behaviors: [ + new charts.RangeAnnotation( + [ + new charts.RangeAnnotationSegment( + DateTime( + vitalList[vitalList.length - 1] + .vitalSignDate + .year, + vitalList[vitalList.length - 1] + .vitalSignDate + .month + + 3, + vitalList[vitalList.length - 1] + .vitalSignDate + .day), + vitalList[0].vitalSignDate, + charts.RangeAnnotationAxisType.domain), + ], + ), + ], + ), ), - ], + ), ), - ), + ], ), ); } + + generateData() { + final List data = []; + if (vitalList.length > 0) { + vitalList.forEach( + (element) { + data.add( + TimeSeriesSales( + new DateTime(element.vitalSignDate.year, + element.vitalSignDate.month, element.vitalSignDate.day), + element.toJson()[viewKey].toInt(), + ), + ); + }, + ); + } + return [ + new charts.Series( + id: 'Sales', + domainFn: (TimeSeriesSales sales, _) => sales.time, + measureFn: (TimeSeriesSales sales, _) => sales.sales, + data: data, + ) + ]; + } } From 1f5bca3adceaeeed2f97fb3b1c56207d4fab3616 Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Tue, 2 Jun 2020 17:17:16 +0300 Subject: [PATCH 09/15] patient profile details --- lib/client/base_app_client.dart | 7 + lib/config/config.dart | 2 +- lib/main.dart | 2 +- lib/models/patient/lab_orders_res_model.dart | 6 +- lib/models/patient/lab_result.dart | 124 +++++++++++ lib/models/patient/lab_result_req_model.dart | 68 ++++++ lib/providers/patients_provider.dart | 62 ++++-- .../profile/lab_result/lab_orders_screen.dart | 198 +++++++++++++----- .../lab_result/lab_result_secreen.dart | 86 ++++++++ .../prescriptions/prescriptions_screen.dart | 33 ++- .../vital_sign/body_measurements_screen.dart | 1 + lib/widgets/doctor/lab_result_widget.dart | 174 +++++++++++++++ .../patients/profile/large_avatar.dart | 57 +++-- .../shared/card_with_bgNew_widget.dart | 13 +- 14 files changed, 708 insertions(+), 125 deletions(-) create mode 100644 lib/models/patient/lab_result.dart create mode 100644 lib/models/patient/lab_result_req_model.dart create mode 100644 lib/screens/patients/profile/lab_result/lab_result_secreen.dart create mode 100644 lib/widgets/doctor/lab_result_widget.dart diff --git a/lib/client/base_app_client.dart b/lib/client/base_app_client.dart index 28c30e90..0d57b9dd 100644 --- a/lib/client/base_app_client.dart +++ b/lib/client/base_app_client.dart @@ -14,6 +14,13 @@ import 'package:http/http.dart'; *@return: *@desc: */ +///Example +/* + await BaseAppClient.post('', + onSuccess: (dynamic response, int statusCode) {}, + onFailure: (String error, int statusCode) {}, + body: null); +* */ class BaseAppClient { static Client client = HttpInterceptor().getClient(); diff --git a/lib/config/config.dart b/lib/config/config.dart index 24c2586a..b3dd7255 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -3,7 +3,7 @@ const ONLY_NUMBERS = "[0-9]"; const ONLY_LETTERS = "[a-zA-Z]"; const ONLY_DATE = "[0-9/]"; -const BASE_URL = 'https://uat.hmgwebservices.com/Services/'; +const BASE_URL = 'https://hmgwebservices.com/Services/'; const PHARMACY_ITEMS_URL = "Lists.svc/REST/GetPharmcyItems"; const PHARMACY_LIST_URL = "Patients.svc/REST/GetPharmcyList"; const PATIENT_PROGRESS_NOTE_URL = "DoctorApplication.svc/REST/GetProgressNoteForInPatient"; diff --git a/lib/main.dart b/lib/main.dart index 98331b4a..2ab87a2a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -44,7 +44,7 @@ class MyApp extends StatelessWidget { ], theme: ThemeData( primarySwatch: Colors.grey, - primaryColor: Hexcolor('#B8382C'), + primaryColor: Colors.grey, buttonColor: Hexcolor('#B8382C'), fontFamily: 'WorkSans', dividerColor: Colors.grey[200], diff --git a/lib/models/patient/lab_orders_res_model.dart b/lib/models/patient/lab_orders_res_model.dart index 556f0474..48d3dc27 100644 --- a/lib/models/patient/lab_orders_res_model.dart +++ b/lib/models/patient/lab_orders_res_model.dart @@ -5,6 +5,8 @@ *@return:LabOrdersResModel *@desc: LabOrdersResModel class */ +import 'package:doctor_app_flutter/util/helpers.dart'; + class LabOrdersResModel { String setupID; int projectID; @@ -19,7 +21,7 @@ class LabOrdersResModel { int status; String createdBy; Null createdByN; - String createdOn; + DateTime createdOn; String editedBy; Null editedByN; String editedOn; @@ -65,7 +67,7 @@ class LabOrdersResModel { status = json['Status']; createdBy = json['CreatedBy']; createdByN = json['CreatedByN']; - createdOn = json['CreatedOn']; + createdOn = Helpers.convertStringToDate(json['CreatedOn']); editedBy = json['EditedBy']; editedByN = json['EditedByN']; editedOn = json['EditedOn']; diff --git a/lib/models/patient/lab_result.dart b/lib/models/patient/lab_result.dart new file mode 100644 index 00000000..ca753f2d --- /dev/null +++ b/lib/models/patient/lab_result.dart @@ -0,0 +1,124 @@ +class LabResult { + String setupID; + int projectID; + int orderNo; + int lineItemNo; + int packageID; + int testID; + String description; + String resultValue; + String referenceRange; + Null convertedResultValue; + Null convertedReferenceRange; + Null resultValueFlag; + int status; + String createdBy; + Null createdByN; + String createdOn; + String editedBy; + Null editedByN; + String editedOn; + String verifiedBy; + Null verifiedByN; + String verifiedOn; + Null patientID; + int gender; + Null maleInterpretativeData; + Null femaleInterpretativeData; + String testCode; + String statusDescription; + + LabResult( + {this.setupID, + this.projectID, + this.orderNo, + this.lineItemNo, + this.packageID, + this.testID, + this.description, + this.resultValue, + this.referenceRange, + this.convertedResultValue, + this.convertedReferenceRange, + this.resultValueFlag, + this.status, + this.createdBy, + this.createdByN, + this.createdOn, + this.editedBy, + this.editedByN, + this.editedOn, + this.verifiedBy, + this.verifiedByN, + this.verifiedOn, + this.patientID, + this.gender, + this.maleInterpretativeData, + this.femaleInterpretativeData, + this.testCode, + this.statusDescription}); + + LabResult.fromJson(Map json) { + setupID = json['SetupID']; + projectID = json['ProjectID']; + orderNo = json['OrderNo']; + lineItemNo = json['LineItemNo']; + packageID = json['PackageID']; + testID = json['TestID']; + description = json['Description']; + resultValue = json['ResultValue']; + referenceRange = json['ReferenceRange']; + convertedResultValue = json['ConvertedResultValue']; + convertedReferenceRange = json['ConvertedReferenceRange']; + resultValueFlag = json['ResultValueFlag']; + status = json['Status']; + createdBy = json['CreatedBy']; + createdByN = json['CreatedByN']; + createdOn = json['CreatedOn']; + editedBy = json['EditedBy']; + editedByN = json['EditedByN']; + editedOn = json['EditedOn']; + verifiedBy = json['VerifiedBy']; + verifiedByN = json['VerifiedByN']; + verifiedOn = json['VerifiedOn']; + patientID = json['PatientID']; + gender = json['Gender']; + maleInterpretativeData = json['MaleInterpretativeData']; + femaleInterpretativeData = json['FemaleInterpretativeData']; + testCode = json['TestCode']; + statusDescription = json['StatusDescription']; + } + + Map toJson() { + final Map data = new Map(); + data['SetupID'] = this.setupID; + data['ProjectID'] = this.projectID; + data['OrderNo'] = this.orderNo; + data['LineItemNo'] = this.lineItemNo; + data['PackageID'] = this.packageID; + data['TestID'] = this.testID; + data['Description'] = this.description; + data['ResultValue'] = this.resultValue; + data['ReferenceRange'] = this.referenceRange; + data['ConvertedResultValue'] = this.convertedResultValue; + data['ConvertedReferenceRange'] = this.convertedReferenceRange; + data['ResultValueFlag'] = this.resultValueFlag; + data['Status'] = this.status; + data['CreatedBy'] = this.createdBy; + data['CreatedByN'] = this.createdByN; + data['CreatedOn'] = this.createdOn; + data['EditedBy'] = this.editedBy; + data['EditedByN'] = this.editedByN; + data['EditedOn'] = this.editedOn; + data['VerifiedBy'] = this.verifiedBy; + data['VerifiedByN'] = this.verifiedByN; + data['VerifiedOn'] = this.verifiedOn; + data['PatientID'] = this.patientID; + data['Gender'] = this.gender; + data['MaleInterpretativeData'] = this.maleInterpretativeData; + data['FemaleInterpretativeData'] = this.femaleInterpretativeData; + data['TestCode'] = this.testCode; + data['StatusDescription'] = this.statusDescription; + return data; + } +} diff --git a/lib/models/patient/lab_result_req_model.dart b/lib/models/patient/lab_result_req_model.dart new file mode 100644 index 00000000..5e58a4a5 --- /dev/null +++ b/lib/models/patient/lab_result_req_model.dart @@ -0,0 +1,68 @@ +class RequestLabResult { + int projectID; + String setupID; + int orderNo; + int invoiceNo; + int patientTypeID; + int languageID; + String stamp; + String iPAdress; + double versionID; + int channel; + String tokenID; + String sessionID; + bool isLoginForDoctorApp; + bool patientOutSA; + + RequestLabResult( + {this.projectID, + this.setupID, + this.orderNo, + this.invoiceNo, + this.patientTypeID, + this.languageID, + this.stamp, + this.iPAdress, + this.versionID, + this.channel, + this.tokenID, + this.sessionID, + this.isLoginForDoctorApp, + this.patientOutSA}); + + RequestLabResult.fromJson(Map json) { + projectID = json['ProjectID']; + setupID = json['SetupID']; + orderNo = json['OrderNo']; + invoiceNo = json['InvoiceNo']; + patientTypeID = json['PatientTypeID']; + languageID = json['LanguageID']; + stamp = json['stamp']; + iPAdress = json['IPAdress']; + versionID = json['VersionID']; + channel = json['Channel']; + tokenID = json['TokenID']; + sessionID = json['SessionID']; + isLoginForDoctorApp = json['IsLoginForDoctorApp']; + patientOutSA = json['PatientOutSA']; + } + + Map toJson() { + final Map data = new Map(); + data['ProjectID'] = this.projectID; + data['SetupID'] = this.setupID; + data['OrderNo'] = this.orderNo; + data['InvoiceNo'] = this.invoiceNo; + data['PatientTypeID'] = this.patientTypeID; + data['LanguageID'] = this.languageID; + data['stamp'] = this.stamp; + data['IPAdress'] = this.iPAdress; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['TokenID'] = this.tokenID; + data['SessionID'] = this.sessionID; + data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp; + data['PatientOutSA'] = this.patientOutSA; + return data; + } +} diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index a70be1aa..864c4d72 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -1,7 +1,10 @@ import 'dart:convert'; import 'package:doctor_app_flutter/client/app_client.dart'; +import 'package:doctor_app_flutter/client/base_app_client.dart'; import 'package:doctor_app_flutter/models/patient/lab_orders_res_model.dart'; +import 'package:doctor_app_flutter/models/patient/lab_result.dart'; +import 'package:doctor_app_flutter/models/patient/lab_result_req_model.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/models/patient/prescription_res_model.dart'; import 'package:doctor_app_flutter/models/patient/radiology_res_model.dart'; @@ -31,6 +34,7 @@ class PatientsProvider with ChangeNotifier { List patientLabResultOrdersList = []; List patientPrescriptionsList = []; List patientRadiologyList = []; + List labResultList = []; var patientProgressNoteList = []; var insuranceApporvalsList = []; @@ -90,9 +94,9 @@ class PatientsProvider with ChangeNotifier { notifyListeners(); } -/* - *@author: Elham Rababah - *@Date:27/4/2020 +/* + *@author: Elham Rababah + *@Date:27/4/2020 *@param: patient *@return: *@desc: getPatientVitalSign @@ -120,19 +124,19 @@ class PatientsProvider with ChangeNotifier { }); if (patientVitalSignList.length > 0) { - List patientVitalSignOrderdSubListTemp = []; + List patientVitalSignOrderdSubListTemp = []; patientVitalSignOrderdSubListTemp = patientVitalSignList; patientVitalSignOrderdSubListTemp .sort((VitalSignResModel a, VitalSignResModel b) { return b.vitalSignDate.microsecondsSinceEpoch - a.vitalSignDate.microsecondsSinceEpoch; }); - patientVitalSignOrderdSubList.clear(); - for(int x =0; x< 20;x++ ){ - patientVitalSignOrderdSubList.add(patientVitalSignOrderdSubListTemp[x]); - + patientVitalSignOrderdSubList.clear(); + for (int x = 0; x < 20; x++) { + patientVitalSignOrderdSubList + .add(patientVitalSignOrderdSubListTemp[x]); } - var asd=""; + var asd = ""; } // patientVitalSignList = res['List_DoctorPatientVitalSign']; } else { @@ -151,8 +155,8 @@ class PatientsProvider with ChangeNotifier { } } -/*@author: Elham Rababah - *@Date:27/4/2020 +/*@author: Elham Rababah + *@Date:27/4/2020 *@param: patient *@return: *@desc: getLabResult Orders @@ -196,8 +200,8 @@ class PatientsProvider with ChangeNotifier { } } -/*@author: Elham Rababah - *@Date:3/5/2020 +/*@author: Elham Rababah + *@Date:3/5/2020 *@param: patient *@return: *@desc: getPatientPrescriptions @@ -242,8 +246,8 @@ class PatientsProvider with ChangeNotifier { } } - /*@author: Elham Rababah - *@Date:12/5/2020 + /*@author: Elham Rababah + *@Date:12/5/2020 *@param: patient *@return: *@desc: getPatientRadiology @@ -256,8 +260,8 @@ class PatientsProvider with ChangeNotifier { throw err; } -/*@author: Elham Rababah - *@Date:3/5/2020 +/*@author: Elham Rababah + *@Date:3/5/2020 *@param: patient *@return: *@desc: getPatientRadiology @@ -366,4 +370,28 @@ class PatientsProvider with ChangeNotifier { handelCatchErrorCase(err); } } + + getLabResult(LabOrdersResModel labOrdersResModel) async { + labResultList.clear(); + isLoading = true; + notifyListeners(); + RequestLabResult requestLabResult = RequestLabResult(); + requestLabResult.sessionID = labOrdersResModel.setupID; + requestLabResult.orderNo = labOrdersResModel.orderNo; + requestLabResult.invoiceNo = labOrdersResModel.invoiceNo; + requestLabResult.patientTypeID = labOrdersResModel.patientType; + await BaseAppClient.post('DoctorApplication.svc/REST/GetPatientLabResults', + onSuccess: (dynamic response, int statusCode) { + isError = false; + isLoading = false; + response['List_GetLabNormal'].forEach((v) { + labResultList.add(new LabResult.fromJson(v)); + }); + }, onFailure: (String error, int statusCode) { + isError = true; + isLoading = false; + this.error = error; + }, body: requestLabResult.toJson()); + notifyListeners(); + } } diff --git a/lib/screens/patients/profile/lab_result/lab_orders_screen.dart b/lib/screens/patients/profile/lab_result/lab_orders_screen.dart index ae2bc1d8..66991967 100644 --- a/lib/screens/patients/profile/lab_result/lab_orders_screen.dart +++ b/lib/screens/patients/profile/lab_result/lab_orders_screen.dart @@ -1,4 +1,8 @@ +import 'package:doctor_app_flutter/util/helpers.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/large_avatar.dart'; +import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; +import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -13,6 +17,7 @@ import '../../../../widgets/shared/app_texts_widget.dart'; import '../../../../widgets/shared/card_with_bg_widget.dart'; import '../../../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; import '../../../../widgets/shared/profile_image_widget.dart'; +import 'lab_result_secreen.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); @@ -44,12 +49,6 @@ class _LabOrdersScreenState extends State { final routeArgs = ModalRoute.of(context).settings.arguments as Map; PatiantInformtion patient = routeArgs['patient']; String token = await sharedPref.getString(TOKEN); - // String type = await sharedPref.getString(SLECTED_PATIENT_TYPE); - // int inOutpatientType = 1; - // if (type == '0') { - // inOutpatientType = 2; - // } - // print(type); LabOrdersReqModel labOrdersReqModel = LabOrdersReqModel( patientID: patient.patientId, projectID: patient.projectId, @@ -88,61 +87,150 @@ class _LabOrdersScreenState extends State { 0, SizeConfig.realScreenWidth * 0.05, 0), - child: ListView.builder( - itemCount: - patientsProv.patientLabResultOrdersList.length, - itemBuilder: (BuildContext ctxt, int index) { - return InkWell( - child: CardWithBgWidget( - widget: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - ProfileImageWidget( + child: Container( + margin: EdgeInsets.symmetric(vertical: 10), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all( + Radius.circular(20.0), + ), + ), + child: ListView.builder( + itemCount: + patientsProv.patientLabResultOrdersList.length, + itemBuilder: (BuildContext context, int index) { + return InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => LabResult( + labOrders: patientsProv + .patientLabResultOrdersList[index], + ), + ), + ); + }, + child: Container( + padding: EdgeInsets.all(10), + margin: EdgeInsets.all(10), + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(10)), + border: Border( + bottom: BorderSide( + color: Colors.grey, width: 0.5), + top: BorderSide( + color: Colors.grey, width: 0.5), + left: BorderSide( + color: Colors.grey, width: 0.5), + right: BorderSide( + color: Colors.grey, width: 0.5), + ), + ), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( + children: [ + LargeAvatar( url: patientsProv .patientLabResultOrdersList[ index] - .doctorImageURL), - Expanded( - child: Padding( - padding: const EdgeInsets.fromLTRB( - 8, 0, 0, 0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - AppText( - '${patientsProv.patientLabResultOrdersList[index].doctorName}', - fontSize: 2.5 * - SizeConfig.textMultiplier, - fontWeight: FontWeight.bold, - ), - SizedBox( - height: 8, - ), - AppText( - ' ${patientsProv.patientLabResultOrdersList[index].clinicName}', - fontSize: 2 * - SizeConfig.textMultiplier, - color: Theme.of(context) - .primaryColor, - ), - SizedBox( - height: 8, - ), - ], + .doctorImageURL, + name: patientsProv + .patientLabResultOrdersList[ + index] + .doctorName, + ), + Expanded( + child: Padding( + padding: + const EdgeInsets.fromLTRB( + 8, 0, 0, 0), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + AppText( + '${patientsProv.patientLabResultOrdersList[index].doctorName}', + fontSize: 1.7 * + SizeConfig + .textMultiplier, + fontWeight: FontWeight.w600, + ), + SizedBox( + height: 8, + ), + AppText( + ' ${patientsProv.patientLabResultOrdersList[index].projectName}', + fontSize: 2 * + SizeConfig + .textMultiplier, + color: Colors.grey[800]), + SizedBox( + height: 8, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + AppText( + ' Invoice No :', + fontSize: 2 * + SizeConfig + .textMultiplier, + color: Colors.grey[800], + ), + AppText( + ' ${patientsProv.patientLabResultOrdersList[index].invoiceNo}', + fontSize: 2 * + SizeConfig + .textMultiplier, + color: Colors.grey[800], + ), + ], + ) + ], + ), ), + ) + ], + ), + SizedBox( + height: 3, + ), + Divider( + color: Colors.grey, + ), + SizedBox( + height: 3, + ), + Row( + children: [ + Icon( + EvaIcons.calendar, + color: Colors.grey[700], ), - ) - ], - ), - ], + SizedBox( + width: 10, + ), + Expanded( + child: AppText( + '${Helpers.getDate(patientsProv.patientLabResultOrdersList[index].createdOn)}', + fontSize: 2.0 * + SizeConfig.textMultiplier, + ), + ) + ], + ) + ], + ), ), - ), - onTap: () {}, - ); - }), + ); + }), + ), ), ); } diff --git a/lib/screens/patients/profile/lab_result/lab_result_secreen.dart b/lib/screens/patients/profile/lab_result/lab_result_secreen.dart new file mode 100644 index 00000000..fed749c7 --- /dev/null +++ b/lib/screens/patients/profile/lab_result/lab_result_secreen.dart @@ -0,0 +1,86 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/models/patient/lab_orders_res_model.dart'; +import 'package:doctor_app_flutter/providers/patients_provider.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; +import 'package:doctor_app_flutter/widgets/doctor/lab_result_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; +import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; +import 'package:eva_icons_flutter/eva_icons_flutter.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class LabResult extends StatefulWidget { + final LabOrdersResModel labOrders; + + LabResult({Key key, this.labOrders}); + + @override + _LabResultState createState() => _LabResultState(); +} + +class _LabResultState extends State { + PatientsProvider patientsProv; + bool _isInit = true; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + patientsProv = Provider.of(context); + patientsProv.getLabResult(widget.labOrders); + // getLabResultOrders(context); + } + _isInit = false; + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: "Lab Orders", + showAppDrawer: false, + showBottomBar: false, + body: patientsProv.isLoading + ? DrAppCircularProgressIndeicator() + : patientsProv.isError + ? DrAppEmbeddedError(error: patientsProv.error) + : patientsProv.labResultList.length == 0 + ? DrAppEmbeddedError(error: 'You don\'t have any Orders') + : Container( + margin: EdgeInsets.fromLTRB( + SizeConfig.realScreenWidth * 0.05, + 0, + SizeConfig.realScreenWidth * 0.05, + 0), + child: ListView( + children: [ + CardWithBgWidgetNew( + widget: Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + AppText( + ' Invoice No :', + fontSize: + 2 * SizeConfig.textMultiplier, + color: Colors.grey[800], + ), + AppText( + ' ${widget.labOrders.invoiceNo}', + fontSize: + 2 * SizeConfig.textMultiplier, + color: Colors.grey[800], + ), + ], + ), + ), + CardWithBgWidgetNew(widget: LabResultWidget(labResult: patientsProv.labResultList,)) + ], + ), + ), + ); + } +} diff --git a/lib/screens/patients/profile/prescriptions/prescriptions_screen.dart b/lib/screens/patients/profile/prescriptions/prescriptions_screen.dart index 3bded248..e06d789c 100644 --- a/lib/screens/patients/profile/prescriptions/prescriptions_screen.dart +++ b/lib/screens/patients/profile/prescriptions/prescriptions_screen.dart @@ -1,3 +1,6 @@ +import 'package:doctor_app_flutter/widgets/patients/profile/large_avatar.dart'; +import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -92,42 +95,34 @@ class _PrescriptionScreenState extends State { child: ListView.builder( itemCount: patientsProv.patientPrescriptionsList.length, - itemBuilder: (BuildContext ctxt, int index) { + itemBuilder: (BuildContext context, int index) { return InkWell( - child: CardWithBgWidget( + child: CardWithBgWidgetNew( widget: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ - ProfileImageWidget( - url: patientsProv - .patientPrescriptionsList[index] - .doctorImageURL), + LargeAvatar( + url: patientsProv.patientPrescriptionsList[index].doctorImageURL,name:patientsProv.patientPrescriptionsList[index].doctorName ,radius: 10,width: 70,), Expanded( - child: Padding( - padding: const EdgeInsets.fromLTRB( - 8, 0, 0, 0), + child: Container( + margin: EdgeInsets.only(left: 15,right: 15), child: Column( crossAxisAlignment: - CrossAxisAlignment.start, + CrossAxisAlignment.start, children: [ AppText( - '${patientsProv.patientPrescriptionsList[index].doctorName}', - fontSize: 2.5 * - SizeConfig.textMultiplier, - fontWeight: FontWeight.bold, + '${patientsProv.patientPrescriptionsList[index].name}', + fontSize: 2.5 * SizeConfig.textMultiplier, ), SizedBox( height: 8, ), AppText( ' ${patientsProv.patientPrescriptionsList[index].clinicDescription}', - fontSize: 2 * - SizeConfig - .textMultiplier, - color: Theme.of(context) - .primaryColor), + fontSize: 2.5 * SizeConfig.textMultiplier, + color: Theme.of(context).primaryColor), SizedBox( height: 8, ), diff --git a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart index 769b40f9..6082edb6 100644 --- a/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart +++ b/lib/screens/patients/profile/vital_sign/body_measurements_screen.dart @@ -4,6 +4,7 @@ import 'package:doctor_app_flutter/models/patient/vital_sign_res_model.dart'; import 'package:doctor_app_flutter/providers/patients_provider.dart'; import 'package:doctor_app_flutter/widgets/patients/vital_sign_details_wideget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/charts/app_time_series_chart.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; diff --git a/lib/widgets/doctor/lab_result_widget.dart b/lib/widgets/doctor/lab_result_widget.dart new file mode 100644 index 00000000..73cdba66 --- /dev/null +++ b/lib/widgets/doctor/lab_result_widget.dart @@ -0,0 +1,174 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/models/patient/lab_result.dart'; +import 'package:doctor_app_flutter/widgets/shared/Text.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/card_with_bgNew_widget.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; + +class LabResultWidget extends StatefulWidget { + final List labResult; + + LabResultWidget({Key key, this.labResult}); + + @override + _LabResultWidgetState createState() => _LabResultWidgetState(); +} + +class _LabResultWidgetState extends State { + bool _showDetails = true; + + @override + Widget build(BuildContext context) { + return Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + 'General Result', + fontSize: 2.5 * SizeConfig.textMultiplier, + fontWeight: FontWeight.bold, + ), + InkWell( + onTap: () { + setState(() { + _showDetails = !_showDetails; + }); + }, + child: Icon(_showDetails + ? Icons.keyboard_arrow_up + : Icons.keyboard_arrow_down)), + ], + ), + Divider( + color: Colors.grey, + height: 0.5, + ), + !_showDetails + ? Container() + : AnimatedContainer( + duration: Duration(microseconds: 200), + child: Container( + margin: EdgeInsets.only(top: 10), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(10)), + + ), + child: Column( + children: widget.labResult.map((result) { + return Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(10)), + border: Border( + bottom: BorderSide( + color: Colors.grey, width: 0.5), + top: BorderSide( + color: Colors.grey, width: 0.5), + left: BorderSide( + color: Colors.grey, width: 0.5), + right: BorderSide( + color: Colors.grey, width: 0.5), + ), + ), + margin: EdgeInsets.only(top: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Container( + decoration: BoxDecoration( + color: Hexcolor('#515B5D'), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10.0), + ), + ), + child: Center( + child: Texts( + 'Description', + color: Colors.white, + ), + ), + height: 60, + ), + ), + Expanded( + child: Container( + color: Hexcolor('#515B5D'), + child: Center( + child: Texts('Value', color: Colors.white), + ), + height: 60), + ), + Expanded( + child: Container( + decoration: BoxDecoration( + color: Hexcolor('#515B5D'), + borderRadius: BorderRadius.only( + topRight: Radius.circular(10.0), + ), + ), + child: Center( + child: Texts('Range', color: Colors.white), + ), + height: 60), + ), + ], + ), + Row( + children: [ + Expanded( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(10.0), + ), + ), + child: Center( + child: Texts( + '${result.description}', + color: Colors.grey[800], + ), + ), + height: 60, + ), + ), + Expanded( + child: Container( + child: Center( + child: Texts( + '${result.resultValue}', + color: Colors.grey[800]), + ), + height: 60), + ), + Expanded( + child: Container( + child: Center( + child: Texts( + '${result.referenceRange}', + color: Colors.grey[800]), + ), + height: 60), + ), + ], + ) + ], + ), + ); + }).toList(), + ), + ), + ) + ], + ), + ); + } +} diff --git a/lib/widgets/patients/profile/large_avatar.dart b/lib/widgets/patients/profile/large_avatar.dart index ab28b9fe..54cbcb30 100644 --- a/lib/widgets/patients/profile/large_avatar.dart +++ b/lib/widgets/patients/profile/large_avatar.dart @@ -5,23 +5,33 @@ import 'package:flutter/material.dart'; import 'avatar_gradients.dart'; class LargeAvatar extends StatelessWidget { - LargeAvatar({Key key, this.name, this.url, this.disableProfileView: false}) + LargeAvatar( + {Key key, + this.name, + this.url, + this.disableProfileView: false, + this.radius = 60.0, + this.width = 90, + this.height = 90}) : super(key: key); final String name; final String url; final bool disableProfileView; + final double radius; + final double width; + final double height; Widget _getAvatar() { if (url != null && url.isNotEmpty && Uri.parse(url).isAbsolute) { return Center( child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(60.0)), + borderRadius: BorderRadius.all(Radius.circular(radius)), child: Image.network( url.trim(), fit: BoxFit.cover, - width: 90.0, - height: 90.0, + width: width, + height: height, ), ), ); @@ -35,7 +45,9 @@ class LargeAvatar extends StatelessWidget { return Center( child: AppText( name[0].toUpperCase(), - color: Colors.white,fontSize: 18,fontWeight: FontWeight.bold, + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.bold, )); } } @@ -50,24 +62,23 @@ class LargeAvatar extends StatelessWidget { }, child: Container( decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment(-1, -1), - end: Alignment(1, 1), - colors: [ - Colors.grey[100], - Colors.grey[800], - ] - ), - boxShadow: [ - BoxShadow( - color: Color.fromRGBO(0, 0, 0, 0.08), - offset: Offset(0.0, 5.0), - blurRadius: 16.0) - ], - borderRadius: BorderRadius.all(Radius.circular(50.0)), - ), - width: 90.0, - height: 90.0, + gradient: LinearGradient( + begin: Alignment(-1, -1), + end: Alignment(1, 1), + colors: [ + Colors.grey[100], + Colors.grey[800], + ]), + boxShadow: [ + BoxShadow( + color: Color.fromRGBO(0, 0, 0, 0.08), + offset: Offset(0.0, 5.0), + blurRadius: 16.0) + ], + borderRadius: BorderRadius.all(Radius.circular(50.0)), + ), + width: width, + height: height, child: _getAvatar()), ); } diff --git a/lib/widgets/shared/card_with_bgNew_widget.dart b/lib/widgets/shared/card_with_bgNew_widget.dart index de8c3e82..20387615 100644 --- a/lib/widgets/shared/card_with_bgNew_widget.dart +++ b/lib/widgets/shared/card_with_bgNew_widget.dart @@ -20,22 +20,21 @@ class CardWithBgWidgetNew extends StatelessWidget { @override Widget build(BuildContext context) { - ProjectProvider projectProvider = Provider.of(context); return Container( margin: EdgeInsets.symmetric(vertical: 10.0), width: double.infinity, decoration: BoxDecoration( - borderRadius: BorderRadius.all( - Radius.circular(20.0), + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), ), - ), child: Material( - borderRadius: BorderRadius.all(Radius.circular(20.0)), - color: Hexcolor('#FFFFFF'), + borderRadius: BorderRadius.all(Radius.circular(10.0)), + color: Hexcolor('#FFFFFF'), child: Stack( children: [ Container( - padding: EdgeInsets.all(15.0), + padding: EdgeInsets.all(10.0), margin: EdgeInsets.only(left: 10), child: widget) ], From c6bbc1c2f5373fb0ac6eaabb62cce1422f311bf0 Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Tue, 2 Jun 2020 17:41:32 +0300 Subject: [PATCH 10/15] fix patient profile details --- lib/config/config.dart | 2 +- .../vital_sign/vital_sign_details_screen.dart | 87 ++++++++++--------- 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index b3dd7255..24c2586a 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -3,7 +3,7 @@ const ONLY_NUMBERS = "[0-9]"; const ONLY_LETTERS = "[a-zA-Z]"; const ONLY_DATE = "[0-9/]"; -const BASE_URL = 'https://hmgwebservices.com/Services/'; +const BASE_URL = 'https://uat.hmgwebservices.com/Services/'; const PHARMACY_ITEMS_URL = "Lists.svc/REST/GetPharmcyItems"; const PHARMACY_LIST_URL = "Patients.svc/REST/GetPharmcyList"; const PATIENT_PROGRESS_NOTE_URL = "DoctorApplication.svc/REST/GetProgressNoteForInPatient"; diff --git a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart index fc25928a..8b9cbead 100644 --- a/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart +++ b/lib/screens/patients/profile/vital_sign/vital_sign_details_screen.dart @@ -89,13 +89,13 @@ class _VitalSignDetailsScreenState extends State { 'key': vitalSignDetails.bodyMeasurements }); }, - child: VitalSignItem( - des: 'Body Measurements', - url: url + 'heartbeat.png', - lastVal: patientsProv - .patientVitalSignOrderdSubList[0].heightCm - .toString(), - unit: 'Cm', + child: Expanded( + child: VitalSignItem( + des: 'Body Measurements', + url: url + 'heartbeat.png', + lastVal: '137', + unit: 'Cm', + ), ), ), InkWell( @@ -106,9 +106,11 @@ class _VitalSignDetailsScreenState extends State { 'key': vitalSignDetails.temperature }); }, - child: VitalSignItem( - des: 'Temperature', - url: url + 'heartbeat.png', + child: Expanded( + child: VitalSignItem( + des: 'Temperature', + url: url + 'heartbeat.png', + ), ), ), ], @@ -219,6 +221,7 @@ class VitalSignItem extends StatelessWidget { @override Widget build(BuildContext context) { return RoundedContainer( + margin: 0.025 * SizeConfig.realScreenWidth, height: 0.14 * SizeConfig.realScreenHeight, width: 0.45 * SizeConfig.realScreenWidth, child: Container( @@ -227,37 +230,43 @@ class VitalSignItem extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - des, - style: TextStyle( - fontSize: 1.7 * SizeConfig.textMultiplier, - color: Theme.of(context).primaryColor, - fontWeight: FontWeight.bold), + Expanded( + flex: 2, + child: Text( + des, + style: TextStyle( + fontSize: 1.7 * SizeConfig.textMultiplier, + color: Theme.of(context).primaryColor, + fontWeight: FontWeight.bold), + ), ), - Column( - // mainAxisAlignment: MainAxisAlignment.spaceEvenly, - // crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Image.asset( - url, - height: SizeConfig.heightMultiplier * 7, - ), - ), - Expanded( - child: RichText( - text: TextSpan( - style: TextStyle(color: Colors.black), - children: [ - new TextSpan(text: lastVal), - new TextSpan( - text: ' ${unit}', - style: - TextStyle(color: Theme.of(context).primaryColor)), - ], + Expanded( + flex: 1, + child: Column( + // mainAxisAlignment: MainAxisAlignment.spaceEvenly, + // crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Image.asset( + url, + height: SizeConfig.heightMultiplier * 7, + ), ), - )) - ], + Expanded( + child: RichText( + text: TextSpan( + style: TextStyle(color: Colors.black), + children: [ + new TextSpan(text: lastVal), + new TextSpan( + text: ' ${unit}', + style: + TextStyle(color: Theme.of(context).primaryColor)), + ], + ), + )) + ], + ), ) ], ), From b8e5ab9a46cfab1cbd2da6f7cf6717bef550ec19 Mon Sep 17 00:00:00 2001 From: Amjad Amireh Date: Tue, 2 Jun 2020 17:44:51 +0300 Subject: [PATCH 11/15] design --- lib/screens/doctor/my_referred_patient_screen.dart | 7 ++++--- lib/widgets/doctor/my_referred_patient_widget.dart | 12 +++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/screens/doctor/my_referred_patient_screen.dart b/lib/screens/doctor/my_referred_patient_screen.dart index 009f62ec..989d248b 100644 --- a/lib/screens/doctor/my_referred_patient_screen.dart +++ b/lib/screens/doctor/my_referred_patient_screen.dart @@ -30,7 +30,8 @@ class MyReferredPatient extends StatelessWidget { color: Theme.of(context).errorColor, ), ) - : referredPatientProvider.listMyReferralPatientModel.length == 0 + + : referredPatientProvider.listMyReferredPatientModel.length == 0 ? Center( child: AppText( TranslationBase.of(context).errorNoSchedule, @@ -49,8 +50,8 @@ class MyReferredPatient extends StatelessWidget { ), Container( child: Column( - - children: referredPatientProvider.listMyReferralPatientModel.map((item) { + //children: referredPatientProvider.listMyReferralPatientModel.map((item) { + children: referredPatientProvider.listMyReferredPatientModel.map((item) { return MyReferredPatientWidget( myReferredPatientModel: item, ); diff --git a/lib/widgets/doctor/my_referred_patient_widget.dart b/lib/widgets/doctor/my_referred_patient_widget.dart index 0998788a..f1aeb03a 100644 --- a/lib/widgets/doctor/my_referred_patient_widget.dart +++ b/lib/widgets/doctor/my_referred_patient_widget.dart @@ -57,7 +57,8 @@ class _MyReferredPatientWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ AppText( '${widget.myReferredPatientModel.firstName} ${widget.myReferredPatientModel.lastName}', @@ -85,7 +86,12 @@ class _MyReferredPatientWidgetState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Divider(color: Colors.grey), + Divider(color: Colors.grey), + + // VerticalDivider(color: Colors.black, + // thickness: 2, width: 20, + // indent: 200, + // endIndent: 200,), Row( children: [ Expanded( @@ -109,7 +115,7 @@ class _MyReferredPatientWidgetState extends State { ), Container( - height: SizeConfig.realScreenWidth * 0.1, + height: SizeConfig.realScreenWidth * .1,//0.1, width: 0.8, color: Colors.grey, margin: EdgeInsets.only(left: 15, right: 15), From 627bac340d88139d28f1646373cd3308e4ecb54e Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Tue, 2 Jun 2020 18:00:32 +0300 Subject: [PATCH 12/15] marge with master --- lib/providers/patients_provider.dart | 62 +++++++-------- lib/providers/referred_patient_provider.dart | 38 ++++----- .../doctor/my_referred_patient_screen.dart | 79 ++++++++++--------- 3 files changed, 90 insertions(+), 89 deletions(-) diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index a2bcdf93..9b50258f 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -39,7 +39,7 @@ class PatientsProvider with ChangeNotifier { var insuranceApporvalsList = []; Client client = - HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); + HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); PatiantInformtion _selectedPatient; @@ -214,7 +214,7 @@ class PatientsProvider with ChangeNotifier { try { if (await Helpers.checkConnection()) { final response = - await AppClient.post(GET_PRESCRIPTION, body: json.encode(patient)); + await AppClient.post(GET_PRESCRIPTION, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; @@ -273,7 +273,7 @@ class PatientsProvider with ChangeNotifier { try { if (await Helpers.checkConnection()) { final response = - await AppClient.post(GET_RADIOLOGY, body: json.encode(patient)); + await AppClient.post(GET_RADIOLOGY, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; @@ -337,15 +337,37 @@ class PatientsProvider with ChangeNotifier { } } - getPatientInsuranceApprovals(patient) async { - //setBasicData(); - getPatientInsuranceApprovals(patient) async{ + getLabResult(LabOrdersResModel labOrdersResModel) async { + labResultList.clear(); + isLoading = true; + notifyListeners(); + RequestLabResult requestLabResult = RequestLabResult(); + requestLabResult.sessionID = labOrdersResModel.setupID; + requestLabResult.orderNo = labOrdersResModel.orderNo; + requestLabResult.invoiceNo = labOrdersResModel.invoiceNo; + requestLabResult.patientTypeID = labOrdersResModel.patientType; + await BaseAppClient.post('DoctorApplication.svc/REST/GetPatientLabResults', + onSuccess: (dynamic response, int statusCode) { + isError = false; + isLoading = false; + response['List_GetLabNormal'].forEach((v) { + labResultList.add(new LabResult.fromJson(v)); + }); + }, onFailure: (String error, int statusCode) { + isError = true; + isLoading = false; + this.error = error; + }, body: requestLabResult.toJson()); + notifyListeners(); + } + + getPatientInsuranceApprovals(patient) async { setBasicData(); try { if (await Helpers.checkConnection()) { - final response = await AppClient.post(PATIENT_INSURANCE_APPROVALS_URL, - body: json.encode(patient)); + final response = await AppClient.post( + PATIENT_INSURANCE_APPROVALS_URL, body: json.encode(patient)); final int statusCode = response.statusCode; isLoading = false; @@ -374,27 +396,5 @@ class PatientsProvider with ChangeNotifier { } } - getLabResult(LabOrdersResModel labOrdersResModel) async { - labResultList.clear(); - isLoading = true; - notifyListeners(); - RequestLabResult requestLabResult = RequestLabResult(); - requestLabResult.sessionID = labOrdersResModel.setupID; - requestLabResult.orderNo = labOrdersResModel.orderNo; - requestLabResult.invoiceNo = labOrdersResModel.invoiceNo; - requestLabResult.patientTypeID = labOrdersResModel.patientType; - await BaseAppClient.post('DoctorApplication.svc/REST/GetPatientLabResults', - onSuccess: (dynamic response, int statusCode) { - isError = false; - isLoading = false; - response['List_GetLabNormal'].forEach((v) { - labResultList.add(new LabResult.fromJson(v)); - }); - }, onFailure: (String error, int statusCode) { - isError = true; - isLoading = false; - this.error = error; - }, body: requestLabResult.toJson()); - notifyListeners(); - } + } diff --git a/lib/providers/referred_patient_provider.dart b/lib/providers/referred_patient_provider.dart index 0f3e6741..6dfd5e88 100644 --- a/lib/providers/referred_patient_provider.dart +++ b/lib/providers/referred_patient_provider.dart @@ -16,7 +16,7 @@ class MyReferredPatientProvider with ChangeNotifier { String error = ''; RequestMyReferralPatientModel _requestMyReferralPatient = RequestMyReferralPatientModel(); - // RequestAddReferredDoctorRemarks _requestAddReferredDoctorRemarks = RequestAddReferredDoctorRemarks(); + // RequestAddReferredDoctorRemarks _requestAddReferredDoctorRemarks = RequestAddReferredDoctorRemarks(); VerifyReferralDoctorRemarks _verifyreferraldoctorremarks = VerifyReferralDoctorRemarks(); MyReferredPatientProvider() { getMyReferralPatient(); @@ -51,38 +51,38 @@ class MyReferredPatientProvider with ChangeNotifier { // Future replay( // String referredDoctorRemarks, MyReferredPatientModel model) async { - Future replay( - MyReferredPatientModel model) async { + Future replay( + MyReferredPatientModel model) async { try { - - _verifyreferraldoctorremarks.patientID=model.projectId; - _verifyreferraldoctorremarks.admissionNo =model.admissionNo; - _verifyreferraldoctorremarks.lineItemNo = model.lineItemNo; - + + _verifyreferraldoctorremarks.patientID=model.projectId; + _verifyreferraldoctorremarks.admissionNo =model.admissionNo; + _verifyreferraldoctorremarks.lineItemNo = model.lineItemNo; + _verifyreferraldoctorremarks.referredDoctorRemarks=model.referredDoctorRemarks; _verifyreferraldoctorremarks.referringDoctor=model.referringDoctor; - _verifyreferraldoctorremarks.firstName=model.firstName; - _verifyreferraldoctorremarks.middleName=model.middleName; - _verifyreferraldoctorremarks.lastName=model.lastName; - _verifyreferraldoctorremarks.patientMobileNumber=model.mobileNumber; - _verifyreferraldoctorremarks.patientIdentificationID=model.patientIdentificationNo; + _verifyreferraldoctorremarks.firstName=model.firstName; + _verifyreferraldoctorremarks.middleName=model.middleName; + _verifyreferraldoctorremarks.lastName=model.lastName; + _verifyreferraldoctorremarks.patientMobileNumber=model.mobileNumber; + _verifyreferraldoctorremarks.patientIdentificationID=model.patientIdentificationNo; + + + + - - - - await BaseAppClient.post( 'DoctorApplication.svc/REST/GtMyReferredPatient', body: _verifyreferraldoctorremarks.toJson(),//_requestAddReferredDoctorRemarks.toJson(), onSuccess: (dynamic body, int statusCode) { - + listMyReferredPatientModel[ - listMyReferredPatientModel.indexOf(model)] = model; + listMyReferredPatientModel.indexOf(model)] = model; notifyListeners(); }, onFailure: (String error, int statusCode) { diff --git a/lib/screens/doctor/my_referred_patient_screen.dart b/lib/screens/doctor/my_referred_patient_screen.dart index 009f62ec..dc50d12e 100644 --- a/lib/screens/doctor/my_referred_patient_screen.dart +++ b/lib/screens/doctor/my_referred_patient_screen.dart @@ -11,7 +11,7 @@ import 'package:provider/provider.dart'; import '../../widgets/shared/app_scaffold_widget.dart'; class MyReferredPatient extends StatelessWidget { - + MyReferredPatientProvider referredPatientProvider; @override @@ -24,44 +24,45 @@ class MyReferredPatient extends StatelessWidget { body: referredPatientProvider.isLoading ? DrAppCircularProgressIndeicator() : referredPatientProvider.isError - ? Center( - child: AppText( - referredPatientProvider.error, - color: Theme.of(context).errorColor, + ? Center( + child: AppText( + referredPatientProvider.error, + color: Theme.of(context).errorColor, + ), + ) + + : referredPatientProvider.listMyReferredPatientModel.length == 0 + ? Center( + child: AppText( + TranslationBase.of(context).errorNoSchedule, + color: Theme.of(context).errorColor, + ), + ) + : Container( + padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), + child: ListView( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 10, + ), + Container( + child: Column( + //children: referredPatientProvider.listMyReferralPatientModel.map((item) { + children: referredPatientProvider.listMyReferredPatientModel.map((item) { + return MyReferredPatientWidget( + myReferredPatientModel: item, + ); + }).toList(), ), - ) - : referredPatientProvider.listMyReferralPatientModel.length == 0 - ? Center( - child: AppText( - TranslationBase.of(context).errorNoSchedule, - color: Theme.of(context).errorColor, - ), - ) - : Container( - padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), - child: ListView( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 10, - ), - Container( - child: Column( - - children: referredPatientProvider.listMyReferralPatientModel.map((item) { - return MyReferredPatientWidget( - myReferredPatientModel: item, - ); - }).toList(), - ), - ), - ], - ), - ], - ), - ), + ), + ], + ), + ], + ), + ), ); } -} \ No newline at end of file +} From 73f0cd7795c72cb4d44853e5068deb908a2f751a Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Tue, 2 Jun 2020 18:05:46 +0300 Subject: [PATCH 13/15] marge with master --- .../doctor/my_referred_patient_screen.dart | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/lib/screens/doctor/my_referred_patient_screen.dart b/lib/screens/doctor/my_referred_patient_screen.dart index cb54f8e2..dc50d12e 100644 --- a/lib/screens/doctor/my_referred_patient_screen.dart +++ b/lib/screens/doctor/my_referred_patient_screen.dart @@ -24,45 +24,45 @@ class MyReferredPatient extends StatelessWidget { body: referredPatientProvider.isLoading ? DrAppCircularProgressIndeicator() : referredPatientProvider.isError - ? Center( - child: AppText( - referredPatientProvider.error, - color: Theme.of(context).errorColor, - ), - ) - - : referredPatientProvider.listMyReferredPatientModel.length == 0 - ? Center( - child: AppText( - TranslationBase.of(context).errorNoSchedule, - color: Theme.of(context).errorColor, - ), - ) - : Container( - padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), - child: ListView( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 10, - ), - Container( - child: Column( + ? Center( + child: AppText( + referredPatientProvider.error, + color: Theme.of(context).errorColor, + ), + ) - children: referredPatientProvider.listMyReferralPatientModel.map((item) { - return MyReferredPatientWidget( - myReferredPatientModel: item, - ); - }).toList(), - ), - ), - ], - ), - ], - ), - ), + : referredPatientProvider.listMyReferredPatientModel.length == 0 + ? Center( + child: AppText( + TranslationBase.of(context).errorNoSchedule, + color: Theme.of(context).errorColor, + ), + ) + : Container( + padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0), + child: ListView( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 10, + ), + Container( + child: Column( + //children: referredPatientProvider.listMyReferralPatientModel.map((item) { + children: referredPatientProvider.listMyReferredPatientModel.map((item) { + return MyReferredPatientWidget( + myReferredPatientModel: item, + ); + }).toList(), + ), + ), + ], + ), + ], + ), + ), ); } -} \ No newline at end of file +} From 61674bec4703fdd63a80e3386013d6c1ef2c0a23 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 3 Jun 2020 02:31:38 +0300 Subject: [PATCH 14/15] new pages --- lib/config/config.dart | 2 +- lib/models/pharmacies_List_request_model.dart | 2 +- .../pharmacies_items_request_model.dart | 8 +- lib/providers/medicine_provider.dart | 22 +- lib/providers/patients_provider.dart | 15 +- .../medicine/medicine_search_screen.dart | 67 ++++-- .../medicine/pharmacies_list_screen.dart | 214 ++++++++++-------- .../medicine/medicine_item_widget.dart | 57 +++-- lib/widgets/shared/app_buttons_widget.dart | 21 +- lib/widgets/shared/app_text_form_field.dart | 7 +- 10 files changed, 259 insertions(+), 156 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index 92291ed3..46eb5102 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -4,7 +4,7 @@ const ONLY_LETTERS = "[a-zA-Z]"; const ONLY_DATE = "[0-9/]"; const BASE_URL = 'https://uat.hmgwebservices.com/Services/'; -const PHARMACY_ITEMS_URL = "Lists.svc/REST/GetPharmcyItems"; +const PHARMACY_ITEMS_URL = "Lists.svc/REST/GetPharmcyItems_Region"; const PHARMACY_LIST_URL = "Patients.svc/REST/GetPharmcyList"; const PATIENT_PROGRESS_NOTE_URL = "DoctorApplication.svc/REST/GetProgressNoteForInPatient"; const PATIENT_INSURANCE_APPROVALS_URL = "DoctorApplication.svc/REST/GetApprovalStatusForInpatient"; diff --git a/lib/models/pharmacies_List_request_model.dart b/lib/models/pharmacies_List_request_model.dart index a2b4e5c2..eea446dd 100644 --- a/lib/models/pharmacies_List_request_model.dart +++ b/lib/models/pharmacies_List_request_model.dart @@ -29,7 +29,7 @@ class PharmaciesListRequestModel { this.stamp = '2020-04-23T21:01:21.492Z', this.ipAdress = '11.11.11.11', this.versionID = 1.2, - this.tokenID = '@dm!n', + this.tokenID , this.sessionID = 'e29zoooEJ4', this.isLoginForDoctorApp = true, this.channel = 9, diff --git a/lib/models/pharmacies_items_request_model.dart b/lib/models/pharmacies_items_request_model.dart index 210c8db7..f9531e63 100644 --- a/lib/models/pharmacies_items_request_model.dart +++ b/lib/models/pharmacies_items_request_model.dart @@ -22,10 +22,10 @@ class PharmaciesItemsRequestModel { this.patientTypeID = 1, this.languageID = 2, this.stamp = '2020-04-23T21:01:21.492Z', - this.ipAdress = '11.11.11.11', - this.versionID = 1.2, - this.tokenID = '@dm!n', - this.sessionID = 'e29zoooEJ4', + this.ipAdress = '10.20.10.20', + this.versionID = 5.2, + this.tokenID , + this.sessionID = "KvFJENeAUCxyVdIfEkHw", this.isLoginForDoctorApp = true, this.patientOutSA = false}); diff --git a/lib/providers/medicine_provider.dart b/lib/providers/medicine_provider.dart index 5e7a0ef4..97e030fe 100644 --- a/lib/providers/medicine_provider.dart +++ b/lib/providers/medicine_provider.dart @@ -2,15 +2,19 @@ import 'dart:convert'; import 'package:doctor_app_flutter/client/app_client.dart'; import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/models/pharmacies_List_request_model.dart'; import 'package:doctor_app_flutter/models/pharmacies_items_request_model.dart'; +import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:flutter/cupertino.dart'; class MedicineProvider with ChangeNotifier { + DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); + var pharmacyItemsList = []; var pharmaciesList = []; - bool isFinished = false; + bool isFinished = true; bool hasError = false; String errorMsg = ''; @@ -18,12 +22,15 @@ class MedicineProvider with ChangeNotifier { PharmaciesListRequestModel _listRequestModel = PharmaciesListRequestModel(); Future getMedicineItem(String itemName) async { + resetDefaultValues(); try { if (await Helpers.checkConnection()) { _itemsRequestModel.phrItemName = itemName; + final response = await AppClient.post(PHARMACY_ITEMS_URL, body: json.encode(_itemsRequestModel.toJson())); final int statusCode = response.statusCode; + isFinished = true; if (statusCode < 200 || statusCode >= 400 || json == null) { isFinished = true; hasError = true; @@ -31,7 +38,7 @@ class MedicineProvider with ChangeNotifier { } else { var parsed = json.decode(response.body.toString()); if (parsed['MessageStatus'] == 1) { - pharmacyItemsList = parsed['ListPharmcy']; + pharmacyItemsList = parsed['ListPharmcy_Region']; hasError = false; isFinished = true; errorMsg = "Done"; @@ -54,12 +61,16 @@ class MedicineProvider with ChangeNotifier { } Future getPharmaciesList(int itemId) async { + String token = await sharedPref.getString(TOKEN); + resetDefaultValues(); try { if (await Helpers.checkConnection()) { _listRequestModel.itemID = itemId; + _listRequestModel.tokenID = token; final response = await AppClient.post(PHARMACY_LIST_URL, body: json.encode(_listRequestModel.toJson())); final int statusCode = response.statusCode; + isFinished = true; if (statusCode < 200 || statusCode >= 400 || json == null) { isFinished = true; hasError = true; @@ -88,4 +99,11 @@ class MedicineProvider with ChangeNotifier { return errorMsg; } + + resetDefaultValues() { + isFinished = false; + hasError = false; + errorMsg = ''; + notifyListeners(); + } } diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index c5f92247..f880f43e 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -30,6 +30,11 @@ class PatientsProvider with ChangeNotifier { List patientLabResultOrdersList = []; List patientPrescriptionsList = []; List patientRadiologyList = []; + + /*@author: ibrahe albitar + *@Date:2/6/2020 + *@desc: getPatientPrescriptions + */ var patientProgressNoteList = []; var insuranceApporvalsList = []; @@ -283,7 +288,10 @@ class PatientsProvider with ChangeNotifier { } } - +/*@author: ibrahe albitar + *@Date:2/6/2020 + *@desc: getPatientPrescriptions + */ getPatientProgressNote(patient) async{ setBasicData(); try { @@ -315,7 +323,10 @@ class PatientsProvider with ChangeNotifier { handelCatchErrorCase(err); } } - +/*@author: ibrahe albitar + *@Date:2/6/2020 + *@desc: getPatientPrescriptions + */ getPatientInsuranceApprovals(patient) async{ setBasicData(); diff --git a/lib/screens/medicine/medicine_search_screen.dart b/lib/screens/medicine/medicine_search_screen.dart index d49adb22..1add0181 100644 --- a/lib/screens/medicine/medicine_search_screen.dart +++ b/lib/screens/medicine/medicine_search_screen.dart @@ -9,6 +9,8 @@ import 'package:doctor_app_flutter/widgets/medicine/medicine_item_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -31,45 +33,51 @@ class _MedicineSearchState extends State { MedicineProvider _medicineProvider; + bool _isInit = true; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + _medicineProvider = Provider.of(context); + } + _isInit = false; + } + @override Widget build(BuildContext context) { - _medicineProvider = Provider.of(context); + return AppScaffold( appBarTitle: "Search Medicine", body: Column( children: [ - RoundedContainer( - child: Column( - children: [ - Icon( - Icons.search, - size: SizeConfig.imageSizeMultiplier * 15, - ), Padding( padding: EdgeInsets.only( - bottom: SizeConfig.heightMultiplier * 5, - right: SizeConfig.heightMultiplier * 3, - left: SizeConfig.heightMultiplier * 3, + bottom: SizeConfig.heightMultiplier * 1, + right: SizeConfig.heightMultiplier * 2, + left: SizeConfig.heightMultiplier * 2, top: SizeConfig.heightMultiplier * 3), child: AppTextFormField( - hintText: 'Type Medicine Name Here..', + hintText: 'Search Medicine Name Here..', controller: myController, onSaved: (value) {}, // validator: (value) { // return TextValidator().validateName(value); // }, inputFormatter: ONLY_LETTERS), - ) - ], - )), + ), + Container( - margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), + margin: EdgeInsets.only(bottom: 5, + left: 10, + right: 10, + top: 0), child: Wrap( alignment: WrapAlignment.center, children: [ AppButton( title: "Search", - color: Color(0xff58434F), + color: Color(PRIMARY_COLOR), onPressed: () { searchMedicine(context); }, @@ -77,17 +85,40 @@ class _MedicineSearchState extends State { ], ), ), + Container( + margin: EdgeInsets.only(left: SizeConfig.heightMultiplier * 2), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + "You find " + (data == null ? "0": data.length.toString())+" items in search", + fontWeight: FontWeight.bold, + margin: 5,), + ], + ), + ), Expanded( child: Container( width: SizeConfig.screenWidth * 0.80, - child: ListView.builder( + child: !_medicineProvider.isFinished + ? DrAppCircularProgressIndeicator() + : _medicineProvider.hasError + ? Center( + child: Text( + _medicineProvider.errorMsg, + style: TextStyle( + color: Theme.of(context).errorColor), + ), + ):ListView.builder( scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: data == null ? 0 : data.length, itemBuilder: (BuildContext context, int index) { + return InkWell( child: MedicineItemWidget( label: data[index]["ItemDescription"], + url: data[index]["ProductImageBase64"], ), onTap: () { Navigator.push( diff --git a/lib/screens/medicine/pharmacies_list_screen.dart b/lib/screens/medicine/pharmacies_list_screen.dart index c34d26e4..4c682cea 100644 --- a/lib/screens/medicine/pharmacies_list_screen.dart +++ b/lib/screens/medicine/pharmacies_list_screen.dart @@ -15,7 +15,6 @@ import 'package:provider/provider.dart'; import 'package:maps_launcher/maps_launcher.dart'; import 'package:url_launcher/url_launcher.dart'; - DrAppSharedPreferances sharedPref = DrAppSharedPreferances(); class PharmaciesListScreen extends StatefulWidget { @@ -32,118 +31,139 @@ class _PharmaciesListState extends State { var _data; Helpers helpers = new Helpers(); MedicineProvider _medicineProvider; + + bool _isInit = true; //bool _isOutOfStuck = false; + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + _medicineProvider = Provider.of(context); + pharmaciesList(); + } + _isInit = false; + } + @override Widget build(BuildContext context) { - _medicineProvider = Provider.of(context); - pharmaciesList(); return AppScaffold( appBarTitle: "Pharmacies List", - body: Column( - children: [ - RoundedContainer( - child: !_medicineProvider.isFinished - ? DrAppCircularProgressIndeicator() - : _medicineProvider.hasError - ? Center( - child: Text( - _medicineProvider.errorMsg, - style: TextStyle( - color: Theme.of(context).errorColor), + body: Column(children: [ + RoundedContainer( + child: !_medicineProvider.isFinished + ? DrAppCircularProgressIndeicator() + : _medicineProvider.hasError + ? Center( + child: Text( + _medicineProvider.errorMsg, + style: + TextStyle(color: Theme.of(context).errorColor), + ), + ) + : Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + AppText( + "Description", + margin: 10, + fontWeight: FontWeight.bold, ), - ) - : Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - AppText( - "Description", - margin: 10, - fontWeight: FontWeight.bold, - ), - AppText( - _data[0]["ItemDescription"], - marginLeft: 10, - marginTop: 0, - marginRight: 10, - marginBottom: 10, - ), - AppText( - "Price", - margin: 10, - fontWeight: FontWeight.bold, - ), - AppText( - _data[0]["SellingPrice"].toString(), - marginLeft: 10, - marginTop: 0, - marginRight: 10, - marginBottom: 10, - ), - ], - )), - Container( - margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), - child: Align( - alignment: Alignment.centerLeft, - child: AppText( - "You can Find it in", - fontWeight: FontWeight.bold, - fontSize: SizeConfig.textMultiplier * 3, - ))), - Expanded( - child: Container( - width: SizeConfig.screenWidth * 0.80, - child: ListView.builder( + AppText( + _data[0]["ItemDescription"], + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 10, + ), + AppText( + "Price", + margin: 10, + fontWeight: FontWeight.bold, + ), + AppText( + _data[0]["SellingPrice"].toString(), + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 10, + ), + ], + )), + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), + child: Align( + alignment: Alignment.centerLeft, + child: AppText( + "You can Find it in", + fontWeight: FontWeight.bold, + fontSize: SizeConfig.textMultiplier * 3, + ))), + Expanded( + child: Container( + width: SizeConfig.screenWidth * 0.99, + child: ListView.builder( scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: _data == null ? 0 : _data.length, itemBuilder: (BuildContext context, int index) { - return Column( - children: [ - MedicineItemWidget( - label: _data[index]["LocationDescription"], - ), - Container( - margin: EdgeInsets.only(bottom: 10), - child: Row( - children: [ - Expanded(flex: 2, child: SizedBox()), - Expanded( - flex: 6, - child: AppButton( - title: "Call", - fontSize: 2, - color: Colors.brown[200], - padding: 0, - onPressed: () => launch("tel://"+_data[index]["PhoneNumber"])), + return RoundedContainer( + child: Row( + children: [ + Expanded( + flex: 1, + child: ClipRRect( + borderRadius:BorderRadius.all(Radius.circular(7)), + child: Image.network( + _data[index]["ProjectImageURL"], + height: SizeConfig.imageSizeMultiplier * 15, + width: SizeConfig.imageSizeMultiplier * 15, + fit: BoxFit.cover, ), - Expanded(flex: 1, child: SizedBox()), - Expanded( - flex: 6, - child: AppButton( - title: "Direction", - fontSize: 2, - color: Color(PRIMARY_COLOR), - padding: 0, - onPressed: () { - MapsLauncher.launchCoordinates(double.parse(_data[index]["Latitude"]), double.parse( _data[index]["Longitude"]), _data[index]["LocationDescription"] ); - }), - + ), + ), + Expanded( + flex: 4, + child: AppText( + _data[index]["LocationDescription"], + margin: 10, + ), + ), + Expanded( + flex: 2, + child: Wrap( + direction: Axis.horizontal, + alignment: WrapAlignment.end, + crossAxisAlignment: WrapCrossAlignment.end, + children: [ + Padding( + padding: EdgeInsets.all(5), + child: InkWell(child: Icon(Icons.call, color: Colors.red,),onTap: ()=>launch( + "tel://" + _data[index]["PhoneNumber"]),), ), - Expanded(flex: 2, child: SizedBox()), - ], +Padding( + padding: EdgeInsets.all(5), + child: InkWell(child: Icon(Icons.pin_drop, color: Colors.red,),onTap: () { + MapsLauncher.launchCoordinates( + double.parse(_data[index]["Latitude"]), + double.parse(_data[index]["Longitude"]), + _data[index]["LocationDescription"]); + },), + ), + ], + + ), ), - ) - ], + + + ], + ), ); - }, - ), - ), + }), ), - ], - )); + ) + ])); } Future pharmaciesList() async { diff --git a/lib/widgets/medicine/medicine_item_widget.dart b/lib/widgets/medicine/medicine_item_widget.dart index e18477c4..1d606793 100644 --- a/lib/widgets/medicine/medicine_item_widget.dart +++ b/lib/widgets/medicine/medicine_item_widget.dart @@ -1,5 +1,9 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/widgets/shared/profile_image_widget.dart'; import '../shared/rounded_container_widget.dart'; import '../shared/app_texts_widget.dart'; @@ -19,8 +23,9 @@ final String label; final Color backgroundColor; final bool showBorder; final Color borderColor; +final String url; -MedicineItemWidget({ @required this.label, this.backgroundColor = Colors.white, this.showBorder = false, this.borderColor = Colors.white}); +MedicineItemWidget({ @required this.label, this.backgroundColor = Colors.white, this.showBorder = false, this.borderColor = Colors.white, this.url}); @override _MedicineItemWidgetState createState() => _MedicineItemWidgetState(); } @@ -30,23 +35,41 @@ class _MedicineItemWidgetState extends State { Widget build(BuildContext context) { return new RoundedContainer( height: SizeConfig.heightMultiplier * 8, - child:Row( - crossAxisAlignment: CrossAxisAlignment.stretch, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - RoundedContainer( - width: SizeConfig.widthMultiplier * 2, - backgroundColor: Color(PRIMARY_COLOR), - margin: 0, - topLeft: 6, - topRight: 0, - bottomLeft: 6, - bottomRight: 0, - customCornerRaduis: true, - child: SizedBox(width: SizeConfig.widthMultiplier, height: SizeConfig.heightMultiplier*3,), + child:Padding( + padding: const EdgeInsets.all(5.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + if(widget.url != null) Container( + height: 39, + width: 39, + child: ClipRRect( + borderRadius:BorderRadius.all(Radius.circular(7)), + child: Image.memory( + dataFromBase64String(widget.url), + height: SizeConfig.imageSizeMultiplier * 15, + width: SizeConfig.imageSizeMultiplier * 15, + fit: BoxFit.cover, + ), + ), ), - Expanded(child: Padding( padding: EdgeInsets.all(5), child: Align( alignment: Alignment.centerLeft, child: AppText(widget.label)))) - ],), + Expanded(child: Padding( padding: EdgeInsets.all(5), child: Align( alignment: Alignment.centerLeft, child: AppText(widget.label)))) + ],), + ), backgroundColor: widget.backgroundColor, showBorder: widget.showBorder, borderColor: widget.borderColor, margin: 4, raduis: 10,); } + + Image imageFromBase64String(String base64String) { + return Image.memory(base64Decode(base64String)); +} + +Uint8List dataFromBase64String(String base64String) { + return base64Decode(base64String); +} + +String base64String(Uint8List data) { + return base64Encode(data); +} + } \ No newline at end of file diff --git a/lib/widgets/shared/app_buttons_widget.dart b/lib/widgets/shared/app_buttons_widget.dart index 10bf6997..7b911d9a 100644 --- a/lib/widgets/shared/app_buttons_widget.dart +++ b/lib/widgets/shared/app_buttons_widget.dart @@ -29,21 +29,22 @@ class AppButton extends StatefulWidget { splashColor: widget.color, child: Padding( padding: EdgeInsets.only( - top: 10, - bottom: 10, - right: SizeConfig.widthMultiplier * widget.padding, - left: SizeConfig.widthMultiplier * widget.padding + top: 15, + bottom: 15, + //right: SizeConfig.widthMultiplier * widget.padding, + //left: SizeConfig.widthMultiplier * widget.padding ), child: Row( - mainAxisSize: MainAxisSize.min, + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, children: [ - /*Icon( + if (widget.icon != null) Icon( widget.icon, color: Colors.white, ), - SizedBox( - width: 10.0, - ),*/ + if (widget.icon != null) SizedBox( + width: 5.0, + ), AppText( widget.title, color: Colors.white, @@ -54,7 +55,7 @@ class AppButton extends StatefulWidget { ), ), onPressed: widget.onPressed, - shape: const StadiumBorder(), + shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(10))), ); } } \ No newline at end of file diff --git a/lib/widgets/shared/app_text_form_field.dart b/lib/widgets/shared/app_text_form_field.dart index 54b0f9a3..fd50ad66 100644 --- a/lib/widgets/shared/app_text_form_field.dart +++ b/lib/widgets/shared/app_text_form_field.dart @@ -36,17 +36,16 @@ class AppTextFormField extends FormField { hintText: hintText, hintStyle: TextStyle(fontSize: SizeConfig.textMultiplier * 2), enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(30)), + borderRadius: BorderRadius.all(Radius.circular(10)), borderSide: BorderSide(color: Color(0xff707070)), ), focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(30)), + borderRadius: BorderRadius.all(Radius.circular(10)), ) //BorderRadius.all(Radius.circular(20)); ), onTap: onTap, - controller: controller, - + controller: controller, ), state.hasError? Text( From 01f32a39f67ddb0c930fe0635c1ce716fc91d0c3 Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Wed, 3 Jun 2020 10:42:30 +0300 Subject: [PATCH 15/15] fix master --- lib/providers/patients_provider.dart | 106 ++++++++++++--------------- 1 file changed, 48 insertions(+), 58 deletions(-) diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index 464835cc..8b84420a 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -34,15 +34,15 @@ class PatientsProvider with ChangeNotifier { List patientLabResultOrdersList = []; List patientPrescriptionsList = []; List patientRadiologyList = []; -<<<<<<< HEAD + /*@author: ibrahe albitar *@Date:2/6/2020 *@desc: getPatientPrescriptions */ -======= + List labResultList = []; ->>>>>>> 4afca06aec89273155b264baea03db8fc2a9051d + var patientProgressNoteList = []; var insuranceApporvalsList = []; @@ -144,9 +144,7 @@ class PatientsProvider with ChangeNotifier { patientVitalSignOrderdSubList .add(patientVitalSignOrderdSubListTemp[x]); } - var asd = ""; } - // patientVitalSignList = res['List_DoctorPatientVitalSign']; } else { isError = true; error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; @@ -312,53 +310,6 @@ class PatientsProvider with ChangeNotifier { } } -<<<<<<< HEAD -/*@author: ibrahe albitar - *@Date:2/6/2020 - *@desc: getPatientPrescriptions - */ - getPatientProgressNote(patient) async{ -======= - getPatientProgressNote(patient) async { ->>>>>>> 4afca06aec89273155b264baea03db8fc2a9051d - setBasicData(); - try { - if (await Helpers.checkConnection()) { - final response = await AppClient.post(PATIENT_PROGRESS_NOTE_URL, - body: json.encode(patient)); - final int statusCode = response.statusCode; - isLoading = false; - - if (statusCode < 200 || statusCode >= 400 || json == null) { - isError = true; - error = 'Error While Fetching data'; - } else { - var res = json.decode(response.body); - print('$res'); - if (res['MessageStatus'] == 1) { - patientProgressNoteList = res['List_GetPregressNoteForInPatient']; - } else { - isError = true; - error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; - } - } - } else { - isLoading = false; - isError = true; - error = 'Please Check The Internet Connection'; - } - notifyListeners(); - } catch (err) { - handelCatchErrorCase(err); - } - } -<<<<<<< HEAD -/*@author: ibrahe albitar - *@Date:2/6/2020 - *@desc: getPatientPrescriptions - */ - getPatientInsuranceApprovals(patient) async{ -======= getLabResult(LabOrdersResModel labOrdersResModel) async { labResultList.clear(); @@ -369,7 +320,8 @@ class PatientsProvider with ChangeNotifier { requestLabResult.orderNo = labOrdersResModel.orderNo; requestLabResult.invoiceNo = labOrdersResModel.invoiceNo; requestLabResult.patientTypeID = labOrdersResModel.patientType; - await BaseAppClient.post('DoctorApplication.svc/REST/GetPatientLabResults', + await BaseAppClient.post( + 'DoctorApplication.svc/REST/GetPatientLabResults', onSuccess: (dynamic response, int statusCode) { isError = false; isLoading = false; @@ -377,14 +329,13 @@ class PatientsProvider with ChangeNotifier { labResultList.add(new LabResult.fromJson(v)); }); }, onFailure: (String error, int statusCode) { - isError = true; - isLoading = false; - this.error = error; - }, body: requestLabResult.toJson()); + isError = true; + isLoading = false; + this.error = error; + }, body: requestLabResult.toJson()); notifyListeners(); } ->>>>>>> 4afca06aec89273155b264baea03db8fc2a9051d getPatientInsuranceApprovals(patient) async { setBasicData(); @@ -420,5 +371,44 @@ class PatientsProvider with ChangeNotifier { } } +/*@author: ibrahe albitar + *@Date:2/6/2020 + *@desc: getPatientPrescriptions + */ + getPatientProgressNote(patient) async { + setBasicData(); + try { + if (await Helpers.checkConnection()) { + final response = await AppClient.post(PATIENT_PROGRESS_NOTE_URL, + body: json.encode(patient)); + final int statusCode = response.statusCode; + isLoading = false; + + if (statusCode < 200 || statusCode >= 400 || json == null) { + isError = true; + error = 'Error While Fetching data'; + } else { + var res = json.decode(response.body); + print('$res'); + if (res['MessageStatus'] == 1) { + patientProgressNoteList = res['List_GetPregressNoteForInPatient']; + } else { + isError = true; + error = res['ErrorMessage'] ?? res['ErrorEndUserMessage']; + } + } + } else { + isLoading = false; + isError = true; + error = 'Please Check The Internet Connection'; + } + notifyListeners(); + } catch (err) { + handelCatchErrorCase(err); + } + } + + + }