我正在我的应用程序中使用jetpack组合的导航组件,如下所示:
@Composable
fun FoodiumNavigation() {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Screen.Main.route,
) {
composable(Screen.Main.route) {
MainScreen(navController)
}
...
}
}
我得到了viewmodel
在我的MainScreen
组合中,如下所示:
@Composable
fun MainScreen(navController: NavController) {
val mainViewModel: MainViewModel = viewModel()
...
}
这给了我一个运行时异常Cannot create an instance of class com.package.main.MainViewModel
。
在这里,我声明这只发生在使用导航组件时,即在我的应用程序中使用导航组件之前,一切正常,mainViewModel
已成功示例化。MainViewModel
是这样的:
@ExperimentalCoroutinesApi
@HiltViewModel
class MainViewModel @Inject constructor(private val postRepository: PostRepository) :
ViewModel() {
private val _postsLiveDataState = MutableLiveData<UiState<List<Post>>>()
val postLiveState: LiveData<UiState<List<Post>>> = _postsLiveDataState
init {
getPostsState()
}
private fun getPostsState() {
viewModelScope.launch {
postRepository.getAllPosts()
.onStart { _postsLiveDataState.value = UiState(loading = true) }
.map { resource -> UiState.fromResource(resource) }
.collect { state -> _postsLiveDataState.value = state }
}
}
}
3条答案
按热度按时间kx1ctssn1#
如果您的@HiltViewModel的作用域是导航图,请使用hiltNavGraphViewModel()而不是viewModel()进行初始化。
hiltNavGraphViewModel()现在已弃用,请改用hiltViewModel()
感谢Narek Hayrapetyan的提醒
olmpazwi2#
不建议使用
hiltNavGraphViewModel
,应改用hiltViewModel()
同时添加依赖项
androidx.hilt:hilt-navigation-compose:1.0.0-alpha03
2wnc66cl3#
你应该加上这个
然后你可以使用这段代码来创建你的视图模型的示例