first step form chart
parent
2d19a83670
commit
6ebee5dbf6
@ -0,0 +1,7 @@
|
|||||||
|
/// Sample linear data type.
|
||||||
|
class ChartAxis {
|
||||||
|
final int xAxis;
|
||||||
|
final int yAxis;
|
||||||
|
|
||||||
|
ChartAxis(this.xAxis, this.yAxis);
|
||||||
|
}
|
||||||
@ -1,143 +1,183 @@
|
|||||||
import 'package:charts_flutter/flutter.dart' as charts;
|
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/chart_axis_model.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/widgets/shared/app_scaffold_widget.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:doctor_app_flutter/widgets/shared/rounded_container_widget.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class BodyMeasurementsScreen extends StatelessWidget {
|
class BodyMeasurementsScreen extends StatelessWidget {
|
||||||
BodyMeasurementsScreen();
|
BodyMeasurementsScreen();
|
||||||
List<VitalSignResModel> vitalList;
|
// ;
|
||||||
|
PatientsProvider patientsProv;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
_seriesData = List<charts.Series<Pollution, String>>();
|
patientsProv = Provider.of<PatientsProvider>(context);
|
||||||
_seriesPieData = List<charts.Series<Task, String>>();
|
List<charts.Series> seriesList = generateData();
|
||||||
_seriesLineData = List<charts.Series<Sales, int>>();
|
|
||||||
_generateData();
|
// generateData();
|
||||||
return AppScaffold(
|
return AppScaffold(
|
||||||
appBarTitle: 'Body Measurements',
|
appBarTitle: 'Body Measurements',
|
||||||
body: RoundedContainer(
|
body: ListView(
|
||||||
height: SizeConfig.realScreenHeight*0.4,
|
children: <Widget>[
|
||||||
child: Padding(
|
Column(
|
||||||
padding: EdgeInsets.all(8.0),
|
children: <Widget>[
|
||||||
child: Container(
|
RoundedContainer(
|
||||||
child: Center(
|
height: SizeConfig.realScreenHeight * 0.4,
|
||||||
child: Column(
|
child: Padding(
|
||||||
children: <Widget>[
|
padding: EdgeInsets.all(8.0),
|
||||||
Text(
|
child: Container(
|
||||||
'Body Mass Index',
|
child: Center(
|
||||||
style: TextStyle(
|
child: Text('sss'),
|
||||||
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),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
|
),
|
||||||
|
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<charts.Series<Pollution, String>> _seriesData;
|
generateData() {
|
||||||
List<charts.Series<Task, String>> _seriesPieData;
|
var myFakeMobileData3 = [
|
||||||
List<charts.Series<Sales, int>> _seriesLineData;
|
new LinearSales(0, 15),
|
||||||
|
new LinearSales(1, 75),
|
||||||
_generateData() {
|
new LinearSales(2, 300),
|
||||||
var data1 = [
|
new LinearSales(3, 225),
|
||||||
new Pollution(1980, 'USA', 40),
|
];
|
||||||
|
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),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
final List<TimeSeriesSales> data1 = [];
|
||||||
|
|
||||||
_seriesData.add(
|
final List<ChartAxis> myFakeDesktopData1 = [];
|
||||||
charts.Series(
|
List<VitalSignResModel> vitalList = patientsProv.patientVitalSignList;
|
||||||
domainFn: (Pollution pollution, _) => '',
|
if (vitalList.length > 0) {
|
||||||
measureFn: (Pollution pollution, _) => pollution.quantity,
|
// vitalList.sort((VitalSignResModel a, VitalSignResModel b) {
|
||||||
id: '2017',
|
// return a.bodyMassIndex.toInt() - b.bodyMassIndex.toInt();
|
||||||
data: data1,
|
// });
|
||||||
fillPatternFn: (_, __) => charts.FillPatternType.solid,
|
for (int x = vitalList.length - 1; x >= 0; x--) {
|
||||||
fillColorFn: (Pollution pollution, _) =>
|
myFakeDesktopData1.add(
|
||||||
charts.ColorUtil.fromDartColor(Color(0xff990099)),
|
new ChartAxis(
|
||||||
),
|
// x,
|
||||||
);
|
vitalList[x].vitalSignDate.day,
|
||||||
_seriesData.add(
|
// 20,
|
||||||
charts.Series(
|
// vitalSign.bodyMassIndex.toInt(),
|
||||||
domainFn: (Pollution pollution, _) => '',
|
// vitalSign.vitalSignDate.toString(),
|
||||||
measureFn: (Pollution pollution, _) => pollution.quantity,
|
// vitalSign.pulseBeatPerMinute!=null?vitalSign.pulseBeatPerMinute.toInt():50,
|
||||||
id: '2017',
|
vitalList[x].bodyMassIndex.toInt(),
|
||||||
data: data1,
|
),
|
||||||
fillPatternFn: (_, __) => charts.FillPatternType.solid,
|
);
|
||||||
fillColorFn: (Pollution pollution, _) =>
|
data1.add(TimeSeriesSales(new DateTime(vitalList[x].vitalSignDate.year,vitalList[x].vitalSignDate.month,vitalList[x].vitalSignDate.day),
|
||||||
charts.ColorUtil.fromDartColor(Color(0xff990099)),
|
vitalList[x].bodyMassIndex.toInt()));
|
||||||
),
|
// data1.add(TimeSeriesSales(vitalList[x].vitalSignDate,vitalList[x].bodyMassIndex.toInt() + x * 15));
|
||||||
);
|
}
|
||||||
_seriesData.add(
|
// vitalList.forEach((VitalSignResModel vitalSign) {
|
||||||
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)),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
// // 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<TimeSeriesSales, DateTime>(
|
||||||
|
id: 'Sales',
|
||||||
|
domainFn: (TimeSeriesSales sales, _) => sales.time,
|
||||||
|
measureFn: (TimeSeriesSales sales, _) => sales.sales,
|
||||||
|
data: data1,
|
||||||
|
)
|
||||||
|
// charts.Series<ChartAxis, int>(
|
||||||
|
// 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<LinearSales, int>(
|
||||||
|
// id: 'Desktop',
|
||||||
|
// colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
|
||||||
|
// domainFn: (LinearSales sales, _) => sales.year,
|
||||||
|
// measureFn: (LinearSales sales, _) => sales.sales,
|
||||||
|
// data: myFakeDesktopData1,
|
||||||
|
// )
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Pollution {
|
class LinearSales {
|
||||||
String place;
|
final int year;
|
||||||
int year;
|
final int sales;
|
||||||
int quantity;
|
|
||||||
|
|
||||||
Pollution(this.year, this.place, this.quantity);
|
|
||||||
}
|
|
||||||
|
|
||||||
class Task {
|
|
||||||
String task;
|
|
||||||
double taskvalue;
|
|
||||||
Color colorval;
|
|
||||||
|
|
||||||
Task(this.task, this.taskvalue, this.colorval);
|
LinearSales(this.year, this.sales);
|
||||||
}
|
}
|
||||||
|
|
||||||
class Sales {
|
/// Sample time series data type.
|
||||||
int yearval;
|
class TimeSeriesSales {
|
||||||
int salesval;
|
final DateTime time;
|
||||||
|
final int sales;
|
||||||
|
|
||||||
Sales(this.yearval, this.salesval);
|
TimeSeriesSales(this.time, this.sales);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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<charts.Series> seriesList;
|
||||||
|
|
||||||
|
final String chartTitle;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
child: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
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),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue