Функция mutableStateOf
Функция mutableStateOf оборачивает значение
в MutableState.
Когда поле value меняют,
Compose перерисовывает composable,
которые это значение читают.
Обычно вызов кладут в
remember,
чтобы объект не создавали заново каждый кадр.
Синтаксис
var text by mutableStateOf("abcde")
Параметры
| Параметр | Описание |
|---|---|
value |
Начальное значение состояния. |
policy |
Политика сравнения. Решает, считать ли новое значение изменением. По умолчанию используется структурное равенство. |
Пример
Давайте переключим текст по кнопке:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var text by remember { mutableStateOf("abcde") }
Button(onClick = {
text = if (text == "abcde") "12345" else "abcde"
}) {
Text(text = "abcde")
}
Text(text = text)
}
}
}
На экране под кнопкой будет строка,
которая меняется между "abcde" и "12345".
Пример
Давайте заведём два независимых состояния:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var first by remember { mutableStateOf("abcde") }
var second by remember { mutableStateOf("12345") }
Column {
Button(onClick = { first = "12345" }) {
Text(text = "abcde")
}
Text(text = first)
Text(text = second)
}
}
}
}
На экране изменится только первая строка,
вторая останется "12345".
Смотрите также
-
класс
MutableState,
который возвращает эта функция -
класс
State,
родительский интерфейс только для чтения -
функция
remember,
где хранят объект состояния -
функция
collectAsState,
которая превращает Flow в State