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

Функция collectAsStateWithLifecycle

Функция collectAsStateWithLifecycle extension для Flow работает как collectAsState, но приостанавливает сбор, когда Lifecycle опускается ниже минимального State. По умолчанию порог - Lifecycle.State.STARTED. LifecycleOwner берут из LocalLifecycleOwner, если не передали явно.

Синтаксис

val text by flow.collectAsStateWithLifecycle()

Параметры

Параметр Описание
initialValue Значение до первого элемента Flow.
lifecycle Цикл, за которым следят. По умолчанию из LocalLifecycleOwner.current.lifecycle.
minActiveState Минимальный State для collect. По умолчанию STARTED.

Пример

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

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.remember import androidx.lifecycle.compose.collectAsStateWithLifecycle 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.collectAsStateWithLifecycle() Text(text = text) } } }

На экране будет текст "abcde" из Flow, пока экран не ушёл ниже STARTED.

Пример

Давайте обновим Flow и увидим новое значение:

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.remember import androidx.lifecycle.compose.collectAsStateWithLifecycle 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.collectAsStateWithLifecycle() Button(onClick = { source.value = "12345" }) { Text(text = "abcde") } Text(text = text) } } }

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

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

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