Bonsai — это крошечная библиотека управления состоянием без зависимостей, созданная специально для использования во
ViewModel. Она облегчает реализацию однонаправленного потока данных (unidirectional data flow) и отделяет логику управления состоянием от UI и бизнес-логики.Особенности
- Однонаправленный поток данных
- Без внешних зависимостей
- Простота в использовании
- Небольшой размер
- Объединяется с Kotlin Coroutines и Jetpack Compose
Пример использования
class CounterViewModel : BonsaiViewModel<CounterState>(CounterState()) {
fun increment() = reduce { state -> state.copy(count = state.count + 1) }
fun decrement() = reduce { state -> state.count.takeIf { it > 0 }?.let { state.copy(count = it - 1) } ?: state }
}
data class CounterState(val count: Int = 0)
И затем, в Compose:
val state by viewModel.state.collectAsState()
Text("Count: ${state.count}")
https://github.com/adrielcafe/bonsai
#Android