From ccdf00c789028204b4cba68761c7e22296a302f2 Mon Sep 17 00:00:00 2001 From: Malik Khiraev Date: Thu, 18 Jul 2019 14:50:19 +0300 Subject: [PATCH] Create README.md --- lifecycle-rx/README.md | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 lifecycle-rx/README.md diff --git a/lifecycle-rx/README.md b/lifecycle-rx/README.md new file mode 100644 index 0000000..c80e185 --- /dev/null +++ b/lifecycle-rx/README.md @@ -0,0 +1,56 @@ +lifecycle-rx +===== + +Модуль для преобразования событий из `Flowable`, `Observable`, `Single`, `Completable`, `Maybe` в `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`, через который можно получить список элементов и добавить один элемент. + +```kotlin +class SomeViewModel ( + private val someRepository: SomeRepository +) : RxViewModel() { + + val itemsList = MutableLiveData>>() + + fun getItemsList() { + someRepository + .getItems() + .dispatchTo(itemsList) + } + + fun addItem(item: Item) { + someRepository + .addItem(item) + .untilDestroy() + } +} +``` + +Подписка на события во `ViewController`. `ContentEvent` описан в модуле [lifecycle](https://github.com/TouchInstinct/RoboSwag/tree/master/lifecycle). + +```kotlin +someViewModel.itemsList.observe(this, Observer { event -> + when (event) { + is ContentEvent.Loading -> // do something + is ContentEvent.Success -> // do something + is ContentEvent.Error -> // do something + } +}) +``` + +### Подключение + +``` gradle +implementation project(':lifecycle-rx') +```