lehakorshun
09/20/2020, 2:39 AMArkadii Ivanov
09/20/2020, 9:43 AMlehakorshun
09/20/2020, 2:10 PMJimK
09/21/2020, 7:48 PMArkadii Ivanov
09/21/2020, 8:18 PMinterface MyStore : Store<Intent, State, Nothing> {
sealed class Intent {
object ClearSelectedUserId : Intent()
}
data class State(
val selectedUserId: String? = null
)
}
interface Navigator {
fun showUser(id: String)
}
class MyController(
lifecycle: Lifecycle,
private val navigator: Navigator
) {
private val store: MyStore = TODO()
init {
bind(lifecycle, BinderLifecycleMode.START_STOP) {
store.states.mapNotNull(State::selectedUserId).distinctUntilChanged() bindTo {
store.accept(Intent.ClearSelectedUserId)
navigator.showUser(it)
}
}
}
}
Or there is also single-live-event pattern:
class ConsumableValue<T : Any>(
private var value: T?
) {
fun consume(): T? = value?.also { value = null }
}
So you don't need to clear data in state, but it can break time travel a bit in some circumstances.Arkadii Ivanov
09/21/2020, 8:21 PMJimK
09/24/2020, 1:52 PMArkadii Ivanov
09/24/2020, 2:13 PMArkadii Ivanov
09/24/2020, 2:14 PMJimK
09/24/2020, 2:16 PMJimK
09/24/2020, 2:18 PMJimK
09/24/2020, 2:19 PMArkadii Ivanov
09/24/2020, 2:22 PMArkadii Ivanov
09/24/2020, 2:23 PMJimK
09/24/2020, 2:25 PMArkadii Ivanov
09/24/2020, 2:27 PMJimK
09/24/2020, 2:31 PMJimK
09/24/2020, 2:33 PMArkadii Ivanov
09/24/2020, 2:33 PMArkadii Ivanov
09/24/2020, 2:34 PMArkadii Ivanov
09/24/2020, 2:34 PMJimK
09/24/2020, 2:34 PMArkadii Ivanov
09/24/2020, 2:34 PMJimK
09/24/2020, 2:36 PMArkadii Ivanov
09/24/2020, 2:38 PMJimK
09/24/2020, 2:38 PM