Д
abstract class UiState{что касается варианта управления навигацией первое что в голову пришло, не проверял это на работоспособность но сама суть ясна я думаю
@Composable
abstract fun render()
}
abstract class Widget(
val state: LiveData<UiState>
)
class UiManager(
initialWidget: Widget
) {
private var currentWidget: Widget = initialWidget
set(value) {
if (value == field) {
return
}
uiState.removeSource(field.state)
uiState.addSource(value.state) {
uiState.postValue(it)
}
field = value
}
val uiState = MediatorLiveData<UiState>()
private val stack = Stack<Widget>()
init {
stack.push(initialWidget)
}
fun replaceWidget(widget: Widget){
stack.pop()
stack.add(widget)
currentWidget = widget
}
fun replaceWithBackStack(widget: Widget){
stack.add(widget)
currentWidget = widget
}
fun onBackPressed(){
stack.pop()
stack.peek()?.let {
currentWidget = it
}
}
}