Merge branch 'mirza_home_page' into development_new_design_2.0

merge-requests/390/head
Mirza.Shafique 3 years ago
commit 24b7a8a4c4

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart'; import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -38,18 +39,20 @@ class LineChartCurved extends StatelessWidget {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[ children: <Widget>[
const SizedBox( Row(
height: 4, crossAxisAlignment: CrossAxisAlignment.start,
), children: [
Text( Padding(
title, padding: const EdgeInsets.all(16.0),
style: TextStyle( child: Text(
color: Colors.black, title,
fontSize: 15, style: TextStyle(color: Colors.black, fontSize: 16, letterSpacing: -0.64, fontWeight: FontWeight.w600),
letterSpacing: 2), textAlign: TextAlign.center,
textAlign: TextAlign.center, ),
),
],
), ),
SizedBox(height: 10,), mHeight(10),
Expanded( Expanded(
child: Padding( child: Padding(
padding: const EdgeInsets.only(right: 18.0, left: 16.0), padding: const EdgeInsets.only(right: 18.0, left: 16.0),
@ -93,13 +96,11 @@ class LineChartCurved extends StatelessWidget {
lineTouchData: LineTouchData( lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData( touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white, tooltipBgColor: Colors.white,
), ),
touchCallback: (LineTouchResponse touchResponse) {}, touchCallback: (LineTouchResponse touchResponse) {},
handleBuiltInTouches: true, handleBuiltInTouches: true,
), ),
gridData: FlGridData( gridData: FlGridData(show: true, drawVerticalLine: true, drawHorizontalLine: true,horizontalInterval: 10,verticalInterval: 10),
show: true, drawVerticalLine: true, drawHorizontalLine: true),
titlesData: FlTitlesData( titlesData: FlTitlesData(
bottomTitles: SideTitles( bottomTitles: SideTitles(
showTitles: true, showTitles: true,
@ -107,7 +108,7 @@ class LineChartCurved extends StatelessWidget {
color: Colors.black, color: Colors.black,
fontSize: 10, fontSize: 10,
), ),
rotateAngle:-65, rotateAngle: -65,
margin: 22, margin: 22,
getTitles: (value) { getTitles: (value) {
if (timeSeries.length < 15) { if (timeSeries.length < 15) {
@ -116,10 +117,8 @@ class LineChartCurved extends StatelessWidget {
} else } else
return ''; return '';
} else { } else {
if (value.toInt() == 0) if (value.toInt() == 0) return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}'; if (value.toInt() == timeSeries.length - 1) return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
if (value.toInt() == timeSeries.length - 1)
return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
if (xAxixs.contains(value.toInt())) { if (xAxixs.contains(value.toInt())) {
return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}'; return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
} }
@ -134,8 +133,15 @@ class LineChartCurved extends StatelessWidget {
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 10, fontSize: 10,
), ),
interval:getMaxY() - getMinY() <=500?getMaxY() - getMinY() <=50?10:50:getMaxY() - getMinY() <=1000?100:getMaxY() - getMinY()>=10000?5000:200, interval: getMaxY() - getMinY() <= 500
? getMaxY() - getMinY() <= 50
? 10
: 50
: getMaxY() - getMinY() <= 1000
? 100
: getMaxY() - getMinY() >= 10000
? 5000
: 200,
margin: 12, margin: 12,
), ),
), ),
@ -165,42 +171,42 @@ class LineChartCurved extends StatelessWidget {
); );
} }
calculateMaxAndMin(){ calculateMaxAndMin() {
getMaxY(); getMaxY();
getMaxX(); getMaxX();
getMin(); getMin();
getMinY(); getMinY();
increasingY = ((maxY-minY)/timeSeries.length - 1)*15; increasingY = ((maxY - minY) / timeSeries.length - 1) * 15;
maxY += increasingY.abs(); maxY += increasingY.abs();
minY -= increasingY.abs(); minY -= increasingY.abs();
} }
double getMaxY() { double getMaxY() {
maxY = 0; maxY = 0;
timeSeries.forEach((element) { timeSeries.forEach((element) {
double resultValueDouble = element.sales; double resultValueDouble = element.sales;
if (resultValueDouble > maxY) maxY = resultValueDouble; if (resultValueDouble > maxY) maxY = resultValueDouble;
}); });
return maxY.roundToDouble() ; return maxY.roundToDouble();
} }
getMaxX(){ getMaxX() {
maxX = (timeSeries.length - 1).toDouble(); maxX = (timeSeries.length - 1).toDouble();
} }
double getMin(){ double getMin() {
minX = 0; minX = 0;
timeSeries.forEach((element) { timeSeries.forEach((element) {
double resultValueDouble = element.sales; double resultValueDouble = element.sales;
if (resultValueDouble < minX) minX = resultValueDouble; if (resultValueDouble < minX) minX = resultValueDouble;
}); });
return minX.roundToDouble() ; return minX.roundToDouble();
} }
double getMinY() { double getMinY() {
minY = 0; minY = 0;
timeSeries.forEach((element) { timeSeries.forEach((element) {
double resultValueDouble = element.sales; double resultValueDouble = element.sales;
if (resultValueDouble < minY) minY = resultValueDouble; if (resultValueDouble < minY) minY = resultValueDouble;
@ -220,7 +226,7 @@ class LineChartCurved extends StatelessWidget {
spots: spots, spots: spots,
isCurved: true, isCurved: true,
colors: [secondaryColor], colors: [secondaryColor],
barWidth: 3, barWidth: 1.5,
isStrokeCapRound: true, isStrokeCapRound: true,
dotData: FlDotData( dotData: FlDotData(
show: false, show: false,

@ -116,17 +116,89 @@ class VitalSignDetailsScreen extends StatelessWidget {
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return InkWell( return InkWell(
onTap: () { onTap: () {
if (isNotOneAppointment) { if (index == 0) {
Navigator.push( if (isNotOneAppointment) {
context, Navigator.push(
FadePage( context,
page: VitalSignItemDetailsScreen( FadePage(
pageKey: VitalSignDetails.Height, page: VitalSignItemDetailsScreen(
pageTitle: TranslationBase.of(context).height, pageKey: VitalSignDetails.Height,
vitalList: mode.vitalSignResModelList, pageTitle: TranslationBase.of(context).height,
vitalList: mode.vitalSignResModelList,
),
), ),
), );
); }
} else if (index == 1) {
if (isNotOneAppointment) {
Navigator.push(
context,
FadePage(
page: VitalSignItemDetailsScreen(
pageKey: VitalSignDetails.Weight,
pageTitle: TranslationBase.of(context).weight,
vitalList: mode.vitalSignResModelList,
),
),
);
}
} else if (index == 2) {
if (isNotOneAppointment) {
Navigator.push(
context,
FadePage(
page: VitalSignItemDetailsScreen(
pageKey: VitalSignDetails.Temperature,
pageTitle:
TranslationBase.of(context).temperature,
vitalList: mode.vitalSignResModelList,
),
),
);
}
} else if (index == 3) {
if (isNotOneAppointment) {
Navigator.push(
context,
FadePage(
page: VitalSignItemDetailsScreen(
pageKey: VitalSignDetails.heart,
pageTitle: TranslationBase.of(context).heart,
vitalList: mode.vitalSignResModelList,
),
),
);
}
} else if (index == 4) {
if (isNotOneAppointment) {
Navigator.push(
context,
FadePage(
page: VitalSignItemDetailsScreen(
pageKey: VitalSignDetails.Respiration,
pageTitle:
TranslationBase.of(context).respirationRate,
vitalList: mode.vitalSignResModelList,
),
),
);
}
} else if (index == 5) {
if (isNotOneAppointment) {
Navigator.push(
context,
FadePage(
page: VitalSignItemDetailsScreen(
pageKey: VitalSignDetails.BloodPressure,
pageTitle: TranslationBase.of(context).bloodPressure,
vitalList: mode.vitalSignResModelList,
),
),
);
}
} }
}, },
child: VitalSignItem( child: VitalSignItem(

@ -159,6 +159,9 @@ class VitalSignItemDetailsScreen extends StatelessWidget {
return AppScaffold( return AppScaffold(
appBarTitle: pageTitle, appBarTitle: pageTitle,
isShowAppBar: true, isShowAppBar: true,
showNewAppBarTitle: true,
showNewAppBar: true,
body: ListView( body: ListView(
children: VSchart.map((chartInfo) { children: VSchart.map((chartInfo) {
var vitalListTemp = vitalList.where( var vitalListTemp = vitalList.where(

@ -1,15 +1,20 @@
import 'package:diplomaticquarterapp/core/model/vital_sign/vital_sign_res_model.dart'; 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/pages/medical/vital_sign/vital_sign_details_wideget.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.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/charts/app_time_series_chart.dart';
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart'; import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'package:provider/provider.dart';
import 'LineChartCurved.dart'; import 'LineChartCurved.dart';
class VitalSingChartAndDetials extends StatelessWidget { class VitalSingChartAndDetials extends StatefulWidget {
VitalSingChartAndDetials({ VitalSingChartAndDetials({
Key key, Key key,
@required this.vitalList, @required this.vitalList,
@ -24,38 +29,113 @@ class VitalSingChartAndDetials extends StatelessWidget {
final String viewKey; final String viewKey;
final String title1; final String title1;
final String title2; final String title2;
@override
_VitalSingChartAndDetialsState createState() => _VitalSingChartAndDetialsState();
}
class _VitalSingChartAndDetialsState extends State<VitalSingChartAndDetials> {
List<TimeSeriesSales2> timeSeriesData = []; List<TimeSeriesSales2> timeSeriesData = [];
bool isExpended = true;
ProjectViewModel projectViewModel;
@override
void initState() {
// TODO: implement initState
super.initState();
generateData();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
generateData(); projectViewModel = Provider.of(context);
return Column( return SingleChildScrollView(
children: <Widget>[ child: Column(
AppExpandableNotifier( children: <Widget>[
isExpand: true, Card(
headerWidget: LineChartCurved(title: name,timeSeries:timeSeriesData,indexes: timeSeriesData.length~/5.5,), shape: cardRadius(12),
bodyWidget: VitalSignDetailsWidget( elevation: 1,
vitalList: vitalList, margin: EdgeInsets.only(left: 16, top: 16, right: 16, bottom: 8),
title1: title1, child: LineChartCurved(
title2: title2, title: widget.name,
viewKey: viewKey, 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() { generateData() {
if (vitalList.length > 0) { if (widget.vitalList.length > 0) {
vitalList.reversed.toList().forEach( widget.vitalList.reversed.toList().forEach(
(element) { (element) {
if( element.toJson()[viewKey]!=null && element.toJson()[viewKey]?.toInt()!=0) if (element.toJson()[widget.viewKey] != null && element.toJson()[widget.viewKey]?.toInt() != 0)
timeSeriesData.add( timeSeriesData.add(
TimeSeriesSales2( TimeSeriesSales2(
new DateTime(element.vitalSignDate.year, element.vitalSignDate.month, element.vitalSignDate.day), new DateTime(element.vitalSignDate.year, element.vitalSignDate.month, element.vitalSignDate.day),
element.toJson()[viewKey].toDouble(), element.toJson()[widget.viewKey].toDouble(),
), ),
); );
}, },
); );
} }

Loading…
Cancel
Save