Laporan Proyek Akhir PPB: Membangun Aplikasi "Cemungut" dengan Flutter dan Firebase
Tema:
Aplikasi ini mengusung tema "Smart Environment" dengan pendekatan gamifikasi. Tujuannya adalah mengubah kebiasaan masyarakat dalam mengelola sampah, dari yang semula dianggap sebagai beban menjadi sebuah aktivitas yang mudah, terjadwal, dan bahkan menguntungkan melalui interaksi digital yang intuitif. Tujuan: Mempermudah Proses Pembuangan: Menyediakan layanan pemesanan penjemputan sampah secara on-demand, sehingga pengguna tidak perlu khawatir dengan jadwal yang tidak pasti.Memberikan Insentif: Mendorong partisipasi aktif masyarakat dalam memilah dan mengelola sampah dengan memberikan imbalan berupa poin (CemPoin) yang dapat ditukar dengan hadiah.Meningkatkan Edukasi: Menyediakan platform untuk memberikan informasi mengenai jenis-jenis sampah dan cara pengelolaannya yang benar.
Target Pengguna: Masyarakat umum di area perkotaan dan suburban, khususnya penghuni komplek perumahan, apartemen, atau kos yang peduli lingkungan namun membutuhkan sistem yang praktis dan terintegrasi untuk mengelola sampah rumah tangga mereka.
Daftar Fitur Utama
Registrasi & Login Pengguna: Sistem autentikasi aman menggunakan Firebase Authentication (Email & Password).Pemesanan Penjemputan Sampah On-Demand: Pengguna dapat menentukan item sampah, jumlah, catatan, serta jadwal penjemputan yang fleksibel.Riwayat dan Detail Transaksi: Pengguna dapat melacak semua riwayat penjemputan, melihat detailnya, serta (untuk simulasi proyek) mengubah status transaksi menjadi 'Selesai' atau 'Dibatalkan'.Sistem Poin & Reward (Gamifikasi): Akumulasi Poin: Setiap transaksi yang selesai akan memberikan poin kepada pengguna.Tingkat Keanggotaan: Terdapat sistemmembership (contoh: Gold Member) yang memberikan bonus poin tambahan jika target poin tercapai.Penukaran Hadiah: Poin yang terkumpul dapat ditukarkan dengan berbagai hadiah menarik seperti saldo e-wallet atau voucher.
Manajemen Profil Pengguna: Pengguna dapat melihat dan mengubah data pribadi mereka.Fitur Pendukung: Halaman edukasi, deteksi jenis sampah (konsep), dan peta lokasi Bank Sampah terdekat.
Arsitektur Aplikasi & Teknologi yang Digunakan
Models (lib/app/models): Lapisan data yang berisi definisi objek (POJO/Plain Old Dart Object) seperti AppUser, PickupOrder, Address, dll. Lapisan ini bertanggung jawab untuk menstrukturkan data.Services (lib/app/services): Lapisan logika bisnis dan komunikasi. Di sinilah semua interaksi dengan pihak ketiga (seperti Firebase, TFLite, Geolokasi) terjadi. Ini memisahkan logika inti dari tampilan.Presentation (lib/presentation): Lapisan antarmuka pengguna (UI). Berisi semuascreens (halaman) danwidgets yang dilihat dan di-interaksikan oleh pengguna.
Framework: Flutter (SDK 3.x)Bahasa: DartBackend & Database: Google Firebase (Authentication, Firestore)Machine Learning: TensorFlow Lite Flutter (tflite_flutter)Manajemen State: GetX (untuk navigasi) dan StatefulWidget (setState) untuk state lokal.Layanan Lokasi: geolocator & geocodingPeta: flutter_map
Penjelasan Modul-Modul Inti
Modul 1: Autentikasi & Manajemen Profil User
Tujuan: Menyediakan sistem masuk yang aman bagi pengguna dan menyimpan data profil mereka.Implementasi Teknis: Kami menggunakanFirebase Authentication untuk menangani proses registrasi, login, dan logout dengan email/password. Setiap kali pengguna baru mendaftar, sebuah dokumen baru juga dibuat di koleksi users padaCloud Firestore . Dokumen ini menyimpan informasi tambahan seperti nama, jumlah poin, dan status keanggotaan (misal: isGoldMember).
Tujuan: Memungkinkan pengguna untuk menyimpan, mengedit, dan memilih beberapa alamat penjemputan.Implementasi Teknis: Fitur ini adalah contoh integrasi beberapa library.Geolocator: Digunakan untuk mendapatkan lokasi pengguna saat ini ketika mereka pertama kali membuka layar "Tambah Alamat".Flutter Map & Geocoding: Menampilkan peta interaktif di mana pengguna bisa menggeser pin untuk menentukan lokasi presisi. Setiap kali pin digeser, Geocoding akan menerjemahkan koordinat menjadi alamat jalan yang bisa dibaca.Firestore: Semua alamat yang disimpan akan masuk ke dalamsub-collection addresses di dalam dokumen user yang bersangkutan. Ini adalah praktik yang baik untuk data relasional di NoSQL.
Future<void> _determinePosition() async { // Meminta izin lokasi jika diperlukan
final Position position = await GeolocationService.getCurrentPosition();
if (mounted) {
setState(() {
_currentMapCenter = LatLng(position.latitude, position.longitude);
_isLoading = false;
});
// Memperbarui UI dengan alamat dari koordinat awal
_onMapPositionChanged(_currentMapCenter!);
}
}
Modul 3: Deteksi Sampah dengan TensorFlow Lite
Tujuan: Memberikan alat bantu kepada pengguna untuk mengidentifikasi jenis sampah secara otomatis menggunakan kamera.Implementasi Teknis: Ini adalah salah satu modul paling menantang.Aset Model: File model (model.tflite) dan label (labels.txt) kami simpan di folder assets/ml/ dan daftarkan di pubspec.yaml agar terkemas dalam aplikasi.Image Picker: Memberikan opsi kepada pengguna untuk memilih gambar dari galeri atau mengambil foto baru dengan kamera.TFLite Service: Sebuah kelas layanan khusus kami buat untuk memuat model, memproses gambar (resize ke 224x224, konversi ke tensor), menjalankan inferensi, dan menginterpretasikan output menjadi label danconfidence score .R8/Proguard: Kami menghadapi tantangan di mana build rilis gagal karena R8 menghapus kelas-kelas TFLite. Ini kami atasi dengan menambahkankeep rules di file android/app/proguard-rules.pro.
Tujuan: Menciptakan alur pemesanan yang familiar dan mudah, mirip aplikasi Gojek/Grab.Implementasi Teknis: Proses ini sepenuhnya dikelola oleh Firestore.Form Input: Pengguna mengisi data di UI.Kalkulasi Dinamis: Sebelum mengirim, aplikasi menghitung estimasi poin. Logika untuk mengecek status isGoldMember dan menambahkan bonus 3% diterapkan di sini.Pembuatan Dokumen: Saat tombol "Pesan" ditekan, sebuah objek PickupOrder dibuat di Dart, lalu dikonversi ke format JSON dan disimpan sebagai dokumen baru di koleksi pickupOrders di Firestore.Update Status: Pengguna bisa melihat status pesanan mereka (Pending, Selesai, Dibatalkan) di halaman riwayat transaksi, yang secara real-time membaca data dari Firestore.
Tujuan: Mendorong keterlibatan dan loyalitas pengguna melalui sistem insentif.Implementasi Teknis: Sistem Poin: Poin disimpan sebagai field points pada dokumen user di Firestore. Field ini di-update menggunakan FieldValue.increment() untuk keamanan transaksi.UI Dinamis: Kartu poin di Halaman Utama dan Halaman Hadiah menggunakan FutureBuilder untuk mengambil data user terbaru. UI-nya berubah secara kondisional: menampilkan progress bar jika belum Gold, dan menampilkan lencana khusus jika sudah Gold.Penukaran Hadiah: Saat menukar hadiah, aplikasi melakukan pengecekan poin di sisi klien, lalu memanggil fungsi Firestore untuk mengurangi poin dan (di masa depan) mencatat transaksi penukaran.
Kesimpulan Proyek
Implementasi real-time tracking petugas jemput.Integrasi payment gateway untuk penukaran hadiah saldo.Notifikasi push untuk update status pesanan.