Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
325 of 502 menu
◀ ▶

Функция produceState

Функция produceState возвращает State с начальным значением и запускает корутину в scope composable. Внутри suspend-лямды пишут в свойство value, и экран перерисовывается. Ключи как у LaunchedEffect: при их смене корутина перезапускается.

Синтаксис

val text by produceState(initialValue = "abcde", key1) { value = loadText() }

Параметры

Параметр Описание
initialValue Значение до первого обновления из корутины.
keys Ключи перезапуска producer-корутины.
producer Suspend-лямда ProduceStateScope. Меняет value для обновления State.

Пример

Давайте подменим текст после задержки:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Text import androidx.compose.runtime.produceState import kotlinx.coroutines.delay class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val text by produceState(initialValue = "abcde") { delay(1000) value = "12345" } Text(text = text) } } }

На экране секунду будет "abcde", затем текст сменится на "12345".

Пример

Давайте перезапустим загрузку при смене ключа:

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.mutableIntStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import kotlinx.coroutines.delay class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var key by remember { mutableIntStateOf(0) } val text by produceState( initialValue = "abcde", key, ) { delay(300) value = if (key == 0) "abcde" else "12345" } Button(onClick = { key = 1 }) { Text(text = "abcde") } Text(text = text) } } }

На экране после нажатия producer снова покажет "abcde", затем "12345".

Смотрите также

  • функция LaunchedEffect,
    которая не возвращает State
  • функция collectAsState,
    которая собирает Flow в State
  • класс State,
    который возвращает produceState
  • функция derivedStateOf,
    которая считает значение синхронно
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить