dartproyektugasMahir6 mnt baca

Proyek: Todo CLI

Tugas proyek: aplikasi todo command-line dengan class dan collection.

Misi pamungkas: Todo CLI

Proyek terakhir track Dart, dan yang paling mirip aplikasi nyata. Kamu membangun aplikasi todo command-line: tambah tugas, tandai selesai, hapus, dan lihat statistik. Pola di sini (model + manager + perintah) adalah miniatur pola yang dipakai aplikasi Flutter profesional.

Kenapa proyek ini pamungkas? Karena ia menguji desain class: memisahkan data (Todo) dari pengelola (TodoApp), menangani id, dan memakai collection method (where) untuk statistik.

Spesifikasi

  1. Class Todo: field id (int), judul (String), selesai (bool, default false). Method toggle() membalik status. Method toString() mencetak format [x] 1. Bayar listrik atau [ ] 2. Beli susu.
  2. Class TodoApp: field daftar bertipe List<Todo> dan:
    • tambah(String judul): buat Todo dengan id otomatis increment (1, 2, 3...).
    • hapus(int id): hapus berdasarkan id. Jika id tidak ada, cetak pesan, jangan crash (waspadai RangeError!).
    • toggle(int id): balik status todo. Tangani id yang tidak ada.
    • tampilkan({bool? hanyaAktif}): cetak daftar rapi. Parameter named opsional: jika hanyaAktif == true, hanya tampilkan yang belum selesai.
  3. Simulasi perintah via list string: ['tambah Beli susu', 'tambah Bayar listrik', 'toggle 1', 'tampil', 'hapus 2', 'tampil', 'tampil aktif', 'keluar'].
  4. Statistik akhir: total, selesai, aktif. Hitung dengan where + length, bukan loop manual.

Contoh output yang diharapkan:

[ ] 1. Beli susu [ ] 2. Bayar listrik [x] 1. Beli susu [ ] 2. Bayar listrik Total: 2, Selesai: 1, Aktif: 1

Strategi pengerjaan

  1. Class Todo dulu: field, constructor, toggle(), toString(). Uji dengan 2 objek manual.
  2. TodoApp.tambah + tampilkan: pastikan id increment dan tampilan rapi.
  3. hapus + toggle: cari todo by id. Ingat challenge pemanasan: loop dan kembalikan null jika tidak ketemu. Jangan pakai index list sebagai id!
  4. Parser perintah: tambah <judul> (judul bisa multi-kata: gabungkan sisa split dengan join(' ')), toggle <id>, hapus <id>, tampil / tampil aktif.
  5. Statistik: daftar.where((t) => t.selesai).length.
dart
// Kerangka awal
class Todo {
  int id;
  String judul;
  bool selesai = false;

  Todo(this.id, this.judul);

  void toggle() => selesai = !selesai;

  @override
  String toString() => '[${selesai ? 'x' : ' '}] $id. $judul';
}

class TodoApp {
  List<Todo> daftar = [];
  int _idBerikutnya = 1;

  void tambah(String judul) {
    daftar.add(Todo(_idBerikutnya++, judul));
  }
  // TODO: hapus, toggle, tampilkan, statistik
}

void main() {
  var app = TodoApp();
  // TODO: simulasi perintah
}

Perhatikan _idBerikutnya: id disimpan terpisah dari index list, sehingga hapus item tidak merusak id item lain. Ini detail desain yang membedakan pemula dari yang berpikir seperti engineer.

Jebakan yang harus dihindari

  • Pakai index list sebagai id: setelah hapus item tengah, semua id bergeser. Pakai counter terpisah.
  • firstWhere tanpa orElse untuk cari id: crash jika tidak ketemu. Pakai loop manual atau orElse.
  • Lupa menangani perintah rusak: 'toggle' tanpa angka, 'tambah' tanpa judul. Validasi dulu, eksekusi kemudian.

Catatan teknis: Fokus pada desain class yang bersih dan penanganan id yang tidak ada. Proyek ini mensimulasikan pola state management sederhana yang akan sering kamu temui di Flutter: satu sumber data (daftar), method untuk mengubahnya, dan UI (tampilkan) yang membaca.

Kriteria penilaian

AI tutor menilai: class Todo & TodoApp benar (toggle, toString, id otomatis), hapus/toggle aman untuk id tak ada, parameter named opsional hanyaAktif dipakai, statistik benar via where, dan tidak ada crash untuk semua perintah contoh.

Tantangan

Pemanasan: cari by id

Buat fungsi cariTodo(List<Map<String, dynamic>> daftar, int id) yang mengembalikan Map todo atau null jika tidak ketemu (pakai loop, jangan pakai firstWhere tanpa orElse).

text
// TODO

void main() {
  var daftar = [
    {'id': 1, 'judul': 'A'},
    {'id': 2, 'judul': 'B'},
  ];
  // TODO: uji cari id 2 dan id 99
}

Tugas

Tugas: Todo CLI

Bangun aplikasi todo CLI lengkap sesuai misi: class Todo & TodoApp, id otomatis, tambah/hapus/toggle/tampilkan dengan penanganan id tak ada, dan statistik akhir. Tulis dari NOL.

Kriteria penilaian:

  • Class Todo dengan toggle() benar
  • ID otomatis increment
  • hapus/toggle aman untuk id yang tidak ada
  • Parameter named optional hanyaBelumSelesai dipakai
  • Statistik total/selesai/aktif benar

AI tutor akan memeriksa bug, kesalahan syntax, dan memberi saran perbaikan.

Kuis Bab

Uji pemahamanmu: Bab 6: Ekosistem & Proyek

Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".

1.Blok mana dalam try-catch yang SELALU dijalankan, apapun yang terjadi?

2.Keyword apa yang dipakai untuk melempar exception di Dart?

3.Perintah apa untuk menambah package dari pub.dev ke project Dart?

4.Diberikan import 'matematika.dart' as m;, bagaimana cara memanggil fungsi tambah dari library itu?

5.Dalam proyek kalkulator CLI, struktur data apa yang dipakai untuk menyimpan riwayat operasi?