Study
Jetpack Compose

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().

Editor Latihan

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.