āϰāĻžāĻœā§āϝ āĻāĻŦāĻ‚ āĻœā§‡āϟāĻĒā§āϝāĻžāĻ• āϰāϚāύāĻž

āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāĻžāύ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻšāϞ āϝ⧇āϕ⧋āύ⧋ āĻŽāĻžāύ āϝāĻž āϏāĻŽāϝāĻŧ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϖ⧁āĻŦ āĻŦāĻŋāĻ¸ā§āϤ⧃āϤ āϏāĻ‚āĻœā§āĻžāĻž āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϰ⧁āĻŽ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏāĻŦāĻ•āĻŋāϛ⧁āϕ⧇ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧇āĨ¤

āϏāĻŽāĻ¸ā§āϤ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āĻ…ā§āϝāĻžāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰ⧇āĨ¤ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āĻ…ā§āϝāĻžāĻĒ⧇ āϰāĻžāĻœā§āϝ⧇āϰ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ:

  • āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ¨ā§āϝāĻžāĻ•āĻŦāĻžāϰ āϝāĻž āĻĻ⧇āĻ–āĻžāϝāĻŧ āĻ•āĻ–āύ āĻāĻ•āϟāĻŋ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āύāĻžā§ˇ
  • āĻāĻ•āϟāĻŋ āĻŦā§āϞāĻ— āĻĒā§‹āĻ¸ā§āϟ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻŽāĻ¨ā§āϤāĻŦā§āϝ.
  • āĻŦā§‹āϤāĻžāĻŽā§‡ āϰāĻŋāĻĒāϞ āĻ…ā§āϝāĻžāύāĻŋāĻŽā§‡āĻļāύ āϝāĻž āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϞ⧇ āĻĒā§āϞ⧇ āĻšāϝāĻŧāĨ¤
  • āĻ¸ā§āϟāĻŋāĻ•āĻžāϰ āϝāĻž āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋāϰ āωāĻĒāϰ⧇ āφāρāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻœā§‡āϟāĻĒā§āϝāĻžāĻ• āϰāϚāύāĻž āφāĻĒāύāĻžāϕ⧇ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āĻ…ā§āϝāĻžāĻĒ⧇ āϕ⧋āĻĨāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžā§āϚāϝāĻŧ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟ āĻšāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤ āĻāχ āĻ—āĻžāχāĻĄāϟāĻŋ āĻ¸ā§āĻŸā§‡āϟ āĻāĻŦāĻ‚ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻ‚āϝ⧋āϗ⧇āϰ āωāĻĒāϰ āĻāĻŦāĻ‚ āĻœā§‡āϟāĻĒā§āϝāĻžāĻ• āĻ•āĻŽā§āĻĒā§‹āϜ āϝ⧇ APIāϗ⧁āϞāĻŋāϕ⧇ āφāϰāĻ“ āϏāĻšāĻœā§‡ āϰāĻžāĻœā§āϝ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦ āĻĻ⧇āϝāĻŧ āϤāĻžāϰ āωāĻĒāϰ āĻĢā§‹āĻ•āĻžāϏ āĻ•āϰ⧇āĨ¤

āϰāĻžāĻˇā§āĻŸā§āϰ āĻāĻŦāĻ‚ āϰāϚāύāĻž

āϰāϚāύāĻžāϟāĻŋ āĻ˜ā§‹āώāĻŖāĻžāĻŽā§‚āϞāĻ• āĻāĻŦāĻ‚ āĻāϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻžāϰ āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āωāĻĒāĻžāϝāĻŧ āĻšāϞ āύāϤ⧁āύ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āχ āĻ•āĻŽā§āĻĒā§‹āϜāϝ⧋āĻ—ā§āϝ āĻ•āϞ āĻ•āϰāĻžāĨ¤ āĻāχ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻšāϞ UI āϰāĻžāĻœā§āϝ⧇āϰ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāĻ¤ā§āĻŦāĨ¤ āϝ⧇ āϕ⧋āύ āϏāĻŽāϝāĻŧ āĻāĻ•āϟāĻŋ āϰāĻžāĻˇā§āĻŸā§āϰ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻ•āϟāĻŋ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ āϏāĻžā§āϚāĻžāϞāĻŋāϤ āĻšāϝāĻŧ. āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ, TextField āĻŽāϤ⧋ āϜāĻŋāύāĻŋāϏāϗ⧁āϞāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āφāĻĒāĻĄā§‡āϟ āĻšāϝāĻŧ āύāĻž āϝ⧇āĻŽāύ āϤāĻžāϰāĻž āĻ…āĻĒāϰāĻŋāĻšāĻžāĻ°ā§āϝ XML āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ­āĻŋāωāϤ⧇ āĻ•āϰ⧇āĨ¤ āϏ⧇āχ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞāϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āύāϤ⧁āύ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻŦāϞāϤ⧇ āĻšāĻŦ⧇āĨ¤

@Composable
private fun HelloContent() {
    Column(modifier = Modifier.padding(16.dp)) {
        Text(
            text = "Hello!",
            modifier = Modifier.padding(bottom = 8.dp),
            style = MaterialTheme.typography.bodyMedium
        )
        OutlinedTextField(
            value = "",
            onValueChange = { },
            label = { Text("Name") }
        )
    }
}

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāϟāĻŋ āϚāĻžāϞāĻžāύ āĻāĻŦāĻ‚ āĻĒāĻžāĻ ā§āϝ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇āύ, āφāĻĒāύāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ āϝ⧇ āĻ•āĻŋāϛ⧁āχ āĻšāĻŦ⧇ āύāĻžāĨ¤ āĻāϰ āĻ•āĻžāϰāĻŖ TextField āύāĻŋāĻœā§‡āϕ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇ āύāĻž - āĻāϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻšāϝāĻŧ āϝāĻ–āύ āĻāϰ value āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡ āĻ•āĻŽā§āĻĒā§‹āϜāĻŋāĻļāύ āĻāĻŦāĻ‚ āϰāĻŋāĻ•āĻŽā§āĻĒā§‹āϜāĻŋāĻļāύ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āϤāĻžāϰ āĻ•āĻžāϰāϪ⧇āĨ¤

āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āϰāϚāύāĻž āĻāĻŦāĻ‚ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇, āϰāϚāύāĻžāϝāĻŧ āϚāĻŋāĻ¨ā§āϤāĻžāĻ­āĻžāĻŦāύāĻž āĻĻ⧇āϖ⧁āύāĨ¤

āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āϰāĻžāĻœā§āϝ

āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āĻĢāĻžāĻ‚āĻļāύ āĻŽā§‡āĻŽāϰāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ remember API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ remember āĻĻā§āĻŦāĻžāϰāĻž āĻ—āĻŖāύāĻž āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻŽāĻžāύ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āϰāϚāύāĻžāϰ āϏāĻŽāϝāĻŧ āĻ•āĻŽā§āĻĒā§‹āϜāĻŋāĻļāύ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻŽāĻžāύāϟāĻŋ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ⧇āϰ āϏāĻŽāϝāĻŧ āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ remember āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ āωāĻ­āϝāĻŧ āĻŦāĻ¸ā§āϤ⧁ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

mutableStateOf āĻāĻ•āϟāĻŋ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖāϝ⧋āĻ—ā§āϝ MutableState<T> āϤ⧈āϰāĻŋ āĻ•āϰ⧇, āϝāĻž āĻ•āĻŽā§āĻĒā§‹āϜ āϰāĻžāύāϟāĻžāχāĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻāĻ•āϟāĻŋ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖāϝ⧋āĻ—ā§āϝ āĻĒā§āϰāĻ•āĻžāϰāĨ¤

interface MutableState<T> : State<T> {
    override var value: T
}

value āĻĒāĻĄāĻŧāĻž āϝ⧇ āϕ⧋āύ⧋ āĻ•āĻŽā§āĻĒā§‹āϜāϝ⧋āĻ—ā§āϝ āĻĢāĻžāĻ‚āĻļāύ āĻāϰ value āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ āϕ⧋āύ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ.

āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇ āĻāĻ•āϟāĻŋ MutableState āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāĻžāϰ āϤāĻŋāύāϟāĻŋ āωāĻĒāĻžāϝāĻŧ āϰāϝāĻŧ⧇āϛ⧇:

  • val mutableState = remember { mutableStateOf(default) }
  • var value by remember { mutableStateOf(default) }
  • val (value, setValue) = remember { mutableStateOf(default) }

āĻāχ āĻ˜ā§‹āώāĻŖāĻžāϗ⧁āϞāĻŋ āϏāĻŽāϤ⧁āĻ˛ā§āϝ, āĻāĻŦāĻ‚ āϰāĻžāĻˇā§āĻŸā§āϰ⧇āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ āϚāĻŋāύāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āϝ⧇ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āϞāĻŋāĻ–āϛ⧇āύ āϤāĻžāϤ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāĻœā§‡ āĻĒāĻĄāĻŧāĻžāϰ āϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŦ⧇āϛ⧇ āύ⧇āĻ“āϝāĻŧāĻž āωāϚāĻŋāϤāĨ¤

by āĻĄā§‡āϞāĻŋāϗ⧇āϟ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āφāĻŽāĻĻāĻžāύāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ:

import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue

āϕ⧋āύ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞāϗ⧁āϞāĻŋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāĻŦ⧇ āϤāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āφāĻĒāύāĻŋ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻŦāĻž āĻāĻŽāύāĻ•āĻŋ āĻŦāĻŋāĻŦ⧃āϤāĻŋāϤ⧇ āϝ⧁āĻ•ā§āϤāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŽāύ⧇ āϰāĻžāĻ–āĻž āĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āύāĻžāĻŽāϟāĻŋ āĻ–āĻžāϞāĻŋ āĻĨāĻžāĻ•āϞ⧇ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ…āĻ­āĻŋāĻŦāĻžāĻĻāύāϟāĻŋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāϤ⧇ āύāĻž āϚāĻžāύ āϤāĻŦ⧇ āĻāĻ•āϟāĻŋ if āĻŦāĻŋāĻŦ⧃āϤāĻŋāϤ⧇ āϰāĻžāĻˇā§āĻŸā§āϰāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ:

@Composable
fun HelloContent() {
    Column(modifier = Modifier.padding(16.dp)) {
        var name by remember { mutableStateOf("") }
        if (name.isNotEmpty()) {
            Text(
                text = "Hello, $name!",
                modifier = Modifier.padding(bottom = 8.dp),
                style = MaterialTheme.typography.bodyMedium
            )
        }
        OutlinedTextField(
            value = name,
            onValueChange = { name = it },
            label = { Text("Name") }
        )
    }
}

āϝāĻĻāĻŋāĻ“ remember āφāĻĒāύāĻžāϕ⧇ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ āϜ⧁āĻĄāĻŧ⧇ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāĻ–āϤ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰ⧇, āϤāĻŦ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ āϰāĻžāĻœā§āϝāϟāĻŋ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāĻ–āĻž āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ rememberSaveable āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ rememberSaveable āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϝ⧇ āϕ⧋āύāĻ“ āĻŽāĻžāύ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇ āϝāĻž āĻāĻ•āϟāĻŋ Bundle āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻŽāĻžāύāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āϏ⧇āĻ­āĻžāϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻĒāĻžāϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āϰāĻžāĻˇā§āĻŸā§āϰ⧇āϰ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āĻĒā§āϰāĻ•āĻžāϰ

āϰāϚāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ āϝ⧇ āφāĻĒāύāĻŋ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āϧāϰ⧇ āϰāĻžāĻ–āϤ⧇ MutableState<T> āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ; āĻāϟāĻŋ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖāϝ⧋āĻ—ā§āϝ āϧāϰāύ⧇āϰ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇āĨ¤ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡ āφāϰ⧇āĻ•āϟāĻŋ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖāϝ⧋āĻ—ā§āϝ āϟāĻžāχāĻĒ āĻĒāĻĄāĻŧāĻžāϰ āφāϗ⧇, āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ State<T> āĻ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞāϗ⧁āϞāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āĻŽā§āĻĒā§‹āϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻ–āύ āĻ¸ā§āĻŸā§‡āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧāĨ¤

