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

Функция collectAsState

Функция collectAsState extension для Flow запускает сбор значений в scope composable и возвращает State. Пока composable на экране, каждое новое значение из Flow вызывает перерисовку. Для учёта Lifecycle удобнее collectAsStateWithLifecycle.

Синтаксис

val text by flow.collectAsState(initial = "abcde")

Параметры

Параметр Описание
initial Значение State до первого элемента Flow.
context Контекст корутины для collect. По умолчанию подходит для UI.

Пример

Давайте соберём простой Flow в текст:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Text import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import kotlinx.coroutines.flow.flow class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val stream = flow { emit("abcde") emit("12345") } val text by stream.collectAsState(initial = "abcde") Text(text = text) } } }

На экране текст сменится на "12345", когда Flow отдаст второе значение.

Пример

Давайте возьмём MutableStateFlow из remember:

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.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import kotlinx.coroutines.flow.MutableStateFlow class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val source = remember { MutableStateFlow("abcde") } val text by source.collectAsState() Button(onClick = { source.value = "12345" }) { Text(text = "abcde") } Text(text = text) } } }

На экране по нажатию кнопки подпись сменится на "12345".

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

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