[英]Cannot create an instance of viewmodel while using Jetpack Compose navigation
我在我的应用程序中使用 Jetpack Compose 的导航组件,如下所示:
@Composable
fun FoodiumNavigation() {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Screen.Main.route,
) {
composable(Screen.Main.route) {
MainScreen(navController)
}
...
}
}
我在我的MainScreen
可组合项中获取viewmodel
,如下所示:
@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 }
}
}
}
如果您的 @HiltViewModel 范围为导航图,请使用 hiltNavGraphViewModel() 而不是 viewModel() 进行初始化。 更多参考android 文档
不推荐使用hiltNavGraphViewModel
,应改为使用hiltViewModel()
还添加依赖androidx.hilt:hilt-navigation-compose:1.0.0-alpha03
你应该添加这个
implementation("androidx.hilt:hilt-navigation-compose:1.0.0")
然后您可以使用此代码创建视图模型的实例
val viewModel: YourViewModelClass= hiltViewModel()
您也可以使用viewModel()
,但请检查拥有的Activity
或Fragment
是否已使用@AndroidEntryPoint
进行注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.