Compose中使用Navigation组件实现ViewModel页面共享的问题

741 阅读1分钟
composable(
            AppScreen.main,
        ) { backStackEntry ->
//            val parentEntry = remember {
//                navController.getBackStackEntry("parent")
//            }
            Log.d("test", "main: $backStackEntry")
            val viewModel = hiltViewModel<UserViewModel>(mainActivity)
//            val viewModel = hiltViewModel<UserViewModel>(navBackStackEntry!!)

            AppScaffold(viewModel)
        }

这是我要实现共享ViewModel的其中之一的页面。 书上描述使用BackStackEntry也就是composable函数中的,最后那个参数中提供的参数。 但是发现把BackStackEntry作为,初始化ViewModel的ViewModelStoreOwner参数是无效的。 经过打印,两个页面的BackStackEntry,并不是一个对象。所以产生的viewModel也不是一个对象。

解决方法:将activity作为ViewModelStoreOwner。