State Container for Kotlin and Android.
The name comes from cascade, a waterfall, which reflects the objective of the library to make flows easier with unidirectional data flow.
Inspired by MVI or Model View Intent.
state
changes and action
triggers.settings.gradle
enableFeaturePreview('GRADLE_METADATA')
dependencies {
// core module
implementation 'dev.gumil.kaskade:core:0.x.y'
// coroutines module
implementation 'dev.gumil.kaskade:coroutines:0.x.y'
// rx module
implementation 'dev.gumil.kaskade:rx:0.x.y'
// livedata module
implementation 'dev.gumil.kaskade:livedata:0.x.y'
}
Create the Action
and State
objects.
Note: objects are only used here for simplicity in real projects data classes are more appropriate
internal sealed class TestState : State {
object State1 : TestState()
object State2 : TestState()
object State3 : TestState()
}
internal sealed class TestAction : Action {
object Action1 : TestAction()
object Action2 : TestAction()
object Action3 : TestAction()
}
Create Kaskade
with TestState.State1
as initial state
val kaskade = Kaskade.create<TestAction, TestState>(TestState.State1) {
on<TestAction.Action1> {
TestState.State1
}
on<TestAction.Action2> {
TestState.State2
}
on<TestAction.Action3> {
TestState.State3
}
}
Adding actions to Action
with parameter ActionState
on<TestAction.Action1> { actionState ->
// do any side effects when returning a new state
TestState.State1
}
Observing states
kaskade.onStateChanged = {
// Do something with new state
render(it)
}
Observing states with Emitter
kaskade.stateEmitter().subscribe {
// Do something with new state
render(it)
}
Executing actions
kaskade.dispatch(TestAction.Action1)
Check out the wiki for documentation.
Some of the topics covered are:
Android App - Android use cases
Kotlin Console - Kotlin only project