如果您在ViewModel中有代码需要检查ViewModel的状态流并需要对其进行更新,并且您想将此代码提取到单独的类中,因为它已经太多代码,那么最清洁的当前方法是什么?因为不建议揭露mutableStateFlow,因此仅将状态流传递到新类,因此如何处理?
// File: MyViewModel.kt
package com.example.viewmodel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
@HiltViewModel
class MyViewModel : ViewModel() {
private val _state = MutableStateFlow(STATE.INITIAL)
val state = _state.asStateFlow()
// TODO: How to extract this into separate file/class/object
fun doSomething() {
if(state == STATE.INITIAL) {
startConnection() {
// on error:
_state.value = STATE.ERROR
}
_state.value = STATE.CONNECTING
}
}
}
在您的ViewModel类中,您需要在伴侣对象中创建工厂,然后从其他类中调用工厂。
companion object {
val Factory: ViewModelProvider.Factory = viewModelFactory{
initializer{
val viewModel = MyViewModel()
viewModel
}
}
}
然后使用另一个类别的工厂
val vmVal: MyViewModel by viewModels{MyViewModel.Factory}
val vmValState = vmVal.state.value
文档中有更多的内容Android.com