Как стать автором
Обновить

ViewModel + Kotlin Multiplatform. Пробуем нативное решение

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров9.7K
Всего голосов 21: ↑21 и ↓0+21
Комментарии6

Комментарии 6

Если мы имеем дело с таргетом, который не имеет своей реализации Dispatchers.Main, например, Linux, то мы получим исключение EmptyCoroutineContext. Следовательно, viewModelScope мы использовать не сможем.

EmptyCoroutineContext, как подсказывает название - это пустой контекст корутин. И там даже комментарий оставлен, для чего это сделано. То есть, если Dispatchers.MAIN.immediate на платформе есть, то контекстом будет он. А если нет, то пустой контекст. Никаких исключений там не выбрасывается.

Какой странный xamarin у вас)0)

Только ксамарин устарел и его поддержку дропнули, а KMP цветет и пахнет)))

Блин, как все сложно... А ведь это только хелло ворлд приложение. А если будет посерьёзнее.

Интересно, как обрабатывать состояния таких View Model в Swift UI. Если я правильно понимаю, интерфейс от них реактивно обновляться не будет? Было бы здорово, если бы Google выпустили официальный аналог https://github.com/rickclephas/KMM-ViewModel или предложили свое решение, если ksp-генерация это некрасиво.

Будет. В примере iOS ViewModel обернут в ObserveableObject, там есть complitionHandler который будет вызываться при обновлении во ViewModel. Значение можно записать в локальную Published переменную. Для каждого VM придется делать обертку в Swift. Мы пошли дальше, унифицировали все VM и используем одну обертку.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий