|
|
|
@ -1,15 +1,20 @@
|
|
|
|
|
import 'package:diplomaticquarterapp/core/model/vital_sign/vital_sign_res_model.dart';
|
|
|
|
|
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
|
|
|
|
import 'package:diplomaticquarterapp/pages/medical/vital_sign/vital_sign_details_wideget.dart';
|
|
|
|
|
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
|
|
|
|
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
|
|
|
|
import 'package:diplomaticquarterapp/uitl/utils.dart';
|
|
|
|
|
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
|
|
|
|
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
|
|
|
|
|
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
|
|
|
|
import 'package:charts_flutter/flutter.dart' as charts;
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
|
|
|
|
|
import 'LineChartCurved.dart';
|
|
|
|
|
|
|
|
|
|
class VitalSingChartAndDetials extends StatelessWidget {
|
|
|
|
|
class VitalSingChartAndDetials extends StatefulWidget {
|
|
|
|
|
VitalSingChartAndDetials({
|
|
|
|
|
Key key,
|
|
|
|
|
@required this.vitalList,
|
|
|
|
@ -24,38 +29,113 @@ class VitalSingChartAndDetials extends StatelessWidget {
|
|
|
|
|
final String viewKey;
|
|
|
|
|
final String title1;
|
|
|
|
|
final String title2;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
_VitalSingChartAndDetialsState createState() => _VitalSingChartAndDetialsState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _VitalSingChartAndDetialsState extends State<VitalSingChartAndDetials> {
|
|
|
|
|
List<TimeSeriesSales2> timeSeriesData = [];
|
|
|
|
|
bool isExpended = true;
|
|
|
|
|
ProjectViewModel projectViewModel;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
// TODO: implement initState
|
|
|
|
|
super.initState();
|
|
|
|
|
generateData();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
generateData();
|
|
|
|
|
return Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
AppExpandableNotifier(
|
|
|
|
|
isExpand: true,
|
|
|
|
|
headerWidget: LineChartCurved(title: name,timeSeries:timeSeriesData,indexes: timeSeriesData.length~/5.5,),
|
|
|
|
|
bodyWidget: VitalSignDetailsWidget(
|
|
|
|
|
vitalList: vitalList,
|
|
|
|
|
title1: title1,
|
|
|
|
|
title2: title2,
|
|
|
|
|
viewKey: viewKey,
|
|
|
|
|
projectViewModel = Provider.of(context);
|
|
|
|
|
return SingleChildScrollView(
|
|
|
|
|
child: Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
Card(
|
|
|
|
|
shape: cardRadius(12),
|
|
|
|
|
elevation: 1,
|
|
|
|
|
margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8),
|
|
|
|
|
child: LineChartCurved(
|
|
|
|
|
title: widget.name,
|
|
|
|
|
timeSeries: timeSeriesData,
|
|
|
|
|
indexes: timeSeriesData.length ~/ 5.5,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
Card(
|
|
|
|
|
shape: cardRadius(12),
|
|
|
|
|
margin: EdgeInsets.only(left: 16, top: 8, right: 16, bottom: 16),
|
|
|
|
|
child: Padding(
|
|
|
|
|
padding: const EdgeInsets.all(12.0),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
Text(
|
|
|
|
|
TranslationBase.of(context).graphDetails,
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 16,
|
|
|
|
|
letterSpacing: -0.64,
|
|
|
|
|
fontWeight: FontWeight.w600,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Table(
|
|
|
|
|
columnWidths: {
|
|
|
|
|
0: FlexColumnWidth(2),
|
|
|
|
|
1: FlexColumnWidth(1),
|
|
|
|
|
// 2: FlexColumnWidth(1),
|
|
|
|
|
},
|
|
|
|
|
children: fullData(widget.vitalList, context),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<TableRow> fullData(List<VitalSignResModel> labResultList, context) {
|
|
|
|
|
List<TableRow> tableRow = [];
|
|
|
|
|
tableRow.add(
|
|
|
|
|
TableRow(
|
|
|
|
|
children: [
|
|
|
|
|
Utils.tableColumnTitle(widget.title1),
|
|
|
|
|
Utils.tableColumnTitle(widget.title2),
|
|
|
|
|
// Utils.tableColumnTitle(TranslationBase.of(context).range),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < labResultList.length; i++) {
|
|
|
|
|
var data = labResultList[i].toJson()[widget.viewKey];
|
|
|
|
|
if (data != 0)
|
|
|
|
|
tableRow.add(
|
|
|
|
|
TableRow(
|
|
|
|
|
children: [
|
|
|
|
|
Utils.tableColumnValue(
|
|
|
|
|
"${projectViewModel.isArabic ? DateUtil.getWeekDayArabic(labResultList[i].vitalSignDate.weekday) : DateUtil.getWeekDay(labResultList[i].vitalSignDate.weekday)}, ${labResultList[i].vitalSignDate.day} ${projectViewModel.isArabic ? DateUtil.getMonthArabic(labResultList[i].vitalSignDate.month) : DateUtil.getMonth(labResultList[i].vitalSignDate.month)}, ${labResultList[i].vitalSignDate.year}",
|
|
|
|
|
isLast: i == (labResultList.length - 1)),
|
|
|
|
|
Utils.tableColumnValue('${labResultList[i].toJson()[widget.viewKey]}', isLast: i == (labResultList.length - 1)),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return tableRow;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
generateData() {
|
|
|
|
|
if (vitalList.length > 0) {
|
|
|
|
|
vitalList.reversed.toList().forEach(
|
|
|
|
|
(element) {
|
|
|
|
|
if( element.toJson()[viewKey]!=null && element.toJson()[viewKey]?.toInt()!=0)
|
|
|
|
|
timeSeriesData.add(
|
|
|
|
|
TimeSeriesSales2(
|
|
|
|
|
new DateTime(element.vitalSignDate.year, element.vitalSignDate.month, element.vitalSignDate.day),
|
|
|
|
|
element.toJson()[viewKey].toDouble(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
if (widget.vitalList.length > 0) {
|
|
|
|
|
widget.vitalList.reversed.toList().forEach(
|
|
|
|
|
(element) {
|
|
|
|
|
if (element.toJson()[widget.viewKey] != null && element.toJson()[widget.viewKey]?.toInt() != 0)
|
|
|
|
|
timeSeriesData.add(
|
|
|
|
|
TimeSeriesSales2(
|
|
|
|
|
new DateTime(element.vitalSignDate.year, element.vitalSignDate.month, element.vitalSignDate.day),
|
|
|
|
|
element.toJson()[widget.viewKey].toDouble(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|