# Skill Layer — Framework: Flutter

File ini menginstruksikan AI tentang *best practices* mutakhir untuk pengembangan aplikasi mobile menggunakan **Flutter**. Gunakan skill ini agar AI menulis kode Dart yang optimal, menghindari *widget tree* raksasa, dan menerapkan manajemen *state* yang bersih.

---

## Arsitektur & Paradigma Utama
- **State Management Terpusat:** Hindari penggunaan `setState` untuk logika bisnis yang kompleks. Disarankan menggunakan **Riverpod** atau **BLoC** untuk memisahkan UI dari *business logic*.
- **Widget Decomposition:** Dilarang keras membuat fungsi `build()` yang bersarang (nested) hingga ratusan baris. Pecah UI menjadi *custom Widget classes* (stateless/stateful), BUKAN sekadar fungsi yang me-return widget.
- **Responsivitas UI:** Gunakan `LayoutBuilder`, `MediaQuery`, atau paket responsif (seperti `flutter_screenutil`) untuk memastikan UI tampil sempurna di berbagai ukuran layar (mobile & tablet).

## Standar Penulisan Kode (Dart)
1. **Const Constructors:** Secara eksplisit dan proaktif gunakan *keyword* `const` pada widget yang tidak berubah. Ini sangat vital untuk mengoptimalkan performa *render/rebuild*.
2. **Asynchronous Operations:** Tangani *Future* dan *Stream* secara disiplin. Wajib menggunakan blok `try-catch` saat memanggil API, dan selalu perbarui state UI (misal: mematikan *loading indicator*) di blok `finally`.
3. **Data Models & Parsing:** Gunakan pustaka *code generation* seperti `freezed` dan `json_serializable` untuk memodelkan data dari API, menghindari *parsing* JSON manual yang rentan *typo* dan error.
4. **Kerapian Kode:** Patuhi aturan *linting* bawaan `flutter_lints`. Hindari *force unwrap* (`!`) pada *nullable variables* kecuali Anda 100% yakin nilainya tidak `null`.

## Guardrails Keamanan & Performa
- Jangan pernah menyimpan token rahasia atau kredensial API secara *hardcode*. Gunakan pustaka seperti `flutter_secure_storage` untuk menyimpan data sensitif.
- Hindari memblokir *Main UI Thread*. Untuk perhitungan matematis berat atau manipulasi data besar, delegasikan tugas tersebut ke *Isolate* (menggunakan `compute()`).
