Membuat aplikasi BMI

 



## 📱 Belajar Flutter: Membuat Aplikasi BMI dengan Status Ideal / Tidak Ideal

berikut link aplikasi jika ingin mencoba nya:

https://zk10006h2k101.zapp.page/#/


Halo semuanya 👋

Di postingan kali ini aku mau sharing hasil belajar Flutter dengan membuat **aplikasi BMI (Body Mass Index)** sederhana tapi cukup lengkap.



Aplikasi ini aku buat sebagai latihan untuk memahami **form input, state management, dan logika perhitungan di Flutter**. Walaupun simpel, project ini lumayan membantu buat memahami dasar-dasar Flutter.

berikut kode aplikasi yang saya buat:

import 'package:flutter/material.dart';


void main() {

  runApp(const MyApp());

}


class MyApp extends StatelessWidget {

  const MyApp({super.key});


  @override

  Widget build(BuildContext context) {

    return const MaterialApp(

      debugShowCheckedModeBanner: false,

      home: BmiPage(),

    );

  }

}


class BmiPage extends StatefulWidget {

  const BmiPage({super.key});


  @override

  State<BmiPage> createState() => _BmiPageState();

}


class _BmiPageState extends State<BmiPage> {

  final TextEditingController nameController = TextEditingController();

  final TextEditingController ageController = TextEditingController();

  final TextEditingController heightController = TextEditingController();

  final TextEditingController weightController = TextEditingController();


  String gender = 'Laki-laki';


  double bmi = 0;

  String kategori = '';

  String status = '';


  void hitungBMI() {

    final double? height =

        double.tryParse(heightController.text);

    final double? weight =

        double.tryParse(weightController.text);


    if (height == null || weight == null) return;


    setState(() {

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


      if (bmi < 18.5) {

        kategori = 'Kurus';

        status = 'Tidak Ideal ❌';

      } else if (bmi < 25) {

        kategori = 'Normal';

        status = 'Ideal ✅';

      } else if (bmi < 30) {

        kategori = 'Gemuk';

        status = 'Tidak Ideal ❌';

      } else {

        kategori = 'Obesitas';

        status = 'Tidak Ideal ❌';

      }

    });

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        backgroundColor: Colors.pinkAccent,

        title: const Text('BMI Calculator 💖'),

        centerTitle: true,

      ),

      body: SingleChildScrollView(

        padding: const EdgeInsets.all(16),

        child: Column(

          children: [

            TextField(

              controller: nameController,

              decoration: const InputDecoration(

                labelText: 'Nama',

              ),

            ),

            const SizedBox(height: 10),


            DropdownButtonFormField<String>(

              value: gender,

              decoration: const InputDecoration(

                labelText: 'Jenis Kelamin',

              ),

              items: const [

                DropdownMenuItem(

                  value: 'Laki-laki',

                  child: Text('Laki-laki'),

                ),

                DropdownMenuItem(

                  value: 'Perempuan',

                  child: Text('Perempuan'),

                ),

              ],

              onChanged: (value) {

                setState(() {

                  gender = value!;

                });

              },

            ),

            const SizedBox(height: 10),


            TextField(

              controller: ageController,

              keyboardType: TextInputType.number,

              decoration: const InputDecoration(

                labelText: 'Umur',

              ),

            ),

            const SizedBox(height: 10),


            TextField(

              controller: heightController,

              keyboardType: TextInputType.number,

              decoration: const InputDecoration(

                labelText: 'Tinggi Badan (cm)',

              ),

            ),

            const SizedBox(height: 10),


            TextField(

              controller: weightController,

              keyboardType: TextInputType.number,

              decoration: const InputDecoration(

                labelText: 'Berat Badan (kg)',

              ),

            ),

            const SizedBox(height: 20),


            ElevatedButton(

              onPressed: hitungBMI,

              style: ElevatedButton.styleFrom(

                backgroundColor: Colors.pinkAccent,

              ),

              child: const Text('Hitung BMI'),

            ),

            const SizedBox(height: 25),


            if (bmi > 0)

              Column(

                crossAxisAlignment: CrossAxisAlignment.start,

                children: [

                  Text('Nama: ${nameController.text}'),

                  Text('Jenis Kelamin: $gender'),

                  Text('Umur: ${ageController.text} tahun'),

                  const SizedBox(height: 10),

                  Text(

                    'BMI: ${bmi.toStringAsFixed(1)}',

                    style: const TextStyle(

                      fontSize: 26,

                      fontWeight: FontWeight.bold,

                    ),

                  ),

                  Text(

                    'Kategori: $kategori',

                    style: const TextStyle(fontSize: 18),

                  ),

                  Text(

                    'Status: $status',

                    style: TextStyle(

                      fontSize: 18,

                      color: status.contains('Ideal')

                          ? Colors.green

                          : Colors.red,

                    ),

                  ),

                ],

              ),

          ],

        ),

      ),

    );

  }

}

---


## ✨ Fitur Aplikasi BMI


Di aplikasi ini, pengguna bisa mengisi beberapa data, seperti:


* Nama

* Jenis kelamin

* Umur

* Tinggi badan (cm)

* Berat badan (kg)


Setelah data diisi dan tombol **Hitung BMI** ditekan, aplikasi akan menampilkan:


* Nilai BMI

* Kategori BMI (Kurus, Normal, Gemuk, Obesitas)

* Status **Ideal atau Tidak Ideal**

* Informasi data pengguna


---


## 🧠 Cara Kerja BMI


Perhitungan BMI menggunakan rumus berikut:


**BMI = Berat Badan (kg) / (Tinggi Badan (m) × Tinggi Badan (m))**


Dari hasil BMI tersebut, aplikasi akan menentukan apakah berat badan pengguna termasuk **ideal atau tidak ideal**.

BMI normal (18.5 – 24.9) dianggap **Ideal**, sedangkan kategori lainnya dianggap **Tidak Ideal**.


---


## 🛠 Teknologi yang Digunakan


Aplikasi ini dibuat menggunakan:


* Flutter

* Bahasa pemrograman Dart


Beberapa widget dan konsep yang digunakan antara lain:


* `StatefulWidget`

* `TextField`

* `DropdownButtonFormField`

* `ElevatedButton`

* `setState()` untuk memperbarui tampilan


---


## 🎨 Tampilan Aplikasi


Untuk tampilan, aplikasi dibuat dengan desain sederhana dan warna pink agar terlihat lebih menarik dan tidak membosankan. Fokus utama dari project ini adalah **fungsi dan logika aplikasi**, sehingga tampilannya tetap simpel dan mudah dipahami.


---


## 📝 Penutup


Dari project ini, aku belajar banyak hal, seperti:


* Cara mengelola input pengguna di Flutter

* Menghubungkan logika perhitungan dengan UI

* Menentukan kategori dan status dari hasil perhitungan


Project ini masih bisa dikembangkan lebih lanjut, misalnya dengan:


* Menambahkan saran berat badan ideal

* Memisahkan halaman input dan halaman hasil

* Memperbaiki desain UI agar lebih modern


Semoga sharing ini bisa bermanfaat buat teman-teman yang juga sedang belajar Flutter 🚀

Terima kasih sudah membaca 😊


---


Kalau mau, aku juga bisa:


* ✍️ Menyesuaikan jadi **lebih santai lagi (aku–kamu)**

* 🎓 Versi **tugas kuliah / laporan**

* 🧩 Ditambah **penjelasan kode per bagian**


Tinggal bilang ya 😉✨

Komentar

Postingan populer dari blog ini

Membuat tampilan sederhana

To do list part 2

MEMBUAT JADWAL PELAJARAN