Android āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāĻžāύāϗ⧁āϞāĻŋāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āϏāĻžāϧāĻžāϰāĻŖ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖāϝ⧋āĻ—ā§āϝ āĻĒā§āϰāĻ•āĻžāϰāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ State<T> āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĢāĻžāĻ‚āĻļāύ āϏāĻš āϜāĻžāĻšāĻžāϜāϗ⧁āϞāĻŋ āϰāϚāύāĻž āĻ•āϰ⧁āύ⧎ āĻāχ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āφāϗ⧇, āύ⧀āĻšā§‡āϰ āϰ⧂āĻĒāϰ⧇āĻ–āĻž āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āωāĻĒāϝ⧁āĻ•ā§āϤ āύāĻŋāĻĻāĻ°ā§āĻļāύ (āϗ⧁āϞāĻŋ) āϝ⧋āĻ— āĻ•āϰ⧁āύ:

  • Flow : collectAsStateWithLifecycle()

    collectAsStateWithLifecycle() āĻāĻ•āϟāĻŋ āϞāĻžāχāĻĢāϏāĻžāχāϕ⧇āϞ-āϏāĻšā§‡āϤāύ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ Flow āĻĨ⧇āϕ⧇ āĻŽāĻžāύ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰ⧇, āϝāĻž āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϕ⧇ āĻ…ā§āϝāĻžāĻĒ āϏāĻ‚āĻ¸ā§āĻĨāĻžāύ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāϟāĻŋ āĻ•āĻŽā§āĻĒā§‹āϜ State āĻĨ⧇āϕ⧇ āϏāĻ°ā§āĻŦāĻļ⧇āώ āύāĻŋāĻ°ā§āĻ—āϤ āĻŽāĻžāύ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇āĨ¤ Android āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāĻžāύāϗ⧁āϞāĻŋāϤ⧇ āĻĢā§āϞ⧋ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āωāĻĒāĻžāϝāĻŧ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻāχ APIāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ⧎

    build.gradle āĻĢāĻžāχāϞ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ (āĻāϟāĻŋ 2.6.0-beta01 āĻŦāĻž āύāϤ⧁āύ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ):

āϕ⧋āϟāϞāĻŋāύ

dependencies {
      ...
      implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.7")
}

āĻ—ā§āϰ⧋āĻ­āĻŋ

dependencies {
      ...
      implementation "androidx.lifecycle:lifecycle-runtime-compose:2.8.7"
}
  • Flow : collectAsState()

    collectAsState āĻšāϞ collectAsStateWithLifecycle āĻāϰ āĻ…āύ⧁āϰ⧂āĻĒ, āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ Flow āĻĨ⧇āϕ⧇ āĻŽāĻžāύ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ•āĻŽā§āĻĒā§‹āϜ State āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻ•āϰ⧇āĨ¤

    āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ-āĻ…āĻœā§āĻžā§‡āϝāĻŧāĻŦāĻžāĻĻā§€ āϕ⧋āĻĄā§‡āϰ āϜāĻ¨ā§āϝ collectAsStateWithLifecycle āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ collectAsState āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ, āϝāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ Android-āĻāϰ āϜāĻ¨ā§āϝāĨ¤

    collectAsState āϜāĻ¨ā§āϝ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ, āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ compose-runtime āωāĻĒāϞāĻŦā§āϧāĨ¤

  • LiveData : observeAsState()

    observeAsState() āĻāχ LiveData āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āĻāĻŦāĻ‚ State āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāϰ āĻŽāĻžāύāϗ⧁āϞāĻŋāϕ⧇ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇āĨ¤

    build.gradle āĻĢāĻžāχāϞ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ:

āϕ⧋āϟāϞāĻŋāύ

dependencies {
      ...
      implementation("androidx.compose.runtime:runtime-livedata:1.9.0")
}

āĻ—ā§āϰ⧋āĻ­āĻŋ

dependencies {
      ...
      implementation "androidx.compose.runtime:runtime-livedata:1.9.0"
}
  • RxJava2 : subscribeAsState()

    subscribeAsState() āĻšāϞ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĢāĻžāĻ‚āĻļāύ āϝāĻž RxJava2 āĻāϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻļā§€āϞ āĻ¸ā§āĻŸā§āϰ⧀āĻŽāϗ⧁āϞāĻŋāϕ⧇ (āϝ⧇āĻŽāύ Single , Observable , Completable ) āĻ•āĻŽā§āĻĒā§‹āϜ State āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻ•āϰ⧇āĨ¤

    build.gradle āĻĢāĻžāχāϞ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ:

āϕ⧋āϟāϞāĻŋāύ

dependencies {
      ...
      implementation("androidx.compose.runtime:runtime-rxjava2:1.9.0")
}

āĻ—ā§āϰ⧋āĻ­āĻŋ

dependencies {
      ...
      implementation "androidx.compose.runtime:runtime-rxjava2:1.9.0"
}
  • RxJava3 : subscribeAsState()

    subscribeAsState() āĻšāϞ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĢāĻžāĻ‚āĻļāύ āϝāĻž RxJava3 āĻāϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻļā§€āϞ āĻ¸ā§āĻŸā§āϰ⧀āĻŽāϗ⧁āϞāĻŋāϕ⧇ (āϝ⧇āĻŽāύ Single , Observable , Completable ) āĻ•āĻŽā§āĻĒā§‹āϜ State āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻ•āϰ⧇āĨ¤

    build.gradle āĻĢāĻžāχāϞ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ:

āϕ⧋āϟāϞāĻŋāύ

dependencies {
      ...
      implementation("androidx.compose.runtime:runtime-rxjava3:1.9.0")
}

āĻ—ā§āϰ⧋āĻ­āĻŋ

dependencies {
      ...
      implementation "androidx.compose.runtime:runtime-rxjava3:1.9.0"
}

