Ребят, оцените решение, пожалуйста. Набросал на скорую руку, просто чтобы понять, будет ли работать.
1) Расширил класс State, добавив в него поле
internal val version = AtomicInteger()
которое инкрементирую вместе с cachedValue.set(it)
2) Вытащил делегат во вью и добавил фильтрацию в
infix fun <T> PresentationModel.State<T>.bindTo(consumer: (T) -> Unit) {
this.observable
.observeOn(AndroidSchedulers.mainThread())
.filter { delegate.didStateValueChange(this) }
.subscribe(consumer)
.untilUnbind()
}
3) Где didStateValueChange - это просто сравнение прошлого значения version для конкретного стейта, то есть делегат хранит мапу стейтов
Вопрос: вроде работает, но выглядит слишком просто чтобы быть правдой -> где я накосячил?