refactor: integrate Koin for dependency injection across platforms
This commit is contained in:
@@ -65,6 +65,13 @@ kotlin {
|
||||
implementation(libs.compose.uiToolingPreview)
|
||||
implementation(libs.androidx.lifecycle.viewmodelCompose)
|
||||
implementation(libs.androidx.lifecycle.runtimeCompose)
|
||||
|
||||
// DI
|
||||
implementation(project.dependencies.platform(libs.koin.bom))
|
||||
implementation(libs.koin.core)
|
||||
implementation(libs.koin.core.viewmodel)
|
||||
implementation(libs.koin.compose)
|
||||
implementation(libs.koin.compose.viewmodel)
|
||||
}
|
||||
commonTest.dependencies {
|
||||
implementation(libs.kotlin.test)
|
||||
|
||||
@@ -2,20 +2,22 @@ package fr.ajaury.gwenedeg
|
||||
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository
|
||||
import fr.ajaury.gwenedeg.di.appModule
|
||||
import fr.ajaury.gwenedeg.records.ui.RecordsScreen
|
||||
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
|
||||
import org.koin.compose.KoinApplication
|
||||
import org.koin.dsl.koinConfiguration
|
||||
|
||||
@Composable
|
||||
@Preview
|
||||
fun App() {
|
||||
val viewModel = remember {
|
||||
RecordsViewModel(InMemoryRecordRepository())
|
||||
}
|
||||
|
||||
MaterialTheme {
|
||||
RecordsScreen(viewModel)
|
||||
KoinApplication(
|
||||
configuration = koinConfiguration {
|
||||
modules(appModule)
|
||||
},
|
||||
) {
|
||||
MaterialTheme {
|
||||
RecordsScreen()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package fr.ajaury.gwenedeg.di
|
||||
|
||||
import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository
|
||||
import fr.ajaury.gwenedeg.records.domain.RecordRepository
|
||||
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
|
||||
import org.koin.core.module.dsl.bind
|
||||
import org.koin.core.module.dsl.factoryOf
|
||||
import org.koin.core.module.dsl.viewModelOf
|
||||
import org.koin.dsl.module
|
||||
|
||||
val appModule = module {
|
||||
factoryOf(::InMemoryRecordRepository) { bind<RecordRepository>() }
|
||||
viewModelOf(::RecordsViewModel)
|
||||
}
|
||||
@@ -14,11 +14,21 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import fr.ajaury.gwenedeg.records.domain.Record
|
||||
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
|
||||
import org.koin.compose.viewmodel.koinViewModel
|
||||
|
||||
@Composable
|
||||
fun RecordsScreen(viewModel: RecordsViewModel) {
|
||||
fun RecordsScreen(viewModel: RecordsViewModel = koinViewModel()) {
|
||||
val records by viewModel.uiState.collectAsStateWithLifecycle()
|
||||
|
||||
RecordsScreen(
|
||||
records = records,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun RecordsScreen(records: List<Record>) {
|
||||
Scaffold { innerPadding ->
|
||||
LazyColumn(
|
||||
modifier =
|
||||
|
||||
@@ -2,4 +2,5 @@ package fr.ajaury.gwenedeg
|
||||
|
||||
import androidx.compose.ui.window.ComposeUIViewController
|
||||
|
||||
@Suppress("ktlint:standard:function-naming")
|
||||
fun MainViewController() = ComposeUIViewController { App() }
|
||||
|
||||
Reference in New Issue
Block a user