āϰāĻžāĻˇā§āĻŸā§āϰ⧀āϝāĻŧ āĻŦāύāĻžāĻŽ āϰāĻžāĻˇā§āĻŸā§āϰāĻšā§€āύ

āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āϝāĻž āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ remember āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧇, āϝāĻž āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞāϕ⧇ āϰāĻžāĻˇā§āĻŸā§āϰ⧀āϝāĻŧ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤ HelloContent āĻšāϞ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‡āϟāĻĢ⧁āϞ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖāĻ­āĻžāĻŦ⧇ āĻāϰ name āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϧāĻžāϰāĻŖ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻāĻŽāύ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇ āωāĻĒāϝ⧋āĻ—ā§€ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇āĻ–āĻžāύ⧇ āĻāĻ•āϜāύ āĻ•āϞāĻžāϰāϕ⧇ āϰāĻžāĻˇā§āĻŸā§āϰ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ āύāĻž āĻāĻŦāĻ‚ āϰāĻžāĻˇā§āĻŸā§āϰāϕ⧇ āύāĻŋāĻœā§‡āϰāĻžāχ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āύāĻž āĻ•āϰ⧇āχ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϏāĻš āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞāϗ⧁āϞāĻŋ āĻ•āĻŽ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻ•āĻ āĻŋāύāĨ¤

āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‡āϟāϞ⧇āϏ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āĻšāϞ āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āϝāĻž āϕ⧋āύ⧋ āĻ¸ā§āĻŸā§‡āϟ āϧāϰ⧇ āύāĻžāĨ¤ āϰāĻžāĻˇā§āĻŸā§āϰāĻšā§€āύāϤāĻž āĻ…āĻ°ā§āϜāύ⧇āϰ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āωāĻĒāĻžāϝāĻŧ āĻšāϞ āϰāĻžāĻˇā§āĻŸā§āϰ āωāĻ¤ā§āϤ⧋āϞāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāĨ¤

āφāĻĒāύāĻŋ āĻĒ⧁āύāσāĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇, āφāĻĒāύāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻāĻ•āχ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‡āϟāĻĢ⧁āϞ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‡āϟāϞ⧇āϏ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āϚāĻžāύāĨ¤ āĻ¸ā§āĻŸā§‡āϟāĻĢ⧁āϞ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ āĻāĻŽāύ āĻ•āϞāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āϝ⧇āϗ⧁āϞāĻŋ āϰāĻžāĻˇā§āĻŸā§āϰ⧇āϰ āĻŦāĻŋāώāϝāĻŧ⧇ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰ⧇ āύāĻž āĻāĻŦāĻ‚ āϰāĻžāĻˇā§āĻŸā§āϰāϕ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āĻŦāĻž āωāĻ¤ā§āϤ⧋āϞāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŽāύ āĻ•āϞāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āϰāĻžāĻˇā§āĻŸā§āϰāĻšā§€āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāĨ¤

āϰāĻžāĻœā§āϝ āωāĻ¤ā§āϤ⧋āϞāύ

āĻ•āĻŽā§āĻĒā§‹āĻœā§‡ āĻ¸ā§āĻŸā§‡āϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻšāϞ āĻāĻ•āϟāĻŋ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āĻ¸ā§āĻŸā§‡āϟāϞ⧇āϏ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āĻ•āϞāĻžāϰ⧇ āĻ¸ā§āĻŸā§‡āϟ āϏāϰāĻžāύ⧋āϰ āĻāĻ•āϟāĻŋ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύāĨ¤ āĻœā§‡āϟāĻĒā§āϝāĻžāĻ• āĻ•āĻŽā§āĻĒā§‹āĻœā§‡ āĻ¸ā§āĻŸā§‡āϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻāϰ āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻšāϞ āĻ¸ā§āĻŸā§‡āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϕ⧇ āĻĻ⧁āϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž:

  • value: T : āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻŽāĻžāύ
  • onValueChange: (T) -> Unit : āĻāĻ•āϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āϝāĻž āĻŽāĻžāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰ⧇, āϝ⧇āĻ–āĻžāύ⧇ T āĻšāϞ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āύāϤ⧁āύ āĻŽāĻžāύ

āϝāĻžāχāĻšā§‹āĻ•, āφāĻĒāύāĻŋ onValueChange āĻ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āύāύāĨ¤ āϝāĻĻāĻŋ āφāϰāĻ“ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϘāϟāύāĻžāϗ⧁āϞāĻŋ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āϜāĻ¨ā§āϝ āωāĻĒāϝ⧁āĻ•ā§āϤ āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ˛ā§āϝāĻžāĻŽā§āĻŦāĻĄāĻžāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧇āϗ⧁āϞāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤

