-
-
Notifications
You must be signed in to change notification settings - Fork 781
KoinSharedViewModel: Creating a New Instance for every screen #2256
Description
versions:
kotlin = "2.1.21"
ksp = "2.1.21-2.0.1"
koin-core = "4.1.0"
koin-annotations = "2.1.0"
navigationCompose = "2.8.0-alpha13"
import org.koin.core.context.startKoin
import org.koin.dsl.KoinAppDeclaration
fun initKoin(config: KoinAppDeclaration? = null) {
startKoin {
config?.invoke(this)
modules(sharedModule)
}
}
import org.example.project.OnboardApiService
import org.example.project.OnboardApiServiceImpl
import org.example.project.OnboardViewModel
import org.koin.core.module.dsl.viewModelOf
import org.koin.dsl.module
val sharedModule = module {
viewModelOf(::OnboardViewModel)
single { OnboardApiServiceImpl() }
}
@composable
fun App() {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = OnboardRoute.Login
) {
composable<OnboardRoute.Login> {
val viewModel =
it.sharedKoinViewModel<OnboardViewModel>(navController = navController)
LoginScreen(
onclick = {
viewModel.saveLogin("Logged in")
navController.navigate(OnboardRoute.OTP)
}
)
}
composable<OnboardRoute.OTP> {
val viewModel =
it.sharedKoinViewModel<OnboardViewModel>(navController = navController)
OTPScreen(
onboardViewModel = viewModel,
onclick = {
navController.navigateUp()
}
)
}
}
}
@composable
fun LoginScreen(onclick: () -> Unit) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize().background(color = Color.Red)
.clickable {
onclick()
}
) {
Text(
text = "Login",
)
}
}
@composable
fun OTPScreen(onclick: () -> Unit, onboardViewModel: OnboardViewModel) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize().background(color = Color.Blue)
.clickable {
onclick()
}
) {
Text(
text = "OTP...${onboardViewModel.getLogin()}",
)
}
}
Here is the project link:https://github.com/RanjithSmitch/KoinIntegration