Привет. Снова вопрос про работу с состояниями в Compose. Насколько я

понял, есть два варианта работы со стейтами:

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"
}
}

Код примерный.
Второй вариант используется в самом компоуз для состояний всяких компонентов - списков, пейджеров, итд.

Кто какой вариант использует. Есть ли какие-то рекомендации? Может есть продакш приложение как пример на Гитхабе, от того же Гугла , например

25 ответов

27 просмотров

Можно пользоваться только первым что я и делаю

data class MyState( val myName: String = "", val myList: List<String> = emptyList() ) а так не красивше ли?

Aleksandr-Petrov Автор вопроса
Denis K
data class MyState( val myName: String = "", ...

там у мпня вроде также первый вариант напиан

Aleksandr-Petrov Автор вопроса
Denis K
я про форматирование)

ни имеет значения)

Aleksandr-Petrov Автор вопроса
Silent829
Можно пользоваться только первым что я и делаю

напишите подробнее, почему вы юзаете первый вариант

Aleksandr-Petrov Автор вопроса
Denis K
data class MyState( val myName: String = "", ...

как сделать форматирование такое?

Aleksandr Petrov
как сделать форматирование такое?

в настольной версии TG - Ctrl+Shift+M, в мобильной через выделение текста, Mono

Aleksandr Petrov
как сделать форматирование такое?

Или завернуть текст в символы `. ``` для многострочного текста.

Denis K
data class MyState( val myName: String = "", ...

само состояние не должно отвечать за его значения

Silent829
само состояние не должно отвечать за его значения

я в том сообщении скопипастил и отформатировал исходный код автора, чтобы показать, что так выглядит красивше в чате.

Aleksandr Petrov
напишите подробнее, почему вы юзаете первый вариан...

мне нравится то что я во вьюмодели/компоненте пробрасываю простые сообщения Reducer-у, а в нем уже внутри описано как мутируется состояние исходя из сообщения, можно сразу несколько состояний поменять. Скоуп сужается до минимума. Меньше кода, если состояния сложности средней или высокой (много полей) и нужно сразу мутировать несколько подсостояний

Denis K
в настольной версии TG - Ctrl+Shift+M, в мобильной...

это для Windows или Linux так? на macOS ⌃ ⇧ K

Silent829
Можно пользоваться только первым что я и делаю

А как такое с Decompose/MVI-Kotlin сделать? Где этот MutableState хранить? А то я так и не понял, как правильно работать с каким-нибудь TextField или Slider

Алексей
А как такое с Decompose/MVI-Kotlin сделать? Где эт...

Есть же пример, как раз со всем перечисленным https://github.com/JetBrains/compose-jb/blob/master/examples/todoapp/common/main/src/commonMain/kotlin/example/todo/common/main/integration/TodoMainComponent.kt

Алексей
Спасибо 😊 буду смотреть

а еще может быть такое, когда нужно комбинировать несколько флоу или мерджить их

Anton Gorodetskiy
да, например поиск ( текст + чекбокс)

Да вроде текст и чекбокс оба в сторе были бы)

Silent829
Да вроде текст и чекбокс оба в сторе были бы)

смотри нужно реализовать лайв серч фильма, сервер принимает текст и тип фильма, один флоу передает текст, другой тип фильма

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

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

Но, может, есть уже проверенная? Наши требования такие: 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
Карта сайта