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