# Dokumentasi: Tampilan Card Wisata - Halaman Beranda ## 📱 Gambaran Umum Telah diimplementasikan tampilan **Halaman Beranda** yang modern, elegan, dan responsif untuk aplikasi Flutter promosi wisata Kabupaten Lumajang berbasis AR. Halaman ini menampilkan **8 card wisata** dengan desain modern yang mengikuti tema wisata alam Indonesia. ## 🎨 Desain & Tema ### Palet Warna - **Hijau Alam (Primary)**: `#1F8F5F` - Warna utama aplikasi - **Hijau Cerah**: `#2FA86B` - Gradient dan highlight - **Coklat Earthy**: `#8B7355` - Kategori Gunung - **Biru Danau**: `#2196F3` - Kategori Danau - **Teal Pantai**: `#4ECDC4` - Kategori Pantai - **Orange Aksen**: `#E28D42` - Rating badge - **Putih Clean**: `#FFFFFF` - Background - **Beige Lembut**: `#F7F4EA` - Scaffold background ### Tipografi - **Font Family**: Roboto - **Heading**: Bold, 28px - **Title Card**: Bold, 16px - **Body Text**: Regular, 12-14px - **Label**: Bold, 11-13px ## 📁 Struktur File ``` lib/ ├── models/ │ ├── destination_model.dart # Model data untuk wisata │ └── destination_data.dart # List 8 wisata dengan data lengkap ├── pages/ │ ├── home_page.dart # Halaman beranda dengan grid │ └── destination_detail_page.dart # Halaman detail wisata ├── widgets/ │ ├── destination_card_widget.dart # Widget card reusable │ └── placeholder_image_widget.dart # Widget untuk placeholder ├── screens/ │ └── beranda_screen.dart # Screen wrapper dengan bottom nav └── services/ └── auth_service.dart # Service autentikasi (sudah ada) ``` ## 🎯 Fitur Utama ### 1. **Grid Card Wisata (2 Kolom)** - ✅ Menampilkan 8 card wisata dalam grid 2 kolom - ✅ Responsive untuk semua ukuran layar Android mobile - ✅ Child aspect ratio 0.75 untuk proporsi ideal - ✅ Spacing 16px horizontal, 20px vertical ### 2. **Design Card Wisata** Setiap card memiliki: #### Bagian Atas (2/3 dari card) - 📸 **Gambar Landscape Fullscreen** dengan gradient overlay - 🏷️ **Badge Kategori** (Gunung/Danau/Pantai) - Top Left - ⭐ **Badge Rating** dengan icon star - Top Right - 🎨 **Gradient Overlay** untuk readability teks #### Bagian Bawah (1/3 dari card) - 📝 **Nama Wisata** - Bold, 1 baris - 📄 **Deskripsi Singkat** - 2 baris maksimal - 📍 **Lokasi dengan Icon** - 1 baris - 🔘 **Tombol "Lihat Detail"** - Green, Bold ### 3. **Animasi & Interaksi** - 👆 **Tap Animation**: Scale 1.0 → 0.98 saat di-tap - ⏱️ **Duration**: 300ms dengan Curves.easeInOut - 🌊 **Smooth Transitions**: Semua animasi halus - 💫 **Shadow Effects**: Elevation 8 untuk depth ### 4. **Search Bar** - 🔍 Placeholder: "Cari wisata favoritmu..." - 📌 Real-time filtering saat user mengetik - ❌ Tombol clear untuk menghapus pencarian - 🎨 Styling: Rounded 16px, shadow, icon search ### 5. **Filter Kategori** - 🏷️ **Tombol Filter**: "Semua", "Gunung", "Danau", "Pantai" - 🎨 **Visual Feedback**: - Selected: Warna cerah, shadow - Unselected: Grey, no shadow - 🔄 **Toggle Behavior**: Click untuk select/deselect - 📊 **Live Count**: "Ditemukan X wisata" ### 6. **Empty State** - 🔍 Icon: search_off - 📝 Text: "Wisata tidak ditemukan" - 💡 Suggestion: "Coba ubah pencarian atau filter kategori" - 🎨 Styling: Centered, grey colors ## 🏔️ 8 Wisata yang Ditampilkan | No | Nama | Kategori | Model Path | Rating | |---|------|----------|-----------|--------| | 1 | Gunung Lemongan | Gunung | `assets/models/gunung_lemongan.glb` | 4.8 | | 2 | Gunung Semeru | Gunung | `assets/models/gunung_semeru.glb` | 4.9 | | 3 | Pantai Watu Godeg | Pantai | `assets/models/pantai_watu_godeg.glb` | 4.6 | | 4 | Pantai Watu Pecak | Pantai | `assets/models/pantai_watu_pecak.glb` | 4.5 | | 5 | Puncak B29 | Gunung | `assets/models/puncak_b29.glb` | 4.7 | | 6 | Ranu Kumbolo | Danau | `assets/models/ranu_kumbolo.glb` | 4.8 | | 7 | Ranu Pani | Danau | `assets/models/ranu_pani.glb` | 4.7 | | 8 | Ranu Regulo | Danau | `assets/models/ranu_regulo.glb` | 4.6 | ## 📄 Detail Halaman (Destination Detail Page) Saat user menekan card, aplikasi membuka halaman detail dengan: ### Informasi Lengkap - ✅ Gambar besar dengan gradient overlay - ✅ Nama wisata & kategori badge - ✅ Rating dengan rating badge - ✅ Lokasi dengan icon - ✅ Deskripsi lengkap - ✅ Informasi wisata (kategori, lokasi, rating) - ✅ Path model 3D ### Action Buttons - 💌 **Tombol Bagikan**: Untuk share wisata - 🔍 **Tombol Lihat AR**: Untuk membuka model 3D ### Scroll Behavior - 📌 Collapsing App Bar dengan hero image - 🎨 Smooth gradient overlay - 🔙 Back button custom dengan styling ## 💾 Data Model ### Destination Model ```dart class Destination { final int id; final String nama; final String deskripsi; // Deskripsi singkat final String lokasi; final double rating; // 0.0 - 5.0 final String kategori; // 'gunung', 'danau', 'pantai' final String gambar; // Path ke file image final String modelPath; // Path ke file .glb final String deskripsiLengkap; // Deskripsi panjang } ``` ## 🔧 Implementasi Teknis ### Clean Architecture - ✅ Separation of concerns (Models, Pages, Widgets, Services) - ✅ Reusable widget components - ✅ State management dengan StatefulWidget - ✅ Provider ready untuk implementasi lebih lanjut ### Null Safety - ✅ Semua kode menggunakan null safety - ✅ Proper type annotations - ✅ Error handling yang baik ### Responsive Design - ✅ CustomScrollView dengan Slivers - ✅ GridView yang responsive - ✅ Padding dan spacing yang adaptif - ✅ Dynamic text sizing berdasarkan screen size ### Performance - ✅ Efficient widget tree - ✅ Proper state management - ✅ Asset optimization (image error handling) - ✅ Memory-conscious animations ## 🚀 Cara Menggunakan ### 1. Generate Placeholder Images ```bash python generate_placeholders.py ``` Script ini akan generate 8 placeholder images di `assets/images/` ### 2. Jalankan Aplikasi ```bash flutter pub get flutter run ``` ### 3. Testing di Emulator/Device - Navigasi ke halaman beranda setelah login - Test search functionality - Test filter kategori - Tap card untuk membuka detail halaman - Test scroll dan animasi ## 🎓 Bahasa & Lokalisasi Semua text menggunakan **Bahasa Indonesia**: - "Jelajahi Lumajang" - Header - "Temukan keindahan wisata alam" - Subtitle - "Cari wisata favoritmu..." - Search placeholder - "Filter Kategori" - Section header - "Lihat Detail" - Button label - "Tentang Tempat Ini" - Section header - "Lihat AR" - AR button - Dan lainnya... ## 📱 Responsive Breakpoints - **Mobile (320px - 600px)**: 1 kolom atau 2 kolom kecil - **Tablet (600px - 900px)**: 2 kolom - **Large (900px+)**: 2-3 kolom ## ⚙️ Customization ### Mengubah Warna Primary Edit di `main.dart`: ```dart const seed = Color(0xFF1F8F5F); // Ubah color code ``` ### Menambah Wisata Baru Edit di `lib/models/destination_data.dart`: ```dart Destination( id: 9, nama: 'Wisata Baru', deskripsi: '...', // ... properties lainnya ) ``` ### Mengubah Layout Grid Edit di `lib/pages/home_page.dart`: ```dart const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, // Ubah jumlah kolom // ... ) ``` ## 🐛 Troubleshooting ### Images tidak muncul ✅ Pastikan file di folder `assets/images/` dengan nama yang benar ✅ Run `flutter pub get` setelah menambah assets ✅ Cek console untuk error messages ### Filter tidak bekerja ✅ Pastikan kategori di destination_data.dart sesuai dengan filter button ✅ Kategori harus: 'gunung', 'danau', 'pantai' (lowercase) ### Animation lag ✅ Run di release mode: `flutter run --release` ✅ Kurangi jumlah animasi atau complexity ## 📚 Referensi - Flutter Documentation: https://flutter.dev - Material Design 3: https://m3.material.io/ - Dart Language: https://dart.dev ## 🎉 Selesai! Tampilan card wisata halaman Beranda sudah siap digunakan dan dapat dikembangkan lebih lanjut sesuai kebutuhan aplikasi wisata AR Kabupaten Lumajang.