mirror of
https://github.com/rjNemo/bmi_calculator_app
synced 2026-06-06 02:16:41 +00:00
feat: layout
This commit is contained in:
parent
1bb30cce2a
commit
5a7ac79d22
2 changed files with 106 additions and 31 deletions
12
README.md
12
README.md
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
Compute and track your Body Mass Index and Body Fat Percentage
|
Compute and track your Body Mass Index and Body Fat Percentage
|
||||||
|
|
||||||
## TODO
|
## Features
|
||||||
|
|
||||||
- [ ] bmi between 18.5 and 25 : green - normal
|
- [x] bmi between 18.5 and 25 : green - normal
|
||||||
- [ ] bmi below 18.5 : pink - too skinny
|
- [x] bmi below 18.5 : pink - too skinny
|
||||||
- [ ] bmi between 25 and 30 : yellow - overweight
|
- [x] bmi between 25 and 30 : yellow - overweight
|
||||||
- [ ] bmi between 30 and 40 : orange - obesity
|
- [x] bmi between 30 and 40 : orange - obesity
|
||||||
- [ ] bmi over 40 : red - morbid obesity
|
- [x] bmi over 40 : red - morbid obesity
|
||||||
- [ ] bmi tracker: date, value, graph
|
- [ ] bmi tracker: date, value, graph
|
||||||
- [ ] profile: save age, height, genre, local storage
|
- [ ] profile: save age, height, genre, local storage
|
||||||
- [x] bmi on second screen
|
- [x] bmi on second screen
|
||||||
|
|
|
||||||
125
lib/result.dart
125
lib/result.dart
|
|
@ -4,16 +4,47 @@ class Results {
|
||||||
int bodyMassIndex;
|
int bodyMassIndex;
|
||||||
int bodyFatPercentage;
|
int bodyFatPercentage;
|
||||||
|
|
||||||
Results(this.bodyMassIndex, this.bodyFatPercentage);
|
late Map results;
|
||||||
|
|
||||||
String category() {
|
Results(this.bodyMassIndex, this.bodyFatPercentage) {
|
||||||
if (bodyMassIndex > 12) {
|
results = _results();
|
||||||
return "Normal";
|
|
||||||
}
|
|
||||||
return "Too much";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Icon icon() => Icon(Icons.female);
|
Map _results() {
|
||||||
|
if (bodyMassIndex > 40) {
|
||||||
|
return {
|
||||||
|
"category": "Morbid obesity",
|
||||||
|
"icon": "🤒",
|
||||||
|
"color": Colors.red,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (bodyMassIndex > 30) {
|
||||||
|
return {
|
||||||
|
"category": "Obesity",
|
||||||
|
"icon": "🤕",
|
||||||
|
"color": Colors.orange,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (bodyMassIndex > 25) {
|
||||||
|
return {
|
||||||
|
"category": "Overweight",
|
||||||
|
"icon": "🛑",
|
||||||
|
"color": Colors.yellow,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (bodyMassIndex > 18) {
|
||||||
|
return {
|
||||||
|
"category": "Normal",
|
||||||
|
"icon": "✓",
|
||||||
|
"color": Colors.green,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
"category": "Too skinny",
|
||||||
|
"icon": "🤔",
|
||||||
|
"color": Colors.pink,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ResultPage extends StatelessWidget {
|
class ResultPage extends StatelessWidget {
|
||||||
|
|
@ -21,32 +52,76 @@ class ResultPage extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final results = ModalRoute.of(context)!.settings.arguments as Results;
|
final args = ModalRoute.of(context)!.settings.arguments as Results;
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text("Your results"),
|
title: Text("Your results"),
|
||||||
),
|
),
|
||||||
body: Center(
|
body: Center(
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.all(20),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
results.icon(), //
|
Text(
|
||||||
Text("Below are your results given your height, age and gender."),
|
"Your current BMI: ${args.bodyMassIndex}",
|
||||||
Text(
|
style: TextStyle(fontSize: 28.0),
|
||||||
"Your BMI is ${results.bodyMassIndex}, and your BFP is ${results.bodyFatPercentage}, indicating your weight is in the ${results.category()} for adults of your height.",
|
),
|
||||||
|
Text(
|
||||||
|
"Your current BFP: ${args.bodyFatPercentage}%",
|
||||||
|
style: TextStyle(fontSize: 28.0),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
args.results["icon"],
|
||||||
|
style: TextStyle(fontSize: 40.0),
|
||||||
|
),
|
||||||
|
RichText(
|
||||||
|
text: TextSpan(
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16.0,
|
||||||
|
color: Colors.black,
|
||||||
|
),
|
||||||
|
children: <TextSpan>[
|
||||||
|
TextSpan(text: 'Your BMI is '),
|
||||||
|
TextSpan(
|
||||||
|
text: '${args.bodyMassIndex}',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: args.results["color"],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TextSpan(text: ', and your BFP is '),
|
||||||
|
TextSpan(
|
||||||
|
text: '${args.bodyFatPercentage}%',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: args.results["color"],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TextSpan(text: ', indicating your weight is in the '),
|
||||||
|
TextSpan(
|
||||||
|
text: '${args.results["category"]}',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: args.results["color"],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TextSpan(text: ' range for adults of your height.'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"Maintaining a healthy weight may reduce the risk of chronic diseases associated with overweight and obesity.",
|
||||||
|
),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: () => Navigator.pop(context),
|
||||||
|
child: Text('Recalculate BMI'),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
Text(
|
),
|
||||||
"Maintaining a healthy weight may reduce the risk of chronic diseases associated with overweight and obesity.",
|
),
|
||||||
),
|
|
||||||
ElevatedButton(
|
|
||||||
onPressed: () {
|
|
||||||
Navigator.pop(context);
|
|
||||||
},
|
|
||||||
child: Text('Recalculate BMI'),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue