Extensions for Jetpack Compose¶
This package provides some functions that may be useful if you use Jetpack Compose.
rememberStateAndDispatch()¶
Let’s say we have a very basic address book UI build with Jetpack Compose and with a FlowRedux powered state machine.
Let’s take a look at this over-simplified code sample:
val stateMachine = AddressBookStateMachine()
@Compose
fun AddressBookUi(){
// Extension function that is provided by this artifact
val (state, dispatchAction) = stateMachine.rememberStateAndDispatch()
Column {
SearchBoxUi(state.searchQuery, dispatch)
}
LazyColumn {
items(state.contacts) { contact : Contact ->
ContactUi(contact, dispatchAction)
}
}
}
@Compose
fun SearchBoxUi(searchQuery : String, dispatchAction: (AddressBookAction) -> Unit) {
Column {
TextField(
value = searchQuery,
// dispatches action async to state machine
onValueChange = { text -> dispatchAction(SearchQueryChangedAction(text)) }
)
}
}
rememberStateAndDispatch(), as the name already suggests, is remembered across recompositions.
rememberState()¶
If you only need state of from your stateMachine but not an async way to dispatch actions
then rememberState() extension is what you are looking for.
import androidx.compose.runtime.State
val stateMachine = AddressBookStateMachine()
@Compose
fun MyUi(){
val state : State<AddressBookState> = stateMachine.rememberState() // this returns Compose State
LazyColumn {
items(state.contacts) { contact : Contact ->
ContactUi(contact)
}
}
}