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

Функция viewModel

Функция viewModel из пакета lifecycle-viewmodel-compose достаёт ViewModel, привязанную к текущему LifecycleOwner или NavBackStackEntry. Пока owner жив, возвращается тот же экземпляр. В параметрах можно указать фабрику и ключ.

Синтаксис

val model: MyViewModel = viewModel()

Параметры

Параметр Описание
viewModelStoreOwner Владелец хранилища моделей. По умолчанию берут LocalViewModelStoreOwner.
key Строковый ключ, если нужно несколько ViewModel одного типа на одном экране.
factory Фабрика создания ViewModel с зависимостями, например SavedStateHandle.

Пример

Давайте получим ViewModel в setContent:

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 androidx.lifecycle.ViewModel import androidx.lifecycle.viewmodel.compose.viewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val model: HelloViewModel = viewModel() val text by model.text.collectAsState() Text(text = text) } } } class HelloViewModel : ViewModel() { private val _text = MutableStateFlow("abcde") val text = _text.asStateFlow() }

На экране будет текст "abcde" из модели, общей для всего setContent.

Пример

Давайте обновим модель и увидим перерисовку:

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.lifecycle.ViewModel import androidx.lifecycle.viewmodel.compose.viewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val model: HelloViewModel = viewModel() val text by model.text.collectAsState() Button(onClick = { model.setOther() }) { Text(text = "abcde") } Text(text = text) } } } class HelloViewModel : ViewModel() { private val _text = MutableStateFlow("abcde") val text = _text.asStateFlow() fun setOther() { _text.value = "12345" } }

На экране по нажатию текст сменится на "12345" без remember в composable.

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

  • класс ViewModel,
    который возвращает эта функция
  • класс SavedStateHandle,
    который передают через factory
  • функция collectAsState,
    которой показывают данные модели
  • класс LifecycleOwner,
    к которому привязан viewModelStore
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить