vitalsign details

merge-requests/85/head
Elham Rababah 6 years ago
parent bd24b7c196
commit 0d30fd6212

@ -20,3 +20,14 @@
{"text": "Out Sudia Arabia", "val": "2"}, {"text": "Out Sudia Arabia", "val": "2"},
]; ];
enum vitalSignDetails {
bodyMeasurements,
temperature,
pulse,
pespiration,
bloodPressure,
oxygenation,
painScale
}

@ -1,10 +1,8 @@
import 'package:charts_flutter/flutter.dart' as charts; import 'package:doctor_app_flutter/lookups/patient_lookup.dart';
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/models/patient/vital_sign_res_model.dart';
import 'package:doctor_app_flutter/providers/patients_provider.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/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -13,61 +11,157 @@ class BodyMeasurementsScreen extends StatelessWidget {
// ; // ;
PatientsProvider patientsProv; PatientsProvider patientsProv;
List<VitalSignResModel> vitalList = []; List<VitalSignResModel> vitalList = [];
String pageTitle;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
patientsProv = Provider.of<PatientsProvider>(context); patientsProv = Provider.of<PatientsProvider>(context);
List<charts.Series> seriesList = generateData(); final routeArgs = ModalRoute.of(context).settings.arguments as Map;
pageTitle = routeArgs['title'];
// generateData(); var pageKey = routeArgs['key'];
return AppScaffold( List<Map> VSchart;
appBarTitle: 'Body Measurements', vitalList = patientsProv.patientVitalSignOrderdSubList;
body: ListView( switch (pageKey) {
children: <Widget>[ case vitalSignDetails.bodyMeasurements:
Column( VSchart = [
children: <Widget>[ {
TimeSeriesChart(seriesList: seriesList, vitalList: vitalList), 'name': 'Highet',
VitalSignDetailsWidget( 'title1': 'Date',
vitalList: vitalList.reversed.toList(), 'title2': 'Cm',
title1: 'Date', 'viewKey': 'HeightCm',
title2: 'Kg', },
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',
} }
];
generateData() { break;
final List<TimeSeriesSales> data = [];
vitalList = patientsProv.patientVitalSignOrderdSubList; case vitalSignDetails.temperature:
if (vitalList.length > 0) { VSchart = [
vitalList.forEach( {
(element) { 'name': 'Temperature In Celcius',
data.add( 'title1': 'Date',
TimeSeriesSales( 'title2': 'C',
new DateTime(element.vitalSignDate.year, 'viewKey': 'TemperatureCelcius',
element.vitalSignDate.month, element.vitalSignDate.day),
element.bodyMassIndex.toInt(),
),
);
}, },
); ];
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',
} }
return [
new charts.Series<TimeSeriesSales, DateTime>(
id: 'Sales',
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
data: data,
)
]; ];
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: pageTitle,
body: ListView(
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(),
),
);
} }
} }
class LinearSales { class LinearSales {
final int year; final int year;
final int sales; final int sales;

@ -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<VitalSignResModel> vitalList ;
final String name;
final String viewKey;
final String title1;
final String title2;
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
AppTimeSeriesChart(
vitalList: vitalList,
chartName: name,
viewKey: viewKey,
),
VitalSignDetailsWidget(
vitalList: vitalList.reversed.toList(),
title1: '${title1}',
title2: '${title2}',
viewKey: '${viewKey}',
),
],
);
}
}

