FailedUnitTest
FailedUnitTest

Reputation: 1800

Koin inject viewmodel into Composable

I am trying to use Koin to inject my viewModel (which has some dependencies as well) like this:

@Composable
fun Navigator(vm: MainActivityViewModel, modifier: Modifier = Modifier){
    val navController = rememberNavController()
    val navStackEntry by navController.currentBackStackEntryAsState()
    val currRoute = navStackEntry?.destination?.route ?: ""
    val currRouteArgs = navStackEntry?.arguments ?: Bundle()
    val teamBuilderVm = getViewModel<TeamBuilderViewModel>()  // Unresolved reference: getViewModel
}

I don't understand why it cannot find getViewModel when I have the following import:

import org.koin.android.ext.koin.adnroidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.android.ext.koin.adnroidContext
import org.koin.androidx.viewmodel.ext.android.getViewModel

I am using this Koin version:

implementation "io.insert-koin:koin-android:$koin_version"

where

$koin_version = '3.2.0-beta-1'

Any thoughts why my import is ignored here?

Upvotes: 15

Views: 13930

Answers (3)

fahrizal89
fahrizal89

Reputation: 825

If you are using koin 3.5.6 and above, implement this library io.insert-koin:koin-compose-viewmodel

Upvotes: 0

francis
francis

Reputation: 4505

Here's how I did it in koin 3.3.2

@Composable
fun HomeScreen(viewModel: PokemonViewModel = koinViewModel()) {
}

I also added koin-core to build.gradle(:app)

def koin_version = '3.3.2'
implementation "io.insert-koin:koin-core:$koin_version"
implementation "io.insert-koin:koin-android:$koin_version"
implementation 'io.insert-koin:koin-androidx-compose:3.4.1'

SOURCE

Upvotes: 8

Phil Dukhov
Phil Dukhov

Reputation: 87774

You're using a wrong import, you should use:

import org.koin.androidx.compose.getViewModel

To use it you need the following dependency:

implementation("io.insert-koin:koin-androidx-compose:$koinVersion")

Upvotes: 19

Related Questions