在 ViewModel 的 init 块之外看不到 DI
Can't see DI outside of init block of ViewModel
我正在尝试通过发送 category_id 从片段控制 ViewModel 并将其传递到由 Hilt 注入的存储库。
但是 ViewModel 无法在 init 块之外看到存储库。我错过了什么?
@HiltViewModel
class ProjectViewModel @Inject constructor(
repository: ScienceTrackerRepository
) : ViewModel() {
private val _flow = MutableStateFlow(LoadUiState.Success(emptyList()))
val flow: StateFlow<LoadUiState> = _flow.asStateFlow()
fun loadProjects(categoryId: Int) {
viewModelScope.launch {
repository.getProjects(categoryId) // unresolved reference "repository"
repository.flowProjects.collect { feed ->
_flow.value = LoadUiState.Success(feed)
}
}
}
init {
viewModelScope.launch {
repository.getProjects(0)
repository.flowProjects.collect { feed ->
_flow.value = LoadUiState.Success(feed)
}
}
}
}
您需要像这样添加 var 或 val 关键字:
@HiltViewModel
class ProjectViewModel @Inject 构造函数(
val 存储库:ScienceTrackerRepository
) : ViewModel() {
}
访问 init 块外的构造函数参数。
我正在尝试通过发送 category_id 从片段控制 ViewModel 并将其传递到由 Hilt 注入的存储库。 但是 ViewModel 无法在 init 块之外看到存储库。我错过了什么?
@HiltViewModel
class ProjectViewModel @Inject constructor(
repository: ScienceTrackerRepository
) : ViewModel() {
private val _flow = MutableStateFlow(LoadUiState.Success(emptyList()))
val flow: StateFlow<LoadUiState> = _flow.asStateFlow()
fun loadProjects(categoryId: Int) {
viewModelScope.launch {
repository.getProjects(categoryId) // unresolved reference "repository"
repository.flowProjects.collect { feed ->
_flow.value = LoadUiState.Success(feed)
}
}
}
init {
viewModelScope.launch {
repository.getProjects(0)
repository.flowProjects.collect { feed ->
_flow.value = LoadUiState.Success(feed)
}
}
}
}
您需要像这样添加 var 或 val 关键字:
@HiltViewModel class ProjectViewModel @Inject 构造函数( val 存储库:ScienceTrackerRepository ) : ViewModel() {
}
访问 init 块外的构造函数参数。