Comments 3
Грузить данные во ViewModel нужно через AssistedInject (Hilt) или parametersOf (koin) и т.п. в подобных фреймворках в первичный конструктор ViewModel, а создание модели без данных, и загрузка их после создания - костыль, за который нужно бить по рукам)
Далее: 1 способ: loadInitialData
имеет внутри launch - coroutineScope, и LaunchedEffect аналогично. Профит от launch { launch {} } буквально?
Далее: Грузить контакты, "Пользователь возвращается на экран "contacts_list"
и видит удаленный контакт в списке, поскольку вьюмодель уже создана и init блок больше не отрабатывает." - Для таких ситуация существует Flow. Нужно брать из него данные в экране списка контактов и тогда там всегда будет актуальная информация. Конакты сохраняются в бд: если это Room, в нем можно возвращать тип Flow<List<T>>, а во viewModel и\или на экране подписываться с помощью Flow<List<T>>.collect {}. Тогда операции insert\delete\update будут выполняться штатно и без каких-либо дополнительных костылей
Забавно, вы как будто вообще не поняли, о чем статья) Речь идёт о загрузке данных с сервера, загрузке именно по сети. Вы будете использовать для этого parametersOf? Хотел бы на это посмотреть)
Далее, если вы используете KMP, лучше не выставлять наружу suspend методы вьюмодели, иначе в Свифте придется оборачивать в try await или работать с коллбэками. Синхронный метод для бо́льшего удобства.
Далее, если вы используете загрузку данных с сервера, можно, конечно, их закешировать в локальную БД, но тогда придется решать вопрос, когда инвалидировать этот кэш, как синхронизировать его с удаленным источником данных и так далее. Кроме того, если вы используете оптимистические апдейты, а сервер за вами "не поспевает" или запрос упал с ошибкой - опять же, возникнет рассинхрон с сервером.
Поэтому на практике часто "списочный" экран напрямую обновляется свежими данными с серва.
Дополню что пересоздание активити это не только поворот экрана, а ещё куча других событий: смена темы, смена языка, подключение физической клавиатуры и др.
Многие разработчики наивно полагают, что запрет поворота решает все проблемы с ЖЦ, но по факту UI часто ломается от банальной смены темы из шторки уведомлений
Как грузить данные во ViewModel?