āĻāχāĻ­āĻžāĻŦ⧇ āωāĻ¤ā§āϤ⧋āϞāĻŋāϤ āϰāĻžāĻœā§āϝ⧇āϰ āĻ•āĻŋāϛ⧁ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϰāϝāĻŧ⧇āϛ⧇:

  • āϏāĻ¤ā§āϝ⧇āϰ āĻāĻ•āĻ• āωāĻ¤ā§āϏ: āĻāϟāĻŋāϕ⧇ āύāĻ•āϞ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āϰāĻžāĻœā§āϝāϕ⧇ āϏāϰāĻŋāϝāĻŧ⧇ āĻĻāĻŋāϝāĻŧ⧇, āφāĻŽāϰāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻ›āĻŋ āϝ⧇ āϏāĻ¤ā§āϝ⧇āϰ āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āωāĻ¤ā§āϏ āϰāϝāĻŧ⧇āϛ⧇⧎ āĻāϟāĻŋ āĻŦāĻžāĻ— āĻāĻĄāĻŧāĻžāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤
  • āĻāύāĻ•ā§āϝāĻžāĻĒāϏ⧁āϞ⧇āĻŸā§‡āĻĄ: āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ¸ā§āĻŸā§‡āϟāĻĢ⧁āϞ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āϤāĻžāĻĻ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϟāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖāĨ¤
  • āĻ­āĻžāĻ— āĻ•āϰāĻž āϝāĻžāϝāĻŧ: āωāĻ¤ā§āϤ⧋āϞāĻŋāϤ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āϏāĻžāĻĨ⧇ āĻ­āĻžāĻ— āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ name āĻĒāĻĄāĻŧāϤ⧇ āϚāĻžāύ, āωāĻ¤ā§āϤ⧋āϞāύ āφāĻĒāύāĻžāϕ⧇ āĻāϟāĻŋ āĻ•āϰāϤ⧇ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āĻŦ⧇āĨ¤
  • āχāĻ¨ā§āϟāĻžāϰāϏ⧇āĻĒā§āĻŸā§‡āĻŦāϞ: āĻ¸ā§āĻŸā§‡āϟāϞ⧇āϏ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇ āĻ•āϞāĻ•āĻžāϰ⧀āϰāĻž āĻ¸ā§āĻŸā§‡āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āφāϗ⧇ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϕ⧇ āωāĻĒ⧇āĻ•ā§āώāĻž āĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āĻĄāĻŋāĻ•āĻĒāϞāĻĄ: āĻ¸ā§āĻŸā§‡āϟāϞ⧇āϏ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻŸā§‡āϟ āϝ⧇ āϕ⧋āύ⧋ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāĻ–āύ āĻāĻ•āϟāĻŋ ViewModel āĻ name āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦāĨ¤

āωāĻĻāĻžāĻšāϰāϪ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻĒāύāĻŋ HelloContent āĻĨ⧇āϕ⧇ name āĻāĻŦāĻ‚ onValueChange āĻŦ⧇āϰ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ HelloScreen āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇ āύāĻŋāϝāĻŧ⧇ āϝāĻžāύ āϝ⧇āϟāĻŋāϕ⧇ HelloContent āĻŦāϞ⧇āĨ¤

@Composable
fun HelloScreen() {
    var name by rememberSaveable { mutableStateOf("") }

    HelloContent(name = name, onNameChange = { name = it })
}

@Composable
fun HelloContent(name: String, onNameChange: (String) -> Unit) {
    Column(modifier = Modifier.padding(16.dp)) {
        Text(
            text = "Hello, $name",
            modifier = Modifier.padding(bottom = 8.dp),
            style = MaterialTheme.typography.bodyMedium
        )
        OutlinedTextField(value = name, onValueChange = onNameChange, label = { Text("Name") })
    }
}

HelloContent āĻāϰ āĻŦāĻžāχāϰ⧇ āϰāĻžāĻœā§āϝāϟāĻŋāϕ⧇ āωāĻ¤ā§āϤ⧋āϞāύ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡, āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϝ⧁āĻ•ā§āϤāĻŋ āĻ•āϰāĻž, āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇ āĻāϟāĻŋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āϏāĻšāϜāĨ¤ HelloContent āĻāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāϝāĻŧ āϤāĻž āĻĨ⧇āϕ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻĄāĻŋāĻ•āĻĒāϞāĻŋāĻ‚ āĻāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ āϝ⧇ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ HelloScreen āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻŦāĻž āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ HelloContent āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ āϤāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āύāĻžāĨ¤

āϝ⧇ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ⧇ āĻ¸ā§āĻŸā§‡āϟ āύāĻŋāĻšā§‡ āϝāĻžāϝāĻŧ, āĻāĻŦāĻ‚ āϘāϟāύāĻž āωāĻĒāϰ⧇ āϝāĻžāϝāĻŧ āϤāĻžāϕ⧇ āĻŦāϞāĻž āĻšāϝāĻŧ āĻāĻ•āĻŽā§āĻ–ā§€ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻŦāĻžāĻš āĨ¤ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻ¸ā§āĻŸā§‡āϟ HelloScreen āĻĨ⧇āϕ⧇ HelloContent āĻ āύ⧇āĻŽā§‡ āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āχāϭ⧇āĻ¨ā§āϟ HelloContent āĻĨ⧇āϕ⧇ HelloScreen āĻ āϚāϞ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻāĻ•āĻŽā§āĻ–ā§€ āĻĄā§‡āϟāĻž āĻĢā§āϞ⧋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇, āφāĻĒāύāĻŋ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞāϗ⧁āϞāĻŋāϕ⧇ āĻĄāĻŋāĻ•āĻĒāϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻ…āĻ‚āĻļāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ UI-āϤ⧇ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻĻ⧇āĻ–āĻžāϝāĻŧ āϝāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇āĨ¤

āφāϰāĻ“ āϜāĻžāύāϤ⧇ āϰāĻžāĻœā§āϝ⧇āϰ āĻĒ⧃āĻˇā§āĻ āĻžāϟāĻŋ āϕ⧋āĻĨāĻžāϝāĻŧ āωāĻ¤ā§āϤ⧋āϞāύ āĻ•āϰāĻŦ⧇āύ āϤāĻž āĻĻ⧇āϖ⧁āύāĨ¤

āϰāϚāύāĻžāϝāĻŧ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

rememberSaveable āĻāĻĒāĻŋāφāχ remember āĻŽāϤ⧋ āφāϚāϰāĻŖ āĻ•āϰ⧇ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āχāύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϏ āĻ¸ā§āĻŸā§‡āϟ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ āϜ⧁āĻĄāĻŧ⧇ āĻāĻŦāĻ‚ āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ āĻŦāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻŋāύ⧋āĻĻāύ āϜ⧁āĻĄāĻŧ⧇ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻŦāϜāĻžāϝāĻŧ āϰāĻžāϖ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāϟāĻŋ āϘāĻŸā§‡, āϝāĻ–āύ āĻ¸ā§āĻ•ā§āϰāĻŋāύāϟāĻŋ āĻ˜ā§‹āϰāĻžāύ⧋ āĻšāϝāĻŧāĨ¤

āϰāĻžāĻˇā§āĻŸā§āϰ āϏāĻ‚āϰāĻ•ā§āώāϪ⧇āϰ āωāĻĒāĻžāϝāĻŧ

