提问人:citizen_code 提问时间:10/31/2023 更新时间:11/1/2023 访问量:66
片段/活动的 uiState 类的大小
Size of uiState Class for Fragments / Activities
问:
问题
我是否正确理解,根据谷歌关于应用程序架构的指南,片段/活动的通常只由一个类描述(见下图)?uiState
对于我来说,作为编程的初学者,它看起来像是数据表示()和屏幕相关事物(例如)之间的组合。NewsUiState
NewItemUiState
isSignedIn
但是在复杂的 UI 上,类必须很容易达到 100 个属性的长度,否则我错过了什么?uiState
答:
1赞
ΓDΛ
11/1/2023
#1
您可以创建多个 State 。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()
}
这里重要的是能够分解与相关屏幕相关的状态。您可以为屏幕上的每个组件编写自己的 uiState。这是很好的做法。
它可以与 .您可以使用单个 或 .Sealed class
stateflow
sharedflow
评论
0赞
citizen_code
11/1/2023
我想这有助于管理更高级别的 uiState。尽管如此,一旦我进入分支,我就需要将所有与uiState相关的东西传递给,对吗?所以我最终还是会得到一个很大的 uiState 类......?!Success(val data: Data
data
Data
0赞
ΓDΛ
11/1/2023
您可以将其设置为通用。例如,键入 T。
评论
MutableStafeFlow<UiState>
_uiState.update { it.copy (namedParameter = newValue) }
_uiState.update { NewUiState(it.stateObject1, it.stateObject2.copy (namedParameter = newValue) }