Root Workflow
object RootWorkflow : StatefulWorkflow {
fun render(
renderProps: Unit,
renderState: State,
context: RenderContext
): BackStackScreen
}
Slide 61
Slide 61 text
Root Workflow
fun render(
...
): BackStackScreen {
val backstackScreens = mutableListOf()
}
Slide 62
Slide 62 text
Root Workflow
fun render(
...
): BackStackScreen {
val loginScreen = context.renderChild(LoginWorkflow)
}
Slide 63
Slide 63 text
Root Workflow
fun render(
...
): BackStackScreen {
val loginScreen = context.renderChild(LoginWorkflow)
backstackScreens += loginScreen
}
Slide 64
Slide 64 text
Root Workflow
fun render(
...
): BackStackScreen {
when (renderState) {
is Todo
->
{
}
}
}
Slide 65
Slide 65 text
Root Workflow
fun render(
...
): BackStackScreen {
when (renderState) {
is Todo
->
{
val todoScreen = context.renderChild(TodoWorkflow)
backstackScreens += todoScreen
}
}
}
Slide 66
Slide 66 text
Todo Workflow
Login Workflow
Root Workflow
Slide 67
Slide 67 text
Todo List Screen
data class TodoListScreen(
val username: String,
val todoTitles: List
)
Slide 68
Slide 68 text
Todo Workflow State
data class State(
val todos: List
)
Slide 69
Slide 69 text
Todo Workflow State
fun initialState() = State(
listOf(
TodoModel(
title = "Workout",
note = "Workout"
)
)
)
Slide 70
Slide 70 text
Todo Workflow
Login Workflow
Props
Username
Slide 71
Slide 71 text
Props
object TodoListWorkflow : StatefulWorkflow() {
data class ListProps(val username: String)
}
Slide 72
Slide 72 text
Todo Workflow
Login Workflow
Root Workflow
Slide 73
Slide 73 text
Root Workflow
fun render(
...
): BackStackScreen {
when (renderState) {
is Todo
->
{
val todoScreen = context.renderChild(TodoWorkflow)
backstackScreens += todoScreen
}
}
}
Slide 74
Slide 74 text
Root Workflow
fun render(
...
): BackStackScreen {
when (renderState) {
is Todo
->
{
val todoScreen = context.renderChild(
TodoWorkflow,
ListProps(username = renderState.username)
)
}
}
}
Slide 75
Slide 75 text
View Model
View
Slide 76
Slide 76 text
View Model
class LoginViewModel : ViewModel() {
val renderings: StateFlow by lazy {
renderWorkflowIn(
workflow = LoginWorkflow,
scope = viewModelScope,
savedStateHandle = savedState
)
}
}
Slide 77
Slide 77 text
View Model
class LoginViewModel : ViewModel() {
val renderings: StateFlow by lazy {
renderWorkflowIn(
workflow = RootWorkflow,
scope = viewModelScope,
savedStateHandle = savedState
)
}
}
Slide 78
Slide 78 text
Todo Layout Runner
Login Layout Runner
Slide 79
Slide 79 text
View Registry
val viewRegistry = ViewRegistry(
BackStackContainer,
LoginLayoutRunner,
TodoListLayoutRunner
)