Terakhir diperbarui: 18 Oktober 2026
Setelah menyelesaikan codelab ini, mahasiswa mampu:
flutter analyze dan test;docs/ai-log.md.week5_offline_notes atau campus_notify hasil refactor Minggu 7). Codelab ini menambah satu fitur kecil dengan AI, bukan membuat project baru.AI mengusulkan, developer memutuskan:
1. Prompt -> instruksi + konteks proyek
2. Generate -> AI mengusulkan kode
3. Verify -> baca, grep, cek API nyata
4. Test -> analyze + unit/widget test
5. Refactor -> rapikan ke Clean Architecture
6. Explain -> jelaskan tanpa buka AI
Gagal di langkah 3-6 berarti vibe coding: cepat di awal, mahal di akhir.
| Area | Contoh | Sikap |
|---|---|---|
| Kuat | Boilerplate, pola umum, draft test, docs | Manfaatkan, tetap uji |
| Lemah | API baru, versi package, logika bisnis khusus | Verifikasi ekstra |
| Berbahaya | Token auth, query SQL, aturan keamanan | Jangan tempel secret; tulis manual |
controller.searchFuzzy() yang tidak ada. Cek via autocomplete IDE dan pub.dev.pubspec memakai v3. Cek pubspec.lock dan CHANGELOG.Satu prompt baik mengisi lima slot secara singkat:
Peran: senior Flutter dev
Konteks: feature-first, Riverpod, SQLite+Dio
Tugas: tambah search judul notes + empty state
Batas: jangan ubah arsitektur, maks 80 baris
Output: kode + 3 test case + cara uji
buruk: "buatkan search notes yang keren"
baik: "Tambah search judul notes.
Arsitektur: presentation->domain<-data.
Jangan panggil SQLite dari widget.
Sertakan empty state + 1 widget test."
Prompt kabur menghasilkan kode kabur yang sulit diuji.
pubspec.yaml.Minta AI membuat pencarian judul notes lengkap dengan empty state. Batasi satu fitur agar mudah diverifikasi. Simpan prompt mentah dan output awal AI ke docs/ai-log.md.
domain/ bebas dari Flutter/Dio/SQLite.flutter analyze sampai nol warning.test('filter abaikan huruf besar/kecil', () {
expect(filterNotes(list, 'belanja'), hasLength(2));
});
test('query tak cocok kembalikan kosong', () {
expect(filterNotes(list, 'zzz-tak-ada'), isEmpty);
});
1. Reproduksi: langkah + input pemicu bug
2. Isolasi: pindah filter ke use case murni
3. Test merah: buat test gagal pembukti bug
4. Perbaiki kecil, jalankan test + analyze
5. Catat akar masalah di docs/ai-log.md
Jangan mengulang prompt fix dong tanpa bukti error atau test gagal.
widget (UI saja)
-> notifier (state saja)
-> use case (aturan filter/search)
-> repository (SQLite / Dio)
Pecah fungsi di atas 40 baris dan pastikan tidak ada panggilan database dari widget.
flutter analyze
dart format --set-exit-if-changed .
flutter test
AI boleh menjadi generator dan reviewer awal yang cepat, tetapi Anda yang memutuskan mana yang diterima, ditolak, atau disederhanakan.
Minta AI mereview kode search Anda:
Review kode search Flutter ini sebagai senior dev.
Konteks: feature-first (presentation->domain<-data),
Riverpod, SQLite + Dio.
Fokus: kebenaran, arsitektur, test. Abaikan style.
Beri 3 temuan + level blocker/saran + alasan.
flutter test test/search_filter_test.dart
# + 1 widget test untuk empty state
# + uji manual 3 query + screenshot
| Gejala | Penyebab umum | Solusi |
|---|---|---|
| Method tidak ada | Halusinasi API | Cek pub.dev + autocomplete |
| Import lintas layer | Konteks kurang | Tegaskan batas + refactor |
| Semua test merah | Prompt terlalu besar | Minta 1 fitur kecil + 1 test |
| Prompt diulang terus | Tanpa reproduksi | Tulis langkah + test merah |
| Tak bisa menjelaskan | Terima mentah | Baca ulang + sederhanakan |
docs/ai-log.md.flutter analyze bersih, flutter test hijau.docs/ai-log.md.flutter analyze + flutter test di README.09-week-9-ai-assisted-development/ berisi docs/, README.md, screenshots/. README menjelaskan fitur, prompt, stack, cara jalan, dan hasil.