Langkara adalah aplikasi edukasi berbasis mobile yang memungkinkan pengguna berbagi, membaca, dan berdiskusi tentang berbagai materi pembelajaran. Dibangun sebagai proyek magang Raion Community 2026.
- Menampilkan sapaan pengguna dengan avatar
- Fitur Lanjutkan Membaca untuk melanjutkan materi terakhir
- Seksi Berita Terkini dan Inspirasi
- Navigasi cepat ke pencarian dan chat
- Login & Register dengan email dan password
- Login dengan Google OAuth
- Fitur Remember Me untuk menyimpan sesi
- Fitur Lupa Password dengan alur email → OTP → reset password
- Pemilihan avatar saat registrasi
- Browse dan baca materi dari pengguna lain
- Upload materi baru dengan cover image
- Sistem Tiket Baca (2 tiket gratis/hari, bisa tukar 40 XP)
- Detail materi dengan konten lengkap
- Cari Teman, Berita, Materi, dan Inspirasi dalam satu halaman
- Tab-based search results
- Filter dan navigasi langsung ke detail
- Chat History — daftar percakapan dengan preview pesan terakhir, waktu, dan badge unread
- Room Chat — percakapan real-time antar pengguna dengan Supabase Realtime
- Indikator pesan dibaca (✓✓)
- Avatar pengguna ditampilkan di setiap percakapan
- Jelajahi profil pengguna lain dengan tampilan kartu carousel
- Lihat jurusan, universitas, pencapaian, dan kemampuan
- Navigasi ke profil detail dan kirim pesan langsung
- Tampilan profil lengkap dengan avatar, XP, jurusan, dan universitas
- Edit profil (nama, username, email, jurusan, universitas, gender, kemampuan)
- Progress bar kelengkapan profil
- Tab Materi, Pencapaian, dan Bookmark
- Pilih dan ubah avatar dari avatar picker
- Upload dan tampilkan sertifikat pencapaian
- Detail pencapaian dengan gambar dan deskripsi
- Sistem like dan bookmark pada pencapaian
- Baca berita terkini seputar pendidikan
- Profil inspirasi dari tokoh-tokoh berprestasi
- Edit profil
- Ubah kata sandi
- FAQ & Bantuan
- Logout
- Setiap pengguna mendapat 2 tiket baca gratis per hari (reset otomatis)
- Jika tiket habis, gunakan 40 XP untuk akses materi
- XP ditampilkan pada dialog coin di beranda
| Teknologi | Keterangan |
|---|---|
| Flutter (Dart) | Framework UI cross-platform |
| Supabase | Backend-as-a-Service (Auth, Database, Realtime, Storage) |
| flutter_bloc | State management berbasis BLoC pattern |
| supabase_flutter | Supabase SDK untuk Flutter |
| google_fonts | Typography dari Google Fonts |
| flutter_svg | Render SVG assets |
| shared_preferences | Penyimpanan lokal (Remember Me, sesi) |
| intl | Internasionalisasi dan format tanggal |
| file_picker & image_picker | Upload file dan gambar |
| flutter_card_swiper | Carousel kartu di halaman Temanku |
| url_launcher | Buka URL eksternal |
| camera & photo_manager | Akses kamera dan galeri |
Aplikasi ini menggunakan arsitektur BLoC (Business Logic Component) pattern dengan pemisahan layer yang jelas:
lib/
├── Bloc/ # Business Logic Components
│ ├── Auth/ # AuthBloc — Login, Register, Google Sign-In
│ ├── Chat/ # ChatBloc — Percakapan & pesan real-time
│ ├── Ticket/ # TicketBloc — Sistem tiket baca
│ ├── Reading/ # ReadingBloc — Riwayat bacaan
│ ├── search/ # SearchBloc — Pencarian multi-kategori
│ ├── temanku/ # TemankuBloc — Daftar teman
│ ├── Materiku/ # MateriBloc — Materi pengguna
│ └── profile_tab/ # ProfileMateri/Achievement/BookmarkBloc
│
├── Services/ # Data Layer — Interaksi langsung dengan Supabase
│ ├── auth_services.dart
│ ├── chat_service.dart
│ ├── profile_services.dart
│ ├── teman_service.dart
│ ├── ticket_service.dart
│ ├── reading_service.dart
│ ├── berita_service.dart
│ ├── inspirasi_service.dart
│ ├── materi_service.dart
│ └── search_service.dart
│
├── Repository/ # Repository Layer — Abstraksi antara BLoC dan Service
│ ├── auth_repository.dart
│ ├── chat_repository.dart
│ ├── teman_repository.dart
│ └── materi_repository.dart
│
├── Models/ # Data Models
│ ├── user_model.dart
│ ├── message_model.dart
│ ├── conversation_model.dart
│ ├── materi_model.dart
│ ├── berita_model.dart
│ ├── inspirasi_model.dart
│ ├── achievement_model.dart
│ └── teman_profile_model.dart
│
├── Pages/ # UI Pages
│ ├── home_page.dart
│ ├── login_page.dart
│ ├── register_page.dart
│ ├── navigation_menu.dart
│ ├── profile_page.dart
│ ├── profile_detail_page.dart
│ ├── temanku_page.dart
│ ├── chat_history_page.dart
│ ├── room_chat_page.dart
│ ├── search_page.dart
│ ├── upload_page.dart
│ └── Widgets/ # Komponen UI reusable
│
├── const/ # Konstanta aplikasi
│ ├── colors.dart
│ └── avatars.dart
│
└── main.dart # Entry point aplikasi
UI (Pages) → BLoC (Events/States) → Repository → Service → Supabase
- Pages mengirim Event ke BLoC
- BLoC memproses logic bisnis dan memanggil Repository
- Repository mendelegasikan ke Service
- Service berkomunikasi langsung dengan Supabase (Auth, Database, Realtime, Storage)
- Hasil dikembalikan sebagai State baru ke UI
| Platform | Status |
|---|---|
| Android | ✅ Didukung penuh |
| iOS | ✅ Didukung (konfigurasi tersedia) |
| Web |
Catatan: Aplikasi ini dikembangkan dan diuji utama pada platform Android. Konfigurasi iOS tersedia namun mungkin memerlukan pengaturan tambahan (signing, capabilities). Platform Web belum dioptimasi untuk produksi.
# Clone repository
git clone <repository-url>
cd Langkara
# Install dependencies
flutter pub get
# Jalankan aplikasi
flutter runPrasyarat: Flutter SDK ^3.8.1, Dart SDK, dan koneksi ke instance Supabase yang telah dikonfigurasi.
Mohammad Rozan Hanan Andrew William Smith