ant*_*009 6 kotlin android-jetpack-compose kotlin-stateflow
我有以下视图模型
@HiltViewModel
class ShareViewModel @Inject constructor(
private val taskRepository: TaskRepository
): ViewModel() {
private val searchAppBarStateMutableState: MutableState<SearchAppBarState> = mutableStateOf(SearchAppBarState.CLOSED)
val searchAppBarState: State<SearchAppBarState> = searchAppBarStateMutableState
private val listOfTaskMutableStateFlow = MutableStateFlow<List<TodoTaskEntity>>(emptyList())
val listOfTaskStateFlow = listOfTaskMutableStateFlow.asStateFlow()
}
Run Code Online (Sandbox Code Playgroud)
我从不像上面的例子那样公开 mutableStateFlow。这样做时 SonarLint 会显示警告。
MutableStateFlow" and "MutableSharedFlow" should not be exposed
Run Code Online (Sandbox Code Playgroud)
所以我将同样的技术应用于mutableState
但是,如果我这样做,我不会收到任何警告。
val searchAppBarStateMutableState: MutableState<SearchAppBarState> = mutableStateOf(SearchAppBarState.CLOSED)
Run Code Online (Sandbox Code Playgroud)
只是想知道将 MutableState 与 jetpack compose 结合使用的最佳实践是什么。
要将 mutableState 与 viewmodel 一起使用,请在 viewmodel 内使用私有 setter 定义 mutableState,例如 -
var isVisible by mutableState(false)
private set
Run Code Online (Sandbox Code Playgroud)
通过执行上述操作,我们可以从视图模型外部读取可变状态,但不能更新它。要更新在视图模型中创建公共函数,例如 -
fun setVisibility(value: Boolean) {
isVisible = value
}
Run Code Online (Sandbox Code Playgroud)
通过创建 setter 函数,我们遵循关注点分离,并拥有编辑 mutableState 的单一事实来源。
| 归档时间: |
|
| 查看次数: |
4913 次 |
| 最近记录: |