flutter 비만도 계산기 3.0 에서 실행
2024. 2. 28. 22:50ㆍIT & Programming/Dart and Flutter
비만도 계산기
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'BMI Demo',
theme: ThemeData(
primarySwatch: Colors.green,
),
home: BmiMain(),
);
}
}
class BmiMain extends StatefulWidget {
const BmiMain({super.key});
@override
State<BmiMain> createState() => _BmiMainState();
}
class _BmiMainState extends State<BmiMain> {
final _formKey = GlobalKey<FormState>();
final _heightController = TextEditingController();
final _weightController = TextEditingController();
@override
void dispose(){
_heightController.dispose();
_weightController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('비만도 계산기'),
),
body: Container(
padding: const EdgeInsets.all(16.8),
child: Form(
key: _formKey ,
child: Column(
children: [
TextFormField(
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: '키',
),
controller: _heightController,
keyboardType: TextInputType.number,
validator:(value){
if(value!.trim().isEmpty){
return '키를 입력하세요';
}
return null;
}
),
SizedBox(
height: 16.8,
),
TextFormField(
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: '몸무게',
),
controller: _weightController,
keyboardType: TextInputType.number,
validator:(value){
if(value!.trim().isEmpty){
return '몸무게를 입력하세요';
}
return null;
}
),
Container(
margin: EdgeInsets.only(top: 16.8),
alignment: Alignment.centerRight,
child: ElevatedButton(
onPressed: (){
if (_formKey.currentState!.validate()){
//검증처리
Navigator.push(
context,
MaterialPageRoute(builder: (context)=> BmiResult(
double.parse(_heightController.text.trim()),
double.parse(_weightController.text.trim()))),
);
}
},
child: Text('결과'),
),
)
],
),
),
),
);
}
}
class BmiResult extends StatelessWidget {
final double height; // 키
final double weight; // 몸무게
BmiResult(this.height, this.weight); // 생성자
@override
Widget build(BuildContext context) {
final bmi = weight / ((height / 100) * (height / 100));
print('bmi : $bmi');
return Scaffold(
appBar: AppBar(
title: Text('비만도 계산기'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_calcBmi(bmi),
style: TextStyle(fontSize: 36),
),
SizedBox(
height: 16,
),
_buildIcon(bmi),
],
),
),
);
}
String _calcBmi(double bmi) {
var result = '저체중';
if (bmi >= 35) {
result = '고도비만';
} else if (bmi >= 30) {
result = '2 단계 비만';
} else if (bmi >= 25) {
result = '1 단계 비만';
} else if (bmi >= 23) {
result = '과체중';
} else if (bmi >= 18.5) {
result = '정상';
}
return result;
}
Widget _buildIcon(double bmi) {
if (bmi >= 23) {
return Icon(
Icons.sentiment_very_dissatisfied,
color: Colors.red,
size: 100,
);
} else if (bmi >= 18.5) {
return Icon(
Icons.sentiment_satisfied,
color: Colors.green,
size: 100,
);
} else {
return Icon(
Icons.sentiment_dissatisfied,
color: Colors.orange,
size: 100,
);
}
}
}
반응형
'IT & Programming > Dart and Flutter' 카테고리의 다른 글
[Flutter] 2024년 어떻게? 계속될것인가? (0) | 2024.05.03 |
---|---|
[flutter] base64 encodeing (0) | 2024.03.26 |