我正在处理我的 PET 项目并遇到问题:hiltViewModel() 在每次重组时在组合导航图中提供不同的 ViewModel 实例。
我的 NavHost:
NavHost(...) {
...
composable(Destination.Feed.route) {
val vm: FeedViewModel = hiltViewModel()
Log.d("App", "NavGraph: $vm")
Feed(vm)
}
...
提要屏幕:
@Composable
fun Feed(vm: FeedViewModel) {
val articles by vm.articles.collectAsState() // StateFlow<List<...>>
Log.d("Feed", "Feed ui: recomposed")
Scaffold() { ... }
所以,当我用
BottomNavigationBar
切换屏幕时,Log.d("App", "NavGraph: $vm")
有可能在 logcat 中用不同的实例和 FeedViewModel@******
向我展示 Feed ui: recomposed
两次。
我三思而后行,因为原来的值是
emptyList()
,然后我在那里添加了想要的值。但另一方面,我可以改变屏幕,并且会有一个Feed ui: recomposed
的调用,Viewmodel的值将是相同的(不会有"NavGraph: $vm"
的输出)。
我做错了什么?