@ -1,16 +1,18 @@
import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; 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/patiant_info_model.dart';
import 'package:doctor_app_flutter/models/patient/vital_sign_req_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/providers/patients_provider.dart';
import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/routes.dart';
import 'package:doctor_app_flutter/util/dr_app_shared_pref.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:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../../../config/size_config.dart'; import '../../../../config/size_config.dart';
import '../../../../models/patient/vital_sign_res_model.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'; import '../../../../widgets/shared/app_scaffold_widget.dart';
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
class VitalSignDetailsScreen extends StatefulWidget { class VitalSignDetailsScreen extends StatefulWidget {
@ -74,54 +76,192 @@ class _VitalSignDetailsScreenState extends State<VitalSignDetailsScreen> {
return AppScaffold( return AppScaffold(
appBarTitle: "vital Sing ", appBarTitle: "vital Sing ",
isloading: patientsProv.isLoading, isloading: patientsProv.isLoading,
body: CustomScrollView( body: Container(
primary: false, child: Column(
slivers: <Widget>[ children: <Widget>[
SliverPadding( Row(
padding: const EdgeInsets.all(10),
sliver: SliverGrid.count(
childAspectRatio: 0.7,
crossAxisSpacing: 10,
mainAxisSpacing: 0,
crossAxisCount: 3,
children: <Widget>[ children: <Widget>[
InkWell( InkWell(
onTap: (){ onTap: () {
Navigator.of(context).pushNamed(BODY_MEASUREMENTS); Navigator.of(context).pushNamed(BODY_MEASUREMENTS,
arguments: {
'title': 'Body Measurements',
'key': vitalSignDetails.bodyMeasurements
});
}, },
child: CircleAvatarWidget( child: VitalSignItem(
des: 'Body Measurements', des: 'Body Measurements',
url: url + 'heartbeat.png', url: url + 'heartbeat.png',
lastVal: patientsProv
.patientVitalSignOrderdSubList[0].heightCm
.toString(),
unit: 'Cm',
), ),
), ),
CircleAvatarWidget( InkWell(
onTap: () {
Navigator.of(context).pushNamed(BODY_MEASUREMENTS,
arguments: {
'title': 'Temperature',
'key': vitalSignDetails.temperature
});
},
child: VitalSignItem(
des: 'Temperature', des: 'Temperature',
url: url + 'heartbeat.png', url: url + 'heartbeat.png',
), ),
CircleAvatarWidget( ),
],
),
Row(
children: <Widget>[
InkWell(
onTap: () {
Navigator.of(context).pushNamed(BODY_MEASUREMENTS,
arguments: {
'title': 'pulse',
'key': vitalSignDetails.pulse
});
},
child: VitalSignItem(
des: 'Pulse', des: 'Pulse',
url: url + 'heartbeat.png', url: url + 'heartbeat.png',
), ),
CircleAvatarWidget( ),
InkWell(
onTap: () {
Navigator.of(context).pushNamed(BODY_MEASUREMENTS,
arguments: {
'title': 'pespiration',
'key': vitalSignDetails.pespiration
});
},
child: VitalSignItem(
des: 'Respiration', des: 'Respiration',
url: url + 'heartbeat.png', url: url + 'heartbeat.png',
), ),
CircleAvatarWidget( ),
],
),
Row(
children: <Widget>[
InkWell(
onTap: () {
Navigator.of(context).pushNamed(BODY_MEASUREMENTS,
arguments: {
'title': 'Blood Pressure',
'key': vitalSignDetails.bloodPressure
});
},
child: VitalSignItem(
des: 'Blood Pressure', des: 'Blood Pressure',
url: url + 'heartbeat.png', url: url + 'heartbeat.png',
), ),
CircleAvatarWidget( ),
InkWell(
onTap: () {
Navigator.of(context).pushNamed(BODY_MEASUREMENTS,
arguments: {
'title': 'Oxygenation',
'key': vitalSignDetails.oxygenation
});
},
child: VitalSignItem(
des: 'Oxygenation', des: 'Oxygenation',
url: url + 'heartbeat.png', url: url + 'heartbeat.png',
), ),
CircleAvatarWidget( ),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
InkWell(
onTap: () {
Navigator.of(context).pushNamed(BODY_MEASUREMENTS,
arguments: {
'title': 'Pain Scale',
'key': vitalSignDetails.painScale
});
},
child: VitalSignItem(
des: 'Pain Scale', des: 'Pain Scale',
url: url + 'heartbeat.png', 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: <Widget>[
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: <Widget>[
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)),
],
),
))
],
)
],
),
),
);
}
}

@ -1,23 +1,37 @@
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:doctor_app_flutter/config/size_config.dart'; 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/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:doctor_app_flutter/widgets/shared/rounded_container_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
class TimeSeriesChart extends StatelessWidget { class AppTimeSeriesChart extends StatelessWidget {
const TimeSeriesChart({ AppTimeSeriesChart(
Key key, {Key key,
@required this.seriesList,
@required this.vitalList, @required this.vitalList,
}) : super(key: key); @required this.viewKey,
this.chartName = ''});
final List<charts.Series> seriesList;
final List<VitalSignResModel> vitalList; final List<VitalSignResModel> vitalList;
final String chartName;
final String viewKey;
List<charts.Series> seriesList;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
seriesList = generateData();
return RoundedContainer( return RoundedContainer(
height: SizeConfig.realScreenHeight * 0.4, height: SizeConfig.realScreenHeight * 0.47,
child: Column(
children: <Widget>[
Text(
chartName,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: SizeConfig.textMultiplier * 3),
),
Container(
height: SizeConfig.realScreenHeight * 0.37,
child: Center( child: Center(
child: Expanded( child: Expanded(
child: charts.TimeSeriesChart( child: charts.TimeSeriesChart(
@ -46,6 +60,34 @@ class TimeSeriesChart extends StatelessWidget {
), ),
), ),
), ),
),
],
),
);
}
generateData() {
final List<TimeSeriesSales> 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<TimeSeriesSales, DateTime>(
id: 'Sales',
domainFn: (TimeSeriesSales sales, _) => sales.time,
measureFn: (TimeSeriesSales sales, _) => sales.sales,
data: data,
)
];
}
} }

Loading…
Cancel
Save