Bundle āϝ⧋āĻ— āĻ•āϰāĻž āϏāĻŽāĻ¸ā§āϤ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻ•āĻžāϰ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύ āϝāĻž Bundle āϝ⧋āĻ— āĻ•āϰāĻž āϝāĻžāϝāĻŧ āύāĻž, āϏ⧇āĻ–āĻžāύ⧇ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āĻĒāĻžāĻ°ā§āϏ⧇āϞāĻžāχāϜ āĻ•āϰ⧁āύ

āϏāĻšāϜ āϏāĻŽāĻžāϧāĻžāύ āĻšāϞ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ @Parcelize āĻŸā§€āĻ•āĻž āϝ⧋āĻ— āĻ•āϰāĻžāĨ¤ āĻŦāĻ¸ā§āϤ⧁āϟāĻŋ parcelable āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āĻāĻŦāĻ‚ āĻŦāĻžāĻ¨ā§āĻĄāĻŋāϞ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāχ āϕ⧋āĻĄāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒāĻžāĻ°ā§āϏ⧇āϞāϝ⧋āĻ—ā§āϝ City āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϰāĻžāĻœā§āϝ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇āĨ¤

@Parcelize
data class City(val name: String, val country: String) : Parcelable

@Composable
fun CityScreen() {
    var selectedCity = rememberSaveable {
        mutableStateOf(City("Madrid", "Spain"))
    }
}

āĻŽā§āϝāĻžāĻĒāϏ⧇āĻ­āĻžāϰ

āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻ•āĻžāϰāϪ⧇ @Parcelize āωāĻĒāϝ⧁āĻ•ā§āϤ āύāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁āϕ⧇ āĻŽāĻžāύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϏ⧇āĻŸā§‡ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āύāĻŋāϝāĻŧāĻŽ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāϤ⧇ mapSaver āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ Bundle āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

data class City(val name: String, val country: String)

val CitySaver = run {
    val nameKey = "Name"
    val countryKey = "Country"
    mapSaver(
        save = { mapOf(nameKey to it.name, countryKey to it.country) },
        restore = { City(it[nameKey] as String, it[countryKey] as String) }
    )
}

@Composable
fun CityScreen() {
    var selectedCity = rememberSaveable(stateSaver = CitySaver) {
        mutableStateOf(City("Madrid", "Spain"))
    }
}

āϞāĻŋāĻ¸ā§āϟāϏ⧇āĻ­āĻžāϰ

āĻŽāĻžāύāϚāĻŋāĻ¤ā§āϰ⧇āϰ āϜāĻ¨ā§āϝ āϕ⧀āϗ⧁āϞāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻāĻĄāĻŧāĻžāϤ⧇, āφāĻĒāύāĻŋ listSaver āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āϕ⧀ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻāϰ āϏ⧂āϚāĻ•āϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

data class City(val name: String, val country: String)

val CitySaver = listSaver<City, Any>(
    save = { listOf(it.name, it.country) },
    restore = { City(it[0] as String, it[1] as String) }
)

@Composable
fun CityScreen() {
    var selectedCity = rememberSaveable(stateSaver = CitySaver) {
        mutableStateOf(City("Madrid", "Spain"))
    }
}

āĻ•āĻŽā§āĻĒā§‹āϜ āϰāĻžāĻˇā§āĻŸā§āϰ āϧāĻžāϰāĻ•

āϏāϰāϞ āϰāĻžāĻˇā§āĻŸā§āϰ āωāĻ¤ā§āϤ⧋āϞāύ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ āĻĢāĻžāĻ‚āĻļāύ āύāĻŋāĻœā§‡āχ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇. āϝāĻžāχāĻšā§‹āĻ•, āϝāĻĻāĻŋ āϰāĻžāĻœā§āϝ⧇āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻŦ⧃āĻĻā§āϧāĻŋāϰ āĻŸā§āĻ°ā§āϝāĻžāĻ• āϰāĻžāĻ–āϤ⧇ āĻšāϝāĻŧ, āĻŦāĻž āϏāĻ‚āĻŽāĻŋāĻļā§āϰāĻŖāϝ⧋āĻ—ā§āϝ āĻĢāĻžāĻ‚āĻļāύ⧇ āϏāĻžā§āϚāĻžāϞāύ⧇āϰ āϝ⧁āĻ•ā§āϤāĻŋ āĻĻ⧇āĻ–āĻž āĻĻ⧇āϝāĻŧ, āϤāĻžāĻšāϞ⧇ āϝ⧁āĻ•ā§āϤāĻŋ āĻāĻŦāĻ‚ āϰāĻžāĻˇā§āĻŸā§āϰ⧀āϝāĻŧ āĻĻāĻžāϝāĻŧāĻŋāĻ¤ā§āĻŦāϗ⧁āϞāĻŋ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻļā§āϰ⧇āĻŖā§€āϤ⧇ āĻ…āĻ°ā§āĻĒāĻŖ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻ…āĻ­ā§āϝāĻžāϏ: āϰāĻžāĻˇā§āĻŸā§āϰ āϧāĻžāϰāĻ• āĨ¤

āφāϰāĻ“ āϜāĻžāύāϤ⧇ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āĻ—āĻžāχāĻĄā§‡ āĻ•āĻŽā§āĻĒā§‹āϜ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇ āĻ¸ā§āĻŸā§‡āϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻĻ⧇āϖ⧁āύ āĻŦāĻž, āφāϰāĻ“ āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇, āĻ¸ā§āĻŸā§‡āϟ āĻšā§‹āĻ˛ā§āĻĄāĻžāϰ āĻāĻŦāĻ‚ āχāωāφāχ āĻ¸ā§āĻŸā§‡āϟ āĻĒ⧃āĻˇā§āĻ āĻž āĻĻ⧇āϖ⧁āύāĨ¤

āϕ⧀ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϞ⧇ āϰāĻŋāĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ—āĻŖāύāĻž āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ

