# hiltViewModel

## Functions summary

|---|---|
| `inline VM` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable <VM : https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel> [hiltViewModel](https://developer.android.com/reference/kotlin/androidx/hilt/navigation/compose/hiltViewModel.composable#hiltViewModel(androidx.lifecycle.ViewModelStoreOwner,kotlin.String))( viewModelStoreOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner, key: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html? )` **This function is deprecated.** Moved to package: androidx.hilt.lifecycle.viewmodel.compose |
| `inline VM` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable <VM : https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel, VMF : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> [hiltViewModel](https://developer.android.com/reference/kotlin/androidx/hilt/navigation/compose/hiltViewModel.composable#hiltViewModel(androidx.lifecycle.ViewModelStoreOwner,kotlin.String,kotlin.Function1))( viewModelStoreOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner, key: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?, noinline creationCallback: (VMF) -> VM )` **This function is deprecated.** Moved to package: androidx.hilt.lifecycle.viewmodel.compose |

## Functions

### hiltViewModel

Artifact: [androidx.hilt:hilt-navigation-compose](https://developer.android.com/jetpack/androidx/releases/hilt) [View Source](https://cs.android.com/search?q=file:androidx/hilt/navigation/compose/HiltViewModel.kt+function:hiltViewModel)

```
@Composable
inline fun <VM : ViewModel> [hiltViewModel](https://developer.android.com/reference/kotlin/androidx/hilt/navigation/compose/hiltViewModel.composable#hiltViewModel(androidx.lifecycle.ViewModelStoreOwner,kotlin.String))(
    viewModelStoreOwner: ViewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) {
            "No ViewModelStoreOwner was provided via LocalViewModelStoreOwner"
        },
    key: String? = null
): VM
```

> [!CAUTION]
> **This function is deprecated.**   
> Moved to package: androidx.hilt.lifecycle.viewmodel.compose, use this instead:
>
> ```kotlin
> hiltViewModel(viewModelStoreOwner, key)
> ```

Returns an existing [HiltViewModel](https://dagger.dev/api/latest/dagger/hilt/android/lifecycle/HiltViewModel) -annotated `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel` or creates a new one scoped to the current navigation graph present on the {@link NavController} back stack.

If no navigation graph is currently present then the current scope will be used, usually, a fragment or an activity.

```kotlin
import androidx.compose.runtime.remember
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController

val navController = rememberNavController()
NavHost(navController, startDestination = "ExampleRoute") {
    composable("ExampleRoute") {
        val viewModel = hiltViewModel<ExampleViewModel>()
    }
}
```

```kotlin
import androidx.compose.runtime.remember
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navigation

val navController = rememberNavController()
NavHost(navController, startDestination = "Parent") {
    navigation(startDestination = "InnerRouteA", route = "Parent") {
        composable("InnerRouteA") {
            val parentEntry = remember { navController.getBackStackEntry("Parent") }
            val viewModel = hiltViewModel<ParentViewModel>(parentEntry)
        }
        composable("InnerRouteB") {
            val parentEntry = remember { navController.getBackStackEntry("Parent") }
            val viewModel = hiltViewModel<ParentViewModel>(parentEntry)
        }
    }
}
```

### hiltViewModel

Artifact: [androidx.hilt:hilt-navigation-compose](https://developer.android.com/jetpack/androidx/releases/hilt) [View Source](https://cs.android.com/search?q=file:androidx/hilt/navigation/compose/HiltViewModel.kt+function:hiltViewModel)

```
@Composable
inline fun <VM : ViewModel, VMF : Any?> [hiltViewModel](https://developer.android.com/reference/kotlin/androidx/hilt/navigation/compose/hiltViewModel.composable#hiltViewModel(androidx.lifecycle.ViewModelStoreOwner,kotlin.String,kotlin.Function1))(
    viewModelStoreOwner: ViewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) {
            "No ViewModelStoreOwner was provided via LocalViewModelStoreOwner"
        },
    key: String? = null,
    noinline creationCallback: (VMF) -> VM
): VM
```

> [!CAUTION]
> **This function is deprecated.**   
> Moved to package: androidx.hilt.lifecycle.viewmodel.compose, use this instead:
>
> ```kotlin
> hiltViewModel(viewModelStoreOwner, key, creationCallback)
> ```

Returns an existing [HiltViewModel](https://dagger.dev/api/latest/dagger/hilt/android/lifecycle/HiltViewModel) -annotated `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModel` with an @AssistedInject-annotated constructor or creates a new one scoped to the current navigation graph present on the {@link NavController} back stack.

If no navigation graph is currently present then the current scope will be used, usually, a fragment or an activity.

```kotlin
import androidx.compose.runtime.remember
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController

val navController = rememberNavController()
NavHost(navController, startDestination = "ExampleRoute") {
    composable("ExampleRoute") {
        val viewModel = hiltViewModel<ExampleViewModel>()
    }
}
```

```kotlin
import androidx.compose.runtime.remember
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.ViewModel
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navigation

val navController = rememberNavController()
NavHost(navController, startDestination = "Parent") {
    navigation(startDestination = "InnerRouteA", route = "Parent") {
        composable("InnerRouteA") {
            val parentEntry = remember { navController.getBackStackEntry("Parent") }
            val viewModel = hiltViewModel<ParentViewModel>(parentEntry)
        }
        composable("InnerRouteB") {
            val parentEntry = remember { navController.getBackStackEntry("Parent") }
            val viewModel = hiltViewModel<ParentViewModel>(parentEntry)
        }
    }
}
```