понял, есть два варианта работы со стейтами:
                  
                  
                  
                  
                  
                  1) Простые (назову из плоские) дата классы:
                  
                  
                  
                  
                  
                  data class MyState(
                  
                  
                      val myName: String = "",
                  
                  
                      val myList: List<String> = emptyList()
                  
                  
                  )
                  
                  
                  
                  
                  
                  class MyViewModel() {
                  
                  
                      var state by mutableStateOf(MyState())
                  
                  
                      
                  
                  
                       init {
                  
                  
                            // Начальное состояние
                  
                  
                            state = MyState(myName="asdasd", myList=listOf("asd","asd")
                  
                  
                            ....
                  
                  
                            // Если надо изменить что-то в стейте
                  
                  
                            state = state.copy(myName = "123123")
                  
                  
                        }
                  
                  
                  }
                  
                  
                  
                  
                  
                  2) Стейт классы с наблюдаемыми полями (observable)
                  
                  
                  
                  
                  
                  class MyState() {
                  
                  
                      var myName by mutableStateOf("")
                  
                  
                      var myList by mutableStateOf<List<String>>(emptyList())
                  
                  
                  }
                  
                  
                  
                  
                  
                  class MyViewModel() {
                  
                  
                      var state by mutableStateOf(MyState())
                  
                  
                      
                  
                  
                       init {
                  
                  
                           // Начальное состояние
                  
                  
                            state = MyState().apply {
                  
                  
                                   myName = "asdasd"
                  
                  
                                  myList = listOf("sadasda")
                  
                  
                            }
                  
                  
                            ....
                  
                  
                            // Если надо изменить что-то в стейте
                  
                  
                            state.myName = "123123"
                  
                  
                        }
                  
                  
                  }
                  
                  
                  
                  
                  
                  Код примерный. 
                  
                  
                  Второй вариант используется в самом компоуз для состояний всяких компонентов - списков, пейджеров, итд.
                  
                  
                  
                  
                  
                  Кто какой вариант использует. Есть ли какие-то рекомендации? Может есть продакш приложение как пример на Гитхабе, от того же Гугла , например
                  
                  
                
Можно пользоваться только первым что я и делаю
data class MyState( val myName: String = "", val myList: List<String> = emptyList() ) а так не красивше ли?
 Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  там у мпня вроде также первый вариант напиан
я про форматирование)
 Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  ни имеет значения)
 Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  напишите подробнее, почему вы юзаете первый вариант
 Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Aleksandr
                          Petrov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  как сделать форматирование такое?
в настольной версии TG - Ctrl+Shift+M, в мобильной через выделение текста, Mono
Или завернуть текст в символы `. ``` для многострочного текста.
доки рекомендуют вроде как
само состояние не должно отвечать за его значения
я в том сообщении скопипастил и отформатировал исходный код автора, чтобы показать, что так выглядит красивше в чате.
мне нравится то что я во вьюмодели/компоненте пробрасываю простые сообщения Reducer-у, а в нем уже внутри описано как мутируется состояние исходя из сообщения, можно сразу несколько состояний поменять. Скоуп сужается до минимума. Меньше кода, если состояния сложности средней или высокой (много полей) и нужно сразу мутировать несколько подсостояний
это для Windows или Linux так? на macOS ⌃ ⇧ K
А как такое с Decompose/MVI-Kotlin сделать? Где этот MutableState хранить? А то я так и не понял, как правильно работать с каким-нибудь TextField или Slider
Ну либо в StoreFactory либо в Component
Есть же пример, как раз со всем перечисленным https://github.com/JetBrains/compose-jb/blob/master/examples/todoapp/common/main/src/commonMain/kotlin/example/todo/common/main/integration/TodoMainComponent.kt
Спасибо 😊 буду смотреть
а еще может быть такое, когда нужно комбинировать несколько флоу или мерджить их
 а еще может быть такое, когда нужно комбинировать ...
                      
                      а еще может быть такое, когда нужно комбинировать ...
                    да, например поиск ( текст + чекбокс)
Да вроде текст и чекбокс оба в сторе были бы)
смотри нужно реализовать лайв серч фильма, сервер принимает текст и тип фильма, один флоу передает текст, другой тип фильма
Обсуждают сегодня