6.7 KiB
6.7 KiB
Perbaikan Sistem Mobile SPK Kontrakan
Masalah yang Ditemukan
- Data di mobile tidak sesuai dengan data di web
- Endpoint API tidak benar (menggunakan GET dengan query parameters, harusnya POST dengan body)
- Model data tidak sesuai dengan response API dari backend
- Tampilan tidak menunjukkan sistem rekomendasi dengan ranking dan scoring
- Tidak ada tampilan untuk top recommendations di home screen
Perbaikan yang Dilakukan
1. Perbaikan API Endpoints
File: lib/screens/recommendation_screen.dart
- ✅ Mengubah endpoint dari
/api/saw/kontrakanmenjadi/api/saw/calculate/kontrakan - ✅ Mengubah method dari GET (dengan query params) menjadi POST (dengan body)
- ✅ Mengirim parameters dalam request body menggunakan JSON
File: lib/services/kontrakan_service.dart
- ✅ Menambahkan method
getRecommendations()untuk mendapatkan rekomendasi SAW - ✅ Menggunakan POST method dengan JSON body sesuai dengan API backend
File: lib/services/laundry_service.dart
- ✅ Menambahkan method
getRecommendations()untuk laundry - ✅ Implementasi yang sama dengan kontrakan service
2. Perbaikan Model Data
File: lib/models/laundry.dart
- ✅ Mengubah nama field dari
jarakmenjadijarakKampus(sesuai API) - ✅ Mengubah
hargaKiloandanhargaSatuanmenjadihargaPerKg(sesuai API) - ✅ Mengubah
estimasiSelesaimenjadiwaktuProses(sesuai API) - ✅ Menambahkan field
deskripsi,fotoUtama,galeriyang hilang - ✅ Menambahkan
avgRatingdantotalReviewsuntuk rating display - ✅ Menambahkan class
GaleriLaundryuntuk galeri photos - ✅ Menambahkan getter
primaryPhotountuk mendapatkan foto utama - ✅ Memperbaiki getter
formattedHargauntuk format Rupiah
File: lib/models/kontrakan.dart
- ✅ Sudah sesuai dengan API response
3. Pembuatan Widget Komponen
File: lib/widgets/kontrakan_card.dart (BARU)
- ✅ Widget card untuk menampilkan kontrakan
- ✅ Mendukung tampilan ranking dan skor (untuk sistem rekomendasi)
- ✅ Menampilkan badge ranking dengan warna berbeda (emas, perak, perunggu)
- ✅ Menampilkan persentase skor SAW
- ✅ Tampilan foto, harga, jumlah kamar, jarak kampus, dan rating
- ✅ Clickable untuk navigasi ke detail screen
File: lib/widgets/laundry_card.dart (BARU)
- ✅ Widget card untuk menampilkan laundry
- ✅ Sama seperti kontrakan card dengan design yang konsisten
- ✅ Menampilkan harga per kg dan waktu proses
4. Improved Home Screen
File: lib/screens/improved_home_screen.dart (BARU)
- ✅ Home screen baru yang fokus pada sistem rekomendasi
- ✅ Menampilkan "Top 5 Kontrakan Terbaik" berdasarkan SAW
- ✅ Setiap kartu menampilkan ranking dan skor
- ✅ Quick action button untuk laundry
- ✅ Pull-to-refresh untuk reload rekomendasi
- ✅ Bottom navigation yang konsisten
- ✅ Design modern dengan gradient header
- ✅ Loading state yang informatif
5. Update Entry Points
File: lib/main.dart
- ✅ Menggunakan
ImprovedHomeScreensebagai home default - ✅ Splash screen tetap berfungsi untuk auth check
File: lib/login.dart
- ✅ Navigate ke
ImprovedHomeScreensetelah login sukses - ✅ Import statement sudah diupdate
Struktur Sistem Rekomendasi
Flow Data:
1. Mobile App → POST /api/saw/calculate/kontrakan (dengan filter opsional)
2. Backend → Proses SAW → Return ranked results dengan skor
3. Mobile App → Parse results → Tampilkan dengan ranking & skor
Response Format dari API:
{
"success": true,
"data": {
"kriteria": [...],
"hasil": [
{
"id": 1,
"nama": "Kontrakan ABC",
"ranking": 1,
"skor": 0.95,
"nilai": {...},
"normalisasi": {...},
"data": {
"id": 1,
"nama": "Kontrakan ABC",
"harga": 500000,
...
}
}
]
}
}
Tampilan di Mobile:
- Home Screen: Top 5 rekomendasi dengan badge ranking (🏆 #1, #2, #3, dll)
- Recommendation Screen: Full list dengan filter dan ranking
- Card: Menampilkan ranking badge + skor persentase di bagian atas card
Cara Menggunakan
1. Pastikan Backend Running
cd spk_kontrakan
php artisan serve
2. Cek Database
Pastikan data kontrakan dan laundry sudah ada di database dengan field yang benar:
kontrakan: harga, jumlah_kamar, jarak_kampus, fasilitaslaundry: harga_per_kg, jarak_kampus, waktu_proses
3. Konfigurasi URL
File: lib/config/app_config.dart
// Untuk Android Emulator
static const String baseUrl = 'http://10.0.2.2:8000/api';
// Untuk Real Device (ganti dengan IP komputer Anda)
static const String baseUrl = 'http://192.168.1.100:8000/api';
4. Run Flutter App
cd spk_mobile
flutter pub get
flutter run
Testing Checklist
- Login berhasil → Redirect ke Improved Home Screen
- Home screen menampilkan Top 5 Kontrakan dengan ranking
- Setiap card menampilkan badge ranking (🏆 #1, #2, #3)
- Setiap card menampilkan skor dalam persentase
- Pull-to-refresh berfungsi reload data
- Click card → Navigate ke detail screen
- Button "Lihat Semua" → Navigate ke Recommendation Screen
- Recommendation Screen menampilkan semua hasil dengan filter
- Filter berfungsi (harga, jarak, kamar, fasilitas)
- Laundry button navigate ke Laundry List
- Bottom navigation berfungsi semua tab
Keunggulan Sistem Baru
- Data Konsisten: Mobile dan web menggunakan API dan logika yang sama
- Visual Ranking: User langsung melihat mana kontrakan/laundry terbaik
- Sistem Scoring: Transparansi dengan menampilkan skor SAW
- User Experience: Design modern, intuitive, dan informatif
- Performance: Caching dengan CachedNetworkImage untuk loading foto lebih cepat
Troubleshooting
Data tidak muncul?
- Cek API response di console:
flutter run --verbose - Pastikan baseUrl benar di
app_config.dart - Test API menggunakan Postman:
POST http://localhost:8000/api/saw/calculate/kontrakan
Foto tidak muncul?
- Pastikan foto ada di folder
public/storagebackend - Jalankan:
php artisan storage:link - Cek URL foto di CachedNetworkImage (ada prefix storage/)
Ranking tidak sesuai?
- Cek bobot kriteria di database
kriteriatable - Pastikan metode SAW berjalan dengan benar di backend
- Test SAW calculation manual di web
Next Steps (Opsional)
- Favorites: Implementasi favorite kontrakan/laundry
- Reviews: Tampilkan dan submit review dari mobile
- Booking: Integrasi booking flow yang lengkap
- Maps: Tampilkan lokasi di Google Maps
- Notifications: Push notification untuk booking updates
- Offline Mode: Cache data untuk offline viewing
Dibuat oleh: GitHub Copilot Tanggal: 31 Januari 2026 Versi: 1.0