RoboSwag/lifecycle-rx/README.md

2.5 KiB
Raw Permalink Blame History

lifecycle-rx

Модуль для преобразования событий из Observable в LiveData. Нужен для передачи событий из ViewModel во ViewController с автоматическим управлением подписками во ViewController.

Основный интерфейсы и классы

Destroyable - интерфейс, который содержит extansion-функцию untilDestroy для Flowable, Observable, Single, Completable, Maybe. Данная функция гарантирует, что подписка на события "умрет" после onDestroy.

LifeDataDispatcher - интерфейс, описывающий функцию dispatchTo для преобразования Observable в MutableLiveData.

BaseDestroyable и BaseLifeDataDispatcher - базовые реализации Destroyable и LifeDataDispatcher соответсвенно.

RxViewModel - базовый класс, от которого должны наследоваться все ViewModel. Обеспечивает отписку всех подписчиков при возникновении onCleared. Реализует BaseDestroyable и LiveDataDispatcher. По умолчанию использует базовые реализации данных интерфейсов, при желании можно передать свои Destroyable и LiveDataDispatcher через конструктор.

Примеры

Простой пример ViewModel, через который можно получить список элементов и добавить один элемент.

class SomeViewModel (
        private val someRepository: SomeRepository
) : RxViewModel() {

    val itemsList = MutableLiveData<ContentEvent<List<Item>>>()

    fun getItemsList() {
        someRepository
                .getItems()
                .dispatchTo(itemsList)
    }

    fun addItem(item: Item) {
        someRepository
                .addItem(item)
                .untilDestroy()
    }
}

Подписка на события во ViewController. ContentEvent описан в модуле lifecycle.

someViewModel.itemsList.observe(this, Observer { event ->
    when (event) {
        is ContentEvent.Loading -> // do something
        is ContentEvent.Success -> // do something
        is ContentEvent.Error -> // do something
    }
})