Aplikasi Praktis untuk Menghitung dan Memantau Kesehatan Tubuh
BMI-Evan Raka: Aplikasi Praktis untuk Menghitung dan Memantau Kesehatan Tubuh
Menjaga kesehatan tubuh merupakan langkah penting untuk menjalani hidup yang lebih produktif dan berkualitas. Salah satu cara sederhana untuk mengetahui kondisi tubuh adalah dengan menghitung Body Mass Index (BMI). Kini, proses tersebut menjadi lebih mudah berkat hadirnya aplikasi BMI-Evan Raka.
Aplikasi ini dirancang untuk membantu pengguna menghitung BMI secara cepat dan akurat, mengetahui kategori berat badan, serta memperoleh rekomendasi gaya hidup sehat yang sesuai dengan kondisi tubuh masing-masing.
Apa Itu BMI?
BMI (Body Mass Index) adalah indikator yang digunakan untuk menilai apakah berat badan seseorang termasuk kategori kurus, normal, gemuk, atau obesitas. Perhitungan BMI didasarkan pada perbandingan antara berat badan dan tinggi badan.
Rumus BMI adalah sebagai berikut:
BMI = Berat Badan (kg) / (Tinggi Badan (m))²
Dengan mengetahui nilai BMI, seseorang dapat memahami kondisi tubuhnya dan mengambil langkah yang tepat dalam menjaga pola makan, aktivitas fisik, serta gaya hidup sehat.
Mengapa BMI Penting?
Mengetahui nilai BMI memiliki banyak manfaat, di antaranya:
Mendeteksi risiko penyakit
BMI yang terlalu tinggi atau terlalu rendah dapat meningkatkan risiko penyakit seperti diabetes, hipertensi, dan gangguan metabolisme.Menentukan pola makan dan olahraga
Hasil BMI dapat dijadikan acuan dalam menentukan jenis makanan serta intensitas olahraga yang sesuai.Memantau kesehatan secara berkala
BMI membantu memantau perubahan berat badan dan menilai efektivitas pola hidup sehat yang dijalani.
Fitur Unggulan Aplikasi BMI-Evan Raka
Aplikasi BMI-Evan Raka dilengkapi dengan berbagai fitur yang memudahkan pengguna, antara lain:
Pemilihan Gender
Pengguna dapat memilih jenis kelamin pria atau wanita untuk hasil perhitungan yang lebih sesuai.Input Berat dan Tinggi Badan
Berat badan (kg) dan tinggi badan (cm) dapat dimasukkan dengan mudah melalui tampilan yang sederhana.Perhitungan BMI Otomatis
Aplikasi langsung menampilkan nilai BMI setelah tombol hitung ditekan.Kategori dan Penjelasan Lengkap
Setiap hasil BMI disertai penjelasan mengenai sebab, akibat, dan potensi risiko kesehatan.Rekomendasi Hidup Sehat
Aplikasi memberikan saran pola makan, olahraga, dan kebiasaan sehat berdasarkan kategori BMI.Desain Modern dan Elegan
Menggunakan tema warna biru navy yang nyaman dipandang dan mudah digunakan.
Kategori BMI dan Penjelasannya
BMI dikelompokkan ke dalam beberapa kategori sebagai berikut:
1. Kurus (BMI < 18,5)
Sebab: Asupan kalori kurang dan metabolisme tubuh tinggi
Akibat: Tubuh mudah lelah dan daya tahan tubuh menurun
Penyakit Potensial: Anemia, gangguan pertumbuhan, osteoporosis
Rekomendasi: Menambah asupan protein dan karbohidrat, latihan beban, serta istirahat yang cukup
2. Normal (BMI 18,5 – 24,9)
Sebab: Pola makan dan aktivitas fisik seimbang
Akibat: Risiko penyakit relatif rendah
Penyakit Potensial: Kondisi tubuh optimal
Rekomendasi: Mempertahankan pola hidup sehat dan olahraga secara rutin
3. Gemuk (BMI 25 – 29,9)
Sebab: Asupan kalori berlebih dan kurang aktivitas fisik
Akibat: Risiko kolesterol dan diabetes meningkat
Penyakit Potensial: Hipertensi, diabetes tipe 2, penyakit jantung
Rekomendasi: Mengurangi makanan berlemak, melakukan olahraga kardio, dan mengatur jadwal makan
4. Obesitas (BMI ≥ 30)
Sebab: Pola makan tidak terkontrol dan minim aktivitas
Akibat: Risiko penyakit jantung dan tekanan darah tinggi
Penyakit Potensial: Stroke, jantung koroner, diabetes berat
Rekomendasi: Konsultasi dengan ahli gizi, mengatur defisit kalori secara bertahap, dan melakukan aktivitas fisik ringan
Tips Menjaga BMI Ideal
Berikut beberapa langkah sederhana untuk menjaga BMI tetap ideal:
Berolahraga secara teratur minimal 30 menit setiap hari
Mengonsumsi makanan bergizi seimbang
Menghindari makanan berlemak dan tinggi gula
Mencukupi waktu tidur 7–8 jam setiap malam
Memantau BMI secara rutin menggunakan aplikasi BMI-Evan Raka
Code yang Saya Gunakan
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( debugShowCheckedModeBanner: false, title: 'BMI-Calculator', theme: ThemeData( primarySwatch: Colors.blue, fontFamily: 'Roboto', ), home: const BmiPage(), ); }}
class BmiPage extends StatefulWidget { const BmiPage({super.key});
@override State<BmiPage> createState() => _BmiPageState();}
class _BmiPageState extends State<BmiPage> { final TextEditingController beratController = TextEditingController(); final TextEditingController tinggiController = TextEditingController();
String gender = "Pria"; double bmi = 0; String kategori = ""; String sebab = ""; String akibat = ""; String penyakit = "";
List<Map<String, dynamic>> saranList = [];
// Mengubah warna kategori normal menjadi biru Color getKategoriColor() { if (bmi < 18.5) return Colors.orange; if (bmi < 24.9) return Colors.blue; // ganti hijau -> biru if (bmi < 29.9) return Colors.deepOrange; return Colors.red; }
void hitungBMI() { double berat = double.tryParse(beratController.text) ?? 0; double tinggiCm = double.tryParse(tinggiController.text) ?? 0; double tinggiM = tinggiCm / 100;
setState(() { if (tinggiM > 0) { bmi = berat / (tinggiM * tinggiM); }
if (bmi < 18.5) { kategori = "Kurus"; sebab = "Asupan kalori kurang, metabolisme tinggi"; akibat = "Mudah lelah, imun tubuh menurun"; penyakit = "Anemia, gangguan pertumbuhan, osteoporosis";
saranList = [ {"text": "Tambah protein & karbohidrat", "icon": Icons.restaurant}, {"text": "Latihan beban rutin", "icon": Icons.fitness_center}, {"text": "Istirahat cukup", "icon": Icons.bedtime}, ]; } else if (bmi < 24.9) { kategori = "Normal"; sebab = "Pola makan & aktivitas seimbang"; akibat = "Risiko penyakit rendah"; penyakit = "Kesehatan optimal";
saranList = [ {"text": "Pertahankan pola hidup sehat", "icon": Icons.health_and_safety}, {"text": "Olahraga teratur", "icon": Icons.fitness_center}, {"text": "Cukupi kebutuhan air", "icon": Icons.water_drop}, ]; } else if (bmi < 29.9) { kategori = "Gemuk"; sebab = "Asupan kalori berlebih, kurang aktivitas"; akibat = "Risiko kolesterol & diabetes meningkat"; penyakit = "Hipertensi, diabetes tipe 2, penyakit jantung";
saranList = [ {"text": "Kurangi makanan berlemak", "icon": Icons.no_food}, {"text": "Cardio 30–45 menit", "icon": Icons.directions_run}, {"text": "Atur jam makan", "icon": Icons.schedule}, ]; } else { kategori = "Obesitas"; sebab = "Pola makan tidak terkontrol"; akibat = "Risiko jantung & hipertensi tinggi"; penyakit = "Stroke, jantung koroner, diabetes berat";
saranList = [ {"text": "Konsultasi ahli gizi", "icon": Icons.medical_services}, {"text": "Defisit kalori bertahap", "icon": Icons.trending_down}, {"text": "Aktivitas fisik ringan", "icon": Icons.directions_walk}, ]; } }); }
Widget genderCard(String value, IconData icon) { final bool isSelected = gender == value;
return Expanded( child: GestureDetector( onTap: () => setState(() => gender = value), child: AnimatedContainer( duration: const Duration(milliseconds: 300), padding: const EdgeInsets.all(18), decoration: BoxDecoration( color: isSelected ? Colors.blue : Colors.white, // biru jika dipilih borderRadius: BorderRadius.circular(20), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 10, offset: const Offset(0, 6), ), ], ), child: Column( children: [ Icon( icon, size: 42, color: isSelected ? Colors.white : Colors.blue, ), const SizedBox(height: 8), Text( value, style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: isSelected ? Colors.white : Colors.blue, ), ), ], ), ), ), ); }
Widget infoTile(IconData icon, String title, String value) { return Row( children: [ CircleAvatar( radius: 18, backgroundColor: getKategoriColor().withOpacity(0.15), child: Icon(icon, color: getKategoriColor()), ), const SizedBox(width: 12), Expanded( child: RichText( text: TextSpan( style: const TextStyle(color: Colors.black), children: [ TextSpan( text: "$title: ", style: const TextStyle(fontWeight: FontWeight.bold), ), TextSpan(text: value), ], ), ), ), ], ); }
@override Widget build(BuildContext context) { return Scaffold( body: Container( decoration: const BoxDecoration( gradient: LinearGradient( colors: [Color(0xFF0D47A1), Color(0xFF1976D2)], // Navy ke biru cerah begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), child: SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( children: [ const Text( "BMI-Evan Raka", style: TextStyle( fontSize: 28, fontWeight: FontWeight.bold, color: Colors.white, ), ), const SizedBox(height: 20),
Row( children: [ genderCard("Pria", Icons.male), const SizedBox(width: 12), genderCard("Wanita", Icons.female), ], ),
const SizedBox(height: 20),
Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), ), elevation: 6, child: Padding( padding: const EdgeInsets.all(16), child: Column( children: [ TextField( controller: beratController, keyboardType: TextInputType.number, decoration: const InputDecoration( labelText: "Berat Badan (kg)", prefixIcon: Icon(Icons.monitor_weight), border: OutlineInputBorder(), ), ), const SizedBox(height: 12), TextField( controller: tinggiController, keyboardType: TextInputType.number, decoration: const InputDecoration( labelText: "Tinggi Badan (cm)", prefixIcon: Icon(Icons.height), border: OutlineInputBorder(), ), ), const SizedBox(height: 20), SizedBox( width: double.infinity, height: 50, child: ElevatedButton( onPressed: hitungBMI, child: const Text("Hitung BMI"), ), ), ], ), ), ),
const SizedBox(height: 20),
if (bmi > 0) Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), ), elevation: 6, child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Center( child: Text( bmi.toStringAsFixed(1), style: TextStyle( fontSize: 42, fontWeight: FontWeight.bold, color: getKategoriColor(), ), ), ), Center( child: Text( kategori, style: TextStyle( fontSize: 18, fontWeight: FontWeight.w600, color: getKategoriColor(), ), ), ),
const Divider(height: 30),
infoTile(Icons.help_outline, "Sebab", sebab), const SizedBox(height: 12), infoTile(Icons.warning_amber, "Akibat", akibat), const SizedBox(height: 12), infoTile(Icons.dangerous, "Penyakit / Dampak Buruk", penyakit),
const Divider(height: 30),
const Text( "Rekomendasi:", style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 12), ...saranList.map( (item) => Padding( padding: const EdgeInsets.symmetric(vertical: 8), child: Row( children: [ CircleAvatar( radius: 18, backgroundColor: getKategoriColor().withOpacity(0.15), child: Icon( item["icon"], color: getKategoriColor(), size: 20, ), ), const SizedBox(width: 12), Expanded(child: Text(item["text"])), ], ), ), ), ], ), ), ), ], ), ), ), ), ); }}
Ini Gambarnya
Kesimpulan
BMI-Evan Raka bukan sekadar aplikasi penghitung BMI, tetapi juga menjadi panduan praktis untuk menjaga kesehatan tubuh. Dengan informasi yang lengkap, tampilan yang menarik, serta rekomendasi yang bermanfaat, aplikasi ini cocok digunakan oleh semua kalangan.
Mulailah hidup sehat dari sekarang dengan mengetahui BMI Anda dan menerapkan pola hidup yang lebih baik. Langkah kecil hari ini dapat membawa manfaat besar bagi kesehatan di masa depan 🌟
https://zi1ha062ii1hb.zapp.page/#/
Komentar
Posting Komentar