С приведенным ниже кодом я получаю следующую ошибку: «Функция приостановки 'getSomethingFromAPI' должна вызываться только из сопрограммы или другой функции приостановки.», Которая является текущей. getSomethingFromAPI действительно является функцией приостановки ViewModel.
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this).get(CallVM::class.java)
viewModel.applyLaunch {
this.getSomethingFromAPI()
}
}
fun <T: ViewModel> T.applyLaunch(block: T.() -> Unit)
= apply { viewModelScope.launch(Dispatchers.IO) { block() } }
Как вы можете видеть, в функции applelaunch я выполняю getSomethingFromAPI внутри сопрограммы (запуск), но эта информация теряется. Есть ли способ сохранить его и одновременно сохранить T как ViewModel?
Чтобы быть более конкретным, c, возможно ли иметь функцию быстрого доступа, которая реализует две первые строки кода ниже?
viewModel.apply {
viewModelScope.launch(Dispatchers.IO) {
getSomethingFromAPI()
}
getSomethingFromAPI выше видит оба 'this' (ViewModel и сопрограмму).
Я знаю, что это не что-то важное, но для создания DSL было бы неплохо знать.