BMI CALCULATOR

 Membuat aplikasi calculator BMI



## **Apa itu BMI?**


BMI atau **Body Mass Index** adalah ukuran yang digunakan untuk menilai apakah berat badan Anda sehat berdasarkan tinggi badan. Rumusnya:


[

BMI = \frac{Berat\ Badan (kg)}{Tinggi\ Badan (m)^2}

]


**Kategori BMI:**


| BMI | Kategori |

| ----------- | -------- |

| < 18.5 | Kurus |

| 18.5 – 24.9 | Normal |

| 25 – 29.9 | Gemuk |

| ≥ 30 | Obesitas |


---


## **Tips Menjaga Berat Badan Sehat**


### 1. Jika BMI Anda **Kurus (<18.5)**


* Konsumsi **makanan tinggi protein**: telur, ayam, ikan, kacang-kacangan.

* Tambahkan **karbohidrat sehat**: nasi merah, kentang, oats.

* Latihan **strength training** untuk menambah massa otot.

* Jangan lewatkan **makanan utama** dan ngemil sehat.


### 2. Jika BMI Anda **Normal (18.5–24.9)**


* Pertahankan **pola makan seimbang**: protein, karbohidrat, lemak sehat.

* **Rutin olahraga** 3–5 kali per minggu.

* Tidur cukup (7–8 jam/hari) untuk menjaga metabolisme.


### 3. Jika BMI Anda **Gemuk (25–29.9)**


* Kurangi makanan tinggi gula dan lemak jenuh.

* Pilih makanan **rendah kalori tapi kaya serat**: sayur, buah, biji-bijian.

* Lakukan kombinasi **cardio + strength training** untuk membakar lemak.

* Minum cukup air, hindari minuman manis.


### 4. Jika BMI Anda **Obesitas (≥30)**


* Segera konsultasikan dengan **dokter atau ahli gizi**.

* Terapkan **diet seimbang** dengan pengawasan profesional.

* Olahraga ringan yang rutin: jalan cepat, berenang, atau bersepeda.

* Pantau berat badan secara berkala.


---


## **Tips Umum untuk Semua Orang**


* Catat makanan dan olahraga Anda untuk mengetahui kemajuan.

* Hindari diet ekstrem; fokus pada **kesehatan jangka panjang**.

* Tetap aktif secara fisik setiap hari, minimal 30 menit.

* Tidur cukup dan kelola stres untuk mendukung metabolisme tubuh.


---


### **Kesimpulan**


BMI adalah alat sederhana untuk **mengetahui status berat badan**, tapi **tidak menggantikan pemeriksaan medis**. Gunakan hasil BMI sebagai panduan awal dan kombinasikan dengan gaya hidup sehat untuk mendapatkan tubuh yang ideal dan sehat.


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,

      home: const BmiCalculator(),

    );

  }

}


class BmiCalculator extends StatefulWidget {

  const BmiCalculator({super.key});


  @override

  State<BmiCalculator> createState() => _BmiCalculatorState();

}


class _BmiCalculatorState extends State<BmiCalculator> {

  final TextEditingController nameController = TextEditingController();

  final TextEditingController ageController = TextEditingController();

  final TextEditingController weightController = TextEditingController();

  final TextEditingController heightController = TextEditingController();


  String gender = 'Laki-laki';

  double? bmi;

  String category = "";


  final Color softGreen = const Color(0xFFA7F3D0);


  void calculateBMI() {

    String weightText = weightController.text.trim();

    String heightText = heightController.text.trim();


    if (weightText.isEmpty || heightText.isEmpty) {

      ScaffoldMessenger.of(context).showSnackBar(

        const SnackBar(content: Text("Tolong masukkan berat & tinggi badan")),

      );

      return;

    }


    double? weight = double.tryParse(weightText);

    double? height = double.tryParse(heightText);


    if (weight == null || height == null || weight <= 0 || height <= 0) {

      ScaffoldMessenger.of(context).showSnackBar(

        const SnackBar(

            content: Text("Berat & tinggi harus berupa angka lebih dari 0")),

      );

      return;

    }


    height = height / 100;


    setState(() {

      bmi = weight! / (height! * height);


      if (bmi! < 18.5) {

        category = "Kurus";

      } else if (bmi! < 25) {

        category = "Normal";

      } else if (bmi! < 30) {

        category = "Gemuk";

      } else {

        category = "Obesitas";

      }

    });

  }


  @override

  Widget build(BuildContext context) {

    // Responsif ukuran layar

    double screenWidth = MediaQuery.of(context).size.width;

    double screenHeight = MediaQuery.of(context).size.height;

    double padding = screenWidth * 0.05;

    double fontSize = screenWidth * 0.045;

    double buttonHeight = screenHeight * 0.07;


    return Scaffold(

      backgroundColor: softGreen.withOpacity(0.2),

      appBar: AppBar(

        title: const Text("BMI Calculator"),

        backgroundColor: softGreen,

      ),

      body: SingleChildScrollView(

        padding: EdgeInsets.all(padding),

        child: Column(

          children: [

            // Nama

            TextField(

              controller: nameController,

              decoration: InputDecoration(

                labelText: "Nama",

                labelStyle: TextStyle(fontSize: fontSize),

                border: OutlineInputBorder(

                  borderRadius: BorderRadius.circular(10),

                  borderSide: BorderSide(color: softGreen),

                ),

                focusedBorder: OutlineInputBorder(

                  borderRadius: BorderRadius.circular(10),

                  borderSide: BorderSide(color: softGreen, width: 2),

                ),

              ),

            ),

            SizedBox(height: padding),


            // Umur

            TextField(

              controller: ageController,

              keyboardType: TextInputType.number,

              decoration: InputDecoration(

                labelText: "Umur",

                labelStyle: TextStyle(fontSize: fontSize),

                border: OutlineInputBorder(

                  borderRadius: BorderRadius.circular(10),

                  borderSide: BorderSide(color: softGreen),

                ),

                focusedBorder: OutlineInputBorder(

                  borderRadius: BorderRadius.circular(10),

                  borderSide: BorderSide(color: softGreen, width: 2),

                ),

              ),

            ),

            SizedBox(height: padding),


            // Jenis Kelamin

            Row(

              children: [

                Text("Jenis Kelamin: ", style: TextStyle(fontSize: fontSize)),

                DropdownButton<String>(

                  value: gender,

                  items: <String>['Laki-laki', 'Perempuan']

                      .map((String value) => DropdownMenuItem<String>(

                            value: value,

                            child: Text(value, style: TextStyle(fontSize: fontSize)),

                          ))

                      .toList(),

                  onChanged: (String? newGender) {

                    setState(() {

                      gender = newGender ?? 'Laki-laki';

                    });

                  },

                ),

              ],

            ),

            SizedBox(height: padding),


            // Berat Badan

            TextField(

              controller: weightController,

              keyboardType: TextInputType.number,

              decoration: InputDecoration(

                labelText: "Berat Badan (kg)",

                labelStyle: TextStyle(fontSize: fontSize),

                border: OutlineInputBorder(

                  borderRadius: BorderRadius.circular(10),

                  borderSide: BorderSide(color: softGreen),

                ),

                focusedBorder: OutlineInputBorder(

                  borderRadius: BorderRadius.circular(10),

                  borderSide: BorderSide(color: softGreen, width: 2),

                ),

              ),

            ),

            SizedBox(height: padding),


            // Tinggi Badan

            TextField(

              controller: heightController,

              keyboardType: TextInputType.number,

              decoration: InputDecoration(

                labelText: "Tinggi Badan (cm)",

                labelStyle: TextStyle(fontSize: fontSize),

                border: OutlineInputBorder(

                  borderRadius: BorderRadius.circular(10),

                  borderSide: BorderSide(color: softGreen),

                ),

                focusedBorder: OutlineInputBorder(

                  borderRadius: BorderRadius.circular(10),

                  borderSide: BorderSide(color: softGreen, width: 2),

                ),

              ),

            ),

            SizedBox(height: padding * 1.5),


            ElevatedButton(

              onPressed: calculateBMI,

              style: ElevatedButton.styleFrom(

                backgroundColor: softGreen,

                minimumSize: Size(screenWidth, buttonHeight),

                shape: RoundedRectangleBorder(

                  borderRadius: BorderRadius.circular(15),

                ),

              ),

              child: Text(

                "Hitung BMI",

                style: TextStyle(fontSize: fontSize, color: Colors.white),

              ),

            ),

            SizedBox(height: padding * 2),


            if (bmi != null)

              Card(

                color: softGreen.withOpacity(0.3),

                shape: RoundedRectangleBorder(

                    borderRadius: BorderRadius.circular(15)),

                child: Padding(

                  padding: EdgeInsets.all(padding),

                  child: Column(

                    crossAxisAlignment: CrossAxisAlignment.start,

                    children: [

                      Text(

                        "Halo, ${nameController.text.isEmpty ? '-' : nameController.text}!",

                        style: TextStyle(

                          fontSize: fontSize + 2,

                          fontWeight: FontWeight.bold,

                          color: softGreen.darken(0.2),

                        ),

                      ),

                      SizedBox(height: padding / 2),

                      Text(

                        "Umur: ${ageController.text.isEmpty ? '-' : ageController.text} Tahun",

                        style: TextStyle(

                          fontSize: fontSize,

                          color: softGreen.darken(0.2),

                        ),

                      ),

                      SizedBox(height: padding / 4),

                      Text(

                        "Jenis Kelamin: $gender",

                        style: TextStyle(

                          fontSize: fontSize,

                          color: softGreen.darken(0.2),

                        ),

                      ),

                      SizedBox(height: padding),

                      Text(

                        "BMI: ${bmi!.toStringAsFixed(2)}",

                        style: TextStyle(

                          fontSize: fontSize + 4,

                          fontWeight: FontWeight.bold,

                          color: softGreen.darken(0.2),

                        ),

                      ),

                      SizedBox(height: padding / 2),

                      Text(

                        "Kategori: $category",

                        style: TextStyle(

                          fontSize: fontSize + 2,

                          fontWeight: FontWeight.bold,

                          color: softGreen.darken(0.2),

                        ),

                      ),

                    ],

                  ),

                ),

              ),

          ],

        ),

      ),

    );

  }

}


// Extension untuk membuat warna lebih gelap

extension ColorBrightness on Color {

  Color darken([double amount = .1]) {

    assert(amount >= 0 && amount <= 1);

    final f = 1 - amount;

    return Color.fromARGB(

      alpha,

      (red * f).round(),

      (green * f).round(),

      (blue * f).round(),

    );

  }

}


Komentar

Postingan populer dari blog ini

MERAYAKAN ULANG TAHUN PAK FAJAR

membuat tampilan sederhana

To Do List Sederhana