ViewModel & State Management
Penjelasan
remember { } kehilangan state-nya kalau Activity di-recreate (mis. rotasi layar) — ViewModel (bagian Android Architecture Components, BUKAN spesifik Compose) menyimpan state yang BERTAHAN melewati perubahan konfigurasi seperti itu. StateFlow di dalam ViewModel diobservasi Composable lewat collectAsState().
Contoh Konsep
class CounterViewModel : ViewModel() {
private val _jumlah = MutableStateFlow(0)
val jumlah: StateFlow<Int> = _jumlah
fun tambah() {
_jumlah.value++
}
}
@Composable
fun Counter(viewModel: CounterViewModel = viewModel()) {
val jumlah by viewModel.jumlah.collectAsState()
Column {
Text("Jumlah: $jumlah")
Button(onClick = { viewModel.tambah() }) { Text("Tambah") }
}
}
Praktikum
Buat ArtikelViewModel dengan MutableStateFlow<List<String>> _artikel kosong, dan method tambahArtikel(judul: String) yang menambahkannya. Tulis contoh Composable yang mengobservasi lewat collectAsState().
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Properti StateFlow biasanya dibuat DUA VERSI: _jumlah (MutableStateFlow, private, bisa diubah HANYA dari dalam ViewModel) dan jumlah (StateFlow biasa, public, READ-ONLY untuk Composable) — pola ini mencegah Composable mengubah state ViewModel LANGSUNG dari luar, semua perubahan harus lewat method ViewModel yang eksplisit.