我正在使用 Android 撰写和视图模型,并且我有一个 ViewModel,它的范围是单个可组合函数,该函数是一个底部表单视图,它使用 BottomSheetScaffold 膨胀,我使用viewModel 但我有一个问题,当我再次打开底部工作表时,viewModel
函数返回之前创建的相同 viewModel 实例。
换句话说,如何将 ViewModel 范围限定为与 NavHost 和 backStack 无关的 Dialog Composable 函数
@Composable
fun ComposableExample(
) {
val viewModel: ExampleViewModel= viewModel() // createdOnlyOnce and always returns old instance
}
答案 0 :(得分:1)
根据 this issue,Compose 不提供任何机制来将 ViewModel 的范围限定为单个 @Composable
- 您在 NavHost
的目标之外创建的任何 ViewModel 的范围均限定为 Activity/包含您的 ComposeView
/您调用 setContent
的片段,因此,在您的 Compose 层次结构的整个生命周期中都存在 - 这就是为什么您总是得到相同的实例。
请注意,Navigation Compose 具有针对 supporting dialog destinations 和 supporting BottomSheetScaffold
的现有功能请求,这也会为这些类型的目的地带来相同的 ViewModel 和状态范围。您应该为这些问题加注星标以获取更新并表明您的兴趣(这有助于确定该工作的优先级)。