Cicero
11/25/2021, 1:57 PMhfhbd
11/25/2021, 2:00 PMCicero
11/25/2021, 2:01 PMCicero
11/25/2021, 2:41 PMclass OrderDetailViewModel(
private val orderID: String,
private val userRepository: UserRepository
) : ViewModel() {
private var _order = MutableLiveData<OrderModel>()
val order = _order.immutable()
init {
viewModelScope.launch {
userRepository.getOrder(orderID).collect {
_order.value = it
}
}
}
}
@Composable
fun OrderDetailBridge(navigateBack: () -> Unit, viewModel: OrderDetailViewModel = getViewModel()){
val order by viewModel.order.observeAsState()
order?.let { OrderDetailUI(order = it, navigateBack = navigateBack) }
}
@Composable
fun OrderDetailUI(
navigateBack: () -> Unit,
order: OrderModel
) {
}
Nicholas Doglio
11/25/2021, 3:34 PMOrderDetailScreen
in this case.Cicero
11/25/2021, 4:05 PMNicholas Doglio
11/25/2021, 4:15 PMCicero
11/25/2021, 4:32 PMCicero
11/25/2021, 4:33 PMokarm
11/26/2021, 7:48 AMViewModel
and one that takes the data and actually implements the page UI (by default this overload is even private).
data class SettingsPageState(val fooEnabled: Boolean)
// File: SettingsPage.kt ------
@Composable
fun SettingsPage(
navigateBack: () -> Unit,
viewModel: SettingsViewModel,
) {
val state: SettingsPageState by viewModel.state.collectAsState()
// Extract whatever else from the ViewModel
SettingsPage(navigateBack, state, viewModel::onFooEnabledChanged)
}
@Composable
private fun SettingsPage(
onNavigateBack: () -> Unit,
state: SettingsPageState,
onFooEnabledChanged: (Boolean) -> Unit,
) {
// TODO Display UI based on the state
}
@Preview
@Composable
private fun SettingsPage_preview() {
val state = SettingsPageState(fooEnabled = true)
SettingsPage({}, state, {})
}
Alex
11/26/2021, 8:30 AM