чтобы в 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
                  
                  
                   }
                  
                  
                  }
                  
                  
                
Передавайте не фрагмент, а лямбды-коллбеки, и в вызове композабла дергайте фрагмент
 Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Не понял, пример можно
 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() ) Можно было бы написать такую же для фрагмента.
 Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Я это и имел ввиду.
Обсуждают сегодня