Класс State
Интерфейс State описывает значение,
за которым следит Compose.
Текущее значение берут из свойства
value. Менять его напрямую нельзя:
для записи нужен
MutableState
из mutableStateOf
или State из
collectAsState.
Синтаксис
val text: State<String> = mutableStateOf("abcde")
val current = text.value
Пример
Давайте прочитаем State через by:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val holder = remember {
mutableStateOf("abcde")
}
val text by holder
Text(text = text)
}
}
}
На экране появится текст "abcde"
из свойства value.
Пример
Давайте передадим State в дочерний composable:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val label: State<String> = remember {
mutableStateOf("12345")
}
LabelText(state = label)
}
}
}
@androidx.compose.runtime.Composable
private fun LabelText(state: State<String>) {
Text(text = state.value)
}
На экране дочерний Text покажет "12345",
читая только value.
Смотрите также
-
класс
MutableState,
который добавляет запись в value -
функция
mutableStateOf,
которая создаёт MutableState -
функция
collectAsState,
которая возвращает State из Flow -
функция
derivedStateOf,
которая строит производный State