| sidebar_position | 3 |
|---|
Библиотеки из экосистемы MOKO предоставляют готовые решения для совместной работы с Compose Multiplatform.
Данные из ViewModel (StateFlow) преобразуются в Compose-состояние через collectAsState():
@Composable
fun UserScreen(viewModel: UserViewModel) {
val user by viewModel.user.collectAsState()
Text("Hello, ${user.name}")
}ViewModel из moko-mvvm не требует специальных адаптеров — достаточно collectAsState() для StateFlow и collectAsMutableState() для двустороннего биндинга:
val (code, onCodeChange) = viewModel.code.data.collectAsMutableState()
AuthCodeContent(
code = code,
onCodeChange = onCodeChange,
codeError = viewModel.code.error.collectAsState().value?.localized()
)Для привязки контроллеров к жизненному циклу Compose используйте BindEffect:
@Composable
fun Sample(viewModel: PermissionsViewModel) {
BindEffect(viewModel.permissionsController)
// ...
}Поддерживается для:
PermissionsControllerизmoko-permissions;MediaPickerControllerизmoko-media;LocationTrackerизmoko-geo;
Для создания экземпляров контроллеров внутри @Composable используются фабрики:
@Composable
fun Sample() {
val factory = rememberMediaPickerControllerFactory()
val picker = remember(factory) { factory.createMediaPickerController() }
BindMediaPickerEffect(picker)
}Доступные фабрики:
rememberPermissionsControllerFactory()— изmoko-permissions-compose;rememberMediaPickerControllerFactory()— изmoko-media-compose;PermissionsControllerFactory— для кастомной конфигурации.