From 6ebee5dbf6261bb82bf5ff04c829ade8c2f137c7 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Mon, 1 Jun 2020 10:30:28 +0300 Subject: [PATCH 01/10] 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/10] 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/10] 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/10] 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/10] 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 0d30fd62122dda8f58db42a4f68b0990694fbdf8 Mon Sep 17 00:00:00 2001 From: Elham Rababah Date: Tue, 2 Jun 2020 17:13:41 +0300 Subject: [PATCH 06/10] 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 07/10] 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 08/10] 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 627bac340d88139d28f1646373cd3308e4ecb54e Mon Sep 17 00:00:00 2001 From: Mohammad ALjammal Date: Tue, 2 Jun 2020 18:00:32 +0300 Subject: [PATCH 09/10] 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 10/10] 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 +}