Функция 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