Flutter: ສ້າງແອັບ BMI ທີ່ບອກວ່າທ່ານຕຸ້ຍຫລືຈ່ອຍ

ໃນບົດນີ້ເຮົາຈະມາອະທິບາຍເຖິງການສ້າງ ແອັບ BMI ທີ່ສາມາດບອກວ່ານໍ້າໜັກທ່ານປະຈຸບັນນັ້ນແມ່ນໄດ້ຕາມມາດຕະຖານ ຫລື ຈ່ອຍ ຫລື ຕຸ້ຍ.
ຄ່າ BMI (Body Mass Index) ແມ່ນດັດສະນີ ທີ່ໃຊ້ວັດແທກຄວາມສົມດຸນ ຂອງນໍ້າໜັກ ແລະ ສ່ວນສູງ, ເຊີ່ງສາມາດລະບຸໄດ້ວ່າ ຕອນນີ້ຮູບຮ່າງຂອງຄົນໆນັ້ນ ຢູ່ໃນລະດັບໃດ ຕັ້ງແຕ່ ຈ່ອຍກ່ອນມາດຕະຖານ ຈົນເຖິງ ເປັນໂລກຕຸ້ຍອັນຕະລາຍ. ປະໂຫຍດຂອງການວັດແທກຄ່າ BMI ແມ່ນເພື່ອເບີ່ງອັດຕາສ່ຽງ ຕໍ່ການເກີດໂລກຕ່າງໆ ກວດສອບພາວະໄຂມັນ ແລະ ຄວາມຕຸ້ຍ. ດັ່ງນັ້ນ, ການເຮັດໃຫ້ຮ່າງກາຍ ຢູ່ໃນເກນມາດຕະຖານ ຈື່ງມີຄວາມສໍາຄັນຢ່າງຍີ່ງ ຕໍ່ກັບຜູ້ທີ່ຕ້ອງການຮັກສາສຸຂະພາບໃນໄລຍະຍາວ.
ວິທີແລະສູດຄໍານວນ
BMI = ນໍ້າໜັກ (Kg) / [ລວງສູງ (Meters)]2

ເກນຂອງຄ່າ BMI
- BMI < 18.5, Underweight ນໍ້າໜັກຕໍ່າກ່ວາມາດຕະຖານ
- BMI ຢູ່ລະຫວ່າງ 18.5 ຫາ 24.9, Normal ສົມສ່ວນ
- BMI ຢູ່ລະຫວ່າງ 25 ຫາ 29.9, Overweight ນໍ້າຫນັກຫລາຍກວ່າມາດຕະຖານ
- BMI ຢູ່ລະຫວ່າງ 30 ຫາ 34.9, Obese ໂລກຕຸ້ຍ
- BMI < 35, Extremly Obese ໂລກຕຸ້ຍອັນຕະລາຍ

ໃນບົດນີ້ເຮົາຈະໃຊ້ Flutter ຂຽນແອັບທີ່ນໍາໃຊ້ສູດຄິດໄລ່ຂ້າງເທິງ, ຫລັງຈາກສໍາເລັດແລ້ວຈະມີໜ້າຕາດັ່ງນີ້:

ໃນການສ້າງແອັບນີ້ເຮົາຈະຮຽນຮູ້ການນໍາໃຊ້ Textfield ເພື່ອເພີ່ມ ແລະ ດຶງຂໍ້ມູນ, ການໃຊ້ Logic ໃນການຄໍານວນສູດ BMI ແລະ ການໃຊ້ເງື່ອນໄຂ ເພື່ອສະແດງວ່າຄ່າ BMI ນັ້ນຢູ່ໃນເກນໃດ.
Coding
User Input
ຢູ່ໃນໜ້າແອັບເຮົາຈະສ້າງ Container ຂື້ນມາ, ໃນນັ້ນເຮົາຈະສ້າງ 3 TextField ເພື່ອໃຫ້ຜູ້ໃຊ້ພິມ ອາຍຸ, ລວງສູງ, ນໍ້າໜັກ ແລະ 1 ປຸ່ມຄິດໄລ່.
ຢູ່ໃນ Widget TextField ເຮົາຈະສ້າງໂຕປ່ຽນ(_ageController, _heightController, _weightController) ທີ່ເປັນ controller ສໍາລັບໃຊ້ໄວ້ດຶງຄ່າເອົາໄປຄໍານວນ.
ຢຸ່ໃນ Widget FlatButton ເວລາທີ່ຜູ້ໃຊ້ກົດປຸ່ມ, ມັນຈະເອີ້ນຟັງຊັນ calculateBMI() ເພື່ອຄິດໄລ່ຕາມສູດຄໍານວນຂ້າງເທິງ.
Logic
ຟັງຊັນ calculateBMI() ແມ່ນໃຊ້ການຄິດໄລ່ຄ່າ BMI. ຟັງຊັນນີ້ຈະຢູ່ໃນ setState() ຍ້ອນວ່າມັນເປັນ StatefulWidget.
ໃນເບື້ອງຕົນລະບົບຈະດຶງຂໍ້ມູນຈາກ TextField ເຊີ່ງເປັນໂຕໜັງສື, ແລ້ວມາປ່ຽນເປັນ int ຫລື double ດ້ວຍ parse.
ຫລັງຈາກນັ້ນລະບົບຈະຄໍານວນຕາມສູດຄິດໄລ່, ແລ້ວໃຊ້ if condition ເພື່ອແຍກປະເພດຕາມເກນຂອງ BMI.
Result
ສຸດທ້າຍລະບົບຈະສະແດງຄ່າ ແລະ ເກນ ຂອງ BMI ດ້ວຍໂຄດລຸ່ມນີ້:
Source Code ທັງໝົດສາມາດເບີ່ງໄດ້ທີ່ GitHub
ອ້າງອີງ:
https://www.udemy.com/flutter-dart-the-complete-flutter-app-development-course/
