@SuppressLint("RestrictedApi") @Composable fun ComposableScopeViewModelProvider( key: String, viewModelFactory: @Composable (key: String) -> T, content: @Composable (viewModel: T) -> Unit, ) { val activity = LocalActivity.current ?: return val viewModelStoreOwner = LocalViewModelStoreOwner.current ?: return val lifecycleOwner = LocalLifecycleOwner.current DisposableEffect(lifecycleOwner) { var isConfigurationChanging = false val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_DESTROY) { isConfigurationChanging = activity.isChangingConfigurations } } lifecycleOwner.lifecycle.addObserver(observer) onDispose { lifecycleOwner.lifecycle.removeObserver(observer) if (!isConfigurationChanging) { // Replace the ViewModel with an empty one to make the ViewModel clear viewModelStoreOwner.viewModelStore.put( key = key, viewModel = object : ViewModel() { override fun onCleared() = Unit } ) } } } content(viewModelFactory(key)) }