remember API āĻĒā§āϰāĻžāϝāĻŧāĻļāχ MutableState āϏāĻžāĻĨ⧇ āĻāĻ•āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ:

var name by remember { mutableStateOf("") }

āĻāĻ–āĻžāύ⧇, remember āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ MutableState āĻŽāĻžāύāϕ⧇ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ āĻ•āϰ⧇āĨ¤

āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇, remember āĻāĻ•āϟāĻŋ calculation āĻ˛ā§āϝāĻžāĻŽā§āĻŦāĻĄāĻž āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϞāĻžāϗ⧇āĨ¤ āϝāĻ–āύ remember āĻĒā§āϰāĻĨāĻŽ āϚāĻžāϞāĻžāύ⧋ āĻšāϝāĻŧ, āĻāϟāĻŋ calculation āĻ˛ā§āϝāĻžāĻŽā§āĻŦāĻĄāĻžāϕ⧇ āφāĻšā§āĻŦāĻžāύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāϰ āĻĢāϞāĻžāĻĢāϞ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇āĨ¤ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ⧇āϰ āϏāĻŽāϝāĻŧ, remember āϝ⧇ āĻŽāĻžāύāϟāĻŋ āĻļ⧇āώ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻ›āĻŋāϞāĨ¤

āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚ āĻ¸ā§āĻŸā§‡āϟ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āφāĻĒāύāĻŋ āĻ•āĻŽā§āĻĒā§‹āϜāĻŋāĻļāύ⧇ āϝ⧇āϕ⧋āύ āĻŦāĻ¸ā§āϤ⧁ āĻŦāĻž āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āĻĢāϞāĻžāĻĢāϞ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ remember āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āĻļ⧁āϰ⧁ āĻŦāĻž āĻ—āĻŖāύāĻž āĻ•āϰāĻž āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞāĨ¤ āφāĻĒāύāĻŋ āĻšāϝāĻŧāϤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύ⧇ āĻāχ āĻ—āĻŖāύāĻžāϰ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻ•āϰāϤ⧇ āϚāĻžāύ āύāĻžāĨ¤ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āĻāχ ShaderBrush āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāϛ⧇, āϝāĻž āĻāĻ•āϟāĻŋ āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ āĻ…āĻĒāĻžāϰ⧇āĻļāύ:

val brush = remember {
    ShaderBrush(
        BitmapShader(
            ImageBitmap.imageResource(res, avatarRes).asAndroidBitmap(),
            Shader.TileMode.REPEAT,
            Shader.TileMode.REPEAT
        )
    )
}

remember āĻŽāĻžāύ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇ āϝāϤāĻ•ā§āώāĻŖ āύāĻž āĻāϟāĻŋ āϰāϚāύāĻžāϟāĻŋ āϛ⧇āĻĄāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻ•ā§āϝāĻžāĻļ⧇ āĻŽāĻžāύ āĻ…āĻŦ⧈āϧ āĻ•āϰāĻžāϰ āĻāĻ•āϟāĻŋ āωāĻĒāĻžāϝāĻŧ āφāϛ⧇āĨ¤ remember API āĻāĻ•āϟāĻŋ key āĻŦāĻž keys āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāĻ“ āύ⧇āϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻāχ āϕ⧀āϗ⧁āϞāĻŋāϰ āϝ⧇āϕ⧋āύāĻ“ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧ, āĻĒāϰ⧇āϰ āĻŦāĻžāϰ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āĻŋāϤ āĻšāϞ⧇ , remember āĻ•ā§āϝāĻžāĻļ⧇ āĻ…āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ—āĻŖāύāĻž āĻ˛ā§āϝāĻžāĻŽā§āĻŦāĻĄāĻž āĻŦā§āϞāĻ• āφāĻŦāĻžāϰ āϚāĻžāϞāĻžāϝāĻŧ āĨ¤ āĻāχ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻ•āĻŽā§āĻĒā§‹āϜāĻŋāĻļāύ⧇āϰ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁āϰ āĻœā§€āĻŦāύāĻ•āĻžāϞ⧇āϰ āωāĻĒāϰ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĻ⧇āϝāĻŧāĨ¤ āχāύāĻĒ⧁āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ—āĻŖāύāĻž āĻŦ⧈āϧ āĻĨāĻžāϕ⧇, āϝāϤāĻ•ā§āώāĻŖ āύāĻž āĻŽāύ⧇ āϰāĻžāĻ–āĻž āĻŽāĻžāύ āϰāϚāύāĻžāϟāĻŋ āϛ⧇āĻĄāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤

āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āωāĻĻāĻžāĻšāϰāĻŖāϗ⧁āϞāĻŋ āĻĻ⧇āĻ–āĻžāϝāĻŧ āϝ⧇ āĻāχ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤

āĻāχ āĻ¸ā§āύāĻŋāĻĒ⧇āĻŸā§‡, āĻāĻ•āϟāĻŋ ShaderBrush āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ Box āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻŦāϞ⧇āϰ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻĒ⧇āχāĻ¨ā§āϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ remember ShaderBrush āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ, āϝ⧇āĻŽāύāϟāĻŋ āφāϗ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ remember avatarRes key1 āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āύ⧇āϝāĻŧ, āϝāĻž āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āχāĻŽā§‡āϜāĨ¤ āϝāĻĻāĻŋ avatarRes āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧ, āĻŦā§āϰāĻžāĻļāϟāĻŋ āύāϤ⧁āύ āϚāĻŋāĻ¤ā§āϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϏāĻ‚āĻŽāĻŋāĻļā§āϰāĻŋāϤ āĻšāϝāĻŧ āĻāĻŦāĻ‚ Box āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻāĻ•āϟāĻŋ āĻĒāĻŋāĻ•āĻžāϰ āĻĨ⧇āϕ⧇ āĻĒāϟāĻ­ā§‚āĻŽāĻŋ āĻšāϤ⧇ āĻ…āĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧇āύāĨ¤

