Ребята, привет, такой вопрос Принятый подход описанный гуглом состоит в том,

чтобы в compsable экран передавать viewModel.
Пример,
MyTheme {
MyScreen(
viewModel = viewModel,
)
}
Проблема в том, что на данный момент работаю над легаси кодом, где вся логика лежит во фрагменте. В разумные сроки перенести все это во viewModel , пока не вижу возможности.

Можно ли в composable экран передавать сам фрагмент, а уже в нем иметь хендлеры для обработки событий (нажатий итд) от компоуз компонентов?

То есть, примерно так:
MyTheme {
MyScreen(
fragment = this@MyFragment,
)
}
@Composable
fun MyScreen(fragment: MyFragment) {
val state by fragment.myState
...
}
Асинхронные операции придется делать также в самом фрагменте через
lifecycleScope.launch{
val data = withContext(IO) {
get async data
}
if (isAdded) { // :)
myState.value = data
}
}

5 ответов

11 просмотров

Передавайте не фрагмент, а лямбды-коллбеки, и в вызове композабла дергайте фрагмент

Aleksandr-Petrov Автор вопроса
Алексей Ершов
Передавайте не фрагмент, а лямбды-коллбеки, и в вы...

В вызове компоуз как раз надо дергать коллбеки. Компоненты не знают ведь откуда этот калбек

Aleksandr Petrov
В вызове компоуз как раз надо дергать коллбеки. Ко...

Вспомните UDF: состояние сверху вниз, евенты снизу вверх. В официально примере JetNews, например, есть HomeScreen: @Composable fun HomeScreen( uiState: HomeUiState, onToggleFavorite: (String) -> Unit, onRefreshPosts: () -> Unit, onErrorDismiss: (Long) -> Unit, navigateToArticle: (String) -> Unit, openDrawer: () -> Unit, scaffoldState: ScaffoldState ) Этот Composable ничего не знает про фрагмент, и его можно легко использовать в Preview или с ViewModel или с Fragment в качестве реализации коллбеков. И у него есть оберточка для удобства использования с ViewModel: @Composable fun HomeScreen( homeViewModel: HomeViewModel, navigateToArticle: (String) -> Unit, openDrawer: () -> Unit, scaffoldState: ScaffoldState = rememberScaffoldState() ) Можно было бы написать такую же для фрагмента.

Похожие вопросы

Обсуждают сегодня

Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Что за японодичь? Мне хоть m68k, хоть 8080, 8088, на любом можно что-то создать
Егор
5
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
и да, кто сказал что у эпла именно такой isa?
Boris Vinogradov
5
Добрый день. Мне посоветовали обратиться к вам в чат за помощью. Ситуация описана на скрине. Как мне сказали, мне на бота навесили флудвейт. Есть ли возможность снять его ра...
OVERLINK
7
Карта сайта