Size: a a a

2020 December 08

МБ

Медет Бакиев... in Android KZ
Аа, Можешь использовать switchMap live data - ы
источник

BG

Bauyrzhan Galmzhanss... in Android KZ
Я бы хотел без liveData обойтись.
источник

NT

Nurseyit Tursunkulov in Android KZ
что именно нужнo сделать? после того как тригернулся flow1 нужно тригернуть flow2?
источник

МБ

Медет Бакиев... in Android KZ
Видимо, он хочет триггернуть обе, друг друга
источник

МБ

Медет Бакиев... in Android KZ
Но не понял тогда смысла, можно их всегда параллельно запускать тогда
источник

NT

Nurseyit Tursunkulov in Android KZ
в MutableStateFlow есть такие же возможности как у лайвдаты
источник

NT

Nurseyit Tursunkulov in Android KZ
val showLoadingStateEvent = MutableStateFlow<State<Boolean>>(State.Idle)


val startVerifyFragmentEvent= MutableStateFlow<State<Boolean>>(State.Idle)

sealed class State<out T : Any> {
   object Idle : State<Nothing>()
   data class TriggerState<out T : Any>(val data: T):State<T>()
}


showLoadingStateEvent.collect {
   
startVerifyFragmentEvent = State.TriggerState(true)
}
источник

IQ

Isaya Qerey in Android KZ
Я был достаточно сильно рад, когда вышла LiveData, несмотря на кучу косяков внутри и странных реализаций. Просто потому что она достаточно сильно повторяла те реализации абстракций и потоков данных, которые я люблю использовать в своих приложениях.

Не так давно команда Kotlin представила Flow/State Flow/Shared Flow и всё больше вижу тред на том, чтобы совместить, а затем и заменить LiveData новыми инструментами.

И в целом StateFlow - это из коробки всё как я люблю,  ещё более приятный и чистый синтаксис. Отличный универсальный инструмент, но пока не хватает некоторых обвязок.

Если кратко, смотри картинку)
Если долго, то читай:
– StateFlow не убъет LiveData https://proandroiddev.com/should-we-choose-kotlins-stateflow-or-sharedflow-to-substitute-for-android-s-livedata-2d69f2bd6fa5
– StateFlow vs LiveData
https://medium.com/scalereal/stateflow-end-of-livedata-a473094229b3
– StateFlow replace LiveData
https://johnoreilly.dev/posts/jetpack-compose-stateflow-livedata/
источник

DA

Daniyar Amangeldy in Android KZ
@brotherdos StateFlow надо держать как начало 2ух flow

Туда емитишь данные, а 2 других флоу создаются от stateFlow. Был такой кейс, так и разрулил)
источник

DA

Daniyar Amangeldy in Android KZ
Короче говоря 3 flow тебе нужно😂
источник

МБ

Медет Бакиев... in Android KZ
Что то вы все усложняете)
источник

МБ

Медет Бакиев... in Android KZ
Давайте поможем Бауыржану 😂
источник

МБ

Медет Бакиев... in Android KZ
@brotherdos напиши подробно, тут мы не так тебя поняли
источник

DA

Daniyar Amangeldy in Android KZ
Bauyrzhan Galmzhansson
Нет, нужно, чтобы если был emit в одном flow, второй тоже эмитился.
Вот он написал
источник

МБ

Медет Бакиев... in Android KZ
Можно же просто зипнуть тогда
источник

BG

Bauyrzhan Galmzhanss... in Android KZ
Спасибо всем за отклик и помощь, похоже сформулировал слишком абстрактно, вот более подробное описание:

В активити у меня есть флоу phoneEditTextChangeFlow и passwordEditTextChangeFlow. Во viewModel есть phoneFlow и passwordFlow.

В onCreate я хочу забиндить phoneEditTextChangeFlow и phoneFlow, а passwordEditTextChangeFlow с passwordFlow соответственно. Чтобы для всего заняло всего две линии.

Хочу обойтись без мам, пап и liveData. TextChangeFlow у меня появляется с помощью экстеншн, он в слое view, глупо будет передавать во viewModel. Во вьюМодели уже вся логика с двумя переменными.
источник

BG

Bauyrzhan Galmzhanss... in Android KZ
Будь у меня rxBinding, я бы в активити просто сделал phoneEditTextChanged.subscribe(viewModel.phoneBehaviorSubject). Вот такое же лаконичное решение мне нужно для flow.
источник

МБ

Медет Бакиев... in Android KZ
Daniyar Amangeldy
Короче говоря 3 flow тебе нужно😂
Походу тебе нужен sharedFlow, как и написал тут 😂
источник

BG

Bauyrzhan Galmzhanss... in Android KZ
Всем спасибо за советы!
источник

BG

Bauyrzhan Galmzhanss... in Android KZ
Решил проблему, но она решение оказалось неочевидным.

Вот так будет все работать:

lifecycleScope.launch {
  viewModel.isReadyToSignIn
     .collect(
       binding.signInButton
         ::setEnabled
     )
}

lifecycleScope.launch {
  binding.phoneEditText
     .textChanges()
     .collect(viewModel.phoneFlow)
}

lifecycleScope.launch {
  binding.passwordEditText
     .textChanges()
     .collect(viewModel.passwordFlow)
}
источник