我的理解是否正确,根据谷歌的应用程序架构指南,片段/活动的
uiState
通常仅由一个类描述(见下图)?
对于我这个编程初学者来说,
NewsUiState
看起来像是数据表示(NewItemUiState
)和屏幕相关事物(例如isSignedIn
)之间的组合。
但是在复杂的 UI 上,
uiState
类必须很容易就有 100 个属性长,或者我错过了什么?
您可以创建多个状态
data class
。
示例用例
sealed class UiState {
data class Success(val data: Data) : UiState()
data class Error(val error: Throwable) : UiState()
object Loading : UiState()
}
如何处理
fun handleUiState(uiState: UiState) {
when (uiState) {
is UiState.Success -> displayData(uiState.data)
is UiState.Error -> displayError(uiState.error)
UiState.Loading -> displayLoadingIndicator()
}
}
其他样品
sealed class UiState {
data class Success(val data: Data) : UiState()
data class Error(val error: Throwable) : UiState()
object Loading : UiState()
data class Validation(val errors: Map<String, String>) : UiState()
data class Completed(val message: String) : UiState()
object Init : UiState()
object Empty : UiState()
}
这里重要的是能够分解与相关屏幕相关的状态。您可以为屏幕上的每个组件编写自己的 uiStates。这是好的做法。 它可以与
Sealed class
结合使用。您可以使用单个 stateflow
或 sharedflow
流式传输数据。