@Composable
private fun BackgroundBanner(
    @DrawableRes avatarRes: Int,
    modifier: Modifier = Modifier,
    res: Resources = LocalContext.current.resources
) {
    val brush = remember(key1 = avatarRes) {
        ShaderBrush(
            BitmapShader(
                ImageBitmap.imageResource(res, avatarRes).asAndroidBitmap(),
                Shader.TileMode.REPEAT,
                Shader.TileMode.REPEAT
            )
        )
    }

    Box(
        modifier = modifier.background(brush)
    ) {
        /* ... */
    }
}

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ¸ā§āύāĻŋāĻĒ⧇āĻŸā§‡, āĻ¸ā§āĻŸā§‡āϟāϕ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϞ⧇āχāύ āĻ¸ā§āĻŸā§‡āϟ āĻšā§‹āĻ˛ā§āĻĄāĻžāϰ āĻ•ā§āϞāĻžāϏ MyAppState āĻ āωāĻ¤ā§āϤ⧋āϞāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ remember āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āφāϰāĻŽā§āĻ­ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ rememberMyAppState āĻĢāĻžāĻ‚āĻļāύ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧇āĨ¤ āĻ•āĻŽā§āĻĒā§‹āĻœā§‡ āϟāĻŋāϕ⧇ āĻĨāĻžāĻ•āĻž āĻāĻ•āϟāĻŋ āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻāχ āϧāϰāύ⧇āϰ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϕ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āϰ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύāĨ¤ rememberMyAppState āĻĢāĻžāĻ‚āĻļāύ windowSizeClass āĻĒāĻžāϝāĻŧ, āϝāĻž remember key āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ āĻāχ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧ, āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϕ⧇ āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ• āĻŽāĻžāύ āϏāĻš āĻĒā§āϞ⧇āχāύ āĻ¸ā§āĻŸā§‡āϟ āĻšā§‹āĻ˛ā§āĻĄāĻžāϰ āĻ•ā§āϞāĻžāϏ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻĻāĻŋ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ āĻ˜ā§‹āϰāĻžāύāĨ¤

@Composable
private fun rememberMyAppState(
    windowSizeClass: WindowSizeClass
): MyAppState {
    return remember(windowSizeClass) {
        MyAppState(windowSizeClass)
    }
}

@Stable
class MyAppState(
    private val windowSizeClass: WindowSizeClass
) { /* ... */ }

āĻāĻ•āϟāĻŋ āϕ⧀ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āϏāĻžā§āϚāĻŋāϤ āĻŽāĻžāύāϟāĻŋāϕ⧇ āĻ…āĻŦ⧈āϧ āĻ•āϰ⧇ āĻ•āĻŋāύāĻž āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻ•āĻŽā§āĻĒā§‹āϜ āĻ•ā§āϞāĻžāϏ⧇āϰ āϏāĻŽāĻžāύ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤

āĻĒ⧁āύāσāĻ—āĻ āύ⧇āϰ āĻŦāĻžāχāϰ⧇ āϕ⧀ āϏāĻš āĻ¸ā§āĻŸā§‡āϟ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰ⧁āύ

rememberSaveable āĻāĻĒāĻŋāφāχ āĻšāϞ remember āϚāĻžāϰāĻĒāĻžāĻļ⧇ āĻāĻ•āϟāĻŋ āĻŽā§‹āĻĄāĻŧāĻ• āϝāĻž āĻāĻ•āϟāĻŋ Bundle āĻĄā§‡āϟāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχ āĻāĻĒāĻŋāφāχ āϰāĻžāĻˇā§āĻŸā§āϰāϕ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒ⧁āύāĻ°ā§āĻ—āĻ āύāχ āύāϝāĻŧ, āĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϞāĻžāĻĒ āĻŦāĻŋāύ⧋āĻĻāύ āĻāĻŦāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ-āĻĒā§āϰāĻŦāĻ°ā§āϤāĻŋāϤ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āĻŽā§ƒāĻ¤ā§āϝ⧁āϤ⧇āĻ“ āĻŦ⧇āρāĻšā§‡ āĻĨāĻžāĻ•āϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ rememberSaveable āĻāĻ•āχ āωāĻĻā§āĻĻ⧇āĻļā§āϝ⧇ input āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ āϝāĻž remember keys āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤ āϕ⧋āύ⧋ āχāύāĻĒ⧁āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϞ⧇ āĻ•ā§āϝāĻžāĻļ⧇ āĻ…āĻŦ⧈āϧ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ āĨ¤ āĻĒāϰ⧇āϰ āĻŦāĻžāϰ āϝāĻ–āύ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻ•āĻŽā§āĻĒā§‹āϜ āĻ•āϰāĻž āĻšāϝāĻŧ, rememberSaveable āĻ—āĻŖāύāĻž āĻ˛ā§āϝāĻžāĻŽā§āĻŦāĻĄāĻž āĻŦā§āϞāĻ•āϟāĻŋāϕ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰ⧇āĨ¤

āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āωāĻĻāĻžāĻšāϰāϪ⧇, typedQuery āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ rememberSaveable userTypedQuery āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇:

var userTypedQuery by rememberSaveable(typedQuery, stateSaver = TextFieldValue.Saver) {
    mutableStateOf(
        TextFieldValue(text = typedQuery, selection = TextRange(typedQuery.length))
    )
}

āφāϰāĻ“ āϜāĻžāύ⧁āύ

āϰāĻžāĻœā§āϝ āĻāĻŦāĻ‚ āĻœā§‡āϟāĻĒā§āϝāĻžāĻ• āϰāϚāύāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϏāĻ‚āĻ¸ā§āĻĨāĻžāύāϗ⧁āϞāĻŋ āĻĻ⧇āϖ⧁āύ⧎

āύāĻŽā§āύāĻž

āϕ⧋āĻĄāĻ˛ā§āϝāĻžāĻŦ

āĻ­āĻŋāĻĄāĻŋāĻ“

āĻŦā§āϞāĻ—

{% āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨ⧇ %} {% endverbatim %} {% āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨ⧇ %} {% endverbatim %}