Merge branch 'master' of https://gitlab.com/Cloud_Solution/diplomatic-quarter into sultan
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,521 @@
|
|||||||
|
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/bmi_calculator/result_page.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
const activeCardColor = Color(0xff70777A);
|
||||||
|
const inactiveCardColor = Color(0xffFAFAFd);
|
||||||
|
|
||||||
|
class BMICalculator extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_BMICalculatorState createState() => _BMICalculatorState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _BMICalculatorState extends State<BMICalculator> {
|
||||||
|
TextEditingController textController = new TextEditingController();
|
||||||
|
String textResult;
|
||||||
|
String msg;
|
||||||
|
double bmiResult;
|
||||||
|
int height = 150;
|
||||||
|
int weight = 40;
|
||||||
|
Color cmCard = activeCardColor;
|
||||||
|
Color ftCard = inactiveCardColor;
|
||||||
|
Color lbCard = inactiveCardColor;
|
||||||
|
Color kgCard = activeCardColor;
|
||||||
|
void updateColor(int type) {
|
||||||
|
//MG/DLT card
|
||||||
|
if (type == 1) {
|
||||||
|
if (cmCard == inactiveCardColor) {
|
||||||
|
cmCard = activeCardColor;
|
||||||
|
ftCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
cmCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == 2) {
|
||||||
|
if (ftCard == inactiveCardColor) {
|
||||||
|
ftCard = activeCardColor;
|
||||||
|
cmCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
ftCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateColorWeight(int type) {
|
||||||
|
//MG/DLT card
|
||||||
|
if (type == 1) {
|
||||||
|
if (kgCard == inactiveCardColor) {
|
||||||
|
kgCard = activeCardColor;
|
||||||
|
lbCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
kgCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == 2) {
|
||||||
|
if (lbCard == inactiveCardColor) {
|
||||||
|
lbCard = activeCardColor;
|
||||||
|
kgCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
lbCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double convertToCm(double number) {
|
||||||
|
return number * 30.48;
|
||||||
|
}
|
||||||
|
|
||||||
|
double convertToKg(double number) {
|
||||||
|
return number / 2.205;
|
||||||
|
}
|
||||||
|
|
||||||
|
double calculateBMI() {
|
||||||
|
if (ftCard == activeCardColor) {
|
||||||
|
convertToCm(height.toDouble());
|
||||||
|
}
|
||||||
|
bmiResult = weight / pow(height / 100, 2);
|
||||||
|
|
||||||
|
return bmiResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
void showTextResult() {
|
||||||
|
if (bmiResult >= 30) {
|
||||||
|
textResult = 'Obese';
|
||||||
|
} else if (bmiResult < 30 && bmiResult >= 25) {
|
||||||
|
textResult = 'OverWeight';
|
||||||
|
} else if (bmiResult < 25 && bmiResult >= 18.5) {
|
||||||
|
textResult = 'Healthy';
|
||||||
|
} else if (bmiResult < 18.5) {
|
||||||
|
textResult = 'UnderWeight';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void showMsg() {
|
||||||
|
if (bmiResult >= 30) {
|
||||||
|
msg =
|
||||||
|
'A BMI of over 30 indicates that are heavily overweight. Health may be at risk if not lose weight. Recommended talking to a doctor or a dietician for advice. To book an appointment, click below to get started.';
|
||||||
|
} else if (bmiResult < 30 && bmiResult >= 25) {
|
||||||
|
msg =
|
||||||
|
'A BMI of 25 - 30 indicates that are slightly overweight. May be advised to lose some weight for health reasons. Recommended talking to a doctor or a dietician for advice. To book an appointment, click below to get ';
|
||||||
|
} else if (bmiResult < 25 && bmiResult >= 18.5) {
|
||||||
|
msg =
|
||||||
|
'A BMI of 18.5 - 25 indicates that are at a healthy weight for the height. By maintaining a healthy weight, lower the risk of developing severe health problems. To book an appointment, click below to get started.';
|
||||||
|
} else if (bmiResult < 18.5) {
|
||||||
|
msg =
|
||||||
|
'A BMI of less than 18.5 indicates that are underweight, so may need to put on some weight. Recommended talking to a doctor or a dietician for advice. To book an appointment, click below to get started.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
textController.text = '0'; // Setting the initial value for the field.
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'BMI Calculator',
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
|
child: Container(
|
||||||
|
width: 350.0,
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 15.0),
|
||||||
|
child: Text(
|
||||||
|
'Calculate the BMI value and weight\n status to identify the healthy weight .\n Not appropriate for children and women\n who are pregnant or breastfeeding',
|
||||||
|
style: TextStyle(fontSize: 18.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 200.0,
|
||||||
|
width: 350.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(12.0),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: Texts('Height'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.0, horizontal: 8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 60.0,
|
||||||
|
foregroundDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueGrey,
|
||||||
|
width: 2.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: Text(height.toString()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 38.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_up,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (height < 250) height++;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_down,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (height > 120) height--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Slider(
|
||||||
|
value: height.toDouble(),
|
||||||
|
min: 120,
|
||||||
|
max: 250,
|
||||||
|
onChanged: (double newValue) {
|
||||||
|
setState(() {
|
||||||
|
height = newValue.round();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
activeColor: Color(0xffC5272D),
|
||||||
|
inactiveColor: Color(0xffF3C5C6),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: Texts('Select Unit'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColor(1);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset:
|
||||||
|
Offset(0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: cmCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 0.0, horizontal: 18.0),
|
||||||
|
child: Center(child: Texts('CM')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColor(2);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: ftCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset:
|
||||||
|
Offset(0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding:
|
||||||
|
const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
|
child: Center(child: Texts('FT')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 25.0,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 200.0,
|
||||||
|
width: 350.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(12.0),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: Texts('Weight'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.0, horizontal: 8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 60.0,
|
||||||
|
foregroundDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueGrey,
|
||||||
|
width: 2.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: Text(weight.toString()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 38.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_up,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (weight < 250) weight++;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_down,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (weight > 40) weight--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Slider(
|
||||||
|
value: weight.toDouble(),
|
||||||
|
min: 40,
|
||||||
|
max: 250,
|
||||||
|
onChanged: (double newValue) {
|
||||||
|
setState(() {
|
||||||
|
weight = newValue.round();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
activeColor: Color(0xffC5272D),
|
||||||
|
inactiveColor: Color(0xffF3C5C6),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: Texts('Select Unit'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorWeight(1);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset:
|
||||||
|
Offset(0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: kgCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 0.0, horizontal: 18.0),
|
||||||
|
child: Center(child: Texts('KG')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorWeight(2);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: lbCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset:
|
||||||
|
Offset(0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding:
|
||||||
|
const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
|
child: Center(child: Texts('LB')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 25.0,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 100.0,
|
||||||
|
width: 350.0,
|
||||||
|
child: Button(
|
||||||
|
label: 'CALCULATE',
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
calculateBMI();
|
||||||
|
showTextResult();
|
||||||
|
showMsg();
|
||||||
|
{
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => ResultPage(
|
||||||
|
finalResult: bmiResult,
|
||||||
|
textResult: textResult,
|
||||||
|
msg: msg,
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
import 'dart:ffi';
|
||||||
|
|
||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:percent_indicator/percent_indicator.dart';
|
||||||
|
|
||||||
|
class ResultPage extends StatelessWidget {
|
||||||
|
final double finalResult;
|
||||||
|
final String textResult;
|
||||||
|
final String msg;
|
||||||
|
|
||||||
|
ResultPage({this.finalResult, this.textResult, this.msg});
|
||||||
|
Color inductorColor;
|
||||||
|
double percent;
|
||||||
|
|
||||||
|
Color colorInductor() {
|
||||||
|
if (finalResult >= 30) {
|
||||||
|
inductorColor = Color(0xffC70D00);
|
||||||
|
} else if (finalResult < 30 && finalResult >= 25) {
|
||||||
|
inductorColor = Color(0xffC25400);
|
||||||
|
} else if (finalResult < 25 && finalResult >= 18.5) {
|
||||||
|
inductorColor = Color(0xff36D600);
|
||||||
|
} else if (finalResult < 18.5) {
|
||||||
|
inductorColor = Color(0xff1BE0EE);
|
||||||
|
}
|
||||||
|
return inductorColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
double percentInductor() {
|
||||||
|
if (finalResult >= 30) {
|
||||||
|
percent = 1.0;
|
||||||
|
} else if (finalResult < 30 && finalResult >= 25) {
|
||||||
|
percent = 0.73;
|
||||||
|
} else if (finalResult < 25 && finalResult >= 18.5) {
|
||||||
|
percent = 0.5;
|
||||||
|
} else if (finalResult < 18.5) {
|
||||||
|
percent = 0.25;
|
||||||
|
}
|
||||||
|
return percent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: "BMI Calculator",
|
||||||
|
body: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
// height: 40.0,
|
||||||
|
),
|
||||||
|
Center(
|
||||||
|
child: CircularPercentIndicator(
|
||||||
|
radius: 220.0,
|
||||||
|
lineWidth: 20.0,
|
||||||
|
percent: percentInductor(),
|
||||||
|
center: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
finalResult.toStringAsFixed(1),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
textResult,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16.0,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
progressColor: colorInductor(),
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 120,
|
||||||
|
width: 280.0,
|
||||||
|
child: Texts(msg),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 350,
|
||||||
|
child: Button(
|
||||||
|
label: 'See List Of Doctors',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:percent_indicator/circular_percent_indicator.dart';
|
||||||
|
|
||||||
|
class BmrResultPage extends StatelessWidget {
|
||||||
|
final double bmrResult;
|
||||||
|
final double calories;
|
||||||
|
BmrResultPage({this.bmrResult, this.calories});
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'BMR Calculator',
|
||||||
|
body: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
|
child: CircularPercentIndicator(
|
||||||
|
radius: 220.0,
|
||||||
|
lineWidth: 20.0,
|
||||||
|
percent: ((this.bmrResult > 3500) ? 100 : this.bmrResult / 3500),
|
||||||
|
center: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
bmrResult.toStringAsFixed(1),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'Calories/Day',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16.0,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
progressColor: Color(0xff3C3939),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 120,
|
||||||
|
width: 280.0,
|
||||||
|
child: Texts(
|
||||||
|
'This means the body will burn ( ${bmrResult.toStringAsFixed(1)} ) calories each day, if engaged in no activity for the entire day.. Note: Daily calorie requirement is ( ${calories.toStringAsFixed(1)} ) calories, to maintain the current weight.'),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 350,
|
||||||
|
child: Button(
|
||||||
|
label: 'See List Of Doctors',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:percent_indicator/circular_percent_indicator.dart';
|
||||||
|
|
||||||
|
class FatResult extends StatelessWidget {
|
||||||
|
final double bodyFat;
|
||||||
|
final double fat;
|
||||||
|
final String textResult;
|
||||||
|
|
||||||
|
FatResult({this.bodyFat, this.fat, this.textResult = ''});
|
||||||
|
Color inductorColor;
|
||||||
|
Color colorInductor() {
|
||||||
|
if (bodyFat >= 17) {
|
||||||
|
inductorColor = Color(0xffC70D00);
|
||||||
|
} else if (bodyFat < 20 && bodyFat >= 24) {
|
||||||
|
inductorColor = Color(0xffC25400);
|
||||||
|
} else if (bodyFat < 24 && bodyFat >= 31) {
|
||||||
|
inductorColor = Color(0xff36D600);
|
||||||
|
} else if (bodyFat > 45) {
|
||||||
|
inductorColor = Color(0xff1BE0EE);
|
||||||
|
}
|
||||||
|
return inductorColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'Body Fat',
|
||||||
|
body: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
// height: 40.0,
|
||||||
|
),
|
||||||
|
Center(
|
||||||
|
child: CircularPercentIndicator(
|
||||||
|
radius: 220.0,
|
||||||
|
lineWidth: 20.0,
|
||||||
|
percent: ((fat > 70) ? 100 : fat / 100),
|
||||||
|
center: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
fat.toStringAsFixed(1) + '%',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
progressColor: inductorColor,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 120,
|
||||||
|
width: 280.0,
|
||||||
|
child: Texts(textResult),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 350,
|
||||||
|
child: Button(
|
||||||
|
label: 'See List Of Doctors',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,676 @@
|
|||||||
|
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/calorie_calculator/calorie_result_page.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
const activeCardColorGender = Color(0xffC5272D);
|
||||||
|
const inactiveCardColorGender = Color(0xffFAFAFd);
|
||||||
|
const activeCardColor = Color(0xff70777A);
|
||||||
|
const inactiveCardColor = Color(0xffFAFAFd);
|
||||||
|
|
||||||
|
class CalorieCalculator extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_CalorieCalculatorState createState() => _CalorieCalculatorState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _CalorieCalculatorState extends State<CalorieCalculator> {
|
||||||
|
bool isMale = false;
|
||||||
|
Color maleCard = activeCardColorGender;
|
||||||
|
Color femaleCard = inactiveCardColorGender;
|
||||||
|
Color kgCard = activeCardColor;
|
||||||
|
Color lbCard = inactiveCardColor;
|
||||||
|
Color cmCard = activeCardColor;
|
||||||
|
Color ftCard = inactiveCardColor;
|
||||||
|
int age = 0;
|
||||||
|
int height = 0;
|
||||||
|
int weight = 0;
|
||||||
|
double calories;
|
||||||
|
String dropdownValue;
|
||||||
|
void updateColor(int type) {
|
||||||
|
//MG/DLT card
|
||||||
|
if (type == 1) {
|
||||||
|
if (maleCard == inactiveCardColorGender) {
|
||||||
|
maleCard = activeCardColorGender;
|
||||||
|
femaleCard = inactiveCardColorGender;
|
||||||
|
} else {
|
||||||
|
maleCard = inactiveCardColorGender;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == 2) {
|
||||||
|
if (femaleCard == inactiveCardColorGender) {
|
||||||
|
femaleCard = activeCardColorGender;
|
||||||
|
maleCard = inactiveCardColorGender;
|
||||||
|
} else {
|
||||||
|
femaleCard = inactiveCardColorGender;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateColorWeight(int type) {
|
||||||
|
//MG/DLT card
|
||||||
|
if (type == 1) {
|
||||||
|
if (kgCard == inactiveCardColor) {
|
||||||
|
kgCard = activeCardColor;
|
||||||
|
lbCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
kgCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == 2) {
|
||||||
|
if (lbCard == inactiveCardColor) {
|
||||||
|
lbCard = activeCardColor;
|
||||||
|
kgCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
lbCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateColorHeight(int type) {
|
||||||
|
//MG/DLT card
|
||||||
|
if (type == 1) {
|
||||||
|
if (cmCard == inactiveCardColor) {
|
||||||
|
cmCard = activeCardColor;
|
||||||
|
ftCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
cmCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == 2) {
|
||||||
|
if (ftCard == inactiveCardColor) {
|
||||||
|
ftCard = activeCardColor;
|
||||||
|
cmCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
ftCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void calculateCalories() {
|
||||||
|
if (isMale == true) {
|
||||||
|
calories = 66.5 + (13.75 * weight) + (5.003 * height) - (6.755 * age);
|
||||||
|
} else if (isMale == false) {
|
||||||
|
calories =
|
||||||
|
655.0955 + (9.5634 * weight) + (1.850 * height) - (4.676 * age);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'Calorie Calculator',
|
||||||
|
body: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 25.0, vertical: 15.0),
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Container(
|
||||||
|
height: 890.0,
|
||||||
|
child: Column(
|
||||||
|
//mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(10.0),
|
||||||
|
child: Texts(
|
||||||
|
'Calculates daily calorie intake based on several factors, like height, weight, age, gender and daily physical activity rate',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding:
|
||||||
|
EdgeInsets.symmetric(horizontal: 10.0, vertical: 15.0),
|
||||||
|
child: Texts('Gender'),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 350,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(35.0),
|
||||||
|
color: Colors.white,
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.black45,
|
||||||
|
)),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColor(1);
|
||||||
|
isMale = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 170.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: maleCard,
|
||||||
|
borderRadius: BorderRadius.circular(35.0),
|
||||||
|
),
|
||||||
|
child: Center(child: Texts('FEMALE')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColor(2);
|
||||||
|
isMale = true;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 170.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: femaleCard,
|
||||||
|
borderRadius: BorderRadius.circular(35.0),
|
||||||
|
),
|
||||||
|
child: Center(child: Texts('MALE')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 15.0,
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
'The Age ( 11 - 120 ) yrs',
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10.0,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 335.0,
|
||||||
|
height: 60.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.0, horizontal: 8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 60.0,
|
||||||
|
foregroundDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueGrey,
|
||||||
|
width: 2.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: Text(age.toString()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 38.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment:
|
||||||
|
MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_up,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (age < 120) age++;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_down,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (age > 0) age--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Slider(
|
||||||
|
value: age.toDouble(),
|
||||||
|
min: 0,
|
||||||
|
max: 120,
|
||||||
|
onChanged: (double newValue) {
|
||||||
|
setState(() {
|
||||||
|
age = newValue.round();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
activeColor: Color(0xffC5272D),
|
||||||
|
inactiveColor: Color(0xffF3C5C6),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
'Height',
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 335.0,
|
||||||
|
height: 60.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.0, horizontal: 8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 60.0,
|
||||||
|
foregroundDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueGrey,
|
||||||
|
width: 2.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: Text(height.toString()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 38.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment:
|
||||||
|
MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_up,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (height < 250) height++;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_down,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (height > 0) height--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Slider(
|
||||||
|
value: height.toDouble(),
|
||||||
|
min: 0,
|
||||||
|
max: 250,
|
||||||
|
onChanged: (double newValue) {
|
||||||
|
setState(() {
|
||||||
|
height = newValue.round();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
activeColor: Color(0xffC5272D),
|
||||||
|
inactiveColor: Color(0xffF3C5C6),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Texts('Select Unit'),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorHeight(1);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset:
|
||||||
|
Offset(0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: cmCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 0.0, horizontal: 18.0),
|
||||||
|
child: Center(child: Texts('CM')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorHeight(2);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: ftCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset:
|
||||||
|
Offset(0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
|
child: Center(child: Texts('Ft')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
'Weight',
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 335.0,
|
||||||
|
height: 60.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.0, horizontal: 8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 60.0,
|
||||||
|
foregroundDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueGrey,
|
||||||
|
width: 2.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: Text(weight.toString()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 38.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment:
|
||||||
|
MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_up,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (weight < 250) weight++;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_down,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (weight > 0) weight--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Slider(
|
||||||
|
value: weight.toDouble(),
|
||||||
|
min: 0,
|
||||||
|
max: 250,
|
||||||
|
onChanged: (double newValue) {
|
||||||
|
setState(() {
|
||||||
|
weight = newValue.round();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
activeColor: Color(0xffC5272D),
|
||||||
|
inactiveColor: Color(0xffF3C5C6),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Texts('Select Unit'),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorWeight(1);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset:
|
||||||
|
Offset(0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: kgCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 0.0, horizontal: 18.0),
|
||||||
|
child: Center(child: Texts('KG')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorWeight(2);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: lbCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset:
|
||||||
|
Offset(0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
|
child: Center(child: Texts('LB')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Texts('Activity level'),
|
||||||
|
Container(
|
||||||
|
width: 300,
|
||||||
|
child: DropdownButton<String>(
|
||||||
|
value: dropdownValue,
|
||||||
|
icon: Icon(Icons.arrow_downward),
|
||||||
|
iconSize: 24,
|
||||||
|
elevation: 16,
|
||||||
|
style: TextStyle(color: Colors.black87),
|
||||||
|
underline: Container(
|
||||||
|
height: 2,
|
||||||
|
color: Colors.black54,
|
||||||
|
),
|
||||||
|
onChanged: (String newValue) {
|
||||||
|
setState(() {
|
||||||
|
dropdownValue = newValue;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
items: <String>[
|
||||||
|
'Almost Inactive(Little or no exercises)',
|
||||||
|
'Lighty Active (1-3) days per week',
|
||||||
|
'very Active(6-7) days per week',
|
||||||
|
'Super Active(very hard exercises)'
|
||||||
|
].map<DropdownMenuItem<String>>((String value) {
|
||||||
|
return DropdownMenuItem<String>(
|
||||||
|
value: value,
|
||||||
|
child: Text(value),
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 25.0,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 100.0,
|
||||||
|
width: 350.0,
|
||||||
|
child: Button(
|
||||||
|
label: 'CALCULATE',
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
calculateCalories();
|
||||||
|
print(calories);
|
||||||
|
{
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => CalorieResultPage(
|
||||||
|
calorie: calories,
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:percent_indicator/circular_percent_indicator.dart';
|
||||||
|
|
||||||
|
class CalorieResultPage extends StatelessWidget {
|
||||||
|
final double calorie;
|
||||||
|
|
||||||
|
CalorieResultPage({this.calorie});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
appBarTitle: 'Calorie Calculator',
|
||||||
|
isShowAppBar: true,
|
||||||
|
body: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
|
child: CircularPercentIndicator(
|
||||||
|
radius: 220.0,
|
||||||
|
lineWidth: 20.0,
|
||||||
|
percent: ((this.calorie > 3500) ? 100 : this.calorie / 3500),
|
||||||
|
center: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
calorie.toStringAsFixed(1),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Texts('Calories'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
progressColor: Color(0xff3C3939),
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
child:
|
||||||
|
Texts('Daily intake is ${calorie.toStringAsFixed(1)} calories'),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 350,
|
||||||
|
child: Button(
|
||||||
|
label: 'See List Of Doctors',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,367 @@
|
|||||||
|
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/calorie_calculator/calorie_calculator.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/carbs/carbs_result_page.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
|
class Carbs extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_CarbsState createState() => _CarbsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _CarbsState extends State<Carbs> {
|
||||||
|
TextEditingController textController = new TextEditingController();
|
||||||
|
int calories;
|
||||||
|
String dropdownValue;
|
||||||
|
bool _visible = false;
|
||||||
|
int meals;
|
||||||
|
int protein;
|
||||||
|
int carbs;
|
||||||
|
|
||||||
|
int fat;
|
||||||
|
double pCal;
|
||||||
|
double cCal;
|
||||||
|
double fCal;
|
||||||
|
double pCalGram;
|
||||||
|
double cCalGram;
|
||||||
|
double fCalGram;
|
||||||
|
double pCalMeal;
|
||||||
|
double cCalMeal;
|
||||||
|
double fCalMeal;
|
||||||
|
|
||||||
|
void calculateDietRatios() {
|
||||||
|
if (dropdownValue == 'Very Low Carb') {
|
||||||
|
meals = 3;
|
||||||
|
protein = 45;
|
||||||
|
carbs = 10;
|
||||||
|
fat = 45;
|
||||||
|
} else if (dropdownValue == 'Low Carb') {
|
||||||
|
meals = 3;
|
||||||
|
protein = 40;
|
||||||
|
carbs = 30;
|
||||||
|
fat = 30;
|
||||||
|
} else if (dropdownValue == 'Moderate Carb') {
|
||||||
|
meals = 3;
|
||||||
|
protein = 25;
|
||||||
|
carbs = 50;
|
||||||
|
fat = 25;
|
||||||
|
} else if (dropdownValue == 'USDA Gudilines') {
|
||||||
|
meals = 3;
|
||||||
|
protein = 15;
|
||||||
|
carbs = 55;
|
||||||
|
fat = 30;
|
||||||
|
} else if (dropdownValue == 'Zone Diet') {
|
||||||
|
meals = 3;
|
||||||
|
protein = 30;
|
||||||
|
carbs = 40;
|
||||||
|
fat = 30;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void calculate() {
|
||||||
|
pCal = (protein / 100.0) * int.parse(textController.text).ceil();
|
||||||
|
cCal = (carbs / 100.0) * int.parse(textController.text);
|
||||||
|
;
|
||||||
|
fCal = (fat / 100) * int.parse(textController.text);
|
||||||
|
;
|
||||||
|
pCalGram = pCal / 4.0;
|
||||||
|
cCalGram = cCal / 4.0;
|
||||||
|
fCalGram = fCal / 9.0;
|
||||||
|
pCalMeal = pCalGram / meals.ceil();
|
||||||
|
cCalMeal = cCalGram / meals.ceil();
|
||||||
|
fCalMeal = fCalGram / meals.ceil();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'Carb Protein Fat',
|
||||||
|
body: Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 25.0, vertical: 15.0),
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Container(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
'Calculates carbohydrate protein and fat\n ratio in calories and grams according to a\n pre-set ratio',
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 15.0,
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 335.0,
|
||||||
|
height: 60.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.0, horizontal: 8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 300.0,
|
||||||
|
foregroundDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueGrey,
|
||||||
|
width: 2.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: TextFormField(
|
||||||
|
controller: textController,
|
||||||
|
inputFormatters: <TextInputFormatter>[
|
||||||
|
FilteringTextInputFormatter
|
||||||
|
.digitsOnly
|
||||||
|
],
|
||||||
|
keyboardType: TextInputType.number,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText: " The Calories per day ",
|
||||||
|
labelStyle: TextStyle(
|
||||||
|
color: Colors.black87,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 38.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment:
|
||||||
|
MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_up,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
int currentValue = int.parse(
|
||||||
|
textController.text);
|
||||||
|
currentValue++;
|
||||||
|
textController.text =
|
||||||
|
(currentValue).toString();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_down,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
int currentValue = int.parse(
|
||||||
|
textController.text);
|
||||||
|
currentValue--;
|
||||||
|
textController.text =
|
||||||
|
(currentValue).toString();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 20.0,
|
||||||
|
),
|
||||||
|
Button(
|
||||||
|
backgroundColor: Color(0xffC5272D),
|
||||||
|
label: 'NOT SURE? CLICK HERE ',
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
{
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => CalorieCalculator()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Texts('Select Diet Type'),
|
||||||
|
Container(
|
||||||
|
width: 400,
|
||||||
|
child: DropdownButton<String>(
|
||||||
|
value: dropdownValue,
|
||||||
|
icon: Icon(Icons.arrow_downward),
|
||||||
|
iconSize: 24,
|
||||||
|
elevation: 16,
|
||||||
|
style: TextStyle(color: Colors.black87),
|
||||||
|
underline: Container(
|
||||||
|
height: 2,
|
||||||
|
color: Colors.black54,
|
||||||
|
),
|
||||||
|
onChanged: (String newValue) {
|
||||||
|
setState(() {
|
||||||
|
dropdownValue = newValue;
|
||||||
|
calculateDietRatios();
|
||||||
|
|
||||||
|
dropdownValue == null
|
||||||
|
? _visible = false
|
||||||
|
: _visible = true;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
items: <String>[
|
||||||
|
'Very Low Carb',
|
||||||
|
'Low Carb',
|
||||||
|
'Moderate Carb',
|
||||||
|
'USDA Gudilines',
|
||||||
|
'Zone Diet',
|
||||||
|
].map<DropdownMenuItem<String>>((String value) {
|
||||||
|
return DropdownMenuItem<String>(
|
||||||
|
value: value,
|
||||||
|
child: Text(value),
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Visibility(
|
||||||
|
visible: _visible,
|
||||||
|
child: Container(
|
||||||
|
height: 170.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
'Ratios are divided according to the selected diet'),
|
||||||
|
RichText(
|
||||||
|
text: TextSpan(
|
||||||
|
style: TextStyle(color: Colors.black),
|
||||||
|
children: [
|
||||||
|
TextSpan(text: 'Meals Per Day '),
|
||||||
|
TextSpan(
|
||||||
|
text: '$meals',
|
||||||
|
style: TextStyle(color: Color(0xffC5272D)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
RichText(
|
||||||
|
text: TextSpan(
|
||||||
|
style: TextStyle(color: Colors.black),
|
||||||
|
children: [
|
||||||
|
TextSpan(
|
||||||
|
text: 'Protein ',
|
||||||
|
),
|
||||||
|
TextSpan(
|
||||||
|
text: '$protein%',
|
||||||
|
style: TextStyle(color: Color(0xffC5272D)),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
RichText(
|
||||||
|
text: TextSpan(
|
||||||
|
style: TextStyle(color: Colors.black),
|
||||||
|
children: [
|
||||||
|
TextSpan(
|
||||||
|
text: 'Carbohydrate ',
|
||||||
|
),
|
||||||
|
TextSpan(
|
||||||
|
text: '$carbs%',
|
||||||
|
style: TextStyle(color: Color(0xffC5272D)),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
RichText(
|
||||||
|
text: TextSpan(
|
||||||
|
style: TextStyle(color: Colors.black),
|
||||||
|
children: [
|
||||||
|
TextSpan(
|
||||||
|
text: 'Fat ',
|
||||||
|
),
|
||||||
|
TextSpan(
|
||||||
|
text: '$fat%',
|
||||||
|
style: TextStyle(color: Color(0xffC5272D)),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 55.0,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 100.0,
|
||||||
|
width: 350.0,
|
||||||
|
child: Button(
|
||||||
|
label: 'CALCULATE',
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
{
|
||||||
|
calculate();
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => CarbsResult(
|
||||||
|
cCal: cCal,
|
||||||
|
pCal: pCal,
|
||||||
|
fCal: fCal,
|
||||||
|
pCalGram: pCalGram,
|
||||||
|
pCalMeal: pCalMeal,
|
||||||
|
fCalGram: fCalGram,
|
||||||
|
fCalMeal: fCalMeal,
|
||||||
|
cCalGram: cCalGram,
|
||||||
|
cCalMeal: cCalMeal,
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,175 @@
|
|||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:flutter/painting.dart';
|
||||||
|
|
||||||
|
class CarbsResult extends StatelessWidget {
|
||||||
|
double pCal;
|
||||||
|
double cCal;
|
||||||
|
double fCal;
|
||||||
|
double pCalGram;
|
||||||
|
double cCalGram;
|
||||||
|
double fCalGram;
|
||||||
|
double pCalMeal;
|
||||||
|
double cCalMeal;
|
||||||
|
double fCalMeal;
|
||||||
|
|
||||||
|
CarbsResult(
|
||||||
|
{this.pCal,
|
||||||
|
this.cCal,
|
||||||
|
this.fCal,
|
||||||
|
this.pCalGram,
|
||||||
|
this.cCalGram,
|
||||||
|
this.fCalGram,
|
||||||
|
this.fCalMeal,
|
||||||
|
this.cCalMeal,
|
||||||
|
this.pCalMeal});
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'Carb Protein Fat',
|
||||||
|
body: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 30.0, horizontal: 10.0),
|
||||||
|
child: Table(
|
||||||
|
border: TableBorder(
|
||||||
|
verticalInside: BorderSide(width: 1, color: Colors.black54),
|
||||||
|
bottom: BorderSide(width: 1, color: Colors.black54),
|
||||||
|
left: BorderSide(width: 1, color: Colors.black54),
|
||||||
|
right: BorderSide(width: 1, color: Colors.black54),
|
||||||
|
top: BorderSide(width: 1, color: Colors.black54),
|
||||||
|
),
|
||||||
|
children: [
|
||||||
|
TableRow(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
children: [
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts('Description'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts('Protein'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(
|
||||||
|
'Carbohydrate',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts('Fat'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
TableRow(children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts('Calories\n Per Day'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(pCal.ceil().toString() + ' Cals'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(cCal.ceil().toString() + ' Cals'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(fCal.ceil().toString() + ' Cals'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
TableRow(children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts('Grams Per\n Day'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(pCalGram.ceil().toString() + ' gr'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(cCalGram.ceil().toString() + ' gr'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(fCalGram.ceil().toString() + ' gr'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
TableRow(children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts('Grams Per\n Meal'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(pCalMeal.ceil().toString() + ' gr'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(cCalMeal.ceil().toString() + ' gr'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TableCell(
|
||||||
|
child: Center(
|
||||||
|
child: Texts(fCalMeal.ceil().toString() + ' gr'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 350,
|
||||||
|
child: Button(
|
||||||
|
label: 'See List Of Doctors',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
|
||||||
|
// Texts(pCal.ceil().toString()),
|
||||||
|
// Texts(cCal.ceil().toString()),
|
||||||
|
// Texts(fCal.ceil().toString()),
|
||||||
|
// Texts(pCalGram.ceil().toString()),
|
||||||
|
// Texts(cCalGram.ceil().toString()),
|
||||||
|
// Texts(fCalGram.ceil().toString()),
|
||||||
|
// Texts(pCalMeal.ceil().toString()),
|
||||||
|
// Texts(cCalMeal.ceil().toString()),
|
||||||
|
// Texts(fCalMeal.ceil().toString()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,550 @@
|
|||||||
|
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/ideal_body/ideal_body_result_page.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
const activeCardColor = Color(0xff70777A);
|
||||||
|
const inactiveCardColor = Color(0xffFAFAFd);
|
||||||
|
|
||||||
|
class IdealBody extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_IdealBodyState createState() => _IdealBodyState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _IdealBodyState extends State<IdealBody> {
|
||||||
|
bool isMale = false;
|
||||||
|
bool isHeightCm = true;
|
||||||
|
|
||||||
|
Color kgCard = activeCardColor;
|
||||||
|
Color lbCard = inactiveCardColor;
|
||||||
|
Color cmCard = activeCardColor;
|
||||||
|
Color ftCard = inactiveCardColor;
|
||||||
|
int age = 0;
|
||||||
|
int height = 0;
|
||||||
|
double heightInches;
|
||||||
|
double minRange;
|
||||||
|
double maxRange;
|
||||||
|
double overWeightBy;
|
||||||
|
int weight = 0;
|
||||||
|
double idealWeight = 0;
|
||||||
|
String dropdownValue;
|
||||||
|
double calories = 0;
|
||||||
|
String textResult = '';
|
||||||
|
double maxIdealWeight;
|
||||||
|
double heightFeet;
|
||||||
|
|
||||||
|
void updateColorHeight(int type) {
|
||||||
|
//MG/DLT card
|
||||||
|
if (type == 1) {
|
||||||
|
if (cmCard == inactiveCardColor) {
|
||||||
|
cmCard = activeCardColor;
|
||||||
|
ftCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
cmCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == 2) {
|
||||||
|
if (ftCard == inactiveCardColor) {
|
||||||
|
ftCard = activeCardColor;
|
||||||
|
cmCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
ftCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateColorWeight(int type) {
|
||||||
|
//MG/DLT card
|
||||||
|
if (type == 1) {
|
||||||
|
if (kgCard == inactiveCardColor) {
|
||||||
|
kgCard = activeCardColor;
|
||||||
|
lbCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
kgCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type == 2) {
|
||||||
|
if (lbCard == inactiveCardColor) {
|
||||||
|
lbCard = activeCardColor;
|
||||||
|
kgCard = inactiveCardColor;
|
||||||
|
} else {
|
||||||
|
lbCard = inactiveCardColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void calculateIdealWeight() {
|
||||||
|
heightInches = height * .39370078740157477;
|
||||||
|
heightFeet = heightInches / 12;
|
||||||
|
idealWeight = (50 + 2.3 * (heightInches - 60));
|
||||||
|
if (dropdownValue == 'Small(fingers overlap)') {
|
||||||
|
idealWeight = idealWeight - 10;
|
||||||
|
} else if (dropdownValue == 'Medium(fingers touch)') {
|
||||||
|
idealWeight = idealWeight;
|
||||||
|
} else if (dropdownValue == 'Large(fingers don\'n touch)') {
|
||||||
|
idealWeight = idealWeight + 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
maxIdealWeight = (((idealWeight) * 1.1).round() * 100) / 100;
|
||||||
|
overWeightBy = weight - maxIdealWeight.roundToDouble();
|
||||||
|
minRange = ((idealWeight / 1.1) * 10).round() / 10;
|
||||||
|
maxRange = maxIdealWeight;
|
||||||
|
idealWeight = idealWeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'Ideal Body Weight',
|
||||||
|
body: Padding(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 15.0, horizontal: 25.0),
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Container(
|
||||||
|
height: 800.0,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.all(10.0),
|
||||||
|
child: Texts(
|
||||||
|
'Calculates the ideal body weight based on height, Weight, and Body Size',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 2.0,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
'Height',
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 335.0,
|
||||||
|
height: 60.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.0, horizontal: 8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 60.0,
|
||||||
|
foregroundDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueGrey,
|
||||||
|
width: 2.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: Text(height.toString()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 38.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment:
|
||||||
|
MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_up,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (height < 250)
|
||||||
|
height++;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_down,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (height > 0) height--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Slider(
|
||||||
|
value: height.toDouble(),
|
||||||
|
min: 0,
|
||||||
|
max: 250,
|
||||||
|
onChanged: (double newValue) {
|
||||||
|
setState(() {
|
||||||
|
height = newValue.round();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
activeColor: Color(0xffC5272D),
|
||||||
|
inactiveColor: Color(0xffF3C5C6),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Texts('Select Unit'),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorHeight(1);
|
||||||
|
isHeightCm = true;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset: Offset(
|
||||||
|
0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: cmCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 0.0, horizontal: 18.0),
|
||||||
|
child: Center(child: Texts('CM')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorHeight(2);
|
||||||
|
isHeightCm = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: ftCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset: Offset(
|
||||||
|
0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding:
|
||||||
|
const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
|
child: Center(child: Texts('Ft')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 45.0,
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 2.0,
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
'Weight',
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: 335.0,
|
||||||
|
height: 60.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.0, horizontal: 8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
width: 60.0,
|
||||||
|
foregroundDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blueGrey,
|
||||||
|
width: 2.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: Text(weight.toString()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 38.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment:
|
||||||
|
MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
width: 0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_up,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (weight < 250)
|
||||||
|
weight++;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
child: Icon(
|
||||||
|
Icons.arrow_drop_down,
|
||||||
|
size: 18.0,
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (weight > 0) weight--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Slider(
|
||||||
|
value: weight.toDouble(),
|
||||||
|
min: 0,
|
||||||
|
max: 250,
|
||||||
|
onChanged: (double newValue) {
|
||||||
|
setState(() {
|
||||||
|
weight = newValue.round();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
activeColor: Color(0xffC5272D),
|
||||||
|
inactiveColor: Color(0xffF3C5C6),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Texts('Select Unit'),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorWeight(1);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset: Offset(
|
||||||
|
0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
color: kgCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 0.0, horizontal: 18.0),
|
||||||
|
child: Center(child: Texts('KG')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
updateColorWeight(2);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 55.0,
|
||||||
|
width: 150.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: lbCard,
|
||||||
|
borderRadius: BorderRadius.circular(3.0),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.5),
|
||||||
|
spreadRadius: 3,
|
||||||
|
blurRadius: 7,
|
||||||
|
offset: Offset(
|
||||||
|
0, 3), // changes position of shadow
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding:
|
||||||
|
const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
|
child: Center(child: Texts('LB')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 45.0,
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 2.0,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.0,
|
||||||
|
),
|
||||||
|
Texts('Body Frame Size'),
|
||||||
|
Container(
|
||||||
|
width: 300,
|
||||||
|
child: DropdownButton<String>(
|
||||||
|
value: dropdownValue,
|
||||||
|
icon: Icon(Icons.arrow_downward),
|
||||||
|
iconSize: 24,
|
||||||
|
elevation: 16,
|
||||||
|
style: TextStyle(color: Colors.black87),
|
||||||
|
underline: Container(
|
||||||
|
height: 2,
|
||||||
|
color: Colors.black54,
|
||||||
|
),
|
||||||
|
onChanged: (String newValue) {
|
||||||
|
setState(() {
|
||||||
|
dropdownValue = newValue;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
items: <String>[
|
||||||
|
'Small(fingers overlap)',
|
||||||
|
'Medium(fingers touch)',
|
||||||
|
'Large(fingers don\'n touch)',
|
||||||
|
].map<DropdownMenuItem<String>>((String value) {
|
||||||
|
return DropdownMenuItem<String>(
|
||||||
|
value: value,
|
||||||
|
child: Text(value),
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 30.0,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 100.0,
|
||||||
|
width: 350.0,
|
||||||
|
child: Button(
|
||||||
|
label: 'CALCULATE',
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
// calculateBmr();
|
||||||
|
// calculateCalories();
|
||||||
|
calculateIdealWeight();
|
||||||
|
|
||||||
|
print(idealWeight);
|
||||||
|
//print(overWeightBy);
|
||||||
|
{
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => IdealBodyResult(
|
||||||
|
idealBodyWeight: idealWeight,
|
||||||
|
minRange: minRange,
|
||||||
|
mixRange: maxRange,
|
||||||
|
overWeightBy: overWeightBy,
|
||||||
|
textResult: textResult,
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,170 @@
|
|||||||
|
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
class IdealBodyResult extends StatelessWidget {
|
||||||
|
final double idealBodyWeight;
|
||||||
|
final double minRange;
|
||||||
|
final double mixRange;
|
||||||
|
final double overWeightBy;
|
||||||
|
final String textResult;
|
||||||
|
|
||||||
|
IdealBodyResult(
|
||||||
|
{this.idealBodyWeight,
|
||||||
|
this.minRange,
|
||||||
|
this.mixRange,
|
||||||
|
this.overWeightBy,
|
||||||
|
this.textResult});
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'Ideal Body Weight',
|
||||||
|
body: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
'Ideal weight range is',
|
||||||
|
fontSize: 23.0,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
minRange.toStringAsFixed(1),
|
||||||
|
fontSize: 30.0,
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(top: 8.0, left: 4.0),
|
||||||
|
child: Text(
|
||||||
|
'Kg',
|
||||||
|
style: TextStyle(color: Colors.red),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Icon(
|
||||||
|
Icons.arrow_forward,
|
||||||
|
color: Colors.red,
|
||||||
|
size: 55.0,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
mixRange.toStringAsFixed(1),
|
||||||
|
fontSize: 30.0,
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(top: 8.0, left: 4.0),
|
||||||
|
child: Text(
|
||||||
|
'Kg',
|
||||||
|
style: TextStyle(color: Colors.red),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
overWeightBy >= 0 && overWeightBy <= 10
|
||||||
|
? Column(
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
'Congratulations! The current weight is\n perfect and considered healthy',
|
||||||
|
fontSize: 20.0,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: overWeightBy > 10 && overWeightBy < 17
|
||||||
|
? Column(
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
'This means that the weight is a little bit more than ideal weight by'),
|
||||||
|
Texts(overWeightBy.toStringAsFixed(1)),
|
||||||
|
Texts(
|
||||||
|
'May wish to consult with the doctor for medical help. Click to view our list of Doctors'),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: overWeightBy >= 18
|
||||||
|
? Container(
|
||||||
|
height: 250.0,
|
||||||
|
width: 350,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
'Means that you suffer from excessive\n obesity by',
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 55.0,
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
overWeightBy.toStringAsFixed(1),
|
||||||
|
fontSize: 40.0,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 25.0,
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
'May wish to consult with the doctor for\n medical help. Click to view our list of\n Doctors'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: overWeightBy < -18
|
||||||
|
? Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Texts(
|
||||||
|
'Under Weight',
|
||||||
|
fontSize: 18.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 55.0,
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
overWeightBy.toStringAsFixed(1),
|
||||||
|
fontSize: 20.0,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: Container(
|
||||||
|
height: 250.0,
|
||||||
|
width: 350.0,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
'under wheight',
|
||||||
|
fontSize: 20.0,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 55.0,
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
overWeightBy.toStringAsFixed(1),
|
||||||
|
fontSize: 20.0,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 25.0,
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
'May wish to consult with the doctor for\n medical help. Click to view our list of\n Doctors'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 350,
|
||||||
|
child: Button(
|
||||||
|
label: 'See List Of Doctors',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,279 @@
|
|||||||
|
import 'file:///C:/Users/admin/AndroidStudioProjects/diplomatic-quarter/lib/pages/AlHabibMedicalService/health_calculator/bmi_calculator/bmi_calculator.dart';
|
||||||
|
import 'file:///C:/Users/admin/AndroidStudioProjects/diplomatic-quarter/lib/pages/AlHabibMedicalService/health_calculator/calorie_calculator/calorie_calculator.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/body_fat/body_fat.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
|
||||||
|
import 'health_calculator/bmr_calculator/bmr_calculator.dart';
|
||||||
|
import 'health_calculator/ideal_body/ideal_body.dart';
|
||||||
|
|
||||||
|
class HealthCalculators extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_HealthCalculatorsState createState() => _HealthCalculatorsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _HealthCalculatorsState extends State<HealthCalculators>
|
||||||
|
with SingleTickerProviderStateMixin {
|
||||||
|
TabController _tabController;
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_tabController = TabController(length: 2, vsync: this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
_tabController.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBarTitle: 'Health Calculators',
|
||||||
|
body: Scaffold(
|
||||||
|
extendBodyBehindAppBar: true,
|
||||||
|
appBar: PreferredSize(
|
||||||
|
preferredSize: Size.fromHeight(70.0),
|
||||||
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
|
child: Container(
|
||||||
|
height: 60.0,
|
||||||
|
margin: EdgeInsets.only(top: 10.0),
|
||||||
|
width: MediaQuery.of(context).size.width * 1.9,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
color: Theme.of(context).dividerColor,
|
||||||
|
width: 5.7,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: TabBar(
|
||||||
|
controller: _tabController,
|
||||||
|
isScrollable: true,
|
||||||
|
indicatorWeight: 4.0,
|
||||||
|
indicatorColor: Colors.red,
|
||||||
|
labelColor: Theme.of(context).primaryColor,
|
||||||
|
labelPadding:
|
||||||
|
EdgeInsets.symmetric(horizontal: 13.0, vertical: 2.0),
|
||||||
|
unselectedLabelColor: Colors.grey,
|
||||||
|
tabs: <Widget>[
|
||||||
|
Container(
|
||||||
|
width: MediaQuery.of(context).size.width * 0.35,
|
||||||
|
child: Center(
|
||||||
|
child: Texts('General Health'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: MediaQuery.of(context).size.width * 0.35,
|
||||||
|
child: Center(
|
||||||
|
child: Texts("Women's Health"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: TabBarView(
|
||||||
|
physics: BouncingScrollPhysics(),
|
||||||
|
controller: _tabController,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
height: 80,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
FadePage(page: BMICalculator()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: MedicalProfileItem(
|
||||||
|
title: 'BMI',
|
||||||
|
imagePath: 'bmi_health_calculator.png',
|
||||||
|
subTitle: 'Calculators',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
FadePage(
|
||||||
|
page: CalorieCalculator(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: MedicalProfileItem(
|
||||||
|
title: 'Calories',
|
||||||
|
imagePath: 'calories-calculator.png',
|
||||||
|
subTitle: 'Calculators',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
FadePage(
|
||||||
|
page: BmrCalculator(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: MedicalProfileItem(
|
||||||
|
title: 'BMR',
|
||||||
|
imagePath: 'BMR_calculator.png',
|
||||||
|
subTitle: 'Calculators',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
FadePage(
|
||||||
|
page: IdealBody(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: MedicalProfileItem(
|
||||||
|
title: 'Ideal Body',
|
||||||
|
imagePath: 'body_weight.png',
|
||||||
|
subTitle: 'Weight',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
FadePage(
|
||||||
|
page: BodyFat(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: MedicalProfileItem(
|
||||||
|
title: 'Body',
|
||||||
|
imagePath: 'body_fat.png',
|
||||||
|
subTitle: 'Fat',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
FadePage(
|
||||||
|
page: Carbs(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: MedicalProfileItem(
|
||||||
|
title: 'Carbohydrate',
|
||||||
|
imagePath: 'carb_protein.png',
|
||||||
|
subTitle: 'Protein Fat',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
height: 80,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
// Navigator.push(
|
||||||
|
// context,
|
||||||
|
// FadePage(page: BloodSugar()),
|
||||||
|
// );
|
||||||
|
},
|
||||||
|
child: MedicalProfileItem(
|
||||||
|
title: 'Ovulation',
|
||||||
|
imagePath: 'ovulation_period_icon.png',
|
||||||
|
subTitle: 'Period',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
// Navigator.push(
|
||||||
|
// context,
|
||||||
|
// FadePage(
|
||||||
|
// page: BloodCholesterol(),
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
},
|
||||||
|
child: MedicalProfileItem(
|
||||||
|
title: 'Delivery',
|
||||||
|
imagePath: 'delivery_date_icon.png',
|
||||||
|
subTitle: 'Due Date',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|