如何将 viewModel 范围限定为与 NavHost 无关的对话框可组合函数

时间:2021-04-29 14:13:21

标签: android android-jetpack-compose

我正在使用 Android 撰写和视图模型,并且我有一个 ViewModel,它的范围是单个可组合函数,该函数是一个底部表单视图,它使用 BottomSheetScaffold 膨胀,我使用viewModel 但我有一个问题,当我再次打开底部工作表时,viewModel 函数返回之前创建的相同 viewModel 实例。

换句话说,如何将 ViewModel 范围限定为与 NavHost 和 backStack 无关的 Dialog Composable 函数


@Composable
 fun ComposableExample(
) {
    val viewModel: ExampleViewModel= viewModel() // createdOnlyOnce and always returns old instance
}

1 个答案:

答案 0 :(得分:1)

根据 this issue,Compose 不提供任何机制来将 ViewModel 的范围限定为单个 @Composable - 您在 NavHost 的目标之外创建的任何 ViewModel 的范围均限定为 Activity/包含您的 ComposeView/您调用 setContent 的片段,因此,在您的 Compose 层次结构的整个生命周期中都存在 - 这就是为什么您总是得到相同的实例。

请注意,Navigation Compose 具有针对 supporting dialog destinationssupporting BottomSheetScaffold 的现有功能请求,这也会为这些类型的目的地带来相同的 ViewModel 和状态范围。您应该为这些问题加注星标以获取更新并表明您的兴趣(这有助于确定该工